<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Oct 12, 2017 at 11:38 AM, Jose Maria Casanova Crespo <span dir="ltr"><<a href="mailto:jmcasanova@igalia.com" target="_blank">jmcasanova@igalia.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The VS load input for 16-bit values receives pairs of 16-bit values<br>
packed in 32-bit values. Because of the adjusted format used at:<br>
<br>
 anv/pipeline: Use 32-bit surface formats for 16-bit formats<br>
<br>
v2: Removed use of stride = 2 on 16-bit sources (Jason Ekstrand)<br>
---<br>
 src/intel/compiler/brw_fs_nir.<wbr>cpp | 21 +++++++++++++++++++--<br>
 1 file changed, 19 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/intel/compiler/brw_fs_<wbr>nir.cpp b/src/intel/compiler/brw_fs_<wbr>nir.cpp<br>
index d2f2e17b70..83ff0607a7 100644<br>
--- a/src/intel/compiler/brw_fs_<wbr>nir.cpp<br>
+++ b/src/intel/compiler/brw_fs_<wbr>nir.cpp<br>
@@ -2322,8 +2322,25 @@ fs_visitor::nir_emit_vs_<wbr>intrinsic(const fs_builder &bld,<br>
       assert(const_offset && "Indirect input loads not allowed");<br>
       src = offset(src, bld, const_offset->u32[0]);<br>
<br>
-      for (unsigned j = 0; j < num_components; j++) {<br>
-         bld.MOV(offset(dest, bld, j), offset(src, bld, j + first_component));<br>
+      /* The VS load input for 16-bit values receives pairs of 16-bit values<br>
+       * packed in 32-bit values. This is an example on SIMD8:<br>
+       *<br>
+       * xy xy xy xy xy xy xy xy<br>
+       * zw zw zw zw yw zw zw xw<br>
+       *<br>
+       * We need to format it to something like:<br>
+       *<br>
+       * xx xx xx xx yy yy yy yy<br>
+       * zz zz zz zz ww ww ww ww<br>
+       */<br></blockquote><div><br></div><div>Please pull this comment inside the if.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+      if (type_sz(type) == 2) {<br>
+         for (unsigned j = 0; j < num_components; j++)<br>
+            bld.MOV(offset(dest, bld, j),<br>
+                    subscript(retype(offset(src,<wbr>bld, (j / 2) * 2 + first_component), <br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+                                     BRW_REGISTER_TYPE_F), type, j % 2)); </blockquote><div><br></div><div>Ugh... This is rather hard to parse.  All of the retyping and subscripting is making my head spin.  How about:</div><div><br></div><div>src.type = BRW_REGISTER_TYPE_F;</div><div>for (unsigned j = 0; j < num_components; j++) {</div><div>   unsigned src_comp = j / 2 + first_component;</div><div>   bld.MOV(offset(dest, bld, j),</div><div>             subscript(offset(src, bld, src_comp), dst.type, j % 2));<br></div><div>}</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+      } else {<br>
+         for (unsigned j = 0; j < num_components; j++)<br>
+            bld.MOV(offset(dest, bld, j), offset(src, bld, j + first_component));<br>
       }<br>
<br>
       if (type == BRW_REGISTER_TYPE_DF) {<br>
<span class="HOEnZb"><font color="#888888">--<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>