Mesa (main): lavapipe: Use the vk_descriptor_set_layout base struct

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 29 21:01:19 UTC 2022


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

Author: Jason Ekstrand <jason.ekstrand at collabora.com>
Date:   Tue Jun 28 11:58:20 2022 -0500

lavapipe: Use the vk_descriptor_set_layout base struct

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17286>

---

 .../frontends/lavapipe/lvp_descriptor_set.c        | 42 ++++------------------
 src/gallium/frontends/lavapipe/lvp_pipeline.c      |  2 +-
 src/gallium/frontends/lavapipe/lvp_private.h       | 28 ++-------------
 3 files changed, 11 insertions(+), 61 deletions(-)

diff --git a/src/gallium/frontends/lavapipe/lvp_descriptor_set.c b/src/gallium/frontends/lavapipe/lvp_descriptor_set.c
index 4147ac35870..263a595796c 100644
--- a/src/gallium/frontends/lavapipe/lvp_descriptor_set.c
+++ b/src/gallium/frontends/lavapipe/lvp_descriptor_set.c
@@ -62,14 +62,10 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDescriptorSetLayout(
                  num_bindings * sizeof(set_layout->binding[0]) +
                  immutable_sampler_count * sizeof(struct lvp_sampler *);
 
-   set_layout = vk_zalloc(&device->vk.alloc, size, 8,
-                          VK_SYSTEM_ALLOCATION_SCOPE_DEVICE);
+   set_layout = vk_descriptor_set_layout_zalloc(&device->vk, size);
    if (!set_layout)
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
-   vk_object_base_init(&device->vk, &set_layout->base,
-                       VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT);
-   set_layout->ref_cnt = 1;
    set_layout->immutable_sampler_count = immutable_sampler_count;
    /* We just allocate all the samplers at the end of the struct */
    struct lvp_sampler **samplers =
@@ -84,8 +80,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDescriptorSetLayout(
                                                pCreateInfo->bindingCount,
                                                &bindings);
    if (result != VK_SUCCESS) {
-      vk_object_base_finish(&set_layout->base);
-      vk_free(&device->vk.alloc, set_layout);
+      vk_descriptor_set_layout_unref(&device->vk, &set_layout->vk);
       return vk_error(device, result);
    }
 
@@ -224,29 +219,6 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDescriptorSetLayout(
    return VK_SUCCESS;
 }
 
-void
-lvp_descriptor_set_layout_destroy(struct lvp_device *device,
-                                  struct lvp_descriptor_set_layout *layout)
-{
-   assert(layout->ref_cnt == 0);
-   vk_object_base_finish(&layout->base);
-   vk_free(&device->vk.alloc, layout);
-}
-
-VKAPI_ATTR void VKAPI_CALL lvp_DestroyDescriptorSetLayout(
-    VkDevice                                    _device,
-    VkDescriptorSetLayout                       _set_layout,
-    const VkAllocationCallbacks*                pAllocator)
-{
-   LVP_FROM_HANDLE(lvp_device, device, _device);
-   LVP_FROM_HANDLE(lvp_descriptor_set_layout, set_layout, _set_layout);
-
-   if (!_set_layout)
-     return;
-
-   lvp_descriptor_set_layout_unref(device, set_layout);
-}
-
 VKAPI_ATTR VkResult VKAPI_CALL lvp_CreatePipelineLayout(
     VkDevice                                    _device,
     const VkPipelineLayoutCreateInfo*           pCreateInfo,
@@ -286,7 +258,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreatePipelineLayout(
          }
          layout->stage[i].uniform_block_count += set_layout->stage[i].uniform_block_count;
       }
-      lvp_descriptor_set_layout_ref(set_layout);
+      vk_descriptor_set_layout_ref(&set_layout->vk);
    }
 
 #ifndef NDEBUG
@@ -341,7 +313,7 @@ void lvp_pipeline_layout_destroy(struct lvp_device *device,
    assert(pipeline_layout->ref_cnt == 0);
 
    for (uint32_t i = 0; i < pipeline_layout->num_sets; i++)
-      lvp_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_base_finish(&pipeline_layout->base);
    vk_free(&device->vk.alloc, pipeline_layout);
@@ -384,7 +356,7 @@ lvp_descriptor_set_create(struct lvp_device *device,
    vk_object_base_init(&device->vk, &set->base,
                        VK_OBJECT_TYPE_DESCRIPTOR_SET);
    set->layout = layout;
-   lvp_descriptor_set_layout_ref(layout);
+   vk_descriptor_set_layout_ref(&layout->vk);
 
    /* Go through and fill out immutable samplers if we have any */
    struct lvp_descriptor *desc = set->descriptors;
@@ -412,7 +384,7 @@ void
 lvp_descriptor_set_destroy(struct lvp_device *device,
                            struct lvp_descriptor_set *set)
 {
-   lvp_descriptor_set_layout_unref(device, set->layout);
+   vk_descriptor_set_layout_unref(&device->vk, &set->layout->vk);
    vk_object_base_finish(&set->base);
    vk_free(&device->vk.alloc, set);
 }
@@ -629,7 +601,7 @@ static void lvp_reset_descriptor_pool(struct lvp_device *device,
 {
    struct lvp_descriptor_set *set, *tmp;
    LIST_FOR_EACH_ENTRY_SAFE(set, tmp, &pool->sets, link) {
-      lvp_descriptor_set_layout_unref(device, set->layout);
+      vk_descriptor_set_layout_unref(&device->vk, &set->layout->vk);
       list_del(&set->link);
       vk_free(&device->vk.alloc, set);
    }
diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c
index 5efae640283..dfbe54dcbec 100644
--- a/src/gallium/frontends/lavapipe/lvp_pipeline.c
+++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c
@@ -1252,7 +1252,7 @@ static bool
 layouts_equal(const struct lvp_descriptor_set_layout *a, const struct lvp_descriptor_set_layout *b)
 {
    const uint8_t *pa = (const uint8_t*)a, *pb = (const uint8_t*)b;
-   uint32_t hash_start_offset = offsetof(struct lvp_descriptor_set_layout, ref_cnt) + sizeof(uint32_t);
+   uint32_t hash_start_offset = sizeof(struct vk_descriptor_set_layout);
    uint32_t binding_offset = offsetof(struct lvp_descriptor_set_layout, binding);
    /* base equal */
    if (memcmp(pa + hash_start_offset, pb + hash_start_offset, binding_offset - hash_start_offset))
diff --git a/src/gallium/frontends/lavapipe/lvp_private.h b/src/gallium/frontends/lavapipe/lvp_private.h
index 7e0b42e41d1..f42d8055699 100644
--- a/src/gallium/frontends/lavapipe/lvp_private.h
+++ b/src/gallium/frontends/lavapipe/lvp_private.h
@@ -67,6 +67,7 @@ typedef uint32_t xcb_window_t;
 #include "vk_cmd_queue.h"
 #include "vk_command_buffer.h"
 #include "vk_command_pool.h"
+#include "vk_descriptor_set_layout.h"
 #include "vk_queue.h"
 #include "vk_sync.h"
 #include "vk_sync_timeline.h"
@@ -286,10 +287,8 @@ struct lvp_descriptor_set_binding_layout {
 };
 
 struct lvp_descriptor_set_layout {
-   struct vk_object_base base;
+   struct vk_descriptor_set_layout vk;
 
-   /* Descriptor set layouts can be destroyed at almost any time */
-   uint32_t ref_cnt;
    /* add new members after this */
 
    uint32_t immutable_sampler_count;
@@ -321,27 +320,6 @@ struct lvp_descriptor_set_layout {
    struct lvp_descriptor_set_binding_layout binding[0];
 };
 
-void lvp_descriptor_set_layout_destroy(struct lvp_device *device,
-                                       struct lvp_descriptor_set_layout *layout);
-
-static inline void
-lvp_descriptor_set_layout_ref(struct lvp_descriptor_set_layout *layout)
-{
-   assert(layout && layout->ref_cnt >= 1);
-   p_atomic_inc(&layout->ref_cnt);
-}
-
-static inline void
-lvp_descriptor_set_layout_unref(struct lvp_device *device,
-                                struct lvp_descriptor_set_layout *layout)
-{
-   if (!layout)
-      return;
-   assert(layout->ref_cnt >= 1);
-   if (p_atomic_dec_zero(&layout->ref_cnt))
-      lvp_descriptor_set_layout_destroy(device, layout);
-}
-
 union lvp_descriptor_info {
    struct {
       struct lvp_sampler *sampler;
@@ -579,7 +557,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(lvp_descriptor_pool, base, VkDescriptorPool,
                                VK_OBJECT_TYPE_DESCRIPTOR_POOL)
 VK_DEFINE_NONDISP_HANDLE_CASTS(lvp_descriptor_set, base, VkDescriptorSet,
                                VK_OBJECT_TYPE_DESCRIPTOR_SET)
-VK_DEFINE_NONDISP_HANDLE_CASTS(lvp_descriptor_set_layout, base, VkDescriptorSetLayout,
+VK_DEFINE_NONDISP_HANDLE_CASTS(lvp_descriptor_set_layout, vk.base, VkDescriptorSetLayout,
                                VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
 VK_DEFINE_NONDISP_HANDLE_CASTS(lvp_descriptor_update_template, base, VkDescriptorUpdateTemplate,
                                VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE)



More information about the mesa-commit mailing list