From 11a06462819fe8b03f1930accd78e9fa436c562b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Jul 2023 00:08:56 +0200 Subject: [PATCH] vulkan: Pass rectangles where no regions are used 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 | 4 +++- gsk/vulkan/gskvulkanrenderpass.c | 13 ++++++------- gsk/vulkan/gskvulkanrenderpassop.c | 21 ++++++++------------- gsk/vulkan/gskvulkanrenderpassopprivate.h | 2 +- gsk/vulkan/gskvulkanrenderpassprivate.h | 2 +- 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/gsk/vulkan/gskvulkanrender.c b/gsk/vulkan/gskvulkanrender.c index 63e15ecc01..e0140fa0c9 100644 --- a/gsk/vulkan/gskvulkanrender.c +++ b/gsk/vulkan/gskvulkanrender.c @@ -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, diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index d9d15932f2..476d533daf 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -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, diff --git a/gsk/vulkan/gskvulkanrenderpassop.c b/gsk/vulkan/gskvulkanrenderpassop.c index 35c20e83e1..ab6d192eb2 100644 --- a/gsk/vulkan/gskvulkanrenderpassop.c +++ b/gsk/vulkan/gskvulkanrenderpassop.c @@ -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; } diff --git a/gsk/vulkan/gskvulkanrenderpassopprivate.h b/gsk/vulkan/gskvulkanrenderpassopprivate.h index 85ab5b095b..09aa34b86e 100644 --- a/gsk/vulkan/gskvulkanrenderpassopprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassopprivate.h @@ -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, diff --git a/gsk/vulkan/gskvulkanrenderpassprivate.h b/gsk/vulkan/gskvulkanrenderpassprivate.h index d554066ca0..62b31ee143 100644 --- a/gsk/vulkan/gskvulkanrenderpassprivate.h +++ b/gsk/vulkan/gskvulkanrenderpassprivate.h @@ -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 -- 2.30.2