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:
Chia-I Wu
2022-08-19 13:51:08 -07:00
committed by Marge Bot
parent 43430fe240
commit 65f1baf6c6
3 changed files with 21 additions and 64 deletions
+10 -9
View File
@@ -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;
}
+7 -31
View File
@@ -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);
}
+4 -24
View File
@@ -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,