From 8561ff37c4917c2ec2021a5c39274fea913c37ef Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Fri, 12 May 2023 15:23:02 +0200 Subject: [PATCH] vulkan: Use scale factor for offscreens and fallbacks Previously, we just used the defaultscale factor, but now that we're having it available in push constants, we can read it back for creating offscreens and rendering fallbacks. So do that. --- gsk/vulkan/gskvulkanrenderpass.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c index e20643eb43..81ef38927c 100644 --- a/gsk/vulkan/gskvulkanrenderpass.c +++ b/gsk/vulkan/gskvulkanrenderpass.c @@ -1118,8 +1118,8 @@ gsk_vulkan_render_pass_render_offscreen (GdkVulkanContext *vulkan, scale_x = graphene_vec2_get_x (scale); scale_y = graphene_vec2_get_y (scale); - view = GRAPHENE_RECT_INIT (viewport->origin.x, - viewport->origin.y, + view = GRAPHENE_RECT_INIT (scale_x * viewport->origin.x, + scale_y * viewport->origin.y, ceil (scale_x * viewport->size.width), ceil (scale_y * viewport->size.height)); @@ -1162,6 +1162,7 @@ gsk_vulkan_render_pass_get_node_as_texture (GskVulkanRenderPass *self, GskVulkanRender *render, GskVulkanUploader *uploader, GskRenderNode *node, + const graphene_vec2_t *scale, const graphene_rect_t *clip_bounds, const graphene_point_t *clip_offset, graphene_rect_t *tex_bounds) @@ -1219,7 +1220,7 @@ gsk_vulkan_render_pass_get_node_as_texture (GskVulkanRenderPass *self, uploader, semaphore, node, - &self->scale, + scale, &clipped); } } @@ -1238,8 +1239,9 @@ gsk_vulkan_render_pass_get_node_as_texture (GskVulkanRenderPass *self, /* XXX: We could intersect bounds with clip bounds here */ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, - ceil (node->bounds.size.width), - ceil (node->bounds.size.height)); + ceil (node->bounds.size.width * graphene_vec2_get_x (scale)), + ceil (node->bounds.size.height * graphene_vec2_get_y (scale))); + cairo_surface_set_device_scale (surface, graphene_vec2_get_x (scale), graphene_vec2_get_y (scale)); cr = cairo_create (surface); cairo_translate (cr, -node->bounds.origin.x, -node->bounds.origin.y); @@ -1380,6 +1382,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, GskVulkanOp *op; guint i; const graphene_rect_t *clip = NULL; + const graphene_vec2_t *scale = NULL; for (i = 0; i < self->render_ops->len; i++) { @@ -1422,6 +1425,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, render, uploader, child, + scale, clip, &op->render.offset, &tex_bounds); @@ -1458,7 +1462,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, uploader, semaphore, child, - &self->scale, + scale, child_bounds); get_tex_rect (&op->render.source_rect, &op->render.node->bounds, child_bounds); } @@ -1468,6 +1472,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, render, uploader, child, + scale, &child->bounds, &GRAPHENE_POINT_INIT (0, 0), &tex_bounds); @@ -1485,6 +1490,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, render, uploader, child, + scale, clip, &op->render.offset, &tex_bounds); @@ -1501,6 +1507,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, render, uploader, child, + scale, clip, &op->render.offset, &tex_bounds); @@ -1518,6 +1525,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, render, uploader, start, + scale, clip, &op->render.offset, &tex_bounds); @@ -1527,6 +1535,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, render, uploader, end, + scale, clip, &op->render.offset, &tex_bounds); @@ -1544,6 +1553,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, render, uploader, top, + scale, clip, &op->render.offset, &tex_bounds); @@ -1553,6 +1563,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, render, uploader, bottom, + scale, clip, &op->render.offset, &tex_bounds); @@ -1562,6 +1573,7 @@ gsk_vulkan_render_pass_upload (GskVulkanRenderPass *self, case GSK_VULKAN_OP_PUSH_VERTEX_CONSTANTS: clip = &op->constants.clip.bounds; + scale = &op->constants.scale; break; default: -- 2.30.2