mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-21 00:10:29 +01:00
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) (cherry picked from commit59f9fb4b8c)
This commit is contained in:
parent
bfe5a13499
commit
244e960bb0
3 changed files with 9 additions and 3 deletions
|
|
@ -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 *********
|
||||
|
|
|
|||
|
|
@ -103,7 +103,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,
|
||||
|
|
|
|||
|
|
@ -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;\
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue