i965: Fix textureGather with RG32I/UI on Gen7.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 5 Jan 2017 10:51:38 +0000 (02:51 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 13 Jan 2017 19:57:06 +0000 (11:57 -0800)
commit99c019e1d41eb72c5ca9e0ae4b263acd6e6c214f
treebb7a3c820e23f2eae89233a8143d53e6da54d6f8
parent6d2fb04f0922047232d10b2a5d292d68c9506f45
i965: Fix textureGather with RG32I/UI on Gen7.

According to the "Gather4 R32G32_FLOAT Bug" internal documentation
page, the R32G32_UINT and R32G32_SINT formats are affected by the
same bug as R32G32_FLOAT.  Applying the same workarounds should be
viable - apparently the R32G32_FLOAT_LD format shouldn't corrupt
integer data which is NaN or other sketchy floating point values.

One irritating caveat is that, because it's a FLOAT format, the
alpha channel or any set to SCS_ONE return 0x3f8 (1.0) rather than
integer 1.  So we need shader code to whack those channels to 1.

Fixes GL45-CTS.texture_gather.plain-gather-int-cube-rg on Haswell.

v2: Fix swizzle component zeroing (caught by Jordan Justen).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_wm.c
src/mesa/drivers/dri/i965/brw_wm_surface_state.c