summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Brezillon <boris.brezillon@collabora.com>2020-11-23 23:03:59 +0100
committerMarge Bot <eric+marge@anholt.net>2021-01-11 17:39:39 +0000
commit556a5cb5751ce048d9b64443198bd65593694e7d (patch)
treef700b1a6b69434af88ce984fda217d6a699117ba
parentc80c68cd496cecb2c7a594e23aa074649b9de7b0 (diff)
pan/bi: Fix constant slot selection
The fau_index field contains the lower 4 bits of the 64bit constant, which allows one to reuse the same clause constant slot from different bundles if the upper 60 bits match. That doesn't work for constants referenced from the same instruction or for constants referenced from two instructions that are part of the same bundle though, since the fau_index is shared in that case. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8418>
-rw-r--r--src/panfrost/bifrost/bi_pack.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/panfrost/bifrost/bi_pack.c b/src/panfrost/bifrost/bi_pack.c
index 5758c2bbe8e..9ff6b82d304 100644
--- a/src/panfrost/bifrost/bi_pack.c
+++ b/src/panfrost/bifrost/bi_pack.c
@@ -70,7 +70,13 @@ bi_lookup_constant(bi_clause *clause, uint32_t cons, bool *hi)
/* Try to apply to top or to bottom */
uint64_t top = clause->constants[i];
- if (cons == ((uint32_t) top | (cons & 0xF)))
+ /* Constant slots can actually be used by a different
+ * tuples if the 60 upper bits match since the 4 LSB are
+ * encoded in the tuple itself. Let's not bother about this
+ * case until we start scheduling more than one tuple per
+ * clause.
+ */
+ if (cons == (uint32_t) top)
return i;
if (cons == (top >> 32ul)) {