diff --git a/src/panfrost/vulkan/panvk_descriptor_set.c b/src/panfrost/vulkan/panvk_descriptor_set.c index 451028548db..057f13a98a6 100644 --- a/src/panfrost/vulkan/panvk_descriptor_set.c +++ b/src/panfrost/vulkan/panvk_descriptor_set.c @@ -38,27 +38,6 @@ #include "pan_bo.h" -void -panvk_descriptor_set_layout_destroy(struct panvk_device *device, - struct panvk_descriptor_set_layout *layout) -{ - vk_object_free(&device->vk, NULL, layout); -} - -void -panvk_DestroyDescriptorSetLayout(VkDevice _device, - VkDescriptorSetLayout _set_layout, - const VkAllocationCallbacks *pAllocator) -{ - VK_FROM_HANDLE(panvk_device, device, _device); - VK_FROM_HANDLE(panvk_descriptor_set_layout, set_layout, _set_layout); - - if (!set_layout) - return; - - panvk_descriptor_set_layout_unref(device, set_layout); -} - /* FIXME: make sure those values are correct */ #define PANVK_MAX_TEXTURES (1 << 16) #define PANVK_MAX_IMAGES (1 << 8) @@ -163,8 +142,8 @@ panvk_CreatePipelineLayout(VkDevice _device, for (unsigned set = 0; set < pCreateInfo->setLayoutCount; set++) { VK_FROM_HANDLE(panvk_descriptor_set_layout, set_layout, pCreateInfo->pSetLayouts[set]); - layout->sets[set].layout = panvk_descriptor_set_layout_ref(set_layout); - p_atomic_inc(&set_layout->refcount); + vk_descriptor_set_layout_ref(&set_layout->vk); + layout->sets[set].layout = set_layout; layout->sets[set].sampler_offset = sampler_idx; layout->sets[set].tex_offset = tex_idx; layout->sets[set].ubo_offset = ubo_idx; @@ -231,7 +210,7 @@ panvk_pipeline_layout_destroy(struct panvk_device *device, struct panvk_pipeline_layout *layout) { for (unsigned i = 0; i < layout->num_sets; i++) - panvk_descriptor_set_layout_unref(device, layout->sets[i].layout); + vk_descriptor_set_layout_unref(&device->vk, &layout->sets[i].layout->vk); vk_object_free(&device->vk, NULL, layout); } diff --git a/src/panfrost/vulkan/panvk_private.h b/src/panfrost/vulkan/panvk_private.h index 9604f5819a1..04975db7efa 100644 --- a/src/panfrost/vulkan/panvk_private.h +++ b/src/panfrost/vulkan/panvk_private.h @@ -52,6 +52,7 @@ #include "vk_buffer.h" #include "vk_command_buffer.h" #include "vk_command_pool.h" +#include "vk_descriptor_set_layout.h" #include "vk_device.h" #include "vk_image.h" #include "vk_instance.h" @@ -369,11 +370,7 @@ struct panvk_descriptor_set_binding_layout { }; struct panvk_descriptor_set_layout { - struct vk_object_base base; - int32_t refcount; - - /* The create flags for this descriptor set layout */ - VkDescriptorSetLayoutCreateFlags flags; + struct vk_descriptor_set_layout vk; /* Shader stages affected by this descriptor set */ uint16_t shader_stages; @@ -398,27 +395,6 @@ struct panvk_descriptor_set_layout { struct panvk_descriptor_set_binding_layout bindings[0]; }; -void -panvk_descriptor_set_layout_destroy(struct panvk_device *dev, - struct panvk_descriptor_set_layout *layout); - -static inline void -panvk_descriptor_set_layout_unref(struct panvk_device *dev, - struct panvk_descriptor_set_layout *layout) -{ - if (layout && p_atomic_dec_zero(&layout->refcount)) - panvk_descriptor_set_layout_destroy(dev, layout); -} - -static inline struct panvk_descriptor_set_layout * -panvk_descriptor_set_layout_ref(struct panvk_descriptor_set_layout *layout) -{ - if (layout) - p_atomic_inc(&layout->refcount); - - return layout; -} - struct panvk_pipeline_layout { struct vk_object_base base; int32_t refcount; @@ -1100,7 +1076,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer, vk.base, VkBuffer, VK_OBJECT_TYPE_B VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_buffer_view, base, VkBufferView, VK_OBJECT_TYPE_BUFFER_VIEW) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_pool, base, VkDescriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set, base, VkDescriptorSet, VK_OBJECT_TYPE_DESCRIPTOR_SET) -VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set_layout, base, +VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set_layout, vk.base, VkDescriptorSetLayout, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_device_memory, base, VkDeviceMemory, VK_OBJECT_TYPE_DEVICE_MEMORY) VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_event, base, VkEvent, VK_OBJECT_TYPE_EVENT) diff --git a/src/panfrost/vulkan/panvk_vX_descriptor_set.c b/src/panfrost/vulkan/panvk_vX_descriptor_set.c index 0dd2767467d..d02c3526e75 100644 --- a/src/panfrost/vulkan/panvk_vX_descriptor_set.c +++ b/src/panfrost/vulkan/panvk_vX_descriptor_set.c @@ -113,8 +113,7 @@ panvk_per_arch(CreateDescriptorSetLayout)(VkDevice _device, (sizeof(struct panvk_descriptor_set_binding_layout) * num_bindings) + (sizeof(struct panvk_sampler *) * num_immutable_samplers); - 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) { result = VK_ERROR_OUT_OF_HOST_MEMORY; goto err_free_bindings; @@ -125,7 +124,6 @@ panvk_per_arch(CreateDescriptorSetLayout)(VkDevice _device, (sizeof(struct panvk_descriptor_set_binding_layout) * num_bindings)); - set_layout->flags = pCreateInfo->flags; set_layout->binding_count = num_bindings; unsigned sampler_idx = 0, tex_idx = 0, ubo_idx = 0; @@ -218,7 +216,6 @@ panvk_per_arch(CreateDescriptorSetLayout)(VkDevice _device, set_layout->num_dyn_ubos = dyn_ubo_idx; set_layout->num_dyn_ssbos = dyn_ssbo_idx; set_layout->num_imgs = img_idx; - p_atomic_set(&set_layout->refcount, 1); free(bindings); *pSetLayout = panvk_descriptor_set_layout_to_handle(set_layout);