From 77f8436c62cfafcb86223a945c20a94532aad760 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Thu, 28 Nov 2024 12:57:16 +0000 Subject: [PATCH] radv: skip loading unused push constants Signed-off-by: Rhys Perry Reviewed-by: Georg Lehmann Part-of: --- src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c b/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c index 78032ca3c3b..1795e84f323 100644 --- a/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c +++ b/src/amd/vulkan/nir/radv_nir_apply_pipeline_layout.c @@ -365,9 +365,17 @@ load_push_constant(nir_builder *b, apply_layout_state *state, nir_intrinsic_inst const unsigned max_push_constant = sizeof(state->args->ac.inline_push_const_mask) * 8u; + nir_component_mask_t comps_read = nir_def_components_read(&intrin->def); + nir_def *data[NIR_MAX_VEC_COMPONENTS * 2]; unsigned num_loads = 0; for (unsigned start = 0; start < count;) { + if (!(comps_read & BITFIELD64_BIT(start >> (bit_size == 64 ? 1 : 0)))) { + data[num_loads++] = nir_undef(b, 1, 32); + start += 1; + continue; + } + /* Try to use inline push constants when possible. */ unsigned inline_idx = const_offset + start; if (const_offset != -1 && inline_idx < max_push_constant &&