i965: Use a UW source type for CS_OPCODE_CS_TERMINATE.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 24 Jan 2017 08:45:53 +0000 (00:45 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 26 Jan 2017 08:52:52 +0000 (00:52 -0800)
SIMD16 compute shaders use a send(16) with mlen 1 for the EOT message,
using a source of g127 for the single register.  With a UD type, this
supposedly could read g128, which doesn't exist, causing the simulator
to get cranky.  Use a UW type to avoid this.

Cc: "17.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_fs_generator.cpp

index 0710be932a5a87c064928fb6f7cc0fff85934cb7..26ffbb169d22ee38a06ba50c92ab663d0199bf11 100644 (file)
@@ -508,7 +508,7 @@ fs_generator::generate_cs_terminate(fs_inst *inst, struct brw_reg payload)
    insn = brw_next_insn(p, BRW_OPCODE_SEND);
 
    brw_set_dest(p, insn, retype(brw_null_reg(), BRW_REGISTER_TYPE_UW));
-   brw_set_src0(p, insn, payload);
+   brw_set_src0(p, insn, retype(payload, BRW_REGISTER_TYPE_UW));
    brw_set_src1(p, insn, brw_imm_d(0));
 
    /* Terminate a compute shader by sending a message to the thread spawner.