From 00af91ca463a2486c043c635d94d9958fb1e8700 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Thu, 27 Dec 2018 14:26:33 +1000 Subject: [PATCH] glx: add support for putimageshm2 path (v2) v2: pass x,0 in as the offset coords at glx level not earlier Cc: Reviewed-by: Adam Jackson --- src/glx/drisw_glx.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index 7b99e49f000..00c7fa100ab 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -201,7 +201,8 @@ bytes_per_line(unsigned pitch_bits, unsigned mul) static void swrastXPutImage(__DRIdrawable * draw, int op, - int x, int y, int w, int h, int stride, + int srcx, int srcy, int x, int y, + int w, int h, int stride, int shmid, char *data, void *loaderPrivate) { struct drisw_drawable *pdp = loaderPrivate; @@ -235,12 +236,12 @@ swrastXPutImage(__DRIdrawable * draw, int op, if (pdp->shminfo.shmid >= 0) { ximage->width = ximage->bytes_per_line / ((ximage->bits_per_pixel + 7)/ 8); ximage->height = h; - XShmPutImage(dpy, drawable, gc, ximage, 0, 0, x, y, w, h, False); + XShmPutImage(dpy, drawable, gc, ximage, srcx, srcy, x, y, w, h, False); XSync(dpy, False); } else { ximage->width = w; ximage->height = h; - XPutImage(dpy, drawable, gc, ximage, 0, 0, x, y, w, h); + XPutImage(dpy, drawable, gc, ximage, srcx, srcy, x, y, w, h); } ximage->data = NULL; } @@ -254,7 +255,21 @@ swrastPutImageShm(__DRIdrawable * draw, int op, struct drisw_drawable *pdp = loaderPrivate; pdp->shminfo.shmaddr = shmaddr; - swrastXPutImage(draw, op, x, y, w, h, stride, shmid, + swrastXPutImage(draw, op, 0, 0, x, y, w, h, stride, shmid, + shmaddr + offset, loaderPrivate); +} + +static void +swrastPutImageShm2(__DRIdrawable * draw, int op, + int x, int y, + int w, int h, int stride, + int shmid, char *shmaddr, unsigned offset, + void *loaderPrivate) +{ + struct drisw_drawable *pdp = loaderPrivate; + + pdp->shminfo.shmaddr = shmaddr; + swrastXPutImage(draw, op, x, 0, x, y, w, h, stride, shmid, shmaddr + offset, loaderPrivate); } @@ -263,7 +278,7 @@ swrastPutImage2(__DRIdrawable * draw, int op, int x, int y, int w, int h, int stride, char *data, void *loaderPrivate) { - swrastXPutImage(draw, op, x, y, w, h, stride, -1, + swrastXPutImage(draw, op, 0, 0, x, y, w, h, stride, -1, data, loaderPrivate); } @@ -272,7 +287,7 @@ swrastPutImage(__DRIdrawable * draw, int op, int x, int y, int w, int h, char *data, void *loaderPrivate) { - swrastXPutImage(draw, op, x, y, w, h, 0, -1, + swrastXPutImage(draw, op, 0, 0, x, y, w, h, 0, -1, data, loaderPrivate); } @@ -340,7 +355,7 @@ swrastGetImageShm(__DRIdrawable * read, } static const __DRIswrastLoaderExtension swrastLoaderExtension_shm = { - .base = {__DRI_SWRAST_LOADER, 4 }, + .base = {__DRI_SWRAST_LOADER, 5 }, .getDrawableInfo = swrastGetDrawableInfo, .putImage = swrastPutImage, @@ -349,6 +364,7 @@ static const __DRIswrastLoaderExtension swrastLoaderExtension_shm = { .getImage2 = swrastGetImage2, .putImageShm = swrastPutImageShm, .getImageShm = swrastGetImageShm, + .putImageShm2 = swrastPutImageShm2, }; static const __DRIextension *loader_extensions_shm[] = { -- 2.30.2