From 0946b0b333a0a11b8b7f3c91cf4b134f2c060415 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 25 Jun 2023 05:02:48 +0200 Subject: [PATCH] vulkan: Split out a function Making that function externally usable allows having render passes managed externally. Also remove a nonexisting function from the header. --- gsk/vulkan/gskvulkanrender.c | 51 +++++++++++++++++------------ gsk/vulkan/gskvulkanrenderprivate.h | 5 +-- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index 580d621d74..c6ef70a4a6 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -648,6 +648,33 @@ gsk_vulkan_render_prepare_descriptor_sets (GskVulkanRender *self) 0, NULL); } +void +gsk_vulkan_render_draw_pass (GskVulkanRender *self, + GskVulkanRenderPass *pass, + VkFence fence) +{ + VkCommandBuffer command_buffer; + gsize wait_semaphore_count; + gsize signal_semaphore_count; + VkSemaphore *wait_semaphores; + VkSemaphore *signal_semaphores; + + wait_semaphore_count = gsk_vulkan_render_pass_get_wait_semaphores (pass, &wait_semaphores); + signal_semaphore_count = gsk_vulkan_render_pass_get_signal_semaphores (pass, &signal_semaphores); + + command_buffer = gsk_vulkan_command_pool_get_buffer (self->command_pool); + + gsk_vulkan_render_pass_draw (pass, self, self->pipeline_layout, command_buffer); + + gsk_vulkan_command_pool_submit_buffer (self->command_pool, + command_buffer, + wait_semaphore_count, + wait_semaphores, + signal_semaphore_count, + signal_semaphores, + fence); +} + void gsk_vulkan_render_draw (GskVulkanRender *self) { @@ -662,27 +689,9 @@ gsk_vulkan_render_draw (GskVulkanRender *self) for (l = self->render_passes; l; l = l->next) { - GskVulkanRenderPass *pass = l->data; - VkCommandBuffer command_buffer; - gsize wait_semaphore_count; - gsize signal_semaphore_count; - VkSemaphore *wait_semaphores; - VkSemaphore *signal_semaphores; - - wait_semaphore_count = gsk_vulkan_render_pass_get_wait_semaphores (pass, &wait_semaphores); - signal_semaphore_count = gsk_vulkan_render_pass_get_signal_semaphores (pass, &signal_semaphores); - - command_buffer = gsk_vulkan_command_pool_get_buffer (self->command_pool); - - gsk_vulkan_render_pass_draw (pass, self, self->pipeline_layout, command_buffer); - - gsk_vulkan_command_pool_submit_buffer (self->command_pool, - command_buffer, - wait_semaphore_count, - wait_semaphores, - signal_semaphore_count, - signal_semaphores, - l->next != NULL ? VK_NULL_HANDLE : self->fence); + gsk_vulkan_render_draw_pass (self, + l->data, + l->next != NULL ? VK_NULL_HANDLE : self->fence); } #ifdef G_ENABLE_DEBUG diff --git a/gsk/vulkan/gskvulkanrenderprivate.h b/gsk/vulkan/gskvulkanrenderprivate.h index 112b657785..b0eb712f0d 100644 --- a/gsk/vulkan/gskvulkanrenderprivate.h +++ b/gsk/vulkan/gskvulkanrenderprivate.h @@ -97,8 +97,9 @@ void gsk_vulkan_render_bind_descriptor_sets (GskVulk VkCommandBuffer command_buffer); void gsk_vulkan_render_draw (GskVulkanRender *self); - -void gsk_vulkan_render_submit (GskVulkanRender *self); +void gsk_vulkan_render_draw_pass (GskVulkanRender *self, + GskVulkanRenderPass *pass, + VkFence fence); GdkTexture * gsk_vulkan_render_download_target (GskVulkanRender *self); VkFramebuffer gsk_vulkan_render_get_framebuffer (GskVulkanRender *self, -- 2.30.2