mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-03 06:30:24 +01:00
glsl/opt_algebraic: disable invalid optimization
When operators other than eq and ne are involved we can't really move operands around and negate them because such transformation may change the value of the whole expression. Some examples: For unsigned var: 0 >= 1u + var would eventually become 0xffffffff >= var, which would always evaluate to true, when original expression was true only for var == 0xffffffff. For signed var: 0 >= 1 + var would become -1 >= var, which would evaluate to false for var == 2147483647, when original expression evaluated to true (because signed overflow is defined to wrap around in glsl, 1 + 2147483647 == -2147483648, so 0 >= -2147483648). Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5226 Fixes:34ec1a24d6("glsl: Optimize (x + y cmp 0) into (x cmp -y).") Signed-off-by: Marcin Ślusarz <marcin.slusarz@intel.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12359> (cherry picked from commit89bc8ff408)
This commit is contained in:
parent
40bdd9aad5
commit
8d4f8e7e6a
2 changed files with 1 additions and 3 deletions
|
|
@ -130,7 +130,7 @@
|
|||
"description": "glsl/opt_algebraic: disable invalid optimization",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "34ec1a24d61f8b2f6ed58efa9fe7ea8cec917612"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -708,8 +708,6 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
|
|||
}
|
||||
break;
|
||||
|
||||
case ir_binop_less:
|
||||
case ir_binop_gequal:
|
||||
case ir_binop_equal:
|
||||
case ir_binop_nequal:
|
||||
for (int add_pos = 0; add_pos < 2; add_pos++) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue