mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 04:48:08 +02:00
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>
This commit is contained in:
parent
5356d52f31
commit
f4b8649233
1 changed files with 6 additions and 0 deletions
|
|
@ -1997,6 +1997,12 @@ get_lowered_simd_width(const struct gen_device_info *devinfo,
|
|||
* only hardware that implements fp64 in Align16.
|
||||
*/
|
||||
if (devinfo->gen == 7 && inst->size_written > REG_SIZE) {
|
||||
/* Align16 8-wide double-precision SEL does not work well. Verified
|
||||
* empirically.
|
||||
*/
|
||||
if (inst->opcode == BRW_OPCODE_SEL && type_sz(inst->dst.type) == 8)
|
||||
lowered_width = MIN2(lowered_width, 4);
|
||||
|
||||
/* HSW PRM, 3D Media GPGPU Engine, Region Alignment Rules for Direct
|
||||
* Register Addressing:
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue