mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
radv: split descriptor set and descriptor utils in separate files
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35732>
This commit is contained in:
parent
7425b5a82f
commit
989162e67a
8 changed files with 210 additions and 206 deletions
|
|
@ -112,6 +112,7 @@ libradv_files = files(
|
|||
'radv_device.h',
|
||||
'radv_device_memory.c',
|
||||
'radv_device_memory.h',
|
||||
'radv_descriptors.c',
|
||||
'radv_descriptors.h',
|
||||
'radv_descriptor_pool.c',
|
||||
'radv_descriptor_pool.h',
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#include "nir.h"
|
||||
#include "nir_builder.h"
|
||||
#include "radv_descriptor_set.h"
|
||||
#include "radv_descriptors.h"
|
||||
#include "radv_device.h"
|
||||
#include "radv_nir.h"
|
||||
#include "radv_physical_device.h"
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
#include "radv_descriptor_pool.h"
|
||||
#include "radv_buffer.h"
|
||||
#include "radv_descriptor_set.h"
|
||||
#include "radv_descriptors.h"
|
||||
#include "radv_device.h"
|
||||
#include "radv_entrypoints.h"
|
||||
#include "radv_physical_device.h"
|
||||
|
|
|
|||
|
|
@ -4,117 +4,15 @@
|
|||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "ac_descriptors.h"
|
||||
#include "radv_buffer.h"
|
||||
#include "radv_buffer_view.h"
|
||||
#include "radv_cmd_buffer.h"
|
||||
#include "radv_descriptor_pool.h"
|
||||
#include "radv_descriptor_set.h"
|
||||
#include "radv_descriptors.h"
|
||||
#include "radv_cmd_buffer.h"
|
||||
#include "radv_descriptor_pool.h"
|
||||
#include "radv_entrypoints.h"
|
||||
#include "radv_image.h"
|
||||
#include "radv_image_view.h"
|
||||
#include "radv_rmv.h"
|
||||
#include "radv_sampler.h"
|
||||
#include "sid.h"
|
||||
#include "vk_acceleration_structure.h"
|
||||
#include "vk_descriptors.h"
|
||||
#include "vk_format.h"
|
||||
#include "vk_log.h"
|
||||
#include "vk_util.h"
|
||||
#include "vk_ycbcr_conversion.h"
|
||||
|
||||
static_assert(RADV_SAMPLER_DESC_SIZE == 16 && RADV_BUFFER_DESC_SIZE == 16 && RADV_ACCEL_STRUCT_DESC_SIZE == 16,
|
||||
"Sampler/buffer/acceleration structure descriptor sizes must match.");
|
||||
|
||||
unsigned
|
||||
radv_descriptor_type_buffer_count(VkDescriptorType type)
|
||||
{
|
||||
switch (type) {
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK:
|
||||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
|
||||
return 0;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_MUTABLE_EXT:
|
||||
return 3;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
radv_descriptor_alignment(VkDescriptorType type)
|
||||
{
|
||||
switch (type) {
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK:
|
||||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
|
||||
return 16;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_MUTABLE_EXT:
|
||||
return 32;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
radv_mutable_descriptor_type_size_alignment(const struct radv_device *device,
|
||||
const VkMutableDescriptorTypeListEXT *list, uint64_t *out_size,
|
||||
uint64_t *out_align)
|
||||
{
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
uint32_t max_size = 0;
|
||||
uint32_t max_align = 0;
|
||||
|
||||
for (uint32_t i = 0; i < list->descriptorTypeCount; i++) {
|
||||
uint32_t size = 0;
|
||||
uint32_t align = radv_descriptor_alignment(list->pDescriptorTypes[i]);
|
||||
|
||||
switch (list->pDescriptorTypes[i]) {
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
size = RADV_BUFFER_DESC_SIZE;
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
size = RADV_SAMPLER_DESC_SIZE;
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
size = RADV_STORAGE_IMAGE_DESC_SIZE;
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
size = radv_get_sampled_image_desc_size(pdev);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
max_size = MAX2(max_size, size);
|
||||
max_align = MAX2(max_align, align);
|
||||
}
|
||||
|
||||
*out_size = max_size;
|
||||
*out_align = max_align;
|
||||
return true;
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
radv_CreateDescriptorSetLayout(VkDevice _device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo,
|
||||
|
|
@ -867,94 +765,3 @@ radv_cmd_update_descriptor_sets(struct radv_device *device, struct radv_cmd_buff
|
|||
radv_update_descriptor_sets_impl(device, cmd_buffer, dstSetOverride, descriptorWriteCount, pDescriptorWrites,
|
||||
descriptorCopyCount, pDescriptorCopies);
|
||||
}
|
||||
|
||||
/* VK_EXT_descriptor_buffer */
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_GetDescriptorSetLayoutSizeEXT(VkDevice device, VkDescriptorSetLayout layout, VkDeviceSize *pLayoutSizeInBytes)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_descriptor_set_layout, set_layout, layout);
|
||||
*pLayoutSizeInBytes = set_layout->size;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_GetDescriptorSetLayoutBindingOffsetEXT(VkDevice device, VkDescriptorSetLayout layout, uint32_t binding,
|
||||
VkDeviceSize *pOffset)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_descriptor_set_layout, set_layout, layout);
|
||||
*pOffset = set_layout->binding[binding].offset;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_GetDescriptorEXT(VkDevice _device, const VkDescriptorGetInfoEXT *pDescriptorInfo, size_t dataSize,
|
||||
void *pDescriptor)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_device, device, _device);
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
|
||||
switch (pDescriptorInfo->type) {
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER: {
|
||||
radv_write_sampler_descriptor(pDescriptor, *pDescriptorInfo->data.pSampler);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
|
||||
if (pDescriptorInfo->data.pCombinedImageSampler) {
|
||||
VK_FROM_HANDLE(radv_sampler, sampler, pDescriptorInfo->data.pCombinedImageSampler->sampler);
|
||||
|
||||
if (sampler->vk.ycbcr_conversion) {
|
||||
radv_write_image_descriptor_ycbcr(pDescriptor, pDescriptorInfo->data.pCombinedImageSampler);
|
||||
} else {
|
||||
radv_write_image_descriptor(pDescriptor, 64, pDescriptorInfo->type,
|
||||
pDescriptorInfo->data.pCombinedImageSampler);
|
||||
radv_write_sampler_descriptor((uint32_t *)pDescriptor + 20,
|
||||
pDescriptorInfo->data.pCombinedImageSampler->sampler);
|
||||
}
|
||||
} else {
|
||||
memset(pDescriptor, 0, RADV_COMBINED_IMAGE_SAMPLER_DESC_SIZE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: {
|
||||
const VkDescriptorImageInfo *image_info = pDescriptorInfo->type == VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
|
||||
? pDescriptorInfo->data.pInputAttachmentImage
|
||||
: pDescriptorInfo->data.pSampledImage;
|
||||
|
||||
radv_write_image_descriptor(pDescriptor, radv_get_sampled_image_desc_size(pdev), pDescriptorInfo->type,
|
||||
image_info);
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
radv_write_image_descriptor(pDescriptor, RADV_STORAGE_IMAGE_DESC_SIZE, pDescriptorInfo->type,
|
||||
pDescriptorInfo->data.pStorageImage);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: {
|
||||
const VkDescriptorAddressInfoEXT *addr_info = pDescriptorInfo->type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
|
||||
? pDescriptorInfo->data.pUniformBuffer
|
||||
: pDescriptorInfo->data.pStorageBuffer;
|
||||
|
||||
radv_write_buffer_descriptor(device, pDescriptor, addr_info ? addr_info->address : 0,
|
||||
addr_info ? addr_info->range : 0);
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: {
|
||||
const VkDescriptorAddressInfoEXT *addr_info = pDescriptorInfo->type == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
|
||||
? pDescriptorInfo->data.pUniformTexelBuffer
|
||||
: pDescriptorInfo->data.pStorageTexelBuffer;
|
||||
|
||||
if (addr_info && addr_info->address) {
|
||||
radv_make_texel_buffer_descriptor(device, addr_info->address, addr_info->format, addr_info->range,
|
||||
pDescriptor);
|
||||
} else {
|
||||
memset(pDescriptor, 0, RADV_BUFFER_DESC_SIZE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
|
||||
radv_write_accel_struct_descriptor(device, pDescriptor, pDescriptorInfo->data.accelerationStructure);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
unreachable("invalid descriptor type");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,10 @@
|
|||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
struct radv_cmd_buffer;
|
||||
struct radv_descriptor_pool;
|
||||
struct radv_device;
|
||||
|
||||
struct radv_descriptor_set_binding_layout {
|
||||
VkDescriptorType type;
|
||||
|
||||
|
|
@ -122,23 +126,12 @@ radv_immutable_ycbcr_samplers(const struct radv_descriptor_set_layout *set, unsi
|
|||
return (const struct vk_ycbcr_conversion_state *)((const char *)set + offsets[binding_index]);
|
||||
}
|
||||
|
||||
struct radv_device;
|
||||
struct radv_cmd_buffer;
|
||||
|
||||
void radv_cmd_update_descriptor_sets(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
|
||||
VkDescriptorSet overrideSet, uint32_t descriptorWriteCount,
|
||||
const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount,
|
||||
const VkCopyDescriptorSet *pDescriptorCopies);
|
||||
|
||||
struct radv_descriptor_pool;
|
||||
|
||||
void radv_descriptor_set_destroy(struct radv_device *device, struct radv_descriptor_pool *pool,
|
||||
struct radv_descriptor_set *set, bool free_bo);
|
||||
|
||||
unsigned radv_descriptor_type_buffer_count(VkDescriptorType type);
|
||||
|
||||
bool radv_mutable_descriptor_type_size_alignment(const struct radv_device *device,
|
||||
const VkMutableDescriptorTypeListEXT *list, uint64_t *out_size,
|
||||
uint64_t *out_align);
|
||||
|
||||
#endif /* RADV_DESCRIPTOR_SET_H */
|
||||
|
|
|
|||
192
src/amd/vulkan/radv_descriptors.c
Normal file
192
src/amd/vulkan/radv_descriptors.c
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
/*
|
||||
* Copyright © 2016 Red Hat.
|
||||
* Copyright © 2016 Bas Nieuwenhuizen
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "radv_descriptors.h"
|
||||
#include "radv_buffer.h"
|
||||
#include "radv_buffer_view.h"
|
||||
#include "radv_cmd_buffer.h"
|
||||
#include "radv_entrypoints.h"
|
||||
#include "radv_image_view.h"
|
||||
#include "radv_sampler.h"
|
||||
|
||||
static_assert(RADV_SAMPLER_DESC_SIZE == 16 && RADV_BUFFER_DESC_SIZE == 16 && RADV_ACCEL_STRUCT_DESC_SIZE == 16,
|
||||
"Sampler/buffer/acceleration structure descriptor sizes must match.");
|
||||
|
||||
unsigned
|
||||
radv_descriptor_type_buffer_count(VkDescriptorType type)
|
||||
{
|
||||
switch (type) {
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK:
|
||||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
|
||||
return 0;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_MUTABLE_EXT:
|
||||
return 3;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t
|
||||
radv_descriptor_alignment(VkDescriptorType type)
|
||||
{
|
||||
switch (type) {
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK:
|
||||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
|
||||
return 16;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
|
||||
case VK_DESCRIPTOR_TYPE_MUTABLE_EXT:
|
||||
return 32;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
radv_mutable_descriptor_type_size_alignment(const struct radv_device *device,
|
||||
const VkMutableDescriptorTypeListEXT *list, uint64_t *out_size,
|
||||
uint64_t *out_align)
|
||||
{
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
uint32_t max_size = 0;
|
||||
uint32_t max_align = 0;
|
||||
|
||||
for (uint32_t i = 0; i < list->descriptorTypeCount; i++) {
|
||||
uint32_t size = 0;
|
||||
uint32_t align = radv_descriptor_alignment(list->pDescriptorTypes[i]);
|
||||
|
||||
switch (list->pDescriptorTypes[i]) {
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
size = RADV_BUFFER_DESC_SIZE;
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
size = RADV_SAMPLER_DESC_SIZE;
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
size = RADV_STORAGE_IMAGE_DESC_SIZE;
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
size = radv_get_sampled_image_desc_size(pdev);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
max_size = MAX2(max_size, size);
|
||||
max_align = MAX2(max_align, align);
|
||||
}
|
||||
|
||||
*out_size = max_size;
|
||||
*out_align = max_align;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* VK_EXT_descriptor_buffer */
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_GetDescriptorSetLayoutSizeEXT(VkDevice device, VkDescriptorSetLayout layout, VkDeviceSize *pLayoutSizeInBytes)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_descriptor_set_layout, set_layout, layout);
|
||||
*pLayoutSizeInBytes = set_layout->size;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_GetDescriptorSetLayoutBindingOffsetEXT(VkDevice device, VkDescriptorSetLayout layout, uint32_t binding,
|
||||
VkDeviceSize *pOffset)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_descriptor_set_layout, set_layout, layout);
|
||||
*pOffset = set_layout->binding[binding].offset;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_GetDescriptorEXT(VkDevice _device, const VkDescriptorGetInfoEXT *pDescriptorInfo, size_t dataSize,
|
||||
void *pDescriptor)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_device, device, _device);
|
||||
const struct radv_physical_device *pdev = radv_device_physical(device);
|
||||
|
||||
switch (pDescriptorInfo->type) {
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER: {
|
||||
radv_write_sampler_descriptor(pDescriptor, *pDescriptorInfo->data.pSampler);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
|
||||
if (pDescriptorInfo->data.pCombinedImageSampler) {
|
||||
VK_FROM_HANDLE(radv_sampler, sampler, pDescriptorInfo->data.pCombinedImageSampler->sampler);
|
||||
|
||||
if (sampler->vk.ycbcr_conversion) {
|
||||
radv_write_image_descriptor_ycbcr(pDescriptor, pDescriptorInfo->data.pCombinedImageSampler);
|
||||
} else {
|
||||
radv_write_image_descriptor(pDescriptor, 64, pDescriptorInfo->type,
|
||||
pDescriptorInfo->data.pCombinedImageSampler);
|
||||
radv_write_sampler_descriptor((uint32_t *)pDescriptor + 20,
|
||||
pDescriptorInfo->data.pCombinedImageSampler->sampler);
|
||||
}
|
||||
} else {
|
||||
memset(pDescriptor, 0, RADV_COMBINED_IMAGE_SAMPLER_DESC_SIZE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: {
|
||||
const VkDescriptorImageInfo *image_info = pDescriptorInfo->type == VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
|
||||
? pDescriptorInfo->data.pInputAttachmentImage
|
||||
: pDescriptorInfo->data.pSampledImage;
|
||||
|
||||
radv_write_image_descriptor(pDescriptor, radv_get_sampled_image_desc_size(pdev), pDescriptorInfo->type,
|
||||
image_info);
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
radv_write_image_descriptor(pDescriptor, RADV_STORAGE_IMAGE_DESC_SIZE, pDescriptorInfo->type,
|
||||
pDescriptorInfo->data.pStorageImage);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: {
|
||||
const VkDescriptorAddressInfoEXT *addr_info = pDescriptorInfo->type == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
|
||||
? pDescriptorInfo->data.pUniformBuffer
|
||||
: pDescriptorInfo->data.pStorageBuffer;
|
||||
|
||||
radv_write_buffer_descriptor(device, pDescriptor, addr_info ? addr_info->address : 0,
|
||||
addr_info ? addr_info->range : 0);
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: {
|
||||
const VkDescriptorAddressInfoEXT *addr_info = pDescriptorInfo->type == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
|
||||
? pDescriptorInfo->data.pUniformTexelBuffer
|
||||
: pDescriptorInfo->data.pStorageTexelBuffer;
|
||||
|
||||
if (addr_info && addr_info->address) {
|
||||
radv_make_texel_buffer_descriptor(device, addr_info->address, addr_info->format, addr_info->range,
|
||||
pDescriptor);
|
||||
} else {
|
||||
memset(pDescriptor, 0, RADV_BUFFER_DESC_SIZE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
|
||||
radv_write_accel_struct_descriptor(device, pDescriptor, pDescriptorInfo->data.accelerationStructure);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
unreachable("invalid descriptor type");
|
||||
}
|
||||
}
|
||||
|
|
@ -16,6 +16,14 @@
|
|||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
unsigned radv_descriptor_type_buffer_count(VkDescriptorType type);
|
||||
|
||||
uint32_t radv_descriptor_alignment(VkDescriptorType type);
|
||||
|
||||
bool radv_mutable_descriptor_type_size_alignment(const struct radv_device *device,
|
||||
const VkMutableDescriptorTypeListEXT *list, uint64_t *out_size,
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include "util/u_atomic.h"
|
||||
#include "radv_cs.h"
|
||||
#include "radv_debug.h"
|
||||
#include "radv_descriptors.h"
|
||||
#include "radv_pipeline_rt.h"
|
||||
#include "radv_rmv.h"
|
||||
#include "radv_shader.h"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue