From cccfbe6141bd5cdeba3cc7e9967abf50d0d4b369 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Fri, 19 Jul 2024 13:23:29 +0100 Subject: [PATCH] aco: move s_setprio to before NGG exec initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fossil-db (gfx1150): Totals from 32 (0.04% of 79395) affected shaders: Instrs: 17397 -> 17365 (-0.18%) CodeSize: 83700 -> 83580 (-0.14%) Latency: 59006 -> 58974 (-0.05%) fossil-db (navi21): Totals from 4 (0.01% of 79395) affected shaders: Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_insert_exec_mask.cpp | 5 +++-- src/amd/compiler/aco_instruction_selection.cpp | 11 ++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/amd/compiler/aco_insert_exec_mask.cpp b/src/amd/compiler/aco_insert_exec_mask.cpp index 06c4ab3666c..3982ed63ee1 100644 --- a/src/amd/compiler/aco_insert_exec_mask.cpp +++ b/src/amd/compiler/aco_insert_exec_mask.cpp @@ -166,8 +166,9 @@ add_coupling_code(exec_ctx& ctx, Block* block, std::vector> bld.insert(std::move(startpgm)); unsigned count = 1; - if (block->instructions[1]->opcode == aco_opcode::p_init_scratch) { - bld.insert(std::move(block->instructions[1])); + while (block->instructions[count]->opcode == aco_opcode::p_init_scratch || + block->instructions[count]->opcode == aco_opcode::s_setprio) { + bld.insert(std::move(block->instructions[count])); count++; } diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 1022011fe1a..eb8147886cd 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -11866,6 +11866,12 @@ select_shader(isel_context& ctx, nir_shader* nir, const bool need_startpgm, cons if (need_startpgm) { /* Needs to be after init_context() for FS. */ Instruction* startpgm = add_startpgm(&ctx); + + if (!program->info.vs.has_prolog && + (program->stage.has(SWStage::VS) || program->stage.has(SWStage::TES))) { + Builder(ctx.program, ctx.block).sopp(aco_opcode::s_setprio, 0x3u); + } + append_logical_start(ctx.block); if (ctx.options->has_ls_vgpr_init_bug && ctx.stage == vertex_tess_control_hs && @@ -11873,11 +11879,6 @@ select_shader(isel_context& ctx, nir_shader* nir, const bool need_startpgm, cons fix_ls_vgpr_init_bug(&ctx); split_arguments(&ctx, startpgm); - - if (!program->info.vs.has_prolog && - (program->stage.has(SWStage::VS) || program->stage.has(SWStage::TES))) { - Builder(ctx.program, ctx.block).sopp(aco_opcode::s_setprio, 0x3u); - } } if (program->gfx_level == GFX10 && program->stage.hw == AC_HW_NEXT_GEN_GEOMETRY_SHADER &&