Module: Mesa
Branch: main
Commit: 65f1baf6c6d6febf68f1c7d66c2d3a630bd2e11d
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=65f1baf6c6d6febf68f1c7d66c2d3a630bd2e11d

Author: Chia-I Wu <[email protected]>
Date:   Fri Aug 19 13:51:08 2022 -0700

turnip: use vk_descriptor_set_layout

Mainly for vk_descriptor_set_layout_{ref,unref}.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18588>

---

 src/freedreno/vulkan/tu_cmd_buffer.c     | 19 ++++++++--------
 src/freedreno/vulkan/tu_descriptor_set.c | 38 ++++++--------------------------
 src/freedreno/vulkan/tu_descriptor_set.h | 28 ++++-------------------
 3 files changed, 21 insertions(+), 64 deletions(-)

diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c 
b/src/freedreno/vulkan/tu_cmd_buffer.c
index 52d33592d03..8c0374868ba 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -1643,8 +1643,8 @@ tu_cmd_buffer_destroy(struct vk_command_buffer 
*vk_cmd_buffer)
 
    for (unsigned i = 0; i < MAX_BIND_POINTS; i++) {
       if (cmd_buffer->descriptors[i].push_set.layout)
-         tu_descriptor_set_layout_unref(cmd_buffer->device,
-                                        
cmd_buffer->descriptors[i].push_set.layout);
+         vk_descriptor_set_layout_unref(&cmd_buffer->device->vk,
+                                        
&cmd_buffer->descriptors[i].push_set.layout->vk);
    }
 
    vk_command_buffer_finish(&cmd_buffer->vk);
@@ -1673,9 +1673,10 @@ tu_reset_cmd_buffer(struct vk_command_buffer 
*vk_cmd_buffer,
 
    for (unsigned i = 0; i < MAX_BIND_POINTS; i++) {
       memset(&cmd_buffer->descriptors[i].sets, 0, 
sizeof(cmd_buffer->descriptors[i].sets));
-      if (cmd_buffer->descriptors[i].push_set.layout)
-         tu_descriptor_set_layout_unref(cmd_buffer->device,
-                                        
cmd_buffer->descriptors[i].push_set.layout);
+      if (cmd_buffer->descriptors[i].push_set.layout) {
+         vk_descriptor_set_layout_unref(&cmd_buffer->device->vk,
+                                        
&cmd_buffer->descriptors[i].push_set.layout->vk);
+      }
       memset(&cmd_buffer->descriptors[i].push_set, 0, 
sizeof(cmd_buffer->descriptors[i].push_set));
       cmd_buffer->descriptors[i].push_set.base.type = 
VK_OBJECT_TYPE_DESCRIPTOR_SET;
       cmd_buffer->descriptors[i].max_sets_bound = 0;
@@ -2184,8 +2185,8 @@ tu_CmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer,
 
    if (set->layout != layout) {
       if (set->layout)
-         tu_descriptor_set_layout_unref(cmd->device, set->layout);
-      tu_descriptor_set_layout_ref(layout);
+         vk_descriptor_set_layout_unref(&cmd->device->vk, &set->layout->vk);
+      vk_descriptor_set_layout_ref(&layout->vk);
       set->layout = layout;
    }
 
@@ -2229,8 +2230,8 @@ tu_CmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer 
commandBuffer,
 
    if (set->layout != layout) {
       if (set->layout)
-         tu_descriptor_set_layout_unref(cmd->device, set->layout);
-      tu_descriptor_set_layout_ref(layout);
+         vk_descriptor_set_layout_unref(&cmd->device->vk, &set->layout->vk);
+      vk_descriptor_set_layout_ref(&layout->vk);
       set->layout = layout;
    }
 
diff --git a/src/freedreno/vulkan/tu_descriptor_set.c 
b/src/freedreno/vulkan/tu_descriptor_set.c
index 5b119061d85..d2e9d734a3d 100644
--- a/src/freedreno/vulkan/tu_descriptor_set.c
+++ b/src/freedreno/vulkan/tu_descriptor_set.c
@@ -145,8 +145,7 @@ tu_CreateDescriptorSetLayout(
       immutable_sampler_count * sizeof(struct tu_sampler) +
       ycbcr_sampler_count * sizeof(struct tu_sampler_ycbcr_conversion);
 
-   set_layout = vk_object_zalloc(&device->vk, NULL, size,
-                                 VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT);
+   set_layout = vk_descriptor_set_layout_zalloc(&device->vk, size);
    if (!set_layout)
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
@@ -165,7 +164,6 @@ tu_CreateDescriptorSetLayout(
       return vk_error(device, result);
    }
 
-   set_layout->ref_cnt = 1;
    set_layout->binding_count = num_bindings;
    set_layout->shader_stages = 0;
    set_layout->has_immutable_samplers = false;
@@ -264,28 +262,6 @@ tu_CreateDescriptorSetLayout(
    return VK_SUCCESS;
 }
 
-VKAPI_ATTR void VKAPI_CALL
-tu_DestroyDescriptorSetLayout(VkDevice _device,
-                              VkDescriptorSetLayout _set_layout,
-                              const VkAllocationCallbacks *pAllocator)
-{
-   TU_FROM_HANDLE(tu_device, device, _device);
-   TU_FROM_HANDLE(tu_descriptor_set_layout, set_layout, _set_layout);
-
-   if (!set_layout)
-      return;
-
-   tu_descriptor_set_layout_unref(device, set_layout);
-}
-
-void
-tu_descriptor_set_layout_destroy(struct tu_device *device,
-                                 struct tu_descriptor_set_layout *layout)
-{
-   assert(layout->ref_cnt == 0);
-   vk_object_free(&device->vk, NULL, layout);
-}
-
 VKAPI_ATTR void VKAPI_CALL
 tu_GetDescriptorSetLayoutSupport(
    VkDevice _device,
@@ -463,7 +439,7 @@ tu_CreatePipelineLayout(VkDevice _device,
       assert(set < MAX_SETS);
       layout->set[set].layout = set_layout;
       layout->set[set].dynamic_offset_start = dynamic_offset_size;
-      tu_descriptor_set_layout_ref(set_layout);
+      vk_descriptor_set_layout_ref(&set_layout->vk);
 
       dynamic_offset_size += set_layout->dynamic_offset_size;
    }
@@ -508,7 +484,7 @@ tu_DestroyPipelineLayout(VkDevice _device,
       return;
 
    for (uint32_t i = 0; i < pipeline_layout->num_sets; i++)
-      tu_descriptor_set_layout_unref(device, pipeline_layout->set[i].layout);
+      vk_descriptor_set_layout_unref(&device->vk, 
&pipeline_layout->set[i].layout->vk);
 
    vk_object_free(&device->vk, pAllocator, pipeline_layout);
 }
@@ -651,7 +627,7 @@ tu_descriptor_set_create(struct tu_device *device,
       }
    }
 
-   tu_descriptor_set_layout_ref(layout);
+   vk_descriptor_set_layout_ref(&layout->vk);
    list_addtail(&set->pool_link, &pool->desc_sets);
 
    *out_set = set;
@@ -808,7 +784,7 @@ tu_DestroyDescriptorPool(VkDevice _device,
 
    list_for_each_entry_safe(struct tu_descriptor_set, set,
                             &pool->desc_sets, pool_link) {
-      tu_descriptor_set_layout_unref(device, set->layout);
+      vk_descriptor_set_layout_unref(&device->vk, &set->layout->vk);
    }
 
    if (!pool->host_memory_base) {
@@ -837,7 +813,7 @@ tu_ResetDescriptorPool(VkDevice _device,
 
    list_for_each_entry_safe(struct tu_descriptor_set, set,
                             &pool->desc_sets, pool_link) {
-      tu_descriptor_set_layout_unref(device, set->layout);
+      vk_descriptor_set_layout_unref(&device->vk, &set->layout->vk);
    }
    list_inithead(&pool->desc_sets);
 
@@ -915,7 +891,7 @@ tu_FreeDescriptorSets(VkDevice _device,
       TU_FROM_HANDLE(tu_descriptor_set, set, pDescriptorSets[i]);
 
       if (set) {
-         tu_descriptor_set_layout_unref(device, set->layout);
+         vk_descriptor_set_layout_unref(&device->vk, &set->layout->vk);
          list_del(&set->pool_link);
       }
 
diff --git a/src/freedreno/vulkan/tu_descriptor_set.h 
b/src/freedreno/vulkan/tu_descriptor_set.h
index b3d54006ae4..9d14784ee65 100644
--- a/src/freedreno/vulkan/tu_descriptor_set.h
+++ b/src/freedreno/vulkan/tu_descriptor_set.h
@@ -8,6 +8,8 @@
 
 #include "tu_common.h"
 
+#include "vk_descriptor_set_layout.h"
+
 /* The hardware supports 5 descriptor sets, but we reserve 1 for dynamic
  * descriptors and input attachments.
  */
@@ -52,10 +54,7 @@ struct tu_descriptor_set_binding_layout
 
 struct tu_descriptor_set_layout
 {
-   struct vk_object_base base;
-
-   /* Descriptor set layouts can be destroyed at almost any time */
-   uint32_t ref_cnt;
+   struct vk_descriptor_set_layout vk;
 
    /* The create flags for this descriptor set layout */
    VkDescriptorSetLayoutCreateFlags flags;
@@ -79,7 +78,7 @@ struct tu_descriptor_set_layout
    /* Bindings in this descriptor set */
    struct tu_descriptor_set_binding_layout binding[0];
 };
-VK_DEFINE_NONDISP_HANDLE_CASTS(tu_descriptor_set_layout, base,
+VK_DEFINE_NONDISP_HANDLE_CASTS(tu_descriptor_set_layout, vk.base,
                                VkDescriptorSetLayout,
                                VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
 
@@ -203,25 +202,6 @@ struct tu_sampler_ycbcr_conversion {
 VK_DEFINE_NONDISP_HANDLE_CASTS(tu_sampler_ycbcr_conversion, base, 
VkSamplerYcbcrConversion,
                                VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION)
 
-void tu_descriptor_set_layout_destroy(struct tu_device *device,
-                                      struct tu_descriptor_set_layout *layout);
-
-static inline void
-tu_descriptor_set_layout_ref(struct tu_descriptor_set_layout *layout)
-{
-   assert(layout && layout->ref_cnt >= 1);
-   p_atomic_inc(&layout->ref_cnt);
-}
-
-static inline void
-tu_descriptor_set_layout_unref(struct tu_device *device,
-                               struct tu_descriptor_set_layout *layout)
-{
-   assert(layout && layout->ref_cnt >= 1);
-   if (p_atomic_dec_zero(&layout->ref_cnt))
-      tu_descriptor_set_layout_destroy(device, layout);
-}
-
 void
 tu_update_descriptor_sets(const struct tu_device *device,
                           VkDescriptorSet overrideSet,

Reply via email to