Otherwise, coordinates with four components would result in a MOV with a destination writemask that has no channels enabled: mov(8) g115<1>.F 0D { align16 WE_normal NoDDChk 1Q }; At best, this is stupid: we emit code that shouldn't do anything. Worse, it apparently causes GPU hangs (observable with Chris's textureGather test on CubeArrays.) Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Chris Forbes <chrisf@ijw.co.nz> Reviewed-by: Ian Romanick <idr@freedesktop.org> Cc: mesa-stable@lists.freedesktop.orgtags/mesa-10.1-devel
@@ -2248,8 +2248,10 @@ vec4_visitor::visit(ir_texture *ir) | |||
emit(MOV(dst_reg(MRF, param_base, ir->coordinate->type, coord_mask), | |||
coordinate)); | |||
} | |||
emit(MOV(dst_reg(MRF, param_base, ir->coordinate->type, zero_mask), | |||
src_reg(0))); | |||
if (zero_mask != 0) { | |||
emit(MOV(dst_reg(MRF, param_base, ir->coordinate->type, zero_mask), | |||
src_reg(0))); | |||
} | |||
/* Load the shadow comparitor */ | |||
if (ir->shadow_comparitor && ir->op != ir_txd) { | |||
emit(MOV(dst_reg(MRF, param_base + 1, ir->shadow_comparitor->type, |