From c8687a4b09dc0ce6d3508802c3f42eb3da4cd627 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Thu, 17 Aug 2023 14:45:37 +0800 Subject: [PATCH] aco: do not fix_exports when program is prolog Otherwise fix_export() will abort when find no export. Reviewed-by: Rhys Perry Signed-off-by: Qiang Yu Part-of: --- src/amd/compiler/aco_assembler.cpp | 6 ++++-- src/amd/compiler/aco_interface.cpp | 2 ++ src/amd/compiler/aco_ir.h | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/amd/compiler/aco_assembler.cpp b/src/amd/compiler/aco_assembler.cpp index c27e084645c..a50d4b95e44 100644 --- a/src/amd/compiler/aco_assembler.cpp +++ b/src/amd/compiler/aco_assembler.cpp @@ -1291,8 +1291,10 @@ emit_program(Program* program, std::vector& code, std::vectorstage.hw == AC_HW_VERTEX_SHADER || program->stage.hw == AC_HW_PIXEL_SHADER || - program->stage.hw == AC_HW_NEXT_GEN_GEOMETRY_SHADER) + /* Prolog has no exports. */ + if (!program->is_prolog && + (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); for (Block& block : program->blocks) { diff --git a/src/amd/compiler/aco_interface.cpp b/src/amd/compiler/aco_interface.cpp index 51f0cbdcfc2..08274ea2bc3 100644 --- a/src/amd/compiler/aco_interface.cpp +++ b/src/amd/compiler/aco_interface.cpp @@ -363,6 +363,8 @@ aco_compile_shader_part(const struct aco_compiler_options* options, program->debug.func = options->debug.func; program->debug.private_data = options->debug.private_data; + program->is_prolog = is_prolog; + /* Instruction selection */ select_shader_part(program.get(), pinfo, &config, options, info, args); diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h index 6de37e5ba1e..df902cbedf0 100644 --- a/src/amd/compiler/aco_ir.h +++ b/src/amd/compiler/aco_ir.h @@ -2121,6 +2121,7 @@ public: bool has_smem_buffer_or_global_loads = false; bool has_pops_overlapped_waves_wait = false; bool has_color_exports = false; + bool is_prolog = false; std::vector constant_data; Temp private_segment_buffer;