st/glsl->tgsi: fix u64 to bool comparisons.
Otherwise we end up using a 32-bit comparison which didn't end well.
Timothy caught this while playing around with some opt passes.
Fixes: 278580729a
(st/glsl_to_tgsi: add support for 64-bit integers)
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
62f2670cba
commit
a7a7bf21bd
|
@ -205,6 +205,7 @@ public:
|
|||
st_src_reg st_src_reg_for_double(double val);
|
||||
st_src_reg st_src_reg_for_float(float val);
|
||||
st_src_reg st_src_reg_for_int(int val);
|
||||
st_src_reg st_src_reg_for_int64(int64_t val);
|
||||
st_src_reg st_src_reg_for_type(enum glsl_base_type type, int val);
|
||||
|
||||
/**
|
||||
|
@ -908,6 +909,19 @@ glsl_to_tgsi_visitor::st_src_reg_for_int(int val)
|
|||
return src;
|
||||
}
|
||||
|
||||
st_src_reg
|
||||
glsl_to_tgsi_visitor::st_src_reg_for_int64(int64_t val)
|
||||
{
|
||||
st_src_reg src(PROGRAM_IMMEDIATE, -1, GLSL_TYPE_INT64);
|
||||
union gl_constant_value uval[2];
|
||||
|
||||
memcpy(uval, &val, sizeof(uval));
|
||||
src.index = add_constant(src.file, uval, 1, GL_DOUBLE, &src.swizzle);
|
||||
src.swizzle = MAKE_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_X, SWIZZLE_Y);
|
||||
|
||||
return src;
|
||||
}
|
||||
|
||||
st_src_reg
|
||||
glsl_to_tgsi_visitor::st_src_reg_for_type(enum glsl_base_type type, int val)
|
||||
{
|
||||
|
@ -2141,7 +2155,7 @@ glsl_to_tgsi_visitor::visit_expression(ir_expression* ir, st_src_reg *op)
|
|||
break;
|
||||
}
|
||||
case ir_unop_i642b:
|
||||
emit_asm(ir, TGSI_OPCODE_U64SNE, result_dst, op[0], st_src_reg_for_int(0));
|
||||
emit_asm(ir, TGSI_OPCODE_U64SNE, result_dst, op[0], st_src_reg_for_int64(0));
|
||||
break;
|
||||
case ir_unop_i642f:
|
||||
emit_asm(ir, TGSI_OPCODE_I642F, result_dst, op[0]);
|
||||
|
|
Loading…
Reference in New Issue