vulkan: Fold functions into only caller
authorBenjamin Otte <otte@redhat.com>
Thu, 13 Jul 2023 12:30:16 +0000 (14:30 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 16 Jul 2023 11:16:43 +0000 (13:16 +0200)
Now that the VulkanOp does begin/end of render passes, there's no need
to have a renderpass function for it anymore.

gsk/vulkan/gskvulkanrenderpass.c
gsk/vulkan/gskvulkanrenderpassop.c
gsk/vulkan/gskvulkanrenderpassprivate.h

index a6d954c6f887dcb04dfdcbcc3a192e6234c0f0ae..f3cdb72edf24bbee6b8623fa0aba2dc3a2535b8c 100644 (file)
@@ -50,8 +50,6 @@ struct _GskVulkanRenderPass
   cairo_region_t *clip;
 
   graphene_vec2_t scale;
-
-  VkRenderPass render_pass;
 };
 
 struct _GskVulkanParseState
@@ -76,8 +74,7 @@ gsk_vulkan_render_pass_new (GdkVulkanContext      *context,
                             const graphene_vec2_t *scale,
                             const graphene_rect_t *viewport,
                             cairo_region_t        *clip,
-                            GskRenderNode         *node,
-                            gboolean               is_root)
+                            GskRenderNode         *node)
 {
   GskVulkanRenderPass *self;
 
@@ -89,23 +86,6 @@ gsk_vulkan_render_pass_new (GdkVulkanContext      *context,
   self->viewport = *viewport;
   graphene_vec2_init_from_vec2 (&self->scale, scale);
 
-  if (is_root)
-    {
-      /* this is a swapchain target */
-      self->render_pass = gsk_vulkan_render_get_render_pass (render,
-                                                             gsk_vulkan_image_get_vk_format (target),
-                                                             VK_IMAGE_LAYOUT_UNDEFINED,
-                                                             VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
-    }
-  else
-    {
-      /* this is an offscreen */
-      self->render_pass = gsk_vulkan_render_get_render_pass (render,
-                                                             gsk_vulkan_image_get_vk_format (target),
-                                                             VK_IMAGE_LAYOUT_UNDEFINED,
-                                                             VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
-    }
-
 #ifdef G_ENABLE_DEBUG
   if (fallback_pixels_quark == 0)
     {
@@ -1344,55 +1324,3 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass *self,
 
   gsk_vulkan_render_pass_add_node (self, render, &state, node);
 }
-
-VkRenderPass
-gsk_vulkan_render_pass_begin_draw (GskVulkanRenderPass *self,
-                                   GskVulkanRender     *render,
-                                   VkPipelineLayout     pipeline_layout,
-                                   VkCommandBuffer      command_buffer)
-{
-  cairo_rectangle_int_t rect;
-
-  vkCmdSetViewport (command_buffer,
-                    0,
-                    1,
-                    &(VkViewport) {
-                        .x = 0,
-                        .y = 0,
-                        .width = self->viewport.size.width,
-                        .height = self->viewport.size.height,
-                        .minDepth = 0,
-                        .maxDepth = 1
-                    });
-
-  cairo_region_get_extents (self->clip, &rect);
-
-  vkCmdBeginRenderPass (command_buffer,
-                        &(VkRenderPassBeginInfo) {
-                            .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
-                            .renderPass = self->render_pass,
-                            .framebuffer = gsk_vulkan_image_get_framebuffer (self->target,
-                                                                             self->render_pass),
-                            .renderArea = { 
-                                { rect.x, rect.y },
-                                { rect.width, rect.height }
-                            },
-                            .clearValueCount = 1,
-                            .pClearValues = (VkClearValue [1]) {
-                                { .color = { .float32 = { 0.f, 0.f, 0.f, 0.f } } }
-                            }
-                        },
-                        VK_SUBPASS_CONTENTS_INLINE);
-
-  return self->render_pass;
-}
-
-void
-gsk_vulkan_render_pass_end_draw (GskVulkanRenderPass *self,
-                                 GskVulkanRender     *render,
-                                 VkPipelineLayout     pipeline_layout,
-                                 VkCommandBuffer      command_buffer)
-{
-  vkCmdEndRenderPass (command_buffer);
-}
-
index 5614f0eee390393abd307062b8670d7d2f5ce11f..5ae365da8aec2a812124ac611f4b6abde820ef55 100644 (file)
@@ -15,6 +15,11 @@ struct _GskVulkanRenderPassOp
 
   GskVulkanImage *image;
   GskVulkanRenderPass *render_pass;
+  cairo_rectangle_int_t area;
+  graphene_size_t viewport_size;
+
+  VkImageLayout initial_layout;
+  VkImageLayout final_layout;
 };
 
 static void
@@ -77,7 +82,40 @@ gsk_vulkan_render_pass_op_command (GskVulkanOp      *op,
   const char *current_pipeline_clip_type = NULL;
   VkRenderPass vk_render_pass;
 
-  vk_render_pass = gsk_vulkan_render_pass_begin_draw (self->render_pass, render, pipeline_layout, command_buffer);
+  vk_render_pass = gsk_vulkan_render_get_render_pass (render,
+                                                      gsk_vulkan_image_get_vk_format (self->image),
+                                                      self->initial_layout,
+                                                      self->final_layout);
+
+
+  vkCmdSetViewport (command_buffer,
+                    0,
+                    1,
+                    &(VkViewport) {
+                        .x = 0,
+                        .y = 0,
+                        .width = self->viewport_size.width,
+                        .height = self->viewport_size.height,
+                        .minDepth = 0,
+                        .maxDepth = 1
+                    });
+
+  vkCmdBeginRenderPass (command_buffer,
+                        &(VkRenderPassBeginInfo) {
+                            .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
+                            .renderPass = vk_render_pass,
+                            .framebuffer = gsk_vulkan_image_get_framebuffer (self->image,
+                                                                             vk_render_pass),
+                            .renderArea = { 
+                                { self->area.x, self->area.y },
+                                { self->area.width, self->area.height }
+                            },
+                            .clearValueCount = 1,
+                            .pClearValues = (VkClearValue [1]) {
+                                { .color = { .float32 = { 0.f, 0.f, 0.f, 0.f } } }
+                            }
+                        },
+                        VK_SUBPASS_CONTENTS_INLINE);
 
   op = op->next;
   while (op->op_class->stage != GSK_VULKAN_STAGE_END_PASS)
@@ -216,6 +254,11 @@ gsk_vulkan_render_pass_op (GskVulkanRender       *render,
   self = (GskVulkanRenderPassOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_OP_CLASS);
 
   self->image = image;
+  self->initial_layout = VK_IMAGE_LAYOUT_UNDEFINED;
+  self->final_layout = is_root ? VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+                               :VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+  cairo_region_get_extents (clip, &self->area);
+  self->viewport_size = viewport->size;
 
   self->render_pass = gsk_vulkan_render_pass_new (context,
                                                   render,
@@ -223,8 +266,7 @@ gsk_vulkan_render_pass_op (GskVulkanRender       *render,
                                                   scale,
                                                   viewport,
                                                   clip,
-                                                  node,
-                                                  is_root);
+                                                  node);
 
   /* This invalidates the self pointer */
   gsk_vulkan_render_pass_add (self->render_pass, render, node);
index 3625dea3f4071048c1540ae81eb8043733f8f4ae..08505e8b62a5ae77e308026991eda2d79531076e 100644 (file)
@@ -16,8 +16,7 @@ GskVulkanRenderPass *   gsk_vulkan_render_pass_new                      (GdkVulk
                                                                          const graphene_vec2_t  *scale,
                                                                          const graphene_rect_t  *viewport,
                                                                          cairo_region_t         *clip,
-                                                                         GskRenderNode          *node,
-                                                                         gboolean                is_root);
+                                                                         GskRenderNode          *node);
 
 void                    gsk_vulkan_render_pass_free                     (GskVulkanRenderPass    *self);
 
@@ -25,14 +24,5 @@ void                    gsk_vulkan_render_pass_add                      (GskVulk
                                                                          GskVulkanRender        *render,
                                                                          GskRenderNode          *node);
 
-VkRenderPass            gsk_vulkan_render_pass_begin_draw               (GskVulkanRenderPass    *self,
-                                                                         GskVulkanRender        *render,
-                                                                         VkPipelineLayout        pipeline_layout,
-                                                                         VkCommandBuffer         command_buffer);
-void                    gsk_vulkan_render_pass_end_draw                 (GskVulkanRenderPass    *self,
-                                                                         GskVulkanRender        *render,
-                                                                         VkPipelineLayout        pipeline_layout,
-                                                                         VkCommandBuffer         command_buffer);
-
 G_END_DECLS