summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGert Wollny <gert.wollny@collabora.com>2023-08-06 20:42:07 +0200
committerMarge Bot <emma+marge@anholt.net>2023-08-06 19:05:47 +0000
commit807c0d6bb75ecf150f39480f2f492b4dd195d14d (patch)
tree4facfe5899d3a40ccd2fb6d60ab13d22550697e1
parentbcfa71a6d09297ed8adc24f8910d0726bbd45d8e (diff)
r600/sfn: Take source uses into account when switching channels
When we switch the channels by re-creating vec4 values we have to take into account that the source values may be used in an ALU op, and with that we have to take read-port limitations into account. Fixes: 18a8d148d862d4a0f5b83f4385f00cf8a4a71b6d r600/sfn: Cleanup copy-prop into vec4 source values Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24519>
-rw-r--r--src/gallium/drivers/r600/sfn/sfn_optimizer.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp b/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp
index 4cd969c6658..5ab1e880cad 100644
--- a/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp
@@ -592,6 +592,12 @@ CopyPropFwdVisitor::propagate_to(RegisterVec4& value, Instr *instr)
allowed_mask &= alu->allowed_dest_chan_mask();
}
+ for (auto u : src->uses()) {
+ auto alu = u->as_alu();
+ if (alu)
+ allowed_mask &= alu->allowed_src_chan_mask();
+ }
+
if (!allowed_mask)
return;