From d6dd96e1c70d3c257d3d38775f3e3f05aad7a344 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Fri, 31 Oct 2025 14:14:58 +0100 Subject: [PATCH] lavapipe: Zero image null descriptors The size queries for images do not use function pointers so we need to be careful that width, height and depth are 0. cc: mesa-stable Reviewed-by: Dave Airlie Part-of: --- src/gallium/frontends/lavapipe/lvp_descriptor_set.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gallium/frontends/lavapipe/lvp_descriptor_set.c b/src/gallium/frontends/lavapipe/lvp_descriptor_set.c index baa2c60b531..a1a95184dd4 100644 --- a/src/gallium/frontends/lavapipe/lvp_descriptor_set.c +++ b/src/gallium/frontends/lavapipe/lvp_descriptor_set.c @@ -547,6 +547,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSets( desc[didx + p].functions = iview->planes[p].image_handle->functions; } } else { + memset(&desc[didx], 0, sizeof(desc[didx]) * bind_layout->stride); for (unsigned k = 0; k < bind_layout->stride; k++) desc[didx + k].functions = device->null_image_handle->functions; } @@ -577,6 +578,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSets( lp_jit_image_from_pipe(&desc[j].image, &bview->iv); desc[j].functions = bview->image_handle->functions; } else { + memset(&desc[j].image, 0, sizeof(desc[j].image)); desc[j].functions = device->null_image_handle->functions; } } @@ -846,6 +848,7 @@ lvp_descriptor_set_update_with_template(VkDevice _device, VkDescriptorSet descri desc[idx + p].functions = iview->planes[p].image_handle->functions; } } else { + memset(&desc[idx], 0, sizeof(desc[idx]) * bind_layout->stride); for (unsigned k = 0; k < bind_layout->stride; k++) desc[idx + k].functions = device->null_image_handle->functions; } @@ -872,6 +875,7 @@ lvp_descriptor_set_update_with_template(VkDevice _device, VkDescriptorSet descri lp_jit_image_from_pipe(&desc[idx].image, &bview->iv); desc[idx].functions = bview->image_handle->functions; } else { + memset(&desc[idx].image, 0, sizeof(desc[idx].image)); desc[idx].functions = device->null_image_handle->functions; } break; @@ -1073,8 +1077,9 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetDescriptorEXT( desc[p].functions = iview->planes[p].image_handle->functions; } } else { - unsigned plane_count = size / sizeof(struct lp_descriptor); + memset(desc, 0, size); + unsigned plane_count = size / sizeof(struct lp_descriptor); for (unsigned p = 0; p < plane_count; p++) desc[p].functions = device->null_image_handle->functions; } @@ -1087,6 +1092,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetDescriptorEXT( lp_jit_bindless_texture_buffer_from_bda(&desc->texture, (void*)(uintptr_t)bda->address); desc->functions = get_texture_handle_bda(device, bda->address, bda->range, pformat).functions; } else { + memset(desc, 0, size); desc->functions = device->null_texture_handle->functions; desc->texture.sampler_index = 0; } @@ -1099,6 +1105,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetDescriptorEXT( lp_jit_image_buffer_from_bda(&desc->image, (void *)(uintptr_t)bda->address, bda->range, pformat); desc->functions = get_image_handle_bda(device, bda->address, bda->range, pformat).functions; } else { + memset(desc, 0, size); desc->functions = device->null_image_handle->functions; } break;