i965/vec4: Don't disable channels in any/all comparisons.
authorMatt Turner <mattst88@gmail.com>
Mon, 26 Oct 2015 03:49:08 +0000 (20:49 -0700)
committerMatt Turner <mattst88@gmail.com>
Mon, 2 Nov 2015 17:33:31 +0000 (09:33 -0800)
commitd9b09f8a306dfd471e45b5294c3adcb119114387
tree53e8b7b2b1433fac8a2040e30123d908ccd826dc
parentf4466c856f6147885be52aff6314452784b30189
i965/vec4: Don't disable channels in any/all comparisons.

We've made a mistake in calling the Channel Enable bits "writemask",
because they do more than control which channels of the destination are
written -- they actually control which channels are enabled (surprise!
surprise!)

So, if we emit

               cmp.z.f0(8) null.xy<1>D  g10<4,4,1>.xyzzD g2<0,4,1>.xyzzD
               mov(8)      g12<1>.xUD   0x00000000UD
   (+f0.all4h) mov(8)      g12<1>.xUD   0xffffffffUD

where the CMP instruction has only .xy channel enables, it won't write
the .zw channels of the flag register, which are of course read by the
+f0.all4 predicate.

We need to always emit CMP instructions whose flag result might be read
by such a predicate with all channels enabled.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/mesa/drivers/dri/i965/brw_vec4_nir.cpp