[Mesa-dev] [PATCH 1/3] gm107/ir: Emit SV_CLOCK system value

Boyan Ding boyan.j.ding at gmail.com
Fri Mar 31 04:47:56 UTC 2017


2017-03-31 11:21 GMT+08:00 Ilia Mirkin <imirkin at alum.mit.edu>:
> Did you check what the blob does? There's clocklo/hi and
> globaltimerlo/hi. Without additional documentation, it's a bit hard to
> tell the difference... Note that envydis's gf100.c/gk110.c disagree on
> which is which. Probably not due to any architectural reasons, but due
> to RE methodology. (From before nvdisasm was
> available/trusted/used/whatever.)

(replying to your concern in 1 and 2 at the same time)

I have checked against the blob and nvidisasm before, and gk110.c in
envydis was actually wrong. I made a PR for that [1].

This is what I get when using clockARB() on GK208:
    281c0006 86400000     mov b32 $r1 $sr80
    289c0002 86400000     mov b32 $r0 $sr81
(note $r1 <- $sr80, $r0 <- $sr81, and they are called SR_CLOCKLO and
SR_CLOCKHI in nvdisasm respectively)

I haven't really checked with maxwell+, just believing in the
correctness in envydis and uniformity between architectures. But I
will check when I reach my pascal machine later.

Cheers.
Boyan Ding

[1] https://github.com/envytools/envytools/pull/84

>
> On Thu, Mar 30, 2017 at 10:33 PM, Boyan Ding <boyan.j.ding at gmail.com> wrote:
>> Signed-off-by: Boyan Ding <boyan.j.ding at gmail.com>
>> ---
>>  src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
>> index 6de3f396e3..ab9c94b4d0 100644
>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp
>> @@ -269,6 +269,7 @@ CodeEmitterGM107::emitSYS(int pos, const Value *val)
>>     case SV_INVOCATION_INFO: id = 0x1d; break;
>>     case SV_TID            : id = 0x21 + val->reg.data.sv.index; break;
>>     case SV_CTAID          : id = 0x25 + val->reg.data.sv.index; break;
>> +   case SV_CLOCK          : id = 0x50 + val->reg.data.sv.index; break;
>>     default:
>>        assert(!"invalid system value");
>>        id = 0;
>> --
>> 2.12.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list