i965/vec4: split double-precision SEL
authorIago Toral Quiroga <itoral@igalia.com>
Fri, 17 Jun 2016 06:47:29 +0000 (08:47 +0200)
committerSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Tue, 3 Jan 2017 10:26:51 +0000 (11:26 +0100)
commitf4b8649233fa10e89205b6b5f6f334279b198f22
tree7cda7818b5cc4c38e64df5e1b43eda55a2a978a4
parent5356d52f31b8285c97f2c920e28cf4eb2a8caa58
i965/vec4: split double-precision SEL

There is a hardware bug affecting compressed double-precision SEL
instructions in align16 mode by which they won't read predication mask
properly. The bug does not affect other predicated instructions
and it does not affect SEL in Align1 mode either. This was found
empirically and verified by Curro in the simulator.

Fix this by splitting double-precision SEL in Align16 mode to use an
execution size of 4.

v2: Check that the dst type is 64-bit, since we can have 16-wide single
    precision bcsel instructions that also write 2 registers.

v3: Replace bcsel by SEL in all the comments as bcsel is the nir opcode
but SEL is the actual assembly instruction (Matt).

Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_vec4.cpp