From 730ba8322f8bb55d3316cb35e3861f6181b38de4 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 24 Apr 2024 10:44:40 +0200 Subject: [PATCH] radv: fix incorrect buffer_list advance for multi-planar descriptors If we have an array of multi-planar descriptors, buffer_list was incorrectly incremented and this could have overwritten some BO entries. In practice, this situation should be very rare because most of the applications enable the global BO list. Cc: mesa-stable Closes: #10559 Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_descriptor_set.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c index acafbd86e21..83e24d87d6d 100644 --- a/src/amd/vulkan/radv_descriptor_set.c +++ b/src/amd/vulkan/radv_descriptor_set.c @@ -1295,7 +1295,7 @@ radv_update_descriptor_sets_impl(struct radv_device *device, struct radv_cmd_buf ptr += binding_layout->size * writeset->dstArrayElement / 4; buffer_list += binding_layout->buffer_offset; - buffer_list += writeset->dstArrayElement; + buffer_list += writeset->dstArrayElement * radv_descriptor_type_buffer_count(writeset->descriptorType); for (j = 0; j < writeset->descriptorCount; ++j) { switch (writeset->descriptorType) { case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: @@ -1354,7 +1354,7 @@ radv_update_descriptor_sets_impl(struct radv_device *device, struct radv_cmd_buf break; } ptr += binding_layout->size / 4; - ++buffer_list; + buffer_list += radv_descriptor_type_buffer_count(writeset->descriptorType); } } @@ -1632,7 +1632,8 @@ radv_update_descriptor_set_with_template_impl(struct radv_device *device, struct } pSrc += templ->entry[i].src_stride; pDst += templ->entry[i].dst_stride; - ++buffer_list; + + buffer_list += radv_descriptor_type_buffer_count(templ->entry[i].descriptor_type); } } }