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,
