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

Author: Daniel Schürmann <dan...@schuermann.dev>
Date:   Tue Jun 20 15:36:38 2023 +0200

aco/assembler: align resume shaders with cache lines

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23748>

---

 src/amd/compiler/aco_assembler.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/amd/compiler/aco_assembler.cpp 
b/src/amd/compiler/aco_assembler.cpp
index 45065b1471d..c4a341dab3f 100644
--- a/src/amd/compiler/aco_assembler.cpp
+++ b/src/amd/compiler/aco_assembler.cpp
@@ -1217,6 +1217,17 @@ fix_constaddrs(asm_context& ctx, std::vector<uint32_t>& 
out)
    }
 }
 
+void
+align_block(asm_context& ctx, std::vector<uint32_t>& code, Block& block)
+{
+   /* align resume shaders with cache line */
+   if (block.kind & block_kind_resume) {
+      size_t cache_aligned = align(code.size(), 16);
+      code.resize(cache_aligned, 0xbf800000u); /* s_nop 0 */
+      block.offset = code.size();
+   }
+}
+
 unsigned
 emit_program(Program* program, std::vector<uint32_t>& code, std::vector<struct 
aco_symbol>* symbols)
 {
@@ -1228,6 +1239,7 @@ emit_program(Program* program, std::vector<uint32_t>& 
code, std::vector<struct a
 
    for (Block& block : program->blocks) {
       block.offset = code.size();
+      align_block(ctx, code, block);
       emit_block(ctx, code, block);
    }
 

Reply via email to