[Mesa-dev] [PATCH] egl: Fix missing clamping in eglSetDamageRegionKHR

Harish Krupo harish.krupo.kps at intel.com
Sat Jul 7 21:05:10 UTC 2018


Clamp the x and y co-ordinates of the rectangles.

Signed-off-by: Harish Krupo <harish.krupo.kps at intel.com>
---
 src/egl/main/eglapi.c | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index c110349119..c7d07c4fde 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,14 @@ _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 x, y;
+      x = CLAMP(rects[i], 0, surf_width);
+      y = CLAMP(rects[i + 1], 0, surf_height);
+
+      rects[i] = x;
+      rects[i + 1] = y;
+      rects[i + 2] = CLAMP(rects[i + 2], x, surf_width);
+      rects[i + 3] = CLAMP(rects[i + 3], y, surf_height);
    }
 }
 
-- 
2.18.0



More information about the mesa-dev mailing list