diff --git a/src/microsoft/vulkan/dzn_descriptor_set.c b/src/microsoft/vulkan/dzn_descriptor_set.c index 58e6eb9e65e..b1ee2e28c4b 100644 --- a/src/microsoft/vulkan/dzn_descriptor_set.c +++ b/src/microsoft/vulkan/dzn_descriptor_set.c @@ -483,14 +483,16 @@ dzn_GetDescriptorSetLayoutSupport(VkDevice device, } static void -dzn_pipeline_layout_destroy(struct dzn_pipeline_layout *layout) +dzn_pipeline_layout_destroy(struct vk_device *vk_device, + struct vk_pipeline_layout *vk_layout) { - struct dzn_device *device = container_of(layout->base.device, struct dzn_device, vk); + struct dzn_pipeline_layout *layout = + container_of(vk_layout, struct dzn_pipeline_layout, vk); if (layout->root.sig) ID3D12RootSignature_Release(layout->root.sig); - vk_free(&device->vk.alloc, layout); + vk_pipeline_layout_destroy(vk_device, &layout->vk); } // Reserve two root parameters for the push constants and sysvals CBVs. @@ -562,11 +564,10 @@ dzn_pipeline_layout_create(struct dzn_device *device, VK_MULTIALLOC_DECL(&ma, struct dzn_pipeline_layout, layout, 1); VK_MULTIALLOC_DECL(&ma, uint32_t, binding_translation, binding_count); - if (!vk_multialloc_zalloc(&ma, &device->vk.alloc, - VK_SYSTEM_ALLOCATION_SCOPE_DEVICE)) + if (!vk_pipeline_layout_multizalloc(&device->vk, &ma, pCreateInfo)) return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); - vk_object_base_init(&device->vk, &layout->base, VK_OBJECT_TYPE_PIPELINE_LAYOUT); + layout->vk.destroy = dzn_pipeline_layout_destroy; for (uint32_t s = 0; s < pCreateInfo->setLayoutCount; s++) { VK_FROM_HANDLE(dzn_descriptor_set_layout, set_layout, pCreateInfo->pSetLayouts[s]); @@ -580,8 +581,6 @@ dzn_pipeline_layout_create(struct dzn_device *device, uint32_t range_count = 0, static_sampler_count = 0; - p_atomic_set(&layout->refcount, 1); - layout->root.param_count = 0; dzn_foreach_pool_type (type) layout->desc_count[type] = 0; @@ -628,7 +627,7 @@ dzn_pipeline_layout_create(struct dzn_device *device, vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*ranges) * range_count, 8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); if (range_count && !ranges) { - dzn_pipeline_layout_destroy(layout); + vk_pipeline_layout_unref(&device->vk, &layout->vk); return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); } @@ -638,7 +637,7 @@ dzn_pipeline_layout_create(struct dzn_device *device, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND); if (static_sampler_count && !static_sampler_descs) { vk_free2(&device->vk.alloc, pAllocator, ranges); - dzn_pipeline_layout_destroy(layout); + vk_pipeline_layout_unref(&device->vk, &layout->vk); return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); } @@ -746,7 +745,7 @@ dzn_pipeline_layout_create(struct dzn_device *device, vk_free2(&device->vk.alloc, pAllocator, static_sampler_descs); if (!layout->root.sig) { - dzn_pipeline_layout_destroy(layout); + vk_pipeline_layout_unref(&device->vk, &layout->vk); return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); } @@ -755,24 +754,6 @@ dzn_pipeline_layout_create(struct dzn_device *device, return VK_SUCCESS; } -struct dzn_pipeline_layout * -dzn_pipeline_layout_ref(struct dzn_pipeline_layout *layout) -{ - if (layout) - p_atomic_inc(&layout->refcount); - - return layout; -} - -void -dzn_pipeline_layout_unref(struct dzn_pipeline_layout *layout) -{ - if (layout) { - if (p_atomic_dec_zero(&layout->refcount)) - dzn_pipeline_layout_destroy(layout); - } -} - VKAPI_ATTR VkResult VKAPI_CALL dzn_CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo *pCreateInfo, @@ -783,16 +764,6 @@ dzn_CreatePipelineLayout(VkDevice device, pCreateInfo, pAllocator, pPipelineLayout); } -VKAPI_ATTR void VKAPI_CALL -dzn_DestroyPipelineLayout(VkDevice device, - VkPipelineLayout layout, - const VkAllocationCallbacks *pAllocator) -{ - VK_FROM_HANDLE(dzn_pipeline_layout, playout, layout); - - dzn_pipeline_layout_unref(playout); -} - static D3D12_DESCRIPTOR_HEAP_TYPE desc_type_to_heap_type(VkDescriptorType in) { diff --git a/src/microsoft/vulkan/dzn_private.h b/src/microsoft/vulkan/dzn_private.h index 521692e6920..9c57980b3dc 100644 --- a/src/microsoft/vulkan/dzn_private.h +++ b/src/microsoft/vulkan/dzn_private.h @@ -33,6 +33,7 @@ #include "vk_image.h" #include "vk_log.h" #include "vk_physical_device.h" +#include "vk_pipeline_layout.h" #include "vk_render_pass.h" #include "vk_sync.h" #include "vk_sync_binary.h" @@ -645,8 +646,7 @@ struct dzn_descriptor_set { }; struct dzn_pipeline_layout { - struct vk_object_base base; - int32_t refcount; + struct vk_pipeline_layout vk; struct { uint32_t heap_offsets[NUM_POOL_TYPES]; struct { @@ -674,12 +674,6 @@ struct dzn_pipeline_layout { } stages[MESA_VULKAN_SHADER_STAGES]; }; -struct dzn_pipeline_layout * -dzn_pipeline_layout_ref(struct dzn_pipeline_layout *layout); - -void -dzn_pipeline_layout_unref(struct dzn_pipeline_layout *layout); - struct dzn_descriptor_update_template_entry { VkDescriptorType type; uint32_t desc_count; @@ -1117,7 +1111,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(dzn_image_view, vk.base, VkImageView, VK_OBJECT_T VK_DEFINE_NONDISP_HANDLE_CASTS(dzn_pipeline, base, VkPipeline, VK_OBJECT_TYPE_PIPELINE) VK_DEFINE_NONDISP_HANDLE_CASTS(dzn_graphics_pipeline, base.base, VkPipeline, VK_OBJECT_TYPE_PIPELINE) VK_DEFINE_NONDISP_HANDLE_CASTS(dzn_compute_pipeline, base.base, VkPipeline, VK_OBJECT_TYPE_PIPELINE) -VK_DEFINE_NONDISP_HANDLE_CASTS(dzn_pipeline_layout, base, VkPipelineLayout, VK_OBJECT_TYPE_PIPELINE_LAYOUT) +VK_DEFINE_NONDISP_HANDLE_CASTS(dzn_pipeline_layout, vk.base, VkPipelineLayout, VK_OBJECT_TYPE_PIPELINE_LAYOUT) VK_DEFINE_NONDISP_HANDLE_CASTS(dzn_query_pool, base, VkQueryPool, VK_OBJECT_TYPE_QUERY_POOL) VK_DEFINE_NONDISP_HANDLE_CASTS(dzn_sampler, base, VkSampler, VK_OBJECT_TYPE_SAMPLER)