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 &&