mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 00:38:48 +02:00
i965: Handle ir_binop_ubo_load in boolean expression code.
UBO loads can be boolean-valued expressions, too, so we need to handle
them in emit_bool_to_cond_code() and emit_if_gen6().
However, unlike most expressions, it doesn't make sense to evaluate
their operands, then do something with the results. We just want to
evaluate the UBO load as a whole---which performs the read from
memory---then load the boolean result into the flag register.
Instead of adding code to handle it, we can simply bypass the
ir_expression handling, and fall through to the default code, which will
do exactly that.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83468
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: mesa-stable@lists.freedesktop.org
(cherry picked from commit a20cc2796f)
This commit is contained in:
parent
3a49ccc134
commit
a318e2f383
2 changed files with 4 additions and 4 deletions
|
|
@ -2238,7 +2238,7 @@ fs_visitor::emit_bool_to_cond_code(ir_rvalue *ir)
|
|||
{
|
||||
ir_expression *expr = ir->as_expression();
|
||||
|
||||
if (!expr) {
|
||||
if (!expr || expr->operation == ir_binop_ubo_load) {
|
||||
ir->accept(this);
|
||||
|
||||
fs_inst *inst = emit(AND(reg_null_d, this->result, fs_reg(1)));
|
||||
|
|
@ -2366,7 +2366,7 @@ fs_visitor::emit_if_gen6(ir_if *ir)
|
|||
{
|
||||
ir_expression *expr = ir->condition->as_expression();
|
||||
|
||||
if (expr) {
|
||||
if (expr && expr->operation != ir_binop_ubo_load) {
|
||||
fs_reg op[3];
|
||||
fs_inst *inst;
|
||||
fs_reg temp;
|
||||
|
|
|
|||
|
|
@ -776,7 +776,7 @@ vec4_visitor::emit_bool_to_cond_code(ir_rvalue *ir,
|
|||
|
||||
*predicate = BRW_PREDICATE_NORMAL;
|
||||
|
||||
if (expr) {
|
||||
if (expr && expr->operation != ir_binop_ubo_load) {
|
||||
src_reg op[3];
|
||||
vec4_instruction *inst;
|
||||
|
||||
|
|
@ -897,7 +897,7 @@ vec4_visitor::emit_if_gen6(ir_if *ir)
|
|||
{
|
||||
ir_expression *expr = ir->condition->as_expression();
|
||||
|
||||
if (expr) {
|
||||
if (expr && expr->operation != ir_binop_ubo_load) {
|
||||
src_reg op[3];
|
||||
dst_reg temp;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue