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