From: Dave Airlie Date: Thu, 27 Dec 2018 04:26:33 +0000 (+1000) Subject: glx: add support for putimageshm2 path (v2) X-Git-Tag: android-x86-8.1-r2~3^2~21 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=32c0f59c48a77b4512105f4af8c9fabbabda9bcc;p=android-x86%2Fexternal-mesa.git 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 (cherry picked from commit 00af91ca463a2486c043c635d94d9958fb1e8700) --- diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index a2777100a32..fa0f0d7bf6f 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[] = {