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:
parent
88f287a1d0
commit
aa40a04ad9
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue