From 375c82a27e5a24d68308141bee9fd1e037501ead Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 17 Mar 2026 12:49:09 +0100 Subject: [PATCH] radv: cleanup functions that writes descriptors Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_descriptor_set.c | 23 ++++++------ .../vulkan/radv_descriptor_update_template.c | 25 ++++++------- src/amd/vulkan/radv_descriptors.h | 37 +++---------------- 3 files changed, 28 insertions(+), 57 deletions(-) diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c index d1e41420d52..d64f208a984 100644 --- a/src/amd/vulkan/radv_descriptor_set.c +++ b/src/amd/vulkan/radv_descriptor_set.c @@ -587,7 +587,7 @@ radv_update_descriptor_sets_impl(struct radv_device *device, struct radv_cmd_buf ptr += binding_layout->offset / 4; if (writeset->descriptorType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK) { - radv_write_block_descriptor(device, cmd_buffer, (uint8_t *)ptr + writeset->dstArrayElement, writeset); + radv_write_block_descriptor((uint8_t *)ptr + writeset->dstArrayElement, writeset); continue; } else if (writeset->descriptorType == VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR) { accel_structs = vk_find_struct_const(writeset->pNext, WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR); @@ -603,33 +603,32 @@ radv_update_descriptor_sets_impl(struct radv_device *device, struct radv_cmd_buf unsigned idx = writeset->dstArrayElement + j; idx += binding_layout->dynamic_offset_offset; assert(!(set->header.layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT)); - radv_write_dynamic_buffer_descriptor(device, set->header.dynamic_descriptors + idx, buffer_list, - writeset->pBufferInfo + j); + radv_write_dynamic_buffer_descriptor(set->header.dynamic_descriptors + idx, writeset->pBufferInfo + j); break; } case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - radv_write_buffer_descriptor_impl(device, cmd_buffer, ptr, buffer_list, writeset->pBufferInfo + j); + radv_write_buffer_descriptor_impl(device, ptr, writeset->pBufferInfo + j); break; case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - radv_write_texel_buffer_descriptor(device, cmd_buffer, ptr, buffer_list, writeset->pTexelBufferView[j]); + radv_write_texel_buffer_descriptor(ptr, writeset->pTexelBufferView[j]); break; case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - radv_write_image_descriptor_impl(device, cmd_buffer, RADV_STORAGE_IMAGE_DESC_SIZE, ptr, buffer_list, - writeset->descriptorType, writeset->pImageInfo + j); + radv_write_image_descriptor(ptr, RADV_STORAGE_IMAGE_DESC_SIZE, writeset->descriptorType, + writeset->pImageInfo + j); break; case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - radv_write_image_descriptor_impl(device, cmd_buffer, radv_get_sampled_image_desc_size(pdev), ptr, - buffer_list, writeset->descriptorType, writeset->pImageInfo + j); + radv_write_image_descriptor(ptr, radv_get_sampled_image_desc_size(pdev), writeset->descriptorType, + writeset->pImageInfo + j); break; case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: { if (binding_layout->has_ycbcr_sampler) { - radv_write_image_descriptor_ycbcr_impl(device, cmd_buffer, ptr, buffer_list, writeset->pImageInfo + j); + radv_write_image_descriptor_ycbcr(device, ptr, writeset->pImageInfo + j); } else { - radv_write_combined_image_sampler_descriptor(device, cmd_buffer, ptr, buffer_list, - writeset->descriptorType, writeset->pImageInfo + j, + radv_write_combined_image_sampler_descriptor(device, ptr, writeset->descriptorType, + writeset->pImageInfo + j, !binding_layout->immutable_samplers_offset); } diff --git a/src/amd/vulkan/radv_descriptor_update_template.c b/src/amd/vulkan/radv_descriptor_update_template.c index 63bb6c6772e..f5a26ffa205 100644 --- a/src/amd/vulkan/radv_descriptor_update_template.c +++ b/src/amd/vulkan/radv_descriptor_update_template.c @@ -140,37 +140,34 @@ radv_update_descriptor_set_with_template_impl(struct radv_device *device, struct case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: { const unsigned idx = templ->entry[i].dst_offset + j; assert(!(set->header.layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT)); - radv_write_dynamic_buffer_descriptor(device, set->header.dynamic_descriptors + idx, buffer_list, + radv_write_dynamic_buffer_descriptor(set->header.dynamic_descriptors + idx, (struct VkDescriptorBufferInfo *)pSrc); break; } case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: - radv_write_buffer_descriptor_impl(device, cmd_buffer, pDst, buffer_list, - (struct VkDescriptorBufferInfo *)pSrc); + radv_write_buffer_descriptor_impl(device, pDst, (struct VkDescriptorBufferInfo *)pSrc); break; case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: - radv_write_texel_buffer_descriptor(device, cmd_buffer, pDst, buffer_list, *(VkBufferView *)pSrc); + radv_write_texel_buffer_descriptor(pDst, *(VkBufferView *)pSrc); break; case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: - radv_write_image_descriptor_impl(device, cmd_buffer, RADV_STORAGE_IMAGE_DESC_SIZE, pDst, buffer_list, - templ->entry[i].descriptor_type, (struct VkDescriptorImageInfo *)pSrc); + radv_write_image_descriptor(pDst, RADV_STORAGE_IMAGE_DESC_SIZE, templ->entry[i].descriptor_type, + (struct VkDescriptorImageInfo *)pSrc); break; case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - radv_write_image_descriptor_impl(device, cmd_buffer, radv_get_sampled_image_desc_size(pdev), pDst, - buffer_list, templ->entry[i].descriptor_type, - (struct VkDescriptorImageInfo *)pSrc); + radv_write_image_descriptor(pDst, radv_get_sampled_image_desc_size(pdev), templ->entry[i].descriptor_type, + (struct VkDescriptorImageInfo *)pSrc); break; case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: { if (templ->entry[i].has_ycbcr_sampler) { - radv_write_image_descriptor_ycbcr_impl(device, cmd_buffer, pDst, buffer_list, - (struct VkDescriptorImageInfo *)pSrc); + radv_write_image_descriptor_ycbcr(device, pDst, (struct VkDescriptorImageInfo *)pSrc); } else { - radv_write_combined_image_sampler_descriptor( - device, cmd_buffer, pDst, buffer_list, templ->entry[i].descriptor_type, - (struct VkDescriptorImageInfo *)pSrc, templ->entry[i].has_sampler); + radv_write_combined_image_sampler_descriptor(device, pDst, templ->entry[i].descriptor_type, + (struct VkDescriptorImageInfo *)pSrc, + templ->entry[i].has_sampler); } if (cmd_buffer && templ->entry[i].immutable_samplers) { diff --git a/src/amd/vulkan/radv_descriptors.h b/src/amd/vulkan/radv_descriptors.h index 2d2d5e5f8a2..1f012d864b1 100644 --- a/src/amd/vulkan/radv_descriptors.h +++ b/src/amd/vulkan/radv_descriptors.h @@ -25,15 +25,12 @@ bool radv_mutable_descriptor_type_size_alignment(const struct radv_device *devic uint64_t *out_align); static ALWAYS_INLINE void -radv_write_texel_buffer_descriptor(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer, unsigned *dst, - struct radeon_winsys_bo **buffer_list, const VkBufferView _buffer_view) +radv_write_texel_buffer_descriptor(unsigned *dst, const VkBufferView _buffer_view) { VK_FROM_HANDLE(radv_buffer_view, buffer_view, _buffer_view); if (!buffer_view) { memset(dst, 0, RADV_BUFFER_DESC_SIZE); - if (!cmd_buffer) - *buffer_list = NULL; return; } @@ -58,8 +55,7 @@ radv_write_buffer_descriptor(struct radv_device *device, unsigned *dst, uint64_t } static ALWAYS_INLINE void -radv_write_buffer_descriptor_impl(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer, unsigned *dst, - struct radeon_winsys_bo **buffer_list, const VkDescriptorBufferInfo *buffer_info) +radv_write_buffer_descriptor_impl(struct radv_device *device, unsigned *dst, const VkDescriptorBufferInfo *buffer_info) { VK_FROM_HANDLE(radv_buffer, buffer, buffer_info->buffer); uint64_t va = 0, range = 0; @@ -75,8 +71,7 @@ radv_write_buffer_descriptor_impl(struct radv_device *device, struct radv_cmd_bu } static ALWAYS_INLINE void -radv_write_block_descriptor(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer, void *dst, - const VkWriteDescriptorSet *writeset) +radv_write_block_descriptor(void *dst, const VkWriteDescriptorSet *writeset) { const VkWriteDescriptorSetInlineUniformBlock *inline_ub = vk_find_struct_const(writeset->pNext, WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK); @@ -85,15 +80,13 @@ radv_write_block_descriptor(struct radv_device *device, struct radv_cmd_buffer * } static ALWAYS_INLINE void -radv_write_dynamic_buffer_descriptor(struct radv_device *device, struct radv_descriptor_range *range, - struct radeon_winsys_bo **buffer_list, const VkDescriptorBufferInfo *buffer_info) +radv_write_dynamic_buffer_descriptor(struct radv_descriptor_range *range, const VkDescriptorBufferInfo *buffer_info) { VK_FROM_HANDLE(radv_buffer, buffer, buffer_info->buffer); unsigned size; if (!buffer) { range->va = 0; - *buffer_list = NULL; return; } @@ -108,8 +101,6 @@ radv_write_dynamic_buffer_descriptor(struct radv_device *device, struct radv_des range->va = vk_buffer_address(&buffer->vk, buffer_info->offset); range->size = size; - - *buffer_list = buffer->bo; } static ALWAYS_INLINE void @@ -147,14 +138,6 @@ radv_write_image_descriptor(unsigned *dst, unsigned size, VkDescriptorType descr } } -static ALWAYS_INLINE void -radv_write_image_descriptor_impl(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer, unsigned size, - unsigned *dst, struct radeon_winsys_bo **buffer_list, VkDescriptorType descriptor_type, - const VkDescriptorImageInfo *image_info) -{ - radv_write_image_descriptor(dst, size, descriptor_type, image_info); -} - static ALWAYS_INLINE void radv_write_image_descriptor_ycbcr(struct radv_device *device, unsigned *dst, const VkDescriptorImageInfo *image_info) { @@ -179,13 +162,6 @@ radv_write_image_descriptor_ycbcr(struct radv_device *device, unsigned *dst, con } } -static ALWAYS_INLINE void -radv_write_image_descriptor_ycbcr_impl(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer, unsigned *dst, - struct radeon_winsys_bo **buffer_list, const VkDescriptorImageInfo *image_info) -{ - radv_write_image_descriptor_ycbcr(device, dst, image_info); -} - static ALWAYS_INLINE void radv_write_sampler_descriptor(unsigned *dst, VkSampler _sampler) { @@ -194,15 +170,14 @@ radv_write_sampler_descriptor(unsigned *dst, VkSampler _sampler) } static ALWAYS_INLINE void -radv_write_combined_image_sampler_descriptor(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer, - unsigned *dst, struct radeon_winsys_bo **buffer_list, +radv_write_combined_image_sampler_descriptor(struct radv_device *device, unsigned *dst, VkDescriptorType descriptor_type, const VkDescriptorImageInfo *image_info, bool has_sampler) { const struct radv_physical_device *pdev = radv_device_physical(device); const uint32_t desc_size = radv_get_sampled_image_desc_size(pdev); - radv_write_image_descriptor_impl(device, cmd_buffer, desc_size, dst, buffer_list, descriptor_type, image_info); + radv_write_image_descriptor(dst, desc_size, descriptor_type, image_info); /* copy over sampler state */ if (has_sampler) { const uint32_t sampler_offset = radv_get_combined_image_sampler_offset(pdev);