diff options
-rw-r--r-- | src/amd/vulkan/radv_descriptor_set.c | 3 | ||||
-rw-r--r-- | src/amd/vulkan/radv_descriptor_set.h | 1 | ||||
-rw-r--r-- | src/amd/vulkan/radv_shader_info.c | 4 |
3 files changed, 7 insertions, 1 deletions
diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c index 526bb77a553..30f982252bb 100644 --- a/src/amd/vulkan/radv_descriptor_set.c +++ b/src/amd/vulkan/radv_descriptor_set.c @@ -345,6 +345,7 @@ VkResult radv_CreatePipelineLayout( layout->num_sets = pCreateInfo->setLayoutCount; unsigned dynamic_offset_count = 0; + uint16_t dynamic_shader_stages = 0; _mesa_sha1_init(&ctx); @@ -356,6 +357,7 @@ VkResult radv_CreatePipelineLayout( layout->set[set].dynamic_offset_start = dynamic_offset_count; for (uint32_t b = 0; b < set_layout->binding_count; b++) { dynamic_offset_count += set_layout->binding[b].array_size * set_layout->binding[b].dynamic_offset_count; + dynamic_shader_stages |= set_layout->dynamic_shader_stages; if (set_layout->binding[b].immutable_samplers_offset) _mesa_sha1_update(&ctx, radv_immutable_samplers(set_layout, set_layout->binding + b), set_layout->binding[b].array_size * 4 * sizeof(uint32_t)); @@ -365,6 +367,7 @@ VkResult radv_CreatePipelineLayout( } layout->dynamic_offset_count = dynamic_offset_count; + layout->dynamic_shader_stages = dynamic_shader_stages; layout->push_constant_size = 0; for (unsigned i = 0; i < pCreateInfo->pushConstantRangeCount; ++i) { diff --git a/src/amd/vulkan/radv_descriptor_set.h b/src/amd/vulkan/radv_descriptor_set.h index d8431241fd9..7b13c6fb621 100644 --- a/src/amd/vulkan/radv_descriptor_set.h +++ b/src/amd/vulkan/radv_descriptor_set.h @@ -85,6 +85,7 @@ struct radv_pipeline_layout { uint32_t num_sets; uint32_t push_constant_size; uint32_t dynamic_offset_count; + uint16_t dynamic_shader_stages; unsigned char sha1[20]; }; diff --git a/src/amd/vulkan/radv_shader_info.c b/src/amd/vulkan/radv_shader_info.c index c2e005e63dd..7e5a3789af2 100644 --- a/src/amd/vulkan/radv_shader_info.c +++ b/src/amd/vulkan/radv_shader_info.c @@ -512,8 +512,10 @@ radv_nir_shader_info_pass(const struct nir_shader *nir, struct nir_function *func = (struct nir_function *)exec_list_get_head_const(&nir->functions); - if (options->layout && options->layout->dynamic_offset_count) + if (options->layout && options->layout->dynamic_offset_count && + (options->layout->dynamic_shader_stages & mesa_to_vk_shader_stage(nir->info.stage))) { info->loads_push_constants = true; + } nir_foreach_variable(variable, &nir->inputs) gather_info_input_decl(nir, variable, info); |