summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2019-12-03 16:42:03 +0100
committerJonas Ådahl <jadahl@gmail.com>2019-12-03 16:45:37 +0100
commitba74f41a70a71f67d82e72f13f3c0c32071441d6 (patch)
treeca3c3c0c9485c264a08fe03c8f30e17399c1570e /gdk
parentd6a6313493f658912eb64349d924dc95f6a1aa19 (diff)
downloadgtk+-ba74f41a70a71f67d82e72f13f3c0c32071441d6.tar.gz
wayland/vulkancontext: Fix present region on HiDPI
VkPresentRegionsKHR is expected to operate in buffer coordinates, but the region we get passed is in surface coordinates, so it must be scaled.
Diffstat (limited to 'gdk')
-rw-r--r--gdk/gdkvulkancontext.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gdk/gdkvulkancontext.c b/gdk/gdkvulkancontext.c
index 247e6e094f..5582afeb92 100644
--- a/gdk/gdkvulkancontext.c
+++ b/gdk/gdkvulkancontext.c
@@ -441,11 +441,14 @@ gdk_vulkan_context_end_frame (GdkDrawContext *draw_context,
{
GdkVulkanContext *context = GDK_VULKAN_CONTEXT (draw_context);
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
+ GdkSurface *surface = gdk_draw_context_get_surface (draw_context);
VkPresentRegionsKHR *regionsptr = VK_NULL_HANDLE;
VkPresentRegionsKHR regions;
cairo_rectangle_int_t extents;
+ int scale;
cairo_region_get_extents (painted, &extents);
+ scale = gdk_surface_get_scale_factor (surface);
regions = (VkPresentRegionsKHR) {
.sType = VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR,
@@ -454,10 +457,10 @@ gdk_vulkan_context_end_frame (GdkDrawContext *draw_context,
.rectangleCount = 1,
.pRectangles = &(VkRectLayerKHR) {
.layer = 0,
- .offset.x = extents.x,
- .offset.y = extents.y,
- .extent.width = extents.width,
- .extent.height = extents.height,
+ .offset.x = extents.x * scale,
+ .offset.y = extents.y * scale,
+ .extent.width = extents.width * scale,
+ .extent.height = extents.height * scale,
}
},
};