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 <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user