From d43f50c00b8172abd0c9e934c3e193bdc85b5089 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 9 Jan 2018 18:09:43 +0100 Subject: [PATCH] amd/common: do not rely on the pipeline for the push constants logic It makes more sense to rely on nir_intrinsic_load_push_constant instead of the pipeline layout. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- src/amd/common/ac_nir_to_llvm.c | 6 +++--- src/amd/common/ac_shader_info.c | 10 +++++----- src/amd/common/ac_shader_info.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 34ab0a4a36e..840d27e7a8e 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -597,7 +597,7 @@ static void allocate_user_sgprs(struct nir_to_llvm_context *ctx, break; } - if (ctx->shader_info->info.needs_push_constants) + if (ctx->shader_info->info.loads_push_constants) user_sgpr_info->sgpr_count += 2; uint32_t remaining_sgprs = 16 - user_sgpr_info->sgpr_count; @@ -638,7 +638,7 @@ declare_global_input_sgprs(struct nir_to_llvm_context *ctx, add_array_arg(args, const_array(type, 32), desc_sets); } - if (ctx->shader_info->info.needs_push_constants) { + if (ctx->shader_info->info.loads_push_constants) { /* 1 for push constants and dynamic descriptors */ add_array_arg(args, type, &ctx->push_constants); } @@ -729,7 +729,7 @@ set_global_input_locs(struct nir_to_llvm_context *ctx, gl_shader_stage stage, ctx->shader_info->need_indirect_descriptor_sets = true; } - if (ctx->shader_info->info.needs_push_constants) { + if (ctx->shader_info->info.loads_push_constants) { set_loc_shader(ctx, AC_UD_PUSH_CONSTANTS, user_sgpr_idx, 2); } } diff --git a/src/amd/common/ac_shader_info.c b/src/amd/common/ac_shader_info.c index 27896a26bb4..443980c7d12 100644 --- a/src/amd/common/ac_shader_info.c +++ b/src/amd/common/ac_shader_info.c @@ -76,6 +76,9 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, struct ac_shader_info *info) case nir_intrinsic_load_primitive_id: info->uses_prim_id = true; break; + case nir_intrinsic_load_push_constant: + info->loads_push_constants = true; + break; case nir_intrinsic_vulkan_resource_index: info->desc_set_used_mask |= (1 << nir_intrinsic_desc_set(instr)); break; @@ -154,11 +157,8 @@ ac_nir_shader_info_pass(struct nir_shader *nir, { struct nir_function *func = (struct nir_function *)exec_list_get_head(&nir->functions); - info->needs_push_constants = false; - if ((options->layout->push_constant_size && - options->layout->push_constant_stages & (1 << nir->info.stage)) || - options->layout->dynamic_offset_count) - info->needs_push_constants = true; + if (options->layout->dynamic_offset_count) + info->loads_push_constants = true; nir_foreach_variable(variable, &nir->inputs) gather_info_input_decl(nir, options, variable, info); diff --git a/src/amd/common/ac_shader_info.h b/src/amd/common/ac_shader_info.h index 437859f8910..9c9a8473a4c 100644 --- a/src/amd/common/ac_shader_info.h +++ b/src/amd/common/ac_shader_info.h @@ -28,7 +28,7 @@ struct nir_shader; struct ac_nir_compiler_options; struct ac_shader_info { - bool needs_push_constants; + bool loads_push_constants; uint32_t desc_set_used_mask; bool needs_multiview_view_index; bool uses_invocation_id; -- 2.30.2