<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 20, 2017 at 4:10 PM, Ilia Mirkin <span dir="ltr"><<a href="mailto:imirkin@alum.mit.edu" target="_blank">imirkin@alum.mit.edu</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">On Mon, Nov 20, 2017 at 7:08 PM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> wrote:<br>
> On Mon, Nov 20, 2017 at 3:11 PM, Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>> wrote:<br>
>><br>
>> On Mon, Nov 20, 2017 at 5:16 PM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
>> wrote:<br>
>> > On Sun, Nov 19, 2017 at 11:54 AM, Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>><br>
>> > wrote:<br>
>> >><br>
>> >> GL doesn't have this, but some hardware supports it. This is convenient<br>
>> >> for lowering tg4 to plain texture calls, which is necessary on Adreno<br>
>> >> A4xx hardware.<br>
>> >><br>
>> >> Signed-off-by: Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>><br>
>> >> ---<br>
>> >>  src/compiler/nir/nir.h | 15 +++++++++++++--<br>
>> >>  1 file changed, 13 insertions(+), 2 deletions(-)<br>
>> >><br>
>> >> diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h<br>
>> >> index f46f6147110..64965ae16d6 100644<br>
>> >> --- a/src/compiler/nir/nir.h<br>
>> >> +++ b/src/compiler/nir/nir.h<br>
>> >> @@ -1364,8 +1364,7 @@ nir_tex_instr_src_size(const nir_tex_instr<br>
>> >> *instr,<br>
>> >> unsigned src)<br>
>> >>     if (instr->src[src].src_type == nir_tex_src_ms_mcs)<br>
>> >>        return 4;<br>
>> >><br>
>> >> -   if (instr->src[src].src_type == nir_tex_src_offset ||<br>
>> >> -       instr->src[src].src_type == nir_tex_src_ddx ||<br>
>> >> +   if (instr->src[src].src_type == nir_tex_src_ddx ||<br>
>> >>         instr->src[src].src_type == nir_tex_src_ddy) {<br>
>> >>        if (instr->is_array)<br>
>> >>           return instr->coord_components - 1;<br>
>> >> @@ -1373,6 +1372,18 @@ nir_tex_instr_src_size(const nir_tex_instr<br>
>> >> *instr,<br>
>> >> unsigned src)<br>
>> >>           return instr->coord_components;<br>
>> >>     }<br>
>> >><br>
>> >> +   /* Usual APIs don't allow cube + offset, but we allow it, with 2<br>
>> >> coords for<br>
>> >> +    * the offset, since a cube maps to a single face.<br>
>> >> +    */<br>
>> >> +   if (instr->src[src].src_type == nir_tex_src_offset) {<br>
>> >> +      unsigned ret = instr->coord_components;<br>
>> >> +      if (instr->is_array)<br>
>> >> +         ret--;<br>
>> >> +      if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE)<br>
>> >> +         ret--;<br>
>> >> +      return ret;<br>
>> ><br>
>> ><br>
>> > I think I'd rather this look more like the one above:<br>
>> ><br>
>> > if (instr->is_array)<br>
>> >    return instr->coord_components;<br>
>> > else if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE)<br>
>> >    return 2;<br>
>> > else<br>
>> >    return instr->coord_components - 1;<br>
>> ><br>
>> > It seems a bit cleaner and/or more explicit to me.<br>
>><br>
>> OK. Although your version is slightly wrong, but I get the idea. Will<br>
>> do that in a v2. (array should get -1, and cube should always get 2<br>
>> even if it's an array)<br>
><br>
><br>
> I'd forgotten about cube arrays, yes, those would naturally be -2.  In that<br>
> case, maybe -- for each subtraction is a good idea...<br>
<br>
</div></div>Well, rearranging it, we get<br>
<br>
if (instr->sampler_dim == CUBE)<br>
  return 2;<br>
else if (instr->is_array)<br>
  return comp - 1;<br>
else<br>
  return comp;<br>
</blockquote></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">Right.  With that if-ladder,</div><div class="gmail_extra"><br></div><div class="gmail_extra">Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br></div></div>