38 lines
1.3 KiB
Diff
38 lines
1.3 KiB
Diff
From c59f3601b81bf38cbb7a2b77820f1d827f608339 Mon Sep 17 00:00:00 2001
|
|
From: Dave Airlie <airlied@redhat.com>
|
|
Date: Thu, 21 Dec 2023 10:39:08 +1000
|
|
Subject: [PATCH] intel/compiler: reemit boolean resolve for inverted if on
|
|
gen5
|
|
|
|
Gen5 adds some boolean conversion instructions after nir emits,
|
|
but that nir srcs don't line up with them, so reemit the boolean
|
|
conversion if we reemit the inot.
|
|
|
|
Fixes: 31b5f5a51f3a ("nir/opt_if: Simplify if's with general conditions")
|
|
---
|
|
src/intel/compiler/brw_fs_nir.cpp | 8 ++++++++
|
|
1 file changed, 8 insertions(+)
|
|
|
|
diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp
|
|
index b9f7366763b..5a4ec96e93f 100644
|
|
--- a/src/intel/compiler/brw_fs_nir.cpp
|
|
+++ b/src/intel/compiler/brw_fs_nir.cpp
|
|
@@ -361,6 +361,14 @@ fs_visitor::nir_emit_if(nir_if *if_stmt)
|
|
invert = true;
|
|
cond_reg = get_nir_src(cond->src[0].src);
|
|
cond_reg = offset(cond_reg, bld, cond->src[0].swizzle[0]);
|
|
+
|
|
+ if (devinfo->ver <= 5) {
|
|
+ /* redo boolean resolve on gen5 */
|
|
+ fs_reg masked = bld.vgrf(BRW_REGISTER_TYPE_D);
|
|
+ bld.AND(masked, cond_reg, brw_imm_d(1));
|
|
+ masked.negate = true;
|
|
+ bld.MOV(retype(cond_reg, BRW_REGISTER_TYPE_D), masked);
|
|
+ }
|
|
} else {
|
|
invert = false;
|
|
cond_reg = get_nir_src(if_stmt->condition);
|
|
--
|
|
2.43.0
|
|
|