i965/fs: fix MOV_INDIRECT exec_size for doubles

In that case, the writes need two times the size of a 32-bit value.
We need to adjust the exec_size, so it is not breaking any hardware
rule.

v2:
  - Add an assert to verify type size is not less than 4 bytes (Jordan).

Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Samuel Iglesias Gonsálvez 2016-04-20 09:59:11 +02:00
parent 75ada43a3a
commit 4c9006f957

View file

@ -4682,7 +4682,15 @@ get_lowered_simd_width(const struct brw_device_info *devinfo,
case SHADER_OPCODE_MOV_INDIRECT:
/* Prior to Broadwell, we only have 8 address subregisters */
return devinfo->gen < 8 ? 8 : MIN2(inst->exec_size, 16);
if (devinfo->gen < 8)
return 8;
if (inst->exec_size < 16) {
return inst->exec_size;
} else {
assert(type_sz(inst->dst.type) >= 4);
return MIN2(inst->exec_size / (type_sz(inst->dst.type) / 4), 16);
}
default:
return inst->exec_size;