Module: Mesa Branch: main Commit: 71fd3c2a35a223de4cf20ce8ea8302276d9b28f1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=71fd3c2a35a223de4cf20ce8ea8302276d9b28f1
Author: Qiang Yu <[email protected]> Date: Fri Sep 1 16:44:07 2023 +0800 aco: do not fix_exports when separately compiled ngg vs or es For radeonsi not abort when this case, as it does not jump at last. Reviewed-by: Daniel Schürmann <[email protected]> Signed-off-by: Qiang Yu <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25631> --- src/amd/compiler/aco_assembler.cpp | 14 ++++++-------- src/amd/compiler/aco_instruction_selection.cpp | 1 - 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/amd/compiler/aco_assembler.cpp b/src/amd/compiler/aco_assembler.cpp index f552618acc7..49508e96137 100644 --- a/src/amd/compiler/aco_assembler.cpp +++ b/src/amd/compiler/aco_assembler.cpp @@ -1008,13 +1008,6 @@ fix_exports(asm_context& ctx, std::vector<uint32_t>& out, Program* program) } } else if ((*it)->definitions.size() && (*it)->definitions[0].physReg() == exec) { break; - } else if ((*it)->opcode == aco_opcode::s_setpc_b64) { - /* Do not abort for VS/TES as NGG if they are non-monolithic shaders - * because a jump would be emitted. - */ - exported |= (program->stage.sw == SWStage::VS || program->stage.sw == SWStage::TES) && - program->stage.hw == AC_HW_NEXT_GEN_GEOMETRY_SHADER && - program->info.merged_shader_compiled_separately; } ++it; } @@ -1293,8 +1286,13 @@ emit_program(Program* program, std::vector<uint32_t>& code, std::vector<struct a { asm_context ctx(program, symbols); + bool is_separately_compiled_ngg_vs_or_es = + (program->stage.sw == SWStage::VS || program->stage.sw == SWStage::TES) && + program->stage.hw == AC_HW_NEXT_GEN_GEOMETRY_SHADER && + program->info.merged_shader_compiled_separately; + /* Prolog has no exports. */ - if (!program->is_prolog && !program->info.has_epilog && + if (!program->is_prolog && !program->info.has_epilog && !is_separately_compiled_ngg_vs_or_es && (program->stage.hw == AC_HW_VERTEX_SHADER || program->stage.hw == AC_HW_PIXEL_SHADER || program->stage.hw == AC_HW_NEXT_GEN_GEOMETRY_SHADER)) fix_exports(ctx, code, program); diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 0f7fd5b3c27..03f49fe3600 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -11829,7 +11829,6 @@ select_shader(isel_context& ctx, nir_shader* nir, const bool need_startpgm, cons (ctx.stage.sw == SWStage::VS || ctx.stage.sw == SWStage::TES)) { assert(program->gfx_level >= GFX9); create_merged_jump_to_epilog(&ctx); - ctx.block->kind |= block_kind_export_end; } cleanup_context(&ctx);
