summaryrefslogtreecommitdiff
path: root/hw/kdrive/sis530/sisdraw.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/kdrive/sis530/sisdraw.c')
-rw-r--r--hw/kdrive/sis530/sisdraw.c67
1 files changed, 40 insertions, 27 deletions
diff --git a/hw/kdrive/sis530/sisdraw.c b/hw/kdrive/sis530/sisdraw.c
index 836f54e79..5abe7d30b 100644
--- a/hw/kdrive/sis530/sisdraw.c
+++ b/hw/kdrive/sis530/sisdraw.c
@@ -21,7 +21,7 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $XFree86: $ */
+/* $XFree86: xc/programs/Xserver/hw/kdrive/sis530/sisdraw.c,v 1.1 1999/11/19 13:53:59 hohndel Exp $ */
#include "sis.h"
#include "sisdraw.h"
@@ -292,7 +292,7 @@ sisGlyphBltClipped (DrawablePtr pDrawable,
}
_sisClip (sis, 0, 0,
pScreenPriv->screen->width, pScreenPriv->screen->height);
- _sisWaitIdleEmpty(sis);
+ KdMarkSync (pDrawable->pScreen);
}
Bool
@@ -493,7 +493,7 @@ sisTEGlyphBlt (DrawablePtr pDrawable,
}
if (imageBlt)
sis->u.general.clip_right = pScreenPriv->screen->width;
- _sisWaitIdleEmpty(sis);
+ KdMarkSync (pDrawable->pScreen);
return TRUE;
}
@@ -704,7 +704,7 @@ sisGlyphBlt(DrawablePtr pDrawable,
}
x += pci->metrics.characterWidth;
}
- _sisWaitIdleEmpty(sis);
+ KdMarkSync (pDrawable->pScreen);
return TRUE;
}
/*
@@ -737,7 +737,7 @@ sisPolyGlyphBlt (DrawablePtr pDrawable,
return;
}
}
- fbPolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
+ KdCheckPolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
}
void
@@ -764,7 +764,7 @@ sisImageGlyphBlt (DrawablePtr pDrawable,
return;
}
}
- fbImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
+ KdCheckImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
}
#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
@@ -896,7 +896,7 @@ sisFillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
_sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
pBox++;
}
- _sisWaitIdleEmpty(sis);
+ KdMarkSync (pDrawable->pScreen);
}
void
@@ -913,7 +913,7 @@ sisFillBoxStipple (DrawablePtr pDrawable, GCPtr pGC,
_sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
pBox++;
}
- _sisWaitIdleEmpty (sis);
+ KdMarkSync (pDrawable->pScreen);
}
void
@@ -931,7 +931,7 @@ sisFillBoxTiled (DrawablePtr pDrawable,
_sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
pBox++;
}
- _sisWaitIdleEmpty (sis);
+ KdMarkSync (pDrawable->pScreen);
}
/*
@@ -1003,7 +1003,7 @@ sisCopyNtoN (DrawablePtr pSrcDrawable,
_sisBlt (sis, srcX, srcY, dstX, dstY, w, h, cmd|flags);
pbox++;
}
- _sisWaitIdleEmpty(sis);
+ KdMarkSync (pDstDrawable->pScreen);
}
RegionPtr
@@ -1022,7 +1022,7 @@ sisCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
srcx, srcy, width, height,
dstx, dsty, sisCopyNtoN, 0, 0);
}
- return fbCopyArea (pSrcDrawable, pDstDrawable, pGC,
+ return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC,
srcx, srcy, width, height, dstx, dsty);
}
@@ -1183,7 +1183,7 @@ sisCopy1toN (DrawablePtr pSrcDrawable,
pbox->x2 - dstx, pbox->y2 - dsty);
pbox++;
}
- _sisWaitIdleEmpty (sis);
+ KdMarkSync (pDstDrawable->pScreen);
}
RegionPtr
@@ -1207,7 +1207,7 @@ sisCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
srcx, srcy, width, height,
dstx, dsty, sisCopy1toN, bitPlane, &args);
}
- return fbCopyPlane(pSrcDrawable, pDstDrawable, pGC,
+ return KdCheckCopyPlane(pSrcDrawable, pDstDrawable, pGC,
srcx, srcy, width, height,
dstx, dsty, bitPlane);
}
@@ -1227,7 +1227,7 @@ sisFillSpans (DrawablePtr pDrawable, GCPtr pGC, int n,
if (!sisFillOk (pGC))
{
- fbFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
+ KdCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
return;
}
nTmp = n * miFindMaxBand(fbGetCompositeClip(pGC));
@@ -1269,7 +1269,7 @@ sisFillSpans (DrawablePtr pDrawable, GCPtr pGC, int n,
_sisRect(sis,x,y,width,1,cmd);
}
}
- _sisWaitIdleEmpty (sis);
+ KdMarkSync (pDrawable->pScreen);
DEALLOCATE_LOCAL(pptFree);
DEALLOCATE_LOCAL(pwidthFree);
}
@@ -1296,7 +1296,7 @@ sisPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
if (!sisFillOk (pGC))
{
- fbPolyFillRect (pDrawable, pGC, nrectFill, prectInit);
+ KdCheckPolyFillRect (pDrawable, pGC, nrectFill, prectInit);
return;
}
prgnClip = fbGetCompositeClip(pGC);
@@ -1450,25 +1450,25 @@ sisPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
static const GCOps sisOps = {
sisFillSpans,
- fbSetSpans,
- fbPutImage,
+ KdCheckSetSpans,
+ KdCheckPutImage,
sisCopyArea,
sisCopyPlane,
- fbPolyPoint,
- fbPolyLine,
- fbPolySegment,
+ KdCheckPolyPoint,
+ KdCheckPolylines,
+ KdCheckPolySegment,
miPolyRectangle,
- fbPolyArc,
+ KdCheckPolyArc,
miFillPolygon,
sisPolyFillRect,
- fbPolyFillArc,
+ KdCheckPolyFillArc,
miPolyText8,
miPolyText16,
miImageText8,
miImageText16,
sisImageGlyphBlt,
sisPolyGlyphBlt,
- fbPushPixels,
+ KdCheckPushPixels,
#ifdef NEED_LINEHELPER
,NULL
#endif
@@ -1484,7 +1484,7 @@ sisValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
if (pDrawable->type == DRAWABLE_WINDOW)
pGC->ops = (GCOps *) &sisOps;
else
- pGC->ops = (GCOps *) &fbGCOps;
+ pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
}
GCFuncs sisGCFuncs = {
@@ -1506,6 +1506,8 @@ sisCreateGC (GCPtr pGC)
if (pGC->depth != 1)
pGC->funcs = &sisGCFuncs;
+ pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
+
return TRUE;
}
@@ -1601,7 +1603,7 @@ sisPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
}
break;
}
- fbPaintWindow (pWin, pRegion, what);
+ KdCheckPaintWindow (pWin, pRegion, what);
}
Bool
@@ -1611,6 +1613,10 @@ sisDrawInit (ScreenPtr pScreen)
sisScreenInfo(pScreenPriv);
/*
+ * Hook up asynchronous drawing
+ */
+ KdScreenInitAsync (pScreen);
+ /*
* Replace various fb screen functions
*/
pScreen->CreateGC = sisCreateGC;
@@ -1632,7 +1638,6 @@ sisDrawEnable (ScreenPtr pScreen)
base = pScreenPriv->screen->frameBuffer - sisc->frameBuffer;
stride = pScreenPriv->screen->byteStride;
- _sisWaitIdleEmpty(sis);
sis->u.general.dst_base = base;
sis->u.general.dst_pitch = stride;
sis->u.general.dst_height = pScreenPriv->screen->height;
@@ -1642,6 +1647,14 @@ sisDrawEnable (ScreenPtr pScreen)
_sisRect (sis, 0, 0,
pScreenPriv->screen->width, pScreenPriv->screen->height,
cmd);
+ KdMarkSync (pScreen);
+}
+
+void
+sisDrawSync (ScreenPtr pScreen)
+{
+ SetupSis(pScreen);
+
_sisWaitIdleEmpty (sis);
}