summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2019-06-07 15:45:03 -0700
committerIan Romanick <[email protected]>2019-06-11 12:12:07 -0700
commit39f4dc23a5af1b78a58905cf91d56441b59eb80a (patch)
tree73b8a9afe295662212a856a82264c5251abbf208
parentf9f89df8bc75d4446c6d6aa12d9390f72313cca7 (diff)
intel/fs: Mark source 0 of bcsel as needing Boolean resolve
The other sources of the bcsel behave like the sources of an and or other logical operation. However, source zero behaves differently. It is evaluated as a Boolean, so it needs to be resolved. No shader-db changes, but the tests mentioned in the bug get a couple instructions added back. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110857 Reviewed-by: Caio Marcelo de Oliveira Filho <[email protected]>
-rw-r--r--src/intel/compiler/brw_nir_analyze_boolean_resolves.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/intel/compiler/brw_nir_analyze_boolean_resolves.c b/src/intel/compiler/brw_nir_analyze_boolean_resolves.c
index 63d094168b9..8e40a9f53cb 100644
--- a/src/intel/compiler/brw_nir_analyze_boolean_resolves.c
+++ b/src/intel/compiler/brw_nir_analyze_boolean_resolves.c
@@ -145,6 +145,12 @@ analyze_boolean_resolves_block(nir_block *block)
uint8_t src0_status = get_resolve_status_for_src(&alu->src[first + 0].src);
uint8_t src1_status = get_resolve_status_for_src(&alu->src[first + 1].src);
+ /* src0 of a bcsel is evaluated as a Boolean with the expectation
+ * that it has already been resolved. Mark it as such.
+ */
+ if (alu->op == nir_op_b32csel)
+ src_mark_needs_resolve(&alu->src[0].src, NULL);
+
if (src0_status == src1_status) {
resolve_status = src0_status;
} else if (src0_status == BRW_NIR_NON_BOOLEAN ||