From 7556ee1fe4f645bb983be2fe0de30b905bcc4a54 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Tue, 6 Sep 2022 21:18:17 +0300 Subject: [PATCH] anv: add support for EXT_mutable_descriptor_type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2: Update docs/features.txt (Tapani) Signed-off-by: Lionel Landwerlin Reviewed-by: Tapani Pälli Part-of: --- docs/features.txt | 2 +- src/intel/vulkan/anv_cmd_buffer.c | 2 +- src/intel/vulkan/anv_descriptor_set.c | 46 +++++++++++++-------------- src/intel/vulkan/anv_device.c | 7 ++-- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 9ced0a2b0af..c4470a2318d 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, tu) + VK_EXT_mutable_descriptor_type DONE (anv, radv, tu) OpenCL 1.0 -- all DONE: diff --git a/src/intel/vulkan/anv_cmd_buffer.c b/src/intel/vulkan/anv_cmd_buffer.c index be8d173b040..0da704647f4 100644 --- a/src/intel/vulkan/anv_cmd_buffer.c +++ b/src/intel/vulkan/anv_cmd_buffer.c @@ -468,7 +468,7 @@ anv_cmd_buffer_bind_descriptor_set(struct anv_cmd_buffer *cmd_buffer, * * "Each element of pDescriptorSets must not have been allocated from a * VkDescriptorPool with the - * VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE flag set" + * VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT flag set" */ assert(!set->pool || !set->pool->host_only); diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index 95c6e67c0e0..c8ad1b07508 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -107,7 +107,7 @@ anv_descriptor_data_for_type(const struct anv_physical_device *device, static enum anv_descriptor_data anv_descriptor_data_for_mutable_type(const struct anv_physical_device *device, - const VkMutableDescriptorTypeCreateInfoVALVE *mutable_info, + const VkMutableDescriptorTypeCreateInfoEXT *mutable_info, int binding) { enum anv_descriptor_data desc_data = 0; @@ -128,7 +128,7 @@ anv_descriptor_data_for_mutable_type(const struct anv_physical_device *device, return desc_data; } - const VkMutableDescriptorTypeListVALVE *type_list = + const VkMutableDescriptorTypeListEXT *type_list = &mutable_info->pMutableDescriptorTypeLists[binding]; for (uint32_t i = 0; i < type_list->descriptorTypeCount; i++) { desc_data |= @@ -190,7 +190,7 @@ anv_descriptor_size(const struct anv_descriptor_set_binding_layout *layout) /** Returns size in bytes of the biggest descriptor in the given layout */ static unsigned anv_descriptor_size_for_mutable_type(const struct anv_physical_device *device, - const VkMutableDescriptorTypeCreateInfoVALVE *mutable_info, + const VkMutableDescriptorTypeCreateInfoEXT *mutable_info, int binding) { unsigned size = 0; @@ -215,7 +215,7 @@ anv_descriptor_size_for_mutable_type(const struct anv_physical_device *device, return size; } - const VkMutableDescriptorTypeListVALVE *type_list = + const VkMutableDescriptorTypeListEXT *type_list = &mutable_info->pMutableDescriptorTypeLists[binding]; for (uint32_t i = 0; i < type_list->descriptorTypeCount; i++) { enum anv_descriptor_data desc_data = @@ -276,9 +276,9 @@ void anv_GetDescriptorSetLayoutSupport( const VkDescriptorSetLayoutBindingFlagsCreateInfo *binding_flags_info = 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); for (uint32_t b = 0; b < pCreateInfo->bindingCount; b++) { const VkDescriptorSetLayoutBinding *binding = &pCreateInfo->pBindings[b]; @@ -290,7 +290,7 @@ void anv_GetDescriptorSetLayoutSupport( } enum anv_descriptor_data desc_data = - binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? + binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_EXT ? anv_descriptor_data_for_mutable_type(pdevice, mutable_info, b) : anv_descriptor_data_for_type(pdevice, binding->descriptorType); @@ -449,9 +449,9 @@ VkResult anv_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); for (uint32_t b = 0; b < num_bindings; b++) { /* We stashed the pCreateInfo->pBindings[] index (plus one) in the @@ -496,7 +496,7 @@ VkResult anv_CreateDescriptorSetLayout( } set_layout->binding[b].data = - binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? + binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_EXT ? anv_descriptor_data_for_mutable_type(device->physical, mutable_info, b) : anv_descriptor_data_for_type(device->physical, binding->descriptorType); @@ -512,7 +512,7 @@ VkResult anv_CreateDescriptorSetLayout( switch (binding->descriptorType) { case VK_DESCRIPTOR_TYPE_SAMPLER: case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: set_layout->binding[b].max_plane_count = 1; if (binding->pImmutableSamplers) { set_layout->binding[b].immutable_samplers = samplers; @@ -551,7 +551,7 @@ VkResult anv_CreateDescriptorSetLayout( } set_layout->binding[b].descriptor_stride = - binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? + binding->descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_EXT ? anv_descriptor_size_for_mutable_type(device->physical, mutable_info, b) : anv_descriptor_size(&set_layout->binding[b]); @@ -828,9 +828,9 @@ VkResult anv_CreateDescriptorPool( const VkDescriptorPoolInlineUniformBlockCreateInfo *inline_info = vk_find_struct_const(pCreateInfo->pNext, DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_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 descriptor_count = 0; uint32_t buffer_view_count = 0; @@ -838,7 +838,7 @@ VkResult anv_CreateDescriptorPool( for (uint32_t i = 0; i < pCreateInfo->poolSizeCount; i++) { enum anv_descriptor_data desc_data = - pCreateInfo->pPoolSizes[i].type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? + pCreateInfo->pPoolSizes[i].type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT ? anv_descriptor_data_for_mutable_type(device->physical, mutable_info, i) : anv_descriptor_data_for_type(device->physical, pCreateInfo->pPoolSizes[i].type); @@ -846,7 +846,7 @@ VkResult anv_CreateDescriptorPool( buffer_view_count += pCreateInfo->pPoolSizes[i].descriptorCount; unsigned desc_data_size = - pCreateInfo->pPoolSizes[i].type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? + pCreateInfo->pPoolSizes[i].type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT ? anv_descriptor_size_for_mutable_type(device->physical, mutable_info, i) : anv_descriptor_data_size(desc_data); @@ -902,7 +902,7 @@ VkResult anv_CreateDescriptorPool( pool->size = pool_size; pool->next = 0; pool->free_list = EMPTY; - pool->host_only = pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE; + pool->host_only = pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT; if (descriptor_bo_size > 0) { VkResult result = anv_device_alloc_bo(device, @@ -1336,7 +1336,7 @@ anv_descriptor_set_write_image_view(struct anv_device *device, */ assert(type == bind_layout->type || type == VK_DESCRIPTOR_TYPE_SAMPLER || - bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE); + bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT); switch (type) { case VK_DESCRIPTOR_TYPE_SAMPLER: @@ -1376,7 +1376,7 @@ anv_descriptor_set_write_image_view(struct anv_device *device, element * bind_layout->descriptor_stride; memset(desc_map, 0, bind_layout->descriptor_stride); enum anv_descriptor_data data = - bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? + bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT ? anv_descriptor_data_for_type(device->physical, type) : bind_layout->data; @@ -1437,7 +1437,7 @@ anv_descriptor_set_write_buffer_view(struct anv_device *device, &set->descriptors[bind_layout->descriptor_index + element]; assert(type == bind_layout->type || - bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE); + bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT); *desc = (struct anv_descriptor) { .type = type, @@ -1448,7 +1448,7 @@ anv_descriptor_set_write_buffer_view(struct anv_device *device, return; enum anv_descriptor_data data = - bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? + bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT ? anv_descriptor_data_for_type(device->physical, type) : bind_layout->data; @@ -1497,7 +1497,7 @@ anv_descriptor_set_write_buffer(struct anv_device *device, &set->descriptors[bind_layout->descriptor_index + element]; assert(type == bind_layout->type || - bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE); + bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT); *desc = (struct anv_descriptor) { .type = type, @@ -1520,7 +1520,7 @@ anv_descriptor_set_write_buffer(struct anv_device *device, struct anv_address bind_addr = anv_address_add(buffer->address, offset); uint64_t bind_range = vk_buffer_range(&buffer->vk, offset, range); enum anv_descriptor_data data = - bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE ? + bind_layout->type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT ? anv_descriptor_data_for_type(device->physical, type) : bind_layout->data; diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 7837714faa7..91067208c96 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -296,6 +296,7 @@ get_device_extensions(const struct anv_physical_device *device, device->vram_mappable.available > 0) && device->sys.available, .EXT_mesh_shader = device->info.has_mesh_shading, + .EXT_mutable_descriptor_type = true, .EXT_non_seamless_cube_map = true, .EXT_pci_bus_info = true, .EXT_physical_device_drm = true, @@ -1502,9 +1503,9 @@ void anv_GetPhysicalDeviceFeatures2( 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; }