From 978220c99ab0c43a2786d62fb0872d51f3b7a854 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Thu, 22 Sep 2022 21:47:49 +0800 Subject: [PATCH] aco, radv: Add load_grid_size_from_user_sgpr to aco options. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit v2 by Timur Kristóf: - Rebase this patch. Signed-off-by: Qiang Yu Reviewed-by: Timur Kristóf Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 2 +- src/amd/compiler/aco_shader_info.h | 1 + src/amd/vulkan/radv_aco_shader_info.h | 5 ++++- src/amd/vulkan/radv_shader.c | 6 +++--- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 7e02cfd..c358e0c 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -8317,7 +8317,7 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr) case nir_intrinsic_scoped_barrier: emit_scoped_barrier(ctx, instr); break; case nir_intrinsic_load_num_workgroups: { Temp dst = get_ssa_temp(ctx, &instr->dest.ssa); - if (ctx->args->load_grid_size_from_user_sgpr) { + if (ctx->options->load_grid_size_from_user_sgpr) { bld.copy(Definition(dst), get_arg(ctx, ctx->args->ac.num_work_groups)); } else { Temp addr = get_arg(ctx, ctx->args->ac.num_work_groups); diff --git a/src/amd/compiler/aco_shader_info.h b/src/amd/compiler/aco_shader_info.h index a3f1872..21d8115 100644 --- a/src/amd/compiler/aco_shader_info.h +++ b/src/amd/compiler/aco_shader_info.h @@ -172,6 +172,7 @@ struct aco_compiler_options { bool record_ir; bool record_stats; bool has_ls_vgpr_init_bug; + bool load_grid_size_from_user_sgpr; uint8_t enable_mrt_output_nan_fixup; bool wgp_mode; enum radeon_family family; diff --git a/src/amd/vulkan/radv_aco_shader_info.h b/src/amd/vulkan/radv_aco_shader_info.h index 02ca932..65dd376 100644 --- a/src/amd/vulkan/radv_aco_shader_info.h +++ b/src/amd/vulkan/radv_aco_shader_info.h @@ -141,7 +141,8 @@ radv_aco_convert_pipe_key(struct aco_stage_input *aco_info, static inline void radv_aco_convert_opts(struct aco_compiler_options *aco_info, - const struct radv_nir_compiler_options *radv) + const struct radv_nir_compiler_options *radv, + const struct radv_shader_args *radv_args) { radv_aco_convert_pipe_key(&aco_info->key, &radv->key); ASSIGN_FIELD(robust_buffer_access); @@ -157,6 +158,8 @@ radv_aco_convert_opts(struct aco_compiler_options *aco_info, ASSIGN_FIELD(address32_hi); ASSIGN_FIELD(debug.func); ASSIGN_FIELD(debug.private_data); + ASSIGN_FIELD(debug.private_data); + aco_info->load_grid_size_from_user_sgpr = radv_args->load_grid_size_from_user_sgpr; } #undef ASSIGN_VS_STATE_FIELD #undef ASSIGN_VS_STATE_FIELD_CP diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 4fd2895..47c9e1a 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -2387,7 +2387,7 @@ shader_compile(struct radv_device *device, struct nir_shader *const *shaders, in } else { struct aco_shader_info ac_info; struct aco_compiler_options ac_opts; - radv_aco_convert_opts(&ac_opts, &options); + radv_aco_convert_opts(&ac_opts, &options, args); radv_aco_convert_shader_info(&ac_info, info); aco_compile_shader(&ac_opts, &ac_info, shader_count, shaders, args, &radv_aco_build_shader_binary, (void **)&binary); } @@ -2543,7 +2543,7 @@ radv_create_vs_prolog(struct radv_device *device, const struct radv_vs_prolog_ke struct aco_vs_prolog_key ac_key; struct aco_compiler_options ac_opts; radv_aco_convert_shader_info(&ac_info, &info); - radv_aco_convert_opts(&ac_opts, &options); + 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, (void **)&binary); @@ -2608,7 +2608,7 @@ radv_create_ps_epilog(struct radv_device *device, const struct radv_ps_epilog_ke struct aco_ps_epilog_key ac_key; struct aco_compiler_options ac_opts; radv_aco_convert_shader_info(&ac_info, &info); - radv_aco_convert_opts(&ac_opts, &options); + 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, (void **)&binary); -- 2.7.4