mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
radv: cleanup functions that writes descriptors
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40466>
This commit is contained in:
parent
b24c18667d
commit
375c82a27e
3 changed files with 28 additions and 57 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue