nvk: use common descriptor set layout code
authorThomas H.P. Andersen <phomes@gmail.com>
Sat, 17 Sep 2022 09:21:20 +0000 (11:21 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 21:32:00 +0000 (21:32 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>

src/nouveau/vulkan/nvk_descriptor_set.c
src/nouveau/vulkan/nvk_descriptor_set_layout.c
src/nouveau/vulkan/nvk_descriptor_set_layout.h
src/nouveau/vulkan/nvk_pipeline_layout.c

index 9003cfb..dfca4e8 100644 (file)
@@ -307,7 +307,7 @@ nvk_descriptor_set_destroy(struct nvk_device *device,
       }
    }
 
-   nvk_descriptor_set_layout_unref(device, set->layout);
+   vk_descriptor_set_layout_unref(&device->vk, &set->layout->vk);
 
    vk_object_free(&device->vk, NULL, set);
 }
@@ -450,7 +450,8 @@ nvk_descriptor_set_create(struct nvk_device *device,
                                  NVK_MIN_UBO_ALIGNMENT);
    pool->entry_count++;
 
-   set->layout = nvk_descriptor_set_layout_ref(layout);
+   vk_descriptor_set_layout_ref(&layout->vk);
+   set->layout = layout;
 
    for (uint32_t b = 0; b < layout->binding_count; b++) {
       if (layout->binding[b].type != VK_DESCRIPTOR_TYPE_SAMPLER &&
index 87d7740..5edd908 100644 (file)
@@ -109,14 +109,9 @@ nvk_CreateDescriptorSetLayout(VkDevice _device,
    VK_MULTIALLOC_DECL(&ma, struct nvk_sampler *, samplers,
                       immutable_sampler_count);
 
-   if (!vk_multialloc_zalloc(&ma, &device->vk.alloc,
-                             VK_SYSTEM_ALLOCATION_SCOPE_DEVICE))
+   if (!vk_descriptor_set_layout_multizalloc(&device->vk, &ma))
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
-   vk_object_base_init(&device->vk, &layout->base,
-                       VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT);
-
-   p_atomic_set(&layout->ref_cnt, 1);
    layout->binding_count = num_bindings;
 
    for (uint32_t j = 0; j < pCreateInfo->bindingCount; j++) {
@@ -232,25 +227,3 @@ nvk_CreateDescriptorSetLayout(VkDevice _device,
 
    return VK_SUCCESS;
 }
-
-void
-nvk_descriptor_set_layout_destroy(
-   struct nvk_device *device, struct nvk_descriptor_set_layout *layout)
-{
-   assert(layout->ref_cnt == 0);
-   vk_object_free(&device->vk, NULL, layout);
-}
-
-VKAPI_ATTR void VKAPI_CALL
-nvk_DestroyDescriptorSetLayout(VkDevice _device,
-                               VkDescriptorSetLayout descriptorSetLayout,
-                               const VkAllocationCallbacks *pAllocator)
-{
-   VK_FROM_HANDLE(nvk_device, device, _device);
-   VK_FROM_HANDLE(nvk_descriptor_set_layout, layout, descriptorSetLayout);
-
-   if (!layout)
-      return;
-
-   nvk_descriptor_set_layout_unref(device, layout);
-}
index 52cc339..ac6edc7 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "nvk_private.h"
 
+#include "vulkan/runtime/vk_descriptor_set_layout.h"
 #include "vulkan/runtime/vk_object.h"
 
 struct nvk_device;
@@ -34,9 +35,7 @@ struct nvk_descriptor_set_binding_layout {
 };
 
 struct nvk_descriptor_set_layout {
-   struct vk_object_base base;
-
-   uint32_t ref_cnt;
+   struct vk_descriptor_set_layout vk;
 
    unsigned char sha1[20];
 
@@ -53,31 +52,12 @@ struct nvk_descriptor_set_layout {
    struct nvk_descriptor_set_binding_layout binding[0];
 };
 
-VK_DEFINE_HANDLE_CASTS(nvk_descriptor_set_layout, base, VkDescriptorSetLayout,
+VK_DEFINE_HANDLE_CASTS(nvk_descriptor_set_layout, vk.base,
+                       VkDescriptorSetLayout,
                        VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
 
 void nvk_descriptor_stride_align_for_type(VkDescriptorType type,
                                           const VkMutableDescriptorTypeListVALVE *type_list,
                                           uint32_t *stride, uint32_t *align);
 
-void nvk_descriptor_set_layout_destroy(struct nvk_device *device,
-                                       struct nvk_descriptor_set_layout *layout);
-
-static inline struct nvk_descriptor_set_layout *
-nvk_descriptor_set_layout_ref(struct nvk_descriptor_set_layout *layout)
-{
-   assert(layout && layout->ref_cnt >= 1);
-   p_atomic_inc(&layout->ref_cnt);
-   return layout;
-}
-
-static inline void
-nvk_descriptor_set_layout_unref(struct nvk_device *device,
-                                struct nvk_descriptor_set_layout *layout)
-{
-   assert(layout && layout->ref_cnt >= 1);
-   if (p_atomic_dec_zero(&layout->ref_cnt))
-      nvk_descriptor_set_layout_destroy(device, layout);
-}
-
 #endif
index b6731c0..f36a18f 100644 (file)
@@ -25,7 +25,8 @@ nvk_CreatePipelineLayout(VkDevice _device,
    for (uint32_t s = 0; s < pCreateInfo->setLayoutCount; s++) {
       VK_FROM_HANDLE(nvk_descriptor_set_layout, set_layout,
                      pCreateInfo->pSetLayouts[s]);
-      layout->set[s].layout = nvk_descriptor_set_layout_ref(set_layout);
+      vk_descriptor_set_layout_ref(&set_layout->vk);
+      layout->set[s].layout = set_layout;
       layout->set[s].dynamic_buffer_start = dynamic_buffer_count;
       dynamic_buffer_count += set_layout->dynamic_buffer_count;
    }
@@ -55,7 +56,7 @@ nvk_DestroyPipelineLayout(VkDevice _device, VkPipelineLayout pipelineLayout,
       return;
 
    for (uint32_t s = 0; s < layout->num_sets; s++)
-      nvk_descriptor_set_layout_unref(device, layout->set[s].layout);
+      vk_descriptor_set_layout_unref(&device->vk, &layout->set[s].layout->vk);
 
    vk_object_free(&device->vk, pAllocator, layout);
 }