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