diff options
author | Kaleb Keithley <kaleb@freedesktop.org> | 2003-11-14 16:48:55 +0000 |
---|---|---|
committer | Kaleb Keithley <kaleb@freedesktop.org> | 2003-11-14 16:48:55 +0000 |
commit | 68c56916d79bf06e26e01c3e84206edc928d9b51 (patch) | |
tree | d39c13092dc680721e163e448a57df847a6fad62 /src/ffb_stubs.c |
Initial revision
Diffstat (limited to 'src/ffb_stubs.c')
-rw-r--r-- | src/ffb_stubs.c | 544 |
1 files changed, 544 insertions, 0 deletions
diff --git a/src/ffb_stubs.c b/src/ffb_stubs.c new file mode 100644 index 0000000..aa01018 --- /dev/null +++ b/src/ffb_stubs.c @@ -0,0 +1,544 @@ +/* + * Acceleration for the Creator and Creator3D framebuffer - Unaccelerated stuff. + * + * Copyright (C) 1999 David S. Miller (davem@redhat.com) + * Copyright (C) 1999 Jakub Jelinek (jakub@redhat.com) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * DAVID MILLER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ +/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_stubs.c,v 1.2 2000/05/23 04:47:45 dawes Exp $ */ + +#include "ffb.h" +#include "ffb_regs.h" +#include "ffb_rcache.h" +#include "ffb_fifo.h" + +#include "pixmapstr.h" +#include "scrnintstr.h" + +#define PSZ 8 +#include "cfb.h" +#undef PSZ +#include "cfb32.h" + +/* CFB is just too clever for it's own good. There are paths + * in cfb for 8bpp that just arbitrarily change the ROP of the + * GC and assume it just works even without revalidating that + * GC. So for now we turn this stuff off. -DaveM + */ +#undef USE_SFB_TRICKS + +#ifdef USE_SFB_TRICKS +/* Sorry, have to expose some CFB internals to get the stubs right. -DaveM */ +struct cfb_gcstate { + unsigned long pmask; + int alu, rop, and, xor; +}; + +#define CFB_STATE_SAVE(__statep, __gcp, __privp) \ +do { (__statep)->pmask = (__gcp)->planemask; \ + (__statep)->alu = (__gcp)->alu; \ + (__statep)->rop = (__privp)->rop; \ + (__statep)->and = (__privp)->and; \ + (__statep)->xor = (__privp)->xor; \ +} while(0) + +#define CFB_STATE_RESTORE(__statep, __gcp, __privp) \ +do { (__gcp)->planemask = (__statep)->pmask; \ + (__gcp)->alu = (__statep)->alu; \ + (__privp)->rop = (__statep)->rop; \ + (__privp)->and = (__statep)->and; \ + (__privp)->xor = (__statep)->xor; \ +} while(0) + +#define CFB_STATE_SET_SFB(__gcp, __privp) \ +do { (__gcp)->alu = GXcopy; \ + (__gcp)->planemask = (((__gcp)->depth==8)?0xff:0xffffff); \ + (__privp)->rop = GXcopy; \ + (__privp)->and = 0; \ + (__privp)->xor = (__gcp)->fgPixel; \ +} while(0) +#endif + +/* Stubs so we can wait for the raster processor to + * unbusy itself before we let the cfb code write + * directly to the framebuffer. + */ +void +CreatorSolidSpansGeneralStub (DrawablePtr pDrawable, GCPtr pGC, + int nInit, DDXPointPtr pptInit, + int *pwidthInit, int fSorted) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbSolidSpansGeneral(pDrawable, pGC, nInit, pptInit, + pwidthInit, fSorted); + else + cfb32SolidSpansGeneral(pDrawable, pGC, nInit, pptInit, + pwidthInit, fSorted); +} + +void +CreatorSegmentSSStub (DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSeg) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) { + if (devPriv->oneRect && + ((pDrawable->x >= pGC->pScreen->width - 32768) && + (pDrawable->y >= pGC->pScreen->height - 32768))) + cfb8SegmentSS1Rect(pDrawable, pGC, nseg, pSeg); + else + cfbSegmentSS(pDrawable, pGC, nseg, pSeg); + } else + cfb32SegmentSS(pDrawable, pGC, nseg, pSeg); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) { + if (devPriv->oneRect && + ((pDrawable->x >= pGC->pScreen->width - 32768) && + (pDrawable->y >= pGC->pScreen->height - 32768))) + cfb8SegmentSS1Rect(pDrawable, pGC, nseg, pSeg); + else + cfbSegmentSS(pDrawable, pGC, nseg, pSeg); + } else + cfb32SegmentSS(pDrawable, pGC, nseg, pSeg); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorLineSSStub (DrawablePtr pDrawable, GCPtr pGC, + int mode, int npt, DDXPointPtr ppt) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) { + if (devPriv->oneRect && + ((pDrawable->x >= pGC->pScreen->width - 32768) && + (pDrawable->y >= pGC->pScreen->height - 32768))) + cfb8LineSS1Rect(pDrawable, pGC, mode, npt, ppt); + else + cfbLineSS(pDrawable, pGC, mode, npt, ppt); + } else + cfb32LineSS(pDrawable, pGC, mode, npt, ppt); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) { + if (devPriv->oneRect && + ((pDrawable->x >= pGC->pScreen->width - 32768) && + (pDrawable->y >= pGC->pScreen->height - 32768))) + cfb8LineSS1Rect(pDrawable, pGC, mode, npt, ppt); + else + cfbLineSS(pDrawable, pGC, mode, npt, ppt); + } else + cfb32LineSS(pDrawable, pGC, mode, npt, ppt); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorSegmentSDStub (DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSeg) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbSegmentSD(pDrawable, pGC, nseg, pSeg); + else + cfb32SegmentSD(pDrawable, pGC, nseg, pSeg); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbSegmentSD(pDrawable, pGC, nseg, pSeg); + else + cfb32SegmentSD(pDrawable, pGC, nseg, pSeg); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorLineSDStub (DrawablePtr pDrawable, GCPtr pGC, + int mode, int npt, DDXPointPtr ppt) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbLineSD(pDrawable, pGC, mode, npt, ppt); + else + cfb32LineSD(pDrawable, pGC, mode, npt, ppt); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbLineSD(pDrawable, pGC, mode, npt, ppt); + else + cfb32LineSD(pDrawable, pGC, mode, npt, ppt); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorPolyGlyphBlt8Stub (DrawablePtr pDrawable, GCPtr pGC, + int x, int y, unsigned int nglyph, CharInfoPtr *ppci, + pointer pglyphBase) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbPolyGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + else + cfb32PolyGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbPolyGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + else + cfb32PolyGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorImageGlyphBlt8Stub (DrawablePtr pDrawable, GCPtr pGC, + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, pointer pglyphBase) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbImageGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + else + cfb32ImageGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbImageGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + else + cfb32ImageGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorTile32FSCopyStub(DrawablePtr pDrawable, GCPtr pGC, + int nInit, DDXPointPtr pptInit, + int *pwidthInit, int fSorted) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbTile32FSCopy(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + else + cfb32Tile32FSCopy(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbTile32FSCopy(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + else + cfb32Tile32FSCopy(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorTile32FSGeneralStub(DrawablePtr pDrawable, GCPtr pGC, + int nInit, DDXPointPtr pptInit, + int *pwidthInit, int fSorted) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbTile32FSGeneral(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + else + cfb32Tile32FSGeneral(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbTile32FSGeneral(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + else + cfb32Tile32FSGeneral(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorUnnaturalTileFSStub(DrawablePtr pDrawable, GCPtr pGC, + int nInit, DDXPointPtr pptInit, + int *pwidthInit, int fSorted) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbUnnaturalTileFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + else + cfb32UnnaturalTileFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbUnnaturalTileFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + else + cfb32UnnaturalTileFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +Creator8Stipple32FSStub(DrawablePtr pDrawable, GCPtr pGC, + int nInit, DDXPointPtr pptInit, + int *pwidthInit, int fSorted) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + cfb8Stipple32FS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + cfb8Stipple32FS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorUnnaturalStippleFSStub(DrawablePtr pDrawable, GCPtr pGC, + int nInit, DDXPointPtr pptInit, + int *pwidthInit, int fSorted) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbUnnaturalStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + else + cfb32UnnaturalStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbUnnaturalStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + else + cfb32UnnaturalStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +Creator8OpaqueStipple32FSStub(DrawablePtr pDrawable, GCPtr pGC, + int nInit, DDXPointPtr pptInit, + int *pwidthInit, int fSorted) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + cfb8OpaqueStipple32FS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + cfb8OpaqueStipple32FS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} + +void +CreatorPolyFillRectStub(DrawablePtr pDrawable, GCPtr pGC, + int nrectFill, xRectangle *prectInit) +{ + WindowPtr pWin = (WindowPtr) pDrawable; + FFBPtr pFfb = GET_FFB_FROM_SCREEN (pDrawable->pScreen); + ffb_fbcPtr ffb = pFfb->regs; +#ifdef USE_SFB_TRICKS + struct cfb_gcstate cfb_state; + cfbPrivGCPtr devPriv = cfbGetGCPrivate(pGC); +#endif + + FFBLOG(("STUB(%s:%d)\n", __FILE__, __LINE__)); +#ifndef USE_SFB_TRICKS + FFB_ATTR_SFB_VAR_WIN(pFfb, 0xffffffff, GXcopy, pWin); + FFBWait(pFfb, ffb); + if (pGC->depth == 8) + cfbPolyFillRect(pDrawable, pGC, nrectFill, prectInit); + else + cfb32PolyFillRect(pDrawable, pGC, nrectFill, prectInit); +#else + CFB_STATE_SAVE(&cfb_state, pGC, devPriv); + FFB_ATTR_SFB_VAR_WIN(pFfb, cfb_state.pmask, cfb_state.alu, pWin); + FFBWait(pFfb, ffb); + CFB_STATE_SET_SFB(pGC, devPriv); + if (pGC->depth == 8) + cfbPolyFillRect(pDrawable, pGC, nrectFill, prectInit); + else + cfb32PolyFillRect(pDrawable, pGC, nrectFill, prectInit); + CFB_STATE_RESTORE(&cfb_state, pGC, devPriv); +#endif +} |