dzn: Use the vk_pipeline_layout base struct

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17286>
This commit is contained in:
Boris Brezillon 2022-06-29 05:10:10 -07:00 committed by Marge Bot
parent 88f287a1d0
commit aa40a04ad9
2 changed files with 13 additions and 48 deletions

View File

@ -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)
{

View File

@ -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)