From ad934eb680abc952670dfef1d52f717a1de9e5e7 Mon Sep 17 00:00:00 2001
From: Yiwei Zhang <zzyiwei@chromium.org>
Date: Sat, 21 Aug 2021 00:27:04 +0000
Subject: [PATCH 2/8] venus: add vn_descriptor_set_layout_init

Just a refactoring without functional changes.

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Ryan Neph <ryanneph@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12501>
---
 src/virtio/vulkan/vn_descriptor_set.c | 53 ++++++++++++++++-----------
 1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/src/virtio/vulkan/vn_descriptor_set.c b/src/virtio/vulkan/vn_descriptor_set.c
index 93ac44fc01f..86bbd228635 100644
--- a/src/virtio/vulkan/vn_descriptor_set.c
+++ b/src/virtio/vulkan/vn_descriptor_set.c
@@ -32,6 +32,36 @@ vn_GetDescriptorSetLayoutSupport(
                                            pSupport);
 }
 
+static void
+vn_descriptor_set_layout_init(
+   struct vn_device *dev,
+   const VkDescriptorSetLayoutCreateInfo *create_info,
+   struct vn_descriptor_set_layout *layout)
+{
+   VkDevice dev_handle = vn_device_to_handle(dev);
+   VkDescriptorSetLayout layout_handle =
+      vn_descriptor_set_layout_to_handle(layout);
+
+   for (uint32_t i = 0; i < create_info->bindingCount; i++) {
+      const VkDescriptorSetLayoutBinding *binding_info =
+         &create_info->pBindings[i];
+      struct vn_descriptor_set_layout_binding *binding =
+         &layout->bindings[binding_info->binding];
+
+      switch (binding_info->descriptorType) {
+      case VK_DESCRIPTOR_TYPE_SAMPLER:
+      case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
+         binding->has_immutable_samplers = binding_info->pImmutableSamplers;
+         break;
+      default:
+         break;
+      }
+   }
+
+   vn_async_vkCreateDescriptorSetLayout(dev->instance, dev_handle,
+                                        create_info, NULL, &layout_handle);
+}
+
 VkResult
 vn_CreateDescriptorSetLayout(
    VkDevice device,
@@ -92,30 +122,11 @@ vn_CreateDescriptorSetLayout(
    vn_object_base_init(&layout->base, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
                        &dev->base);
 
-   for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) {
-      const VkDescriptorSetLayoutBinding *binding =
-         &pCreateInfo->pBindings[i];
-      struct vn_descriptor_set_layout_binding *dst =
-         &layout->bindings[binding->binding];
-
-      switch (binding->descriptorType) {
-      case VK_DESCRIPTOR_TYPE_SAMPLER:
-      case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
-         dst->has_immutable_samplers = binding->pImmutableSamplers;
-         break;
-      default:
-         break;
-      }
-   }
-
-   VkDescriptorSetLayout layout_handle =
-      vn_descriptor_set_layout_to_handle(layout);
-   vn_async_vkCreateDescriptorSetLayout(dev->instance, device, pCreateInfo,
-                                        NULL, &layout_handle);
+   vn_descriptor_set_layout_init(dev, pCreateInfo, layout);
 
    vk_free(alloc, local_bindings);
 
-   *pSetLayout = layout_handle;
+   *pSetLayout = vn_descriptor_set_layout_to_handle(layout);
 
    return VK_SUCCESS;
 }
-- 
2.33.0.259.gc128427fd7-goog

