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

Reply via email to