vulkan: Pass rectangles where no regions are used
authorBenjamin Otte <otte@redhat.com>
Tue, 18 Jul 2023 22:08:56 +0000 (00:08 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 19 Jul 2023 19:30:35 +0000 (21:30 +0200)
The API was using regions because it always had. But all the code ever
did was get the extents of the region.

So simplify everything by using rectangles everywhere.

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

index 63e15ecc019f71b32edd1c0d9ac2923080b6ef44..e0140fa0c97818386238bbb1cb042d8f8de1987c 100644 (file)
@@ -492,12 +492,14 @@ gsk_vulkan_render_add_node (GskVulkanRender       *self,
                             gpointer               download_data)
 {
   graphene_vec2_t scale;
+  cairo_rectangle_int_t extents;
 
   graphene_vec2_init (&scale, self->scale, self->scale);
+  cairo_region_get_extents (self->clip, &extents);
 
   gsk_vulkan_render_pass_op (self,
                              g_object_ref (self->target),
-                             self->clip,
+                             &extents,
                              &scale,
                              &self->viewport,
                              node,
index d9d15932f20616b95d0ccb5d02d8cb91cb922fd4..476d533dafc94e97b40e907b395e50a4b4c6b813 100644 (file)
@@ -1257,20 +1257,19 @@ gsk_vulkan_render_pass_add (GskVulkanRenderPass   *self,
                             GskVulkanRender       *render,
                             const graphene_vec2_t *scale,
                             const graphene_rect_t *viewport,
-                            cairo_region_t        *clip_region,
+                            cairo_rectangle_int_t *clip,
                             GskRenderNode         *node)
 {
   GskVulkanParseState state;
-  graphene_rect_t clip;
+  graphene_rect_t scaled_clip;
   float scale_x, scale_y;
 
   scale_x = 1 / graphene_vec2_get_x (scale);
   scale_y = 1 / graphene_vec2_get_y (scale);
-  cairo_region_get_extents (clip_region, &state.scissor);
-  clip = GRAPHENE_RECT_INIT(state.scissor.x, state.scissor.y,
-                            state.scissor.width, state.scissor.height);
-  graphene_rect_scale (&clip, scale_x, scale_y, &clip);
-  gsk_vulkan_clip_init_empty (&state.clip, &clip);
+  state.scissor = *clip;
+  scaled_clip = GRAPHENE_RECT_INIT(clip->x, clip->y, clip->width, clip->height);
+  graphene_rect_scale (&scaled_clip, scale_x, scale_y, &scaled_clip);
+  gsk_vulkan_clip_init_empty (&state.clip, &scaled_clip);
 
   state.modelview = NULL;
   graphene_matrix_init_ortho (&state.projection,
index 35c20e83e1613c99057f0cb4782d9b87b0d3e209..ab6d192eb2d43ca279fe6a5988504015773cc2c2 100644 (file)
@@ -245,7 +245,7 @@ static const GskVulkanOpClass GSK_VULKAN_RENDER_PASS_END_OP_CLASS = {
 void
 gsk_vulkan_render_pass_op (GskVulkanRender       *render,
                            GskVulkanImage        *image,
-                           cairo_region_t        *clip,
+                           cairo_rectangle_int_t *area,
                            const graphene_vec2_t *scale,
                            const graphene_rect_t *viewport,
                            GskRenderNode         *node,
@@ -260,7 +260,7 @@ gsk_vulkan_render_pass_op (GskVulkanRender       *render,
   self->image = image;
   self->initial_layout = initial_layout;
   self->final_layout = final_layout;
-  cairo_region_get_extents (clip, &self->area);
+  self->area = *area;
   self->viewport_size = viewport->size;
 
   self->render_pass = gsk_vulkan_render_pass_new ();
@@ -270,7 +270,7 @@ gsk_vulkan_render_pass_op (GskVulkanRender       *render,
                               render,
                               scale,
                               viewport,
-                              clip,
+                              area,
                               node);
 
   end = (GskVulkanRenderPassEndOp *) gsk_vulkan_op_alloc (render, &GSK_VULKAN_RENDER_PASS_END_OP_CLASS);
@@ -288,7 +288,6 @@ gsk_vulkan_render_pass_op_offscreen (GskVulkanRender       *render,
   GdkVulkanContext *context;
   graphene_rect_t view;
   GskVulkanImage *image;
-  cairo_region_t *clip;
   float scale_x, scale_y;
 
   scale_x = graphene_vec2_get_x (scale);
@@ -304,22 +303,18 @@ gsk_vulkan_render_pass_op_offscreen (GskVulkanRender       *render,
                                                   gsk_render_node_get_preferred_depth (node)),
                                               view.size.width, view.size.height);
 
-  clip = cairo_region_create_rectangle (&(cairo_rectangle_int_t) {
-                                          0, 0,
-                                          gsk_vulkan_image_get_width (image),
-                                          gsk_vulkan_image_get_height (image)
-                                        });
-
   gsk_vulkan_render_pass_op (render,
                              image,
-                             clip,
+                             &(cairo_rectangle_int_t) {
+                                 0, 0,
+                                 gsk_vulkan_image_get_width (image),
+                                 gsk_vulkan_image_get_height (image)
+                             },
                              scale,
                              &view,
                              node,
                              VK_IMAGE_LAYOUT_UNDEFINED,
                              VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
 
-  cairo_region_destroy (clip);
-
   return image;
 }
index 85ab5b095b855220fece539a3272704a570face5..09aa34b86ede719ced7cd39064fb4dc31c772dfc 100644 (file)
@@ -6,7 +6,7 @@ G_BEGIN_DECLS
 
 void                    gsk_vulkan_render_pass_op                       (GskVulkanRender                *render,
                                                                          GskVulkanImage                 *image,
-                                                                         cairo_region_t                 *clip,
+                                                                         cairo_rectangle_int_t          *area,
                                                                          const graphene_vec2_t          *scale,
                                                                          const graphene_rect_t          *viewport,
                                                                          GskRenderNode                  *node,
index d554066ca06e940dbc2591a154db18ce04a94bf8..62b31ee143e26d8b86a66639cf54839de609f2af 100644 (file)
@@ -18,7 +18,7 @@ void                    gsk_vulkan_render_pass_add                      (GskVulk
                                                                          GskVulkanRender        *render,
                                                                          const graphene_vec2_t  *scale,
                                                                          const graphene_rect_t  *viewport,
-                                                                         cairo_region_t         *clip,
+                                                                         cairo_rectangle_int_t  *clip,
                                                                          GskRenderNode          *node);
 
 G_END_DECLS