panvk: Use the vk_descriptor_set_layout base struct

Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17286>
This commit is contained in:
Jason Ekstrand 2022-06-28 14:24:58 -05:00 committed by Marge Bot
parent a579d33352
commit f66f37a99e
3 changed files with 7 additions and 55 deletions

View file

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

View file

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

View file

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