i965/vec4: Fix swizzles on atomic sources.
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 24 Sep 2017 21:24:53 +0000 (14:24 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 26 Sep 2017 22:35:11 +0000 (15:35 -0700)
commit66342c997fb7892034e537d1456c37e6981c2fdb
tree238d25d7c09f02b6c9cd2d7d6d893b250c389fa5
parenta62fe340981b56fe54e49d3a6791e568f7f87554
i965/vec4: Fix swizzles on atomic sources.

Atomic operation sources are scalar values, but we were failing to
select the .x component of the second operand.  For example,

   atomicCounterCompSwapARB(counter, 5u, 10u)

would generate

   mov(8) vgrf4.x:D, 5D
   mov(8) vgrf5.x:D, 10D

   mov(8) vgrf9.x:UD, vgrf4.xyzw:D
   mov(8) vgrf9.y:UD, vgrf5.xyzw:D

which wrongly selects the .y component of vgrf5, so the actual 10u value
would get dead code eliminated.  The swizzle works for the other source,
but both of them ought to be .xxxx.

Fixes the compare and swap CTS tests in:
KHR-GL45.shader_atomic_counter_ops_tests.ShaderAtomicCounterOpsExchangeTestCase

Cc: "17.2 17.1 17.0 13.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/intel/compiler/brw_vec4_surface_builder.cpp