summaryrefslogtreecommitdiffstats
path: root/src/egl
diff options
context:
space:
mode:
authorHarish Krupo <[email protected]>2018-07-08 12:53:00 +0530
committerEric Engestrom <[email protected]>2018-07-24 14:46:21 +0100
commitfd734608c3c40a1a93c6becaced69ddd04d4cf9a (patch)
tree5014c9dc32cd79ede49d3de1fd58b960ed3d5b8f /src/egl
parentc3eaf8fe5746e5b29a46a076247ba072c84e2ec5 (diff)
egl: Fix missing clamping in eglSetDamageRegionKHR
Clamp the x and y co-ordinates of the rectangles. v2: Clamp width/height after converting to co-ordinates (Ilia Merkin) Signed-off-by: Harish Krupo <[email protected]> Reviewed-by: Qiang Yu <[email protected]> Reviewed-by: Tapani Pälli <[email protected]> Reviewed-by: Eric Engestrom <[email protected]>
Diffstat (limited to 'src/egl')
-rw-r--r--src/egl/main/eglapi.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index c1103491191..deb479b6d56 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -1320,9 +1320,7 @@ eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface surface,
}
/**
- * If the width of the passed rect is greater than the surface's
- * width then it is clamped to the width of the surface. Same with
- * height.
+ * Clamp the rectangles so that they lie within the surface.
*/
static void
@@ -1334,17 +1332,16 @@ _eglSetDamageRegionKHRClampRects(_EGLDisplay* disp, _EGLSurface* surf,
EGLint surf_width = surf->Width;
for (i = 0; i < (4 * n_rects); i += 4) {
- EGLint x, y, rect_width, rect_height;
- x = rects[i];
- y = rects[i + 1];
- rect_width = rects[i + 2];
- rect_height = rects[i + 3];
-
- if (rect_width > surf_width - x)
- rects[i + 2] = surf_width - x;
-
- if (rect_height > surf_height - y)
- rects[i + 3] = surf_height - y;
+ EGLint x1, y1, x2, y2;
+ x1 = rects[i];
+ y1 = rects[i + 1];
+ x2 = rects[i + 2] + x1;
+ y2 = rects[i + 3] + y1;
+
+ rects[i] = CLAMP(x1, 0, surf_width);
+ rects[i + 1] = CLAMP(y1, 0, surf_height);
+ rects[i + 2] = CLAMP(x2, 0, surf_width) - rects[i];
+ rects[i + 3] = CLAMP(y2, 0, surf_height) - rects[i + 1];
}
}