From: Benjamin Otte Date: Wed, 5 Jul 2023 07:10:08 +0000 (+0200) Subject: vulkan: Remove all the semaphores X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~60^2~47 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d669e3ab6a12cf6f41b1f1f11c0bb50010271e9f;p=gtk4.git vulkan: Remove all the semaphores They aren't necessary with just one queue. --- diff --git a/gsk/vulkan/gskvulkanoffscreenop.c b/gsk/vulkan/gskvulkanoffscreenop.c index ef560a0025..042fcd4ca2 100644 --- a/gsk/vulkan/gskvulkanoffscreenop.c +++ b/gsk/vulkan/gskvulkanoffscreenop.c @@ -107,7 +107,6 @@ gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass, GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_rect_t *viewport, - VkSemaphore signal_semaphore, GskRenderNode *node) { GskVulkanOffscreenOp *self; @@ -142,7 +141,7 @@ gsk_vulkan_offscreen_op (GskVulkanRenderPass *render_pass, &view, clip, node, - signal_semaphore); + FALSE); cairo_region_destroy (clip); diff --git a/gsk/vulkan/gskvulkanoffscreenopprivate.h b/gsk/vulkan/gskvulkanoffscreenopprivate.h index bb43dfb075..9b2cda1431 100644 --- a/gsk/vulkan/gskvulkanoffscreenopprivate.h +++ b/gsk/vulkan/gskvulkanoffscreenopprivate.h @@ -9,7 +9,6 @@ GskVulkanImage * gsk_vulkan_offscreen_op (GskVulk GskVulkanRender *render, const graphene_vec2_t *scale, const graphene_rect_t *viewport, - VkSemaphore signal_semaphore, GskRenderNode *node); G_END_DECLS diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index a801b32f19..f98102163c 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -338,7 +338,7 @@ gsk_vulkan_render_add_node (GskVulkanRender *self, &self->viewport, self->clip, node, - VK_NULL_HANDLE); + TRUE); gsk_vulkan_render_verbose_print (self, "start of frame"); } @@ -649,13 +649,6 @@ gsk_vulkan_render_draw_pass (GskVulkanRender *self, 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); @@ -663,10 +656,10 @@ gsk_vulkan_render_draw_pass (GskVulkanRender *self, gsk_vulkan_command_pool_submit_buffer (self->command_pool, command_buffer, - wait_semaphore_count, - wait_semaphores, - signal_semaphore_count, - signal_semaphores, + 0, + NULL, + 0, + NULL, fence); } diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index 6d3abb9803..9bf055cf3d 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -60,8 +60,6 @@ struct _GskVulkanRenderPass VkRenderPass render_pass; VkFramebuffer framebuffer; - VkSemaphore signal_semaphore; - GArray *wait_semaphores; GskVulkanBuffer *vertex_data; }; @@ -93,7 +91,7 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context, const graphene_rect_t *viewport, cairo_region_t *clip, GskRenderNode *node, - VkSemaphore signal_semaphore) + gboolean is_root) { GskVulkanRenderPass *self; VkImageLayout final_layout; @@ -107,7 +105,7 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context, self->viewport = *viewport; graphene_vec2_init_from_vec2 (&self->scale, scale); - if (signal_semaphore != VK_NULL_HANDLE) // this is a dependent pass + if (!is_root) // this is a dependent pass final_layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; else final_layout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; @@ -166,8 +164,6 @@ gsk_vulkan_render_pass_new (GdkVulkanContext *context, NULL, &self->framebuffer); - self->signal_semaphore = signal_semaphore; - self->wait_semaphores = g_array_new (FALSE, FALSE, sizeof (VkSemaphore)); self->vertex_data = NULL; #ifdef G_ENABLE_DEBUG @@ -206,9 +202,6 @@ gsk_vulkan_render_pass_free (GskVulkanRenderPass *self) if (self->vertex_data) gsk_vulkan_buffer_free (self->vertex_data); - if (self->signal_semaphore != VK_NULL_HANDLE) - vkDestroySemaphore (device, self->signal_semaphore, NULL); - g_array_unref (self->wait_semaphores); g_free (self); } @@ -290,7 +283,6 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, GskRenderNode *node, graphene_rect_t *tex_bounds) { - VkSemaphore semaphore; GskVulkanImage *result; switch ((guint) gsk_render_node_get_node_type (node)) @@ -345,22 +337,11 @@ gsk_vulkan_render_pass_get_node_as_image (GskVulkanRenderPass *self, */ *tex_bounds = clipped; - vkCreateSemaphore (gdk_vulkan_context_get_device (self->vulkan), - &(VkSemaphoreCreateInfo) { - VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, - NULL, - 0 - }, - NULL, - &semaphore); - g_array_append_val (self->wait_semaphores, semaphore); - result = gsk_vulkan_offscreen_op (self, self->vulkan, render, &state->scale, &clipped, - semaphore, node); return result; @@ -968,7 +949,6 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass *self, GskRenderNode *node) { const graphene_rect_t *child_bounds; - VkSemaphore semaphore; GskVulkanImage *image; child_bounds = gsk_repeat_node_get_child_bounds (node); @@ -976,26 +956,11 @@ gsk_vulkan_render_pass_add_repeat_node (GskVulkanRenderPass *self, if (graphene_rect_get_area (child_bounds) == 0) return TRUE; - /* We need to create a texture in the right size so that we can repeat it - * properly, so even for texture nodes this step is necessary. - * We also can't use the clip because of that. */ - vkCreateSemaphore (gdk_vulkan_context_get_device (self->vulkan), - &(VkSemaphoreCreateInfo) { - VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, - NULL, - 0 - }, - NULL, - &semaphore); - - g_array_append_val (self->wait_semaphores, semaphore); - image = gsk_vulkan_offscreen_op (self, self->vulkan, render, &state->scale, child_bounds, - semaphore, gsk_repeat_node_get_child (node)); gsk_vulkan_texture_op (self, @@ -1488,22 +1453,6 @@ gsk_vulkan_render_pass_get_vertex_data (GskVulkanRenderPass *self, return self->vertex_data; } -gsize -gsk_vulkan_render_pass_get_wait_semaphores (GskVulkanRenderPass *self, - VkSemaphore **semaphores) -{ - *semaphores = (VkSemaphore *)self->wait_semaphores->data; - return self->wait_semaphores->len; -} - -gsize -gsk_vulkan_render_pass_get_signal_semaphores (GskVulkanRenderPass *self, - VkSemaphore **semaphores) -{ - *semaphores = (VkSemaphore *)&self->signal_semaphore; - return self->signal_semaphore != VK_NULL_HANDLE ? 1 : 0; -} - void gsk_vulkan_render_pass_reserve_descriptor_sets (GskVulkanRenderPass *self, GskVulkanRender *render) diff --git a/gsk/vulkan/gskvulkanrenderpassprivate.h b/gsk/vulkan/gskvulkanrenderpassprivate.h index 252a6db1ca..5201db6df3 100644 --- a/gsk/vulkan/gskvulkanrenderpassprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassprivate.h @@ -17,7 +17,7 @@ GskVulkanRenderPass * gsk_vulkan_render_pass_new (GdkVulk const graphene_rect_t *viewport, cairo_region_t *clip, GskRenderNode *node, - VkSemaphore signal_semaphore); + gboolean is_root); void gsk_vulkan_render_pass_free (GskVulkanRenderPass *self); @@ -37,10 +37,6 @@ void gsk_vulkan_render_pass_draw (GskVulk GskVulkanRender *render, VkPipelineLayout pipeline_layout, VkCommandBuffer command_buffer); -gsize gsk_vulkan_render_pass_get_wait_semaphores (GskVulkanRenderPass *self, - VkSemaphore **semaphores); -gsize gsk_vulkan_render_pass_get_signal_semaphores (GskVulkanRenderPass *self, - VkSemaphore **semaphores); G_END_DECLS