From: Benjamin Otte Date: Sun, 25 Jun 2023 03:02:48 +0000 (+0200) Subject: vulkan: Split out a function X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~60^2~82 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0946b0b333a0a11b8b7f3c91cf4b134f2c060415;p=gtk4.git vulkan: Split out a function Making that function externally usable allows having render passes managed externally. Also remove a nonexisting function from the header. --- 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,