diff --git a/src/gallium/frontends/lavapipe/lvp_descriptor_set.c b/src/gallium/frontends/lavapipe/lvp_descriptor_set.c index 42a199ae07b..697107bd3ce 100644 --- a/src/gallium/frontends/lavapipe/lvp_descriptor_set.c +++ b/src/gallium/frontends/lavapipe/lvp_descriptor_set.c @@ -625,11 +625,12 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSetWithTemplate(VkDevice _device, struct lvp_descriptor *desc = &set->descriptors[bind_layout->descriptor_index]; for (j = 0; j < entry->descriptorCount; ++j) { + unsigned idx = j + entry->dstArrayElement; switch (entry->descriptorType) { case VK_DESCRIPTOR_TYPE_SAMPLER: { LVP_FROM_HANDLE(lvp_sampler, sampler, *(VkSampler *)pSrc); - desc[j] = (struct lvp_descriptor) { + desc[idx] = (struct lvp_descriptor) { .type = VK_DESCRIPTOR_TYPE_SAMPLER, .info.sampler = sampler, }; @@ -637,7 +638,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSetWithTemplate(VkDevice _device, } case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: { VkDescriptorImageInfo *info = (VkDescriptorImageInfo *)pSrc; - desc[j] = (struct lvp_descriptor) { + desc[idx] = (struct lvp_descriptor) { .type = entry->descriptorType, .info.iview = lvp_image_view_from_handle(info->imageView), .info.sampler = lvp_sampler_from_handle(info->sampler), @@ -649,7 +650,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSetWithTemplate(VkDevice _device, case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: { LVP_FROM_HANDLE(lvp_image_view, iview, ((VkDescriptorImageInfo *)pSrc)->imageView); - desc[j] = (struct lvp_descriptor) { + desc[idx] = (struct lvp_descriptor) { .type = entry->descriptorType, .info.iview = iview, }; @@ -659,7 +660,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSetWithTemplate(VkDevice _device, case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: { LVP_FROM_HANDLE(lvp_buffer_view, bview, *(VkBufferView *)pSrc); - desc[j] = (struct lvp_descriptor) { + desc[idx] = (struct lvp_descriptor) { .type = entry->descriptorType, .info.buffer_view = bview, }; @@ -671,7 +672,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSetWithTemplate(VkDevice _device, case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: { VkDescriptorBufferInfo *info = (VkDescriptorBufferInfo *)pSrc; - desc[j] = (struct lvp_descriptor) { + desc[idx] = (struct lvp_descriptor) { .type = entry->descriptorType, .info.offset = info->offset, .info.buffer = lvp_buffer_from_handle(info->buffer),