<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Nov 19, 2017 at 11:54 AM, 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">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 *instr, 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 *instr, unsigned src)<br>
          return instr->coord_components;<br>
    }<br>
<br>
+   /* Usual APIs don't allow cube + offset, but we allow it, with 2 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></blockquote><div><br></div><div>I think I'd rather this look more like the one above:</div><div><br></div><div>if (instr->is_array)</div><div>   return instr->coord_components;</div><div>else if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE)</div><div>   return 2;</div><div>else</div><div>   return instr->coord_components - 1;</div><div><br></div><div>It seems a bit cleaner and/or more explicit to me.</div><div><br></div><div>Also, bonus points to anyone who converts this function to use a switch. :-P</div><div><br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+   }<br>
+<br>
    return 1;<br>
 }<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
2.13.6<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>
</font></span></blockquote></div><br></div></div>