summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuc Verhaegen <libv@skynet.be>2008-11-07 19:11:11 +0100
committerLuc Verhaegen <libv@skynet.be>2008-11-07 19:13:58 +0100
commit59f9fb4b8c031df69b3592a26b77e744ff4a556e (patch)
tree63d2d679b17f3c4f4edc5cf26b0d391a6be0768a
parent991c88b7542164194be73573e7644164416ea90c (diff)
XAA PixmapOps: Sync before accessing unwrapped callbacks.
When using any XAAPixmapOps, we call into unknown but freshly unwrapped callbacks (like fb ones). Unlike the XAA*Fallback calls, we did so without syncing first, exposing us to all kinds of synchronisation issues. I believe that the rendering errors appeared now because *PaintWindow vanished (e4d11e58), and we just use miPaintWindow instead. This takes a less direct route to the hw and ends up at PolyFillRectPixmap, which very often left drawing artifacts. We now sync accordingly, and no longer get the rendering artifacts i was methodically reproducing on radeonhd, radeon, unichrome... Also, in order to allow driver authors to remove extensive syncing or flushing to hide this issue, create XAA_VERSION_ defines, put them in xaa.h and bump the patchlevel. (novell bug #435791)
-rw-r--r--hw/xfree86/xaa/xaa.h4
-rw-r--r--hw/xfree86/xaa/xaaInitAccel.c4
-rw-r--r--hw/xfree86/xaa/xaawrap.h4
3 files changed, 9 insertions, 3 deletions
diff --git a/hw/xfree86/xaa/xaa.h b/hw/xfree86/xaa/xaa.h
index 1dc7ed2d5..d6ccc31e2 100644
--- a/hw/xfree86/xaa/xaa.h
+++ b/hw/xfree86/xaa/xaa.h
@@ -2,6 +2,10 @@
#ifndef _XAA_H
#define _XAA_H
+#define XAA_VERSION_MAJOR 1
+#define XAA_VERSION_MINOR 2
+#define XAA_VERSION_RELEASE 1
+
/*
******** OPERATION SPECIFIC FLAGS *********
diff --git a/hw/xfree86/xaa/xaaInitAccel.c b/hw/xfree86/xaa/xaaInitAccel.c
index 53795f067..0672bcf5b 100644
--- a/hw/xfree86/xaa/xaaInitAccel.c
+++ b/hw/xfree86/xaa/xaaInitAccel.c
@@ -100,7 +100,9 @@ static XF86ModuleVersionInfo xaaVersRec =
MODINFOSTRING1,
MODINFOSTRING2,
XORG_VERSION_CURRENT,
- 1, 2, 0,
+ XAA_VERSION_MAJOR,
+ XAA_VERSION_MINOR,
+ XAA_VERSION_RELEASE,
ABI_CLASS_VIDEODRV, /* requires the video driver ABI */
ABI_VIDEODRV_VERSION,
MOD_CLASS_NONE,
diff --git a/hw/xfree86/xaa/xaawrap.h b/hw/xfree86/xaa/xaawrap.h
index 38c97d70b..857dbc3ed 100644
--- a/hw/xfree86/xaa/xaawrap.h
+++ b/hw/xfree86/xaa/xaawrap.h
@@ -48,8 +48,8 @@
XAAPixmapPtr pixPriv = XAA_GET_PIXMAP_PRIVATE((PixmapPtr)(pDraw));\
GCFuncs *oldFuncs = pGC->funcs;\
pGC->funcs = pGCPriv->wrapFuncs;\
- pGC->ops = pGCPriv->wrapOps
-
+ pGC->ops = pGCPriv->wrapOps; \
+ SYNC_CHECK(pGC)
#define XAA_PIXMAP_OP_EPILOGUE(pGC)\
pGCPriv->wrapOps = pGC->ops;\