From 23f5936ec6ff9ab1edd7be58f05cb599720f699c Mon Sep 17 00:00:00 2001 From: Dawn Han Date: Tue, 20 Sep 2022 17:24:32 +0000 Subject: [PATCH] venus: Update mutable descriptor struct type Signed-off-by: Dawn Han Part-of: --- src/virtio/vulkan/vn_descriptor_set.c | 34 +++++++++++++++++----------------- src/virtio/vulkan/vn_descriptor_set.h | 2 +- src/virtio/vulkan/vn_physical_device.c | 10 +++++----- src/virtio/vulkan/vn_physical_device.h | 4 +--- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/virtio/vulkan/vn_descriptor_set.c b/src/virtio/vulkan/vn_descriptor_set.c index 06a2a0e..437e11b 100644 --- a/src/virtio/vulkan/vn_descriptor_set.c +++ b/src/virtio/vulkan/vn_descriptor_set.c @@ -91,8 +91,8 @@ vn_descriptor_type_index(VkDescriptorType type) return VN_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: return VN_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK; - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: - return VN_DESCRIPTOR_TYPE_MUTABLE_VALVE; + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: + return VN_DESCRIPTOR_TYPE_MUTABLE_EXT; default: break; } @@ -129,9 +129,9 @@ vn_descriptor_set_layout_init( vk_find_struct_const(create_info->pNext, DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO); - const VkMutableDescriptorTypeCreateInfoVALVE *mutable_descriptor_info = + const VkMutableDescriptorTypeCreateInfoEXT *mutable_descriptor_info = vk_find_struct_const(create_info->pNext, - MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE); + MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT); /* 14.2.1. Descriptor Set Layout * @@ -180,12 +180,12 @@ vn_descriptor_set_layout_init( case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: binding->has_immutable_samplers = binding_info->pImmutableSamplers; break; - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: assert(mutable_descriptor_info->mutableDescriptorTypeListCount && mutable_descriptor_info->pMutableDescriptorTypeLists[i] .descriptorTypeCount); - const VkMutableDescriptorTypeListVALVE *list = + const VkMutableDescriptorTypeListEXT *list = &mutable_descriptor_info->pMutableDescriptorTypeLists[i]; for (uint32_t j = 0; j < list->descriptorTypeCount; j++) { BITSET_SET(binding->mutable_descriptor_types, @@ -307,7 +307,7 @@ vn_CreateDescriptorPool(VkDevice device, uint32_t mutable_states_count = 0; for (uint32_t i = 0; i < pCreateInfo->poolSizeCount; i++) { const VkDescriptorPoolSize *pool_size = &pCreateInfo->pPoolSizes[i]; - if (pool_size->type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) + if (pool_size->type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) mutable_states_count++; } struct vn_descriptor_pool *pool; @@ -327,9 +327,9 @@ vn_CreateDescriptorPool(VkDevice device, pool->allocator = *alloc; pool->mutable_states = mutable_states; - const VkMutableDescriptorTypeCreateInfoVALVE *mutable_descriptor_info = + const VkMutableDescriptorTypeCreateInfoEXT *mutable_descriptor_info = vk_find_struct_const(pCreateInfo->pNext, - MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE); + MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT); /* Without VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, the set * allocation must not fail due to a fragmented pool per spec. In this @@ -352,14 +352,14 @@ vn_CreateDescriptorPool(VkDevice device, assert(type_index < VN_NUM_DESCRIPTOR_TYPES); - if (type_index == VN_DESCRIPTOR_TYPE_MUTABLE_VALVE) { + if (type_index == VN_DESCRIPTOR_TYPE_MUTABLE_EXT) { struct vn_descriptor_pool_state_mutable *mutable_state = NULL; BITSET_DECLARE(mutable_types, VN_NUM_DESCRIPTOR_TYPES); if (!mutable_descriptor_info || i >= mutable_descriptor_info->mutableDescriptorTypeListCount) { BITSET_ONES(mutable_types); } else { - const VkMutableDescriptorTypeListVALVE *list = + const VkMutableDescriptorTypeListEXT *list = &mutable_descriptor_info->pMutableDescriptorTypeLists[i]; for (uint32_t j = 0; j < list->descriptorTypeCount; j++) { @@ -467,7 +467,7 @@ vn_pool_restore_mutable_states(struct vn_descriptor_pool *pool, uint32_t last_binding_descriptor_count) { for (uint32_t i = 0; i <= max_binding_index; i++) { - if (layout->bindings[i].type != VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) + if (layout->bindings[i].type != VK_DESCRIPTOR_TYPE_MUTABLE_EXT) continue; const uint32_t count = i == layout->last_binding @@ -519,7 +519,7 @@ vn_descriptor_pool_alloc_descriptors( goto fail; } - if (type == VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) { + if (type == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) { /* A mutable descriptor can be allocated if below are satisfied: * - vn_descriptor_pool_state_mutable::types is a superset * - vn_descriptor_pool_state_mutable::{max - used} is enough @@ -573,7 +573,7 @@ vn_descriptor_pool_free_descriptors( ? last_binding_descriptor_count : layout->bindings[i].count; - if (layout->bindings[i].type != VK_DESCRIPTOR_TYPE_MUTABLE_VALVE) { + if (layout->bindings[i].type != VK_DESCRIPTOR_TYPE_MUTABLE_EXT) { pool->used.descriptor_counts[vn_descriptor_type_index( layout->bindings[i].type)] -= count; @@ -895,7 +895,7 @@ vn_update_descriptor_sets_parse_writes(uint32_t write_count, write->pTexelBufferView = NULL; break; case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: default: write->pImageInfo = NULL; write->pBufferInfo = NULL; @@ -971,7 +971,7 @@ vn_update_descriptor_sets_parse_template( case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK: iub_count += 1; break; - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: break; default: unreachable("unhandled descriptor type"); @@ -1194,7 +1194,7 @@ vn_UpdateDescriptorSetWithTemplate( write->pNext, WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK); iub_data->pData = pData + entry->offset; break; - case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE: + case VK_DESCRIPTOR_TYPE_MUTABLE_EXT: break; default: unreachable("unhandled descriptor type"); diff --git a/src/virtio/vulkan/vn_descriptor_set.h b/src/virtio/vulkan/vn_descriptor_set.h index 0c3e28a..7292fd5 100644 --- a/src/virtio/vulkan/vn_descriptor_set.h +++ b/src/virtio/vulkan/vn_descriptor_set.h @@ -26,7 +26,7 @@ enum vn_descriptor_type { VN_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, VN_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, VN_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, - VN_DESCRIPTOR_TYPE_MUTABLE_VALVE, + VN_DESCRIPTOR_TYPE_MUTABLE_EXT, /* add new enum types before this line */ VN_NUM_DESCRIPTOR_TYPES, diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index b54241f..e2c58cc 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -200,8 +200,9 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) VN_ADD_EXT_TO_PNEXT_OF(features2, VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, feats->vertex_attribute_divisor, EXT_vertex_attribute_divisor); VN_ADD_EXT_TO_PNEXT_OF(features2, YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, feats->ycbcr_2plane_444_formats, EXT_ycbcr_2plane_444_formats); - /* Vendor */ - VN_ADD_EXT_TO_PNEXT_OF(features2, MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE, feats->mutable_descriptor_type, VALVE_mutable_descriptor_type); + if (exts->EXT_mutable_descriptor_type || exts->VALVE_mutable_descriptor_type) { + VN_ADD_TO_PNEXT_OF(features2, MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, feats->mutable_descriptor_type); + } /* clang-format on */ @@ -1075,6 +1076,7 @@ vn_physical_device_get_passthrough_extensions( .EXT_conservative_rasterization = true, .EXT_custom_border_color = true, .EXT_depth_clip_enable = true, + .EXT_mutable_descriptor_type = true, /* vendor */ .VALVE_mutable_descriptor_type = true, @@ -1713,15 +1715,13 @@ vn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, CASE(INDEX_TYPE_UINT8_FEATURES_EXT, index_type_uint8); CASE(LINE_RASTERIZATION_FEATURES_EXT, line_rasterization); CASE(MULTI_DRAW_FEATURES_EXT, multi_draw); + CASE(MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, mutable_descriptor_type); CASE(PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, primitive_topology_list_restart); CASE(PROVOKING_VERTEX_FEATURES_EXT, provoking_vertex); CASE(ROBUSTNESS_2_FEATURES_EXT, robustness_2); CASE(TRANSFORM_FEEDBACK_FEATURES_EXT, transform_feedback); CASE(VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, vertex_attribute_divisor); - /* vendor */ - CASE(MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE, mutable_descriptor_type); - /* clang-format on */ default: diff --git a/src/virtio/vulkan/vn_physical_device.h b/src/virtio/vulkan/vn_physical_device.h index c9dd3d0..1c58771 100644 --- a/src/virtio/vulkan/vn_physical_device.h +++ b/src/virtio/vulkan/vn_physical_device.h @@ -40,15 +40,13 @@ struct vn_physical_device_features { VkPhysicalDeviceIndexTypeUint8FeaturesEXT index_type_uint8; VkPhysicalDeviceLineRasterizationFeaturesEXT line_rasterization; VkPhysicalDeviceMultiDrawFeaturesEXT multi_draw; + VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT mutable_descriptor_type; VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT primitive_topology_list_restart; VkPhysicalDeviceProvokingVertexFeaturesEXT provoking_vertex; VkPhysicalDeviceRobustness2FeaturesEXT robustness_2; VkPhysicalDeviceTransformFeedbackFeaturesEXT transform_feedback; VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vertex_attribute_divisor; - - /* vendor */ - VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE mutable_descriptor_type; }; struct vn_physical_device_properties { -- 2.7.4