i965/fs: Use UW types when using V immediates
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 6 Jan 2018 02:26:58 +0000 (18:26 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 11 Jan 2018 22:31:38 +0000 (14:31 -0800)
commit3d2b157e23c9d66df97d59be6efd1098878cc110
treee8f22a83b379330f91fab4e45612e132fafb23fb
parent30c1a93f6de66f0b9f86e11b517b62f57f330d95
i965/fs: Use UW types when using V immediates

Gen 10 has a strange hardware bug involving V immediates with W types.
It appears that a mov(8) g2<1>W 0x76543210V will actually result in g2
getting the value {3, 2, 1, 0, 3, 2, 1, 0}.  In particular, the bottom
four nibbles are repeated instead of the top four being taken.  (A mov
of 0x00003210V yields the same result.)  This bug does not appear in any
hardware documentation as far as we can tell and the simulator does not
implement the bug either.

Commit 6132992cdb858268af0e985727d80e4140be389c was mostly a no-op
except that it changed the type of the subgroup invocation from UW to W
and caused us to tickle this bug with basically every compute shader
that uses any sort of invocation ID (which is most of them).  This is
also potentially an issue for geometry shader input pulls and SampleID
setup.  The easy solution is just to change the few places where we use
a vector integer immediate with a W type to use a UW type.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: mesa-stable@lists.freedesktop.org
Fixes: 6132992cdb858268af0e985727d80e4140be389c
src/intel/compiler/brw_fs.cpp
src/intel/compiler/brw_fs_nir.cpp