diff --git a/src/amd/vulkan/radv_pipeline_compute.c b/src/amd/vulkan/radv_pipeline_compute.c index c61780a5c9d..cfed544b8bc 100644 --- a/src/amd/vulkan/radv_pipeline_compute.c +++ b/src/amd/vulkan/radv_pipeline_compute.c @@ -84,7 +84,7 @@ radv_compute_pipeline_init(struct radv_compute_pipeline *pipeline, const struct pipeline->base.need_indirect_descriptors |= radv_shader_need_indirect_descriptors(shader); pipeline->base.need_push_constants_upload |= radv_shader_need_push_constants_upload(shader); - pipeline->base.push_constant_size = layout->push_constant_size; + pipeline->base.push_constant_size = align(shader->info.push_constant_size, 4); pipeline->base.dynamic_offset_count = layout->dynamic_offset_count; } diff --git a/src/amd/vulkan/radv_pipeline_graphics.c b/src/amd/vulkan/radv_pipeline_graphics.c index 8c064d96f78..8938237ce71 100644 --- a/src/amd/vulkan/radv_pipeline_graphics.c +++ b/src/amd/vulkan/radv_pipeline_graphics.c @@ -3490,7 +3490,17 @@ radv_graphics_pipeline_init(struct radv_graphics_pipeline *pipeline, struct radv pipeline->uses_vrs_attachment = radv_pipeline_uses_vrs_attachment(pipeline, &gfx_state.vk); pipeline->uses_vrs_coarse_shading = !pipeline->uses_vrs && gfx103_pipeline_vrs_coarse_shading(device, pipeline); - pipeline->base.push_constant_size = gfx_state.layout.push_constant_size; + uint32_t push_constant_size = 0; + for (uint32_t i = 0; i < MESA_VULKAN_SHADER_STAGES; i++) { + const struct radv_shader *shader = pipeline->base.shaders[i]; + + if (!shader) + continue; + + push_constant_size = MAX2(push_constant_size, shader->info.push_constant_size); + } + + pipeline->base.push_constant_size = align(push_constant_size, 4); pipeline->base.dynamic_offset_count = gfx_state.layout.dynamic_offset_count; const VkGraphicsPipelineCreateInfoRADV *radv_info =