forked from pool/xorg-x11-server
71 lines
2.3 KiB
Diff
71 lines
2.3 KiB
Diff
|
commit 59f9fb4b8c031df69b3592a26b77e744ff4a556e
|
||
|
Author: Luc Verhaegen <libv@skynet.be>
|
||
|
Date: Fri Nov 7 19:11:11 2008 +0100
|
||
|
|
||
|
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)
|
||
|
|
||
|
diff --git a/hw/xfree86/xaa/xaa.h b/hw/xfree86/xaa/xaa.h
|
||
|
index 1dc7ed2..d6ccc31 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 53795f0..0672bcf 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 38c97d7..857dbc3 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;\
|