[Mesa-dev] [PATCH mesa 2/4] egl/drm: Fix misused x and y offsets in swrast_put_image2()
Eric Engestrom
eric.engestrom at imgtec.com
Wed Jul 19 14:05:30 UTC 2017
From: Gwan-gyeong Mun <elongbug at gmail.com>
It fixes misused x and y variables on the calculation of the memory copy regions.
Cc: Giovanni Campagna <gcampagna at src.gnome.org>
Fixes: 8430af5ebe1ee8119e14 "Add support for swrast to the DRM EGL platform"
Signed-off-by: Mun Gwan-gyeong <elongbug at gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
[Eric: use gbm_bo_get_bpp() instead of local function, split clamp patch]
Signed-off-by: Eric Engestrom <eric.engestrom at imgtec.com>
---
src/egl/drivers/dri2/platform_drm.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
index d59009f3d2..b1cb3e13e6 100644
--- a/src/egl/drivers/dri2/platform_drm.c
+++ b/src/egl/drivers/dri2/platform_drm.c
@@ -526,6 +526,9 @@ swrast_put_image2(__DRIdrawable *driDrawable,
struct dri2_egl_surface *dri2_surf = loaderPrivate;
int internal_stride;
struct gbm_dri_bo *bo;
+ uint32_t bpp;
+ int x_bytes, width_bytes;
+ char *src, *dst;
if (op != __DRI_SWRAST_IMAGE_OP_DRAW &&
op != __DRI_SWRAST_IMAGE_OP_SWAP)
@@ -535,14 +538,26 @@ swrast_put_image2(__DRIdrawable *driDrawable,
return;
bo = gbm_dri_bo(dri2_surf->current->bo);
+
+ bpp = gbm_bo_get_bpp(&bo->base);
+ if (bpp == 0)
+ return;
+
+ x_bytes = x * (bpp >> 3);
+ width_bytes = width * (bpp >> 3);
+
if (gbm_dri_bo_map_dumb(bo) == NULL)
return;
internal_stride = bo->base.stride;
+ dst = bo->map + x_bytes + (y * internal_stride);
+ src = data;
+
for (int i = 0; i < height; i++) {
- memcpy(bo->map + (x + i) * internal_stride + y,
- data + i * stride, stride);
+ memcpy(dst, src, width_bytes);
+ dst += internal_stride;
+ src += stride;
}
gbm_dri_bo_unmap_dumb(bo);
--
Cheers,
Eric
More information about the mesa-dev
mailing list