From 6088a0bf51dd6bdfe39d9160a748bdde016f2c96 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 13 Feb 2024 13:10:30 -0500 Subject: [PATCH] egl/x11/sw: fix partial image uploads * swrast allocates images aligned to 64x64 tiles, which results in images that are larger than the window. PutImage requests must be clamped on the y-axis to avoid uploading/damaging out-of-bounds regions * winsys coords are y-inverted cc: mesa-stable Reviewed-by: Adam Jackson Part-of: --- src/egl/drivers/dri2/platform_x11.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index 97436a0254b..e0d9ddb343e 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -174,6 +174,11 @@ swrastPutImage(__DRIdrawable *draw, int op, int x, int y, int w, int h, return; } + /* clamp to drawable size */ + if (y + h > dri2_surf->base.Height) + h = dri2_surf->base.Height - y; + /* y-invert */ + y = dri2_surf->base.Height - y - h; if (size < max_req_len) { cookie = xcb_put_image( dri2_dpy->conn, XCB_IMAGE_FORMAT_Z_PIXMAP, dri2_surf->drawable, gc, w,