dib shm patch
Ove Kaaven
ovehk at ping.uio.no
Thu Jan 3 02:14:37 CST 2002
Log:
Gavriel State <gav at transgaming.com>
Speed up the GetImageBits case where we have an XShm image.
Index: graphics/x11drv/dib.c
===================================================================
RCS file: /cvsroot/winex/wine/graphics/x11drv/dib.c,v
retrieving revision 1.1.1.20
retrieving revision 1.37
diff -u -r1.1.1.20 -r1.37
--- graphics/x11drv/dib.c 2001/12/31 10:50:33 1.1.1.20
+++ graphics/x11drv/dib.c 2002/01/02 17:33:10 1.37
@@ -4607,13 +4607,40 @@
}
}
- TRACE("XGetSubImage(%ld,%d,%d,%d,%d,%ld,%d,%p,%d,%d)\n",
- descr->drawable, descr->xSrc, descr->ySrc, descr->width,
- lines, AllPlanes, ZPixmap, bmpImage, descr->xDest, descr->yDest);
- XGetSubImage( gdi_display, descr->drawable, descr->xSrc, descr->ySrc,
- descr->width, lines, AllPlanes, ZPixmap,
- bmpImage, descr->xDest, descr->yDest );
+ if (descr->useShm)
+ {
+ int saveRed, saveGreen, saveBlue;
+
+ TRACE("XShmGetImage(%p, %ld, %p, %d, %d, %ld)\n",
+ gdi_display, descr->drawable, bmpImage,
+ descr->xSrc, descr->ySrc, AllPlanes);
+
+ /* We must save and restore the bmpImage's masks in order
+ * to preserve them across the call to XShmGetImage, which
+ * decides to eleminate them since it doesn't happen to know
+ * what the format of the image is supposed to be, even though
+ * we do. */
+ saveRed = bmpImage->red_mask;
+ saveBlue= bmpImage->blue_mask;
+ saveGreen = bmpImage->green_mask;
+
+ XShmGetImage( gdi_display, descr->drawable, bmpImage,
+ descr->xSrc, descr->ySrc, AllPlanes);
+ bmpImage->red_mask = saveRed;
+ bmpImage->blue_mask = saveBlue;
+ bmpImage->green_mask = saveGreen;
+ }
+ else
+ {
+ TRACE("XGetSubImage(%p,%ld,%d,%d,%d,%d,%ld,%d,%p,%d,%d)\n",
+ gdi_display, descr->drawable, descr->xSrc, descr->ySrc, descr->width,
+ lines, AllPlanes, ZPixmap, bmpImage, descr->xDest, descr->yDest);
+ XGetSubImage( gdi_display, descr->drawable, descr->xSrc, descr->ySrc,
+ descr->width, lines, AllPlanes, ZPixmap,
+ bmpImage, descr->xDest, descr->yDest );
+ }
+
TRACE("Dib: depth=%2d r=%lx g=%lx b=%lx\n",
descr->infoBpp,descr->rMask,descr->gMask,descr->bMask);
TRACE("Bmp: depth=%2d/%2d r=%lx g=%lx b=%lx\n",
More information about the wine-patches
mailing list