[PATCH:xf86-video-mach64] Mach64PixelARGB should use exaGetPixmapFirstPixel when EXA is in use
Alan Coopersmith
alan.coopersmith at oracle.com
Thu Dec 6 16:57:43 PST 2012
Fixes crash attempting to read a pixel from a NULL pPixmap->devPrivate.ptr
Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
src/atimach64render.c | 33 +++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)
Mostly just cut-and-paste and guess-and-hope, but it seems to work and stops
the crash for me.
diff --git a/src/atimach64render.c b/src/atimach64render.c
index 4862cd4..1328cca 100644
--- a/src/atimach64render.c
+++ b/src/atimach64render.c
@@ -208,22 +208,31 @@ Mach64PixelARGB(PixmapPtr pPixmap, CARD32 format, CARD32 *argb)
CARD32 pixel;
CARD8 comp;
int bits, shift;
+#ifdef USE_EXA
+ ScrnInfoPtr pScreenInfo = xf86ScreenToScrn(pPixmap->drawable.pScreen);
+ ATIPtr pATI = ATIPTR(pScreenInfo);
+#endif
/* Ensure that texture drawing has completed. */
exaWaitSync(pPixmap->drawable.pScreen);
- /* exaGetPixmapFirstPixel() */
-
- switch (pPixmap->drawable.bitsPerPixel) {
- case 32:
- pixel = *(CARD32 *)(pPixmap->devPrivate.ptr);
- break;
- case 16:
- pixel = *(CARD16 *)(pPixmap->devPrivate.ptr);
- break;
- default:
- pixel = *(CARD8 *)(pPixmap->devPrivate.ptr);
- break;
+#ifdef USE_EXA
+ if (pATI->useEXA)
+ pixel = exaGetPixmapFirstPixel(pPixmap);
+ else
+#endif
+ {
+ switch (pPixmap->drawable.bitsPerPixel) {
+ case 32:
+ pixel = *(CARD32 *)(pPixmap->devPrivate.ptr);
+ break;
+ case 16:
+ pixel = *(CARD16 *)(pPixmap->devPrivate.ptr);
+ break;
+ default:
+ pixel = *(CARD8 *)(pPixmap->devPrivate.ptr);
+ break;
+ }
}
/* exaGetRGBAFromPixel()/viaPixelARGB8888() */
--
1.7.9.2
More information about the xorg-devel
mailing list