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>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user