Module: Mesa Branch: main Commit: 487b9f77271fde69f51776a13152c26aa1971bca URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=487b9f77271fde69f51776a13152c26aa1971bca
Author: Mike Blumenkrantz <[email protected]> Date: Tue Sep 26 15:38:29 2023 -0400 zink: always clamp shader stage in descriptor handling otherwise KERNEL leaks through and explodes cc: mesa-stable Signed-off-by: Karol Herbst <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24839> --- src/gallium/drivers/zink/zink_descriptors.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index 04d4d261573..b7e0ded9ffc 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -313,7 +313,7 @@ init_db_template_entry(struct zink_screen *screen, struct zink_shader *shader, e unsigned idx, struct zink_descriptor_template *entry, unsigned *entry_idx) { int index = shader->bindings[type][idx].index; - gl_shader_stage stage = shader->info.stage; + gl_shader_stage stage = clamp_stage(&shader->info); entry->count = shader->bindings[type][idx].size; switch (shader->bindings[type][idx].type) { @@ -692,7 +692,7 @@ zink_descriptor_shader_init(struct zink_screen *screen, struct zink_shader *shad { VkDescriptorSetLayoutBinding bindings[ZINK_DESCRIPTOR_BASE_TYPES * ZINK_MAX_DESCRIPTORS_PER_TYPE]; unsigned num_bindings = 0; - VkShaderStageFlagBits stage_flags = mesa_to_vk_shader_stage(shader->info.stage); + VkShaderStageFlagBits stage_flags = mesa_to_vk_shader_stage(clamp_stage(&shader->info)); unsigned desc_set_size = shader->has_uniforms; for (unsigned i = 0; i < ZINK_DESCRIPTOR_BASE_TYPES; i++) @@ -709,7 +709,7 @@ zink_descriptor_shader_init(struct zink_screen *screen, struct zink_shader *shad binding->pImmutableSamplers = NULL; struct zink_descriptor_template *entry = &shader->precompile.db_template[num_bindings]; entry->count = 1; - entry->offset = offsetof(struct zink_context, di.db.ubos[shader->info.stage][0]); + entry->offset = offsetof(struct zink_context, di.db.ubos[clamp_stage(&shader->info)][0]); entry->stride = sizeof(VkDescriptorAddressInfoEXT); entry->db_size = screen->info.db_props.robustUniformBufferDescriptorSize; num_bindings++;
