vulkan: Remove all the semaphores
authorBenjamin Otte <otte@redhat.com>
Wed, 5 Jul 2023 07:10:08 +0000 (09:10 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 16 Jul 2023 10:13:00 +0000 (12:13 +0200)
They aren't necessary with just one queue.

gsk/vulkan/gskvulkanoffscreenop.c
gsk/vulkan/gskvulkanoffscreenopprivate.h
gsk/vulkan/gskvulkanrender.c
gsk/vulkan/gskvulkanrenderpass.c
gsk/vulkan/gskvulkanrenderpassprivate.h

index ef560a00256757d9eef2de7d713ec5caf1a3d7b3..042fcd4ca243e38cf4719b764c41daf135f4d718 100644 (file)
@@ -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);
 
index bb43dfb075623e699e6881591f7388b07bb83d02..9b2cda14310405df35b8945b826ffc05bc26c7f9 100644 (file)
@@ -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
index a801b32f19970dce99a7ac8b3f4567ec052ad971..f98102163c1e8f953dc863f81413d235b6da5419 100644 (file)
@@ -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);
 }
 
index 6d3abb9803e0b10a2a48af58560ef194068399a9..9bf055cf3db68a1c3864b02d66afb3909780ab9a 100644 (file)
@@ -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)
index 252a6db1ca8a605269873a165ad1896d09599293..5201db6df3bfed374f6c71f2c67a66fdea6ceaf6 100644 (file)
@@ -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