From 91e68db0e18b8016b4f8a1946aa07ee194f19b0f Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Thu, 22 Sep 2022 15:21:07 +0800 Subject: [PATCH] aco, radv: Move is_trap_handler_shader to aco info. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2 by Timur Kristóf: - Rebase this patch on latest main. Signed-off-by: Qiang Yu Reviewed-by: Timur Kristóf Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_interface.cpp | 12 ++++++------ src/amd/compiler/aco_shader_info.h | 3 +++ src/amd/vulkan/radv_aco_shader_info.h | 4 +++- src/amd/vulkan/radv_shader.c | 6 +++--- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/amd/compiler/aco_interface.cpp b/src/amd/compiler/aco_interface.cpp index 7b55151f768..c2308bef424 100644 --- a/src/amd/compiler/aco_interface.cpp +++ b/src/amd/compiler/aco_interface.cpp @@ -113,7 +113,7 @@ get_disasm_string(aco::Program* program, std::vector& code, static std::string aco_postprocess_shader(const struct aco_compiler_options* options, - const struct radv_shader_args *args, + const struct aco_shader_info *info, std::unique_ptr& program) { std::string llvm_ir; @@ -122,7 +122,7 @@ aco_postprocess_shader(const struct aco_compiler_options* options, aco_print_program(program.get(), stderr); aco::live live_vars; - if (!args->is_trap_handler_shader) { + if (!info->is_trap_handler_shader) { /* Phi lowering */ aco::lower_phis(program.get()); aco::dominator_tree(program.get()); @@ -167,7 +167,7 @@ aco_postprocess_shader(const struct aco_compiler_options* options, if ((aco::debug_flags & aco::DEBUG_LIVE_INFO) && options->dump_shader) aco_print_program(program.get(), stderr, live_vars, aco::print_live_vars | aco::print_kill); - if (!args->is_trap_handler_shader) { + if (!info->is_trap_handler_shader) { if (!options->key.optimisations_disabled && !(aco::debug_flags & aco::DEBUG_NO_SCHED)) aco::schedule_program(program.get(), live_vars); validate(program.get()); @@ -230,12 +230,12 @@ aco_compile_shader(const struct aco_compiler_options* options, program->debug.private_data = options->debug.private_data; /* Instruction Selection */ - if (args->is_trap_handler_shader) + if (info->is_trap_handler_shader) aco::select_trap_handler_shader(program.get(), shaders[0], &config, options, info, args); else aco::select_program(program.get(), shader_count, shaders, &config, options, info, args); - std::string llvm_ir = aco_postprocess_shader(options, args, program); + std::string llvm_ir = aco_postprocess_shader(options, info, program); /* assembly */ std::vector code; @@ -337,7 +337,7 @@ aco_compile_ps_epilog(const struct aco_compiler_options* options, /* Instruction selection */ aco::select_ps_epilog(program.get(), key, &config, options, info, args); - aco_postprocess_shader(options, args, program); + aco_postprocess_shader(options, info, program); /* assembly */ std::vector code; diff --git a/src/amd/compiler/aco_shader_info.h b/src/amd/compiler/aco_shader_info.h index 21d8115a837..72e55bc6c7a 100644 --- a/src/amd/compiler/aco_shader_info.h +++ b/src/amd/compiler/aco_shader_info.h @@ -121,6 +121,9 @@ struct aco_shader_info { } cs; uint32_t gfx9_gs_ring_lds_size; + + bool is_gs_copy_shader; + bool is_trap_handler_shader; }; enum aco_compiler_debug_level { diff --git a/src/amd/vulkan/radv_aco_shader_info.h b/src/amd/vulkan/radv_aco_shader_info.h index 65dd37689aa..aab675fca9d 100644 --- a/src/amd/vulkan/radv_aco_shader_info.h +++ b/src/amd/vulkan/radv_aco_shader_info.h @@ -57,7 +57,8 @@ radv_aco_convert_shader_vp_info(struct aco_vp_output_info *aco_info, static inline void radv_aco_convert_shader_info(struct aco_shader_info *aco_info, - const struct radv_shader_info *radv) + const struct radv_shader_info *radv, + const struct radv_shader_args *radv_args) { ASSIGN_FIELD(wave_size); ASSIGN_FIELD(is_ngg); @@ -89,6 +90,7 @@ radv_aco_convert_shader_info(struct aco_shader_info *aco_info, ASSIGN_FIELD(cs.subgroup_size); ASSIGN_FIELD(cs.uses_full_subgroups); aco_info->gfx9_gs_ring_lds_size = radv->gs_ring_info.lds_size; + aco_info->is_trap_handler_shader = radv_args->is_trap_handler_shader; } #define ASSIGN_VS_STATE_FIELD(x) aco_info->state.x = radv->state->x diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 47c9e1a0bde..09c5f9071c3 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -2388,7 +2388,7 @@ shader_compile(struct radv_device *device, struct nir_shader *const *shaders, in struct aco_shader_info ac_info; struct aco_compiler_options ac_opts; radv_aco_convert_opts(&ac_opts, &options, args); - radv_aco_convert_shader_info(&ac_info, info); + radv_aco_convert_shader_info(&ac_info, info, args); aco_compile_shader(&ac_opts, &ac_info, shader_count, shaders, args, &radv_aco_build_shader_binary, (void **)&binary); } @@ -2542,7 +2542,7 @@ radv_create_vs_prolog(struct radv_device *device, const struct radv_vs_prolog_ke struct aco_shader_info ac_info; struct aco_vs_prolog_key ac_key; struct aco_compiler_options ac_opts; - radv_aco_convert_shader_info(&ac_info, &info); + radv_aco_convert_shader_info(&ac_info, &info, &args); radv_aco_convert_opts(&ac_opts, &options, &args); radv_aco_convert_vs_prolog_key(&ac_key, key); aco_compile_vs_prolog(&ac_opts, &ac_info, &ac_key, &args, &radv_aco_build_shader_part, @@ -2607,7 +2607,7 @@ radv_create_ps_epilog(struct radv_device *device, const struct radv_ps_epilog_ke struct aco_shader_info ac_info; struct aco_ps_epilog_key ac_key; struct aco_compiler_options ac_opts; - radv_aco_convert_shader_info(&ac_info, &info); + radv_aco_convert_shader_info(&ac_info, &info, &args); radv_aco_convert_opts(&ac_opts, &options, &args); radv_aco_convert_ps_epilog_key(&ac_key, key); aco_compile_ps_epilog(&ac_opts, &ac_info, &ac_key, &args, &radv_aco_build_shader_part,