<div dir="ltr">+Matt, +Ken<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 12, 2017 at 6:09 PM, Boyan Ding <span dir="ltr"><<a href="mailto:boyan.j.ding@gmail.com" target="_blank">boyan.j.ding@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">2017-04-13 2:25 GMT+08:00 Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>>:<br>
> On Wed, Apr 12, 2017 at 6:14 AM, Boyan Ding <<a href="mailto:boyan.j.ding@gmail.com">boyan.j.ding@gmail.com</a>> wrote:<br>
>><br>
>> This fixes the following error when using ARB_shader_clock on i965:<br>
>>         vec1 32 ssa_0 = intrinsic shader_clock () () ()<br>
>>         intrinsic store_var (ssa_0) (clock_retval) (3) /* wrmask=xy */<br>
>> error: src->ssa->num_components == num_components (nir/nir_validate.c:204)<br>
>><br>
>> Cc: <a href="mailto:mesa-stable@lists.freedesktop.org">mesa-stable@lists.freedesktop.<wbr>org</a><br>
>> Signed-off-by: Boyan Ding <<a href="mailto:boyan.j.ding@gmail.com">boyan.j.ding@gmail.com</a>><br>
>> ---<br>
>>  src/compiler/glsl/glsl_to_nir.<wbr>cpp | 3 ++-<br>
>>  src/compiler/nir/nir_<wbr>intrinsics.h | 2 +-<br>
>>  2 files changed, 3 insertions(+), 2 deletions(-)<br>
>><br>
>> diff --git a/src/compiler/glsl/glsl_to_<wbr>nir.cpp<br>
>> b/src/compiler/glsl/glsl_to_<wbr>nir.cpp<br>
>> index f0557f985b..870d457681 100644<br>
>> --- a/src/compiler/glsl/glsl_to_<wbr>nir.cpp<br>
>> +++ b/src/compiler/glsl/glsl_to_<wbr>nir.cpp<br>
>> @@ -930,7 +930,8 @@ nir_visitor::visit(ir_call *ir)<br>
>>           nir_builder_instr_insert(&b, &instr->instr);<br>
>>           break;<br>
>>        case nir_intrinsic_shader_clock:<br>
>> -         nir_ssa_dest_init(&instr-><wbr>instr, &instr->dest, 1, 32, NULL);<br>
>> +         nir_ssa_dest_init(&instr-><wbr>instr, &instr->dest, 2, 32, NULL);<br>
>> +         instr->num_components = 2;<br>
><br>
><br>
> This made me go look at the spec, and things get a bit more subtle...  In<br>
> particular, ARB_shader_clock specifies two builtin functions:<br>
><br>
>         uvec2 clock2x32ARB(void);<br>
>         uint64_t clockARB(void);<br>
><br>
>  Where the second one only exists if you support int64.  On gen8+, we do<br>
> support int64...<br>
><br>
> My feeling is that the correct way to implement this is to make the NIR<br>
> intrinsic return a 64bit value and wrap it in a nir_unpack_64_2x32 if the<br>
> client asks for the 2x32 version.  If that's too much refactoring for you,<br>
> then this patch is probably sufficient to solve the issue today.<br>
><br>
<br>
</div></div>I agree with you. I'm not very familiar with nir internals, and was<br>
just copying TGSI's handling here. There will be more intrinsics with<br>
64bit results, for example, ballot, which radv guys might be<br>
interested in.<br>
<br>
I won't mind if someone comes up with a better solution and replaces<br>
mine. But just as you said above, it solves the issue today. It's up<br>
to you to decide.<br>
<br>
Cheers,<br>
Boyan Ding<br>
<div class="HOEnZb"><div class="h5"><br>
>>           nir_builder_instr_insert(&b, &instr->instr);<br>
>>           break;<br>
>>        case nir_intrinsic_store_ssbo: {<br>
>> diff --git a/src/compiler/nir/nir_<wbr>intrinsics.h<br>
>> b/src/compiler/nir/nir_<wbr>intrinsics.h<br>
>> index 105c56f759..3a519a73dd 100644<br>
>> --- a/src/compiler/nir/nir_<wbr>intrinsics.h<br>
>> +++ b/src/compiler/nir/nir_<wbr>intrinsics.h<br>
>> @@ -91,7 +91,7 @@ BARRIER(memory_barrier)<br>
>>   * The latter can be used as code motion barrier, which is currently not<br>
>>   * feasible with NIR.<br>
>>   */<br>
>> -INTRINSIC(shader_clock, 0, ARR(0), true, 1, 0, 0, xx, xx, xx,<br>
>> NIR_INTRINSIC_CAN_ELIMINATE)<br>
>> +INTRINSIC(shader_clock, 0, ARR(0), true, 2, 0, 0, xx, xx, xx,<br>
>> NIR_INTRINSIC_CAN_ELIMINATE)<br>
>><br>
>>  /*<br>
>>   * Memory barrier with semantics analogous to the compute shader<br>
>> --<br>
>> 2.12.0<br>
>><br>
>> ______________________________<wbr>_________________<br>
>> mesa-dev mailing list<br>
>> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
>> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
><br>
><br>
</div></div></blockquote></div><br></div>