From 1944af3260e50758642cd3dccc07c239fd907189 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 30 Jan 2023 20:12:01 -0600 Subject: [PATCH] nvk: Add a helper for pushing descriptors This reduces the boilerplate a bit. Part-of: --- src/nouveau/vulkan/nvk_cmd_buffer.c | 41 ++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/nouveau/vulkan/nvk_cmd_buffer.c b/src/nouveau/vulkan/nvk_cmd_buffer.c index 4a72158..4a7076e 100644 --- a/src/nouveau/vulkan/nvk_cmd_buffer.c +++ b/src/nouveau/vulkan/nvk_cmd_buffer.c @@ -373,18 +373,13 @@ nvk_CmdPushConstants(VkCommandBuffer commandBuffer, } } -VKAPI_ATTR void VKAPI_CALL -nvk_CmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer, - VkPipelineBindPoint pipelineBindPoint, - VkPipelineLayout layout, - uint32_t set, - uint32_t descriptorWriteCount, - const VkWriteDescriptorSet *pDescriptorWrites) +static struct nvk_push_descriptor_set * +nvk_cmd_push_descriptors(struct nvk_cmd_buffer *cmd, + VkPipelineBindPoint bind_point, + uint32_t set) { - VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer); - VK_FROM_HANDLE(vk_pipeline_layout, pipeline_layout, layout); struct nvk_descriptor_state *desc = - nvk_get_descriptors_state(cmd, pipelineBindPoint); + nvk_get_descriptors_state(cmd, bind_point); assert(set < NVK_MAX_SETS); if (unlikely(desc->push[set] == NULL)) { @@ -393,20 +388,38 @@ nvk_CmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (unlikely(desc->push[set] == NULL)) { vk_command_buffer_set_error(&cmd->vk, VK_ERROR_OUT_OF_HOST_MEMORY); - return; + return NULL; } } /* Pushing descriptors replaces whatever sets are bound */ desc->sets[set] = NULL; + desc->push_dirty |= BITFIELD_BIT(set); + + return desc->push[set]; +} + +VKAPI_ATTR void VKAPI_CALL +nvk_CmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet *pDescriptorWrites) +{ + VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer); + VK_FROM_HANDLE(vk_pipeline_layout, pipeline_layout, layout); + + struct nvk_push_descriptor_set *push_set = + nvk_cmd_push_descriptors(cmd, pipelineBindPoint, set); + if (unlikely(push_set == NULL)) + return; struct nvk_descriptor_set_layout *set_layout = vk_to_nvk_descriptor_set_layout(pipeline_layout->set_layouts[set]); - nvk_push_descriptor_set_update(desc->push[set], - set_layout, + nvk_push_descriptor_set_update(push_set, set_layout, descriptorWriteCount, pDescriptorWrites); - desc->push_dirty |= BITFIELD_BIT(set); } void -- 2.7.4