venus: Update mutable descriptor struct type
authorDawn Han <dawnhan@google.com>
Tue, 20 Sep 2022 17:24:32 +0000 (17:24 +0000)
committerMarge Bot <emma+marge@anholt.net>
Sat, 1 Oct 2022 00:50:15 +0000 (00:50 +0000)
Signed-off-by: Dawn Han <dawnhan@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18766>

src/virtio/vulkan/vn_descriptor_set.c
src/virtio/vulkan/vn_descriptor_set.h
src/virtio/vulkan/vn_physical_device.c
src/virtio/vulkan/vn_physical_device.h

index 06a2a0e..437e11b 100644 (file)
@@ -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");
index 0c3e28a..7292fd5 100644 (file)
@@ -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,
index b54241f..e2c58cc 100644 (file)
@@ -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:
index c9dd3d0..1c58771 100644 (file)
@@ -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 {