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); }