glsl_to_tgsi: don't use the negate modifier in integer ops after bitcast
This bug is uncovered by glsl/lower_if_to_cond_assign. I don't know if it can be reproduced in any other way. Cc: <mesa-stable@lists.freedesktop.org> Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
e300696304
commit
ead7736821
|
@ -1958,12 +1958,14 @@ glsl_to_tgsi_visitor::visit_expression(ir_expression* ir, st_src_reg *op)
|
|||
emit_asm(ir, TGSI_OPCODE_TRUNC, result_dst, op[0]);
|
||||
break;
|
||||
case ir_unop_bitcast_f2i:
|
||||
result_src = op[0];
|
||||
result_src.type = GLSL_TYPE_INT;
|
||||
break;
|
||||
case ir_unop_bitcast_f2u:
|
||||
result_src = op[0];
|
||||
result_src.type = GLSL_TYPE_UINT;
|
||||
/* Make sure we don't propagate the negate modifier to integer opcodes. */
|
||||
if (op[0].negate)
|
||||
emit_asm(ir, TGSI_OPCODE_MOV, result_dst, op[0]);
|
||||
else
|
||||
result_src = op[0];
|
||||
result_src.type = ir->operation == ir_unop_bitcast_f2i ? GLSL_TYPE_INT :
|
||||
GLSL_TYPE_UINT;
|
||||
break;
|
||||
case ir_unop_bitcast_i2f:
|
||||
case ir_unop_bitcast_u2f:
|
||||
|
|
Loading…
Reference in New Issue