Mesa (main): pan/va: Handle extended staging counts in assembler

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 25 22:14:25 UTC 2022


Module: Mesa
Branch: main
Commit: 49a4cc6af868ea23f343ab3f5485b2de29fab567
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=49a4cc6af868ea23f343ab3f5485b2de29fab567

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Fri Feb 25 12:34:11 2022 -0500

pan/va: Handle extended staging counts in assembler

Needed for texturing.

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15182>

---

 src/panfrost/bifrost/valhall/asm.py | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/panfrost/bifrost/valhall/asm.py b/src/panfrost/bifrost/valhall/asm.py
index 0ff1316b854..58e4d49a8da 100644
--- a/src/panfrost/bifrost/valhall/asm.py
+++ b/src/panfrost/bifrost/valhall/asm.py
@@ -218,9 +218,12 @@ def parse_asm(line):
         die_if(any([x[0] != 'r' for x in parts]), f'Expected registers, got {op}')
         regs = [parse_int(x[1:], 0, 63) for x in parts]
 
+        extended_write = "staging_register_write_count" in [x.name for x in ins.modifiers] and sr.write
+        max_sr_count = 8 if extended_write else 7
+
         sr_count = len(regs)
         die_if(sr_count < 1, f'Expected staging register, got {op}')
-        die_if(sr_count > 7, f'Too many staging registers {sr_count}')
+        die_if(sr_count > max_sr_count, f'Too many staging registers {sr_count}')
 
         base = regs[0]
         die_if(any([reg != (base + i) for i, reg in enumerate(regs)]),
@@ -229,9 +232,13 @@ def parse_asm(line):
                 'Consecutive staging registers must be aligned to a register pair')
 
         if sr.count == 0:
-            modifier_map["staging_register_count"] = sr_count
+            if "staging_register_write_count" in [x.name for x in ins.modifiers] and sr.write:
+                modifier_map["staging_register_write_count"] = sr_count - 1
+            else:
+                assert "staging_register_count" in [x.name for x in ins.modifiers]
+                modifier_map["staging_register_count"] = sr_count
         else:
-            die_if(sr_count != sr.count, f"Expected 4 staging registers, got {sr_count}")
+            die_if(sr_count != sr.count, f"Expected {sr.count} staging registers, got {sr_count}")
 
         encoded |= ((sr.encoded_flags | base) << sr.start)
     operands = operands[len(ins.staging):]



More information about the mesa-commit mailing list