From 9cc9b595f107018a9e9a6cdc753f06a124d6b30a Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Tue, 20 Sep 2022 20:20:00 +0300 Subject: [PATCH] turnip: Implement VK_EXT_mutable_descriptor_type Trivial promotion from VALVE, just rename enums and types. Signed-off-by: Danylo Piliaiev Part-of: --- docs/features.txt | 2 +- src/freedreno/vulkan/tu_descriptor_set.c | 24 ++++++++++++------------ src/freedreno/vulkan/tu_device.c | 7 ++++--- src/freedreno/vulkan/tu_pipeline.c | 4 ++-- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 1b5845b3183..b47bf4d66fa 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -615,7 +615,7 @@ Khronos extensions that are not part of any Vulkan version: VK_AMD_shader_trinary_minmax DONE (radv) VK_AMD_texture_gather_bias_lod DONE (radv) VK_ARM_rasterization_order_attachment_access DONE (lvp, tu) - VK_EXT_mutable_descriptor_type DONE (radv) + VK_EXT_mutable_descriptor_type DONE (radv, tu) OpenCL 1.0 -- all DONE: diff --git a/src/freedreno/vulkan/tu_descriptor_set.c b/src/freedreno/vulkan/tu_descriptor_set.c index ce6b9ebaa78..d9d4a051f8f 100644 --- a/src/freedreno/vulkan/tu_descriptor_set.c +++ b/src/freedreno/vulkan/tu_descriptor_set.c @@ -82,7 +82,7 @@ is_dynamic(VkDescriptorType type) static uint32_t mutable_descriptor_size(struct tu_device *dev, - const VkMutableDescriptorTypeListVALVE *list) + const VkMutableDescriptorTypeListEXT *list) { uint32_t max_size = 0; @@ -110,10 +110,10 @@ tu_CreateDescriptorSetLayout( vk_find_struct_const( pCreateInfo->pNext, DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO); - const VkMutableDescriptorTypeCreateInfoVALVE *mutable_info = + const VkMutableDescriptorTypeCreateInfoEXT *mutable_info = vk_find_struct_const( pCreateInfo->pNext, - MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE); + MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT); uint32_t num_bindings = 0; uint32_t immutable_sampler_count = 0; @@ -184,7 +184,7 @@ tu_CreateDescriptorSetLayout( set_layout->binding[b].dynamic_offset_offset = dynamic_offset_size; set_layout->binding[b].shader_stages = binding->stageFlags; - if (binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) { + if (binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) { /* For mutable descriptor types we must allocate a size that fits the * largest descriptor type that the binding can mutate to. */ @@ -286,10 +286,10 @@ tu_GetDescriptorSetLayoutSupport( vk_find_struct( (void *) pCreateInfo->pNext, DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT); - const VkMutableDescriptorTypeCreateInfoVALVE *mutable_info = + const VkMutableDescriptorTypeCreateInfoEXT *mutable_info = vk_find_struct_const( pCreateInfo->pNext, - MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE); + MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT); if (variable_count) { variable_count->maxVariableDescriptorCount = 0; @@ -304,8 +304,8 @@ tu_GetDescriptorSetLayoutSupport( if (is_dynamic(binding->descriptorType)) { descriptor_sz = 0; - } else if (binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) { - const VkMutableDescriptorTypeListVALVE *list = + } else if (binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) { + const VkMutableDescriptorTypeListEXT *list = &mutable_info->pMutableDescriptorTypeLists[i]; for (uint32_t j = 0; j < list->descriptorTypeCount; j++) { @@ -669,9 +669,9 @@ tu_CreateDescriptorPool(VkDevice _device, uint64_t bo_size = 0, dynamic_size = 0; VkResult ret; - const VkMutableDescriptorTypeCreateInfoVALVE *mutable_info = + const VkMutableDescriptorTypeCreateInfoEXT *mutable_info = vk_find_struct_const( pCreateInfo->pNext, - MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE); + MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT); const VkDescriptorPoolInlineUniformBlockCreateInfo *inline_info = vk_find_struct_const(pCreateInfo->pNext, @@ -696,7 +696,7 @@ tu_CreateDescriptorPool(VkDevice _device, dynamic_size += descriptor_size(device, NULL, pool_size->type) * pool_size->descriptorCount; break; - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: if (mutable_info && i < mutable_info->mutableDescriptorTypeListCount && mutable_info->pMutableDescriptorTypeLists[i].descriptorTypeCount > 0) { bo_size += @@ -738,7 +738,7 @@ tu_CreateDescriptorPool(VkDevice _device, } if (bo_size) { - if (!(pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE)) { + if (!(pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT)) { ret = tu_bo_init_new(device, &pool->bo, bo_size, TU_BO_ALLOC_ALLOW_DUMP, "descriptor pool"); if (ret) goto fail_alloc; diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index 38e0b23cbe4..ef7c0269518 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -236,6 +236,7 @@ get_device_extensions(const struct tu_physical_device *device, .EXT_non_seamless_cube_map = true, .EXT_tooling_info = true, .EXT_inline_uniform_block = true, + .EXT_mutable_descriptor_type = true, }; } @@ -797,9 +798,9 @@ tu_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, features->transformFeedbackPreservesProvokingVertex = true; break; } - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE: { - VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE *features = - (VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE *)ext; + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT: { + VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *features = + (VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT *)ext; features->mutableDescriptorType = true; break; } diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index 2dcf193300e..72f5d79eaec 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -97,7 +97,7 @@ tu6_load_state_size(struct tu_pipeline *pipeline, count = stage_count * binding->array_size * 2; break; case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: break; default: unreachable("bad descriptor type"); @@ -184,7 +184,7 @@ tu6_emit_load_state(struct tu_pipeline *pipeline, break; } case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: /* nothing - input attachment doesn't use bindless */ break; case VK_DESCRIPTOR_TYPE_SAMPLER: