aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/iplan2p4/ipltileodd.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/programs/Xserver/iplan2p4/ipltileodd.c')
-rw-r--r--nx-X11/programs/Xserver/iplan2p4/ipltileodd.c869
1 files changed, 0 insertions, 869 deletions
diff --git a/nx-X11/programs/Xserver/iplan2p4/ipltileodd.c b/nx-X11/programs/Xserver/iplan2p4/ipltileodd.c
deleted file mode 100644
index 7230a5621..000000000
--- a/nx-X11/programs/Xserver/iplan2p4/ipltileodd.c
+++ /dev/null
@@ -1,869 +0,0 @@
-/* $XFree86$ */
-/*
- * Fill odd tiled rectangles and spans.
- * no depth dependencies.
- */
-
-/*
-
-Copyright (c) 1989 X Consortium
-
-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 THE
-X CONSORTIUM 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.
-
-Except as contained in this notice, the name of the X Consortium shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from the X Consortium.
-*/
-
-/* $XConsortium: ipltileodd.c,v 1.16 94/04/17 20:29:06 dpw Exp $ */
-
-/* Modified nov 94 by Martin Schaller (Martin_Schaller@maus.r.de) for use with
-interleaved planes */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include "servermd.h"
-#include "gcstruct.h"
-#include "window.h"
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-
-#include "ipl.h"
-
-#include "iplmskbits.h"
-#include "iplmergerop.h"
-
-#define LEFTSHIFT_AMT 0
-
-#define LastTileBits {\
- INTER_COPY(bits, tmp); \
- if (tileEndPart) \
- INTER_MSKINSM(tileEndMask, 0, pSrc, \
- ~0, tileEndLeftShift, pSrcLine, bits) \
- else \
- INTER_COPY(pSrc, bits); \
-}
-
-#define ResetTileBits {\
- pSrc = pSrcLine; \
- nlwSrc = widthSrc;\
- if (tileEndPart) { \
- if (INTER_PPG - xoff + tileEndPart <= INTER_PPG) {\
- INTER_COPY(pSrc, bits); INTER_NEXT_GROUP(pSrc); \
- nlwSrc--; \
- } else \
- INTER_MSKINSM(~0, tileEndLeftShift, tmp, \
- ~0, tileEndRightShift, bits, bits); \
- xoff = (xoff + xoffStep) & INTER_PIM; \
- leftShift = xoff << LEFTSHIFT_AMT; \
- rightShift = INTER_PGSZ - leftShift; \
- }\
-}
-
-#define NextTileBits {\
- if (nlwSrc == 1) {\
- LastTileBits\
- } else { \
- if (nlwSrc == 0) {\
- ResetTileBits\
- } \
- if (nlwSrc == 1) {\
- LastTileBits\
- } else {\
- INTER_COPY(bits, tmp); \
- INTER_COPY(pSrc, bits); INTER_NEXT_GROUP(pSrc); \
- }\
- }\
- nlwSrc--; \
-}
-
-void
-INTER_MROP_NAME(iplFillBoxTileOdd) (pDrawable, nBox, pBox, tile, xrot, yrot, alu, planemask)
- DrawablePtr pDrawable;
- int nBox; /* number of boxes to fill */
- register BoxPtr pBox; /* pointer to list of boxes to fill */
- PixmapPtr tile; /* tile */
- int xrot, yrot;
- int alu;
- unsigned long planemask;
-{
- int tileWidth; /* width of tile in pixels */
- int tileHeight; /* height of the tile */
- int widthSrc;
-
- int widthDst; /* width in longwords of the dest pixmap */
- int w; /* width of current box */
- int h; /* height of current box */
- INTER_DECLAREG(startmask);
- INTER_DECLAREG(endmask);/* masks for reggedy bits at either end of line */
- int nlwMiddle; /* number of longwords between sides of boxes */
- int nlwSrc; /* number of whole longwords in source */
-
- register int nlw; /* loop version of nlwMiddle */
- int srcy; /* current tile y position */
- int srcx; /* current tile x position */
- int xoffDst, xoffSrc;
- int leftShift, rightShift;
-
- INTER_MROP_DECLARE_REG()
-
- INTER_DECLAREG(*pDstBase); /* pointer to start of dest */
- INTER_DECLAREG(*pDstLine); /* poitner to start of dest box */
- INTER_DECLAREG(*pSrcBase); /* pointer to start of source */
- INTER_DECLAREG(*pSrcLine); /* pointer to start of source line */
- INTER_DECLAREG(*pDst);
- INTER_DECLAREG(*pSrc);
- INTER_DECLAREGP(bits);
- INTER_DECLAREGP(tmp);
- INTER_DECLAREGP(tmp1);
- register int nlwPart;
- int xoffStart, xoff;
- int leftShiftStart, rightShiftStart, nlwSrcStart;
- INTER_DECLAREG(tileEndMask);
- int tileEndLeftShift, tileEndRightShift;
- int xoffStep;
- int tileEndPart;
- int needFirst;
- unsigned short narrow[2 * INTER_PLANES];
- INTER_DECLAREG(narrowMask);
- int narrowShift;
- Bool narrowTile;
- int narrowRep;
-
- INTER_MROP_INITIALIZE (alu, planemask)
-
- tileHeight = tile->drawable.height;
- tileWidth = tile->drawable.width;
- widthSrc = tile->devKind / (INTER_PGSZB * INTER_PLANES);
- narrowTile = FALSE;
-
- if (widthSrc == 1)
- {
- narrowRep = INTER_PPG / tileWidth;
- narrowMask = iplendpartial [tileWidth];
- tileWidth *= narrowRep;
- narrowShift = tileWidth;
- tileWidth *= 2;
- widthSrc = 2;
- narrowTile = TRUE;
- }
- pSrcBase = (unsigned short *)tile->devPrivate.ptr;
-
- iplGetGroupWidthAndPointer (pDrawable, widthDst, pDstBase)
-
- tileEndPart = tileWidth & INTER_PIM;
- tileEndMask = iplendpartial[tileEndPart];
- tileEndLeftShift = (tileEndPart) << LEFTSHIFT_AMT;
- tileEndRightShift = INTER_PGSZ - tileEndLeftShift;
- xoffStep = INTER_PPG - tileEndPart;
- /*
- * current assumptions: tile > 32 bits wide.
- */
- while (nBox--)
- {
- w = pBox->x2 - pBox->x1;
- h = pBox->y2 - pBox->y1;
- modulus (pBox->x1 - xrot, tileWidth, srcx);
- modulus (pBox->y1 - yrot, tileHeight, srcy);
- xoffDst = pBox->x1 & INTER_PIM;
- if (xoffDst + w < INTER_PPG)
- {
- INTER_maskpartialbits(pBox->x1, w, startmask);
- endmask = 0;
- nlwMiddle = 0;
- }
- else
- {
- INTER_maskbits (pBox->x1, w, startmask, endmask, nlwMiddle)
- }
- pDstLine = pDstBase + (pBox->y1 * widthDst) +
- (pBox->x1 >> INTER_PGSH) * INTER_PLANES;
- pSrcLine = pSrcBase + (srcy * widthSrc) * INTER_PLANES;
- xoffSrc = srcx & INTER_PIM;
- if (xoffSrc >= xoffDst)
- {
- xoffStart = xoffSrc - xoffDst;
- needFirst = 1;
- }
- else
- {
- xoffStart = INTER_PPG - (xoffDst - xoffSrc);
- needFirst = 0;
- }
- leftShiftStart = (xoffStart) << LEFTSHIFT_AMT;
- rightShiftStart = INTER_PGSZ - leftShiftStart;
- nlwSrcStart = (widthSrc - (srcx >> INTER_PGSH));
- while (h--)
- {
- /* XXX only works when narrowShift >= INTER_PPG/2 */
- if (narrowTile)
- {
- int tmpnarrowRep;
- int shift=narrowShift/narrowRep;
- INTER_ANDMSK(pSrcBase + srcy * INTER_PLANES, narrowMask, tmp);
- tmpnarrowRep=narrowRep;
- /* copy tile until its nearly a whole group wide */
- while (--tmpnarrowRep)
- INTER_MSKINSM(~0,0,tmp,~0,shift,tmp,tmp);
- INTER_MSKINSM(~0, 0, tmp, ~0, narrowShift, tmp, narrow);
- INTER_MSKINSM(~0, INTER_PPG - narrowShift, tmp,
- ~0, 2 * narrowShift - INTER_PPG, tmp,
- narrow + INTER_PLANES);
- pSrcLine = narrow;
- }
- xoff = xoffStart;
- leftShift = leftShiftStart;
- rightShift = rightShiftStart;
- nlwSrc = nlwSrcStart;
- pSrc = pSrcLine + (srcx >> INTER_PGSH) * INTER_PLANES;
- pDst = pDstLine;
- INTER_CLR(bits);
- if (needFirst)
- {
- NextTileBits
- }
- if (startmask)
- {
- NextTileBits
- INTER_SCRLEFT(leftShift, tmp, tmp);
- if (rightShift != INTER_PGSZ)
- INTER_MSKINSM(~0, 0, tmp, ~0, rightShift, bits, tmp)
- INTER_MROP_MASK (tmp, pDst, startmask, pDst);
- INTER_NEXT_GROUP(pDst);
- }
- nlw = nlwMiddle;
- while (nlw)
- {
- {
- NextTileBits
- if (rightShift != INTER_PGSZ)
- {
- INTER_MSKINSM(~0, leftShift, tmp, ~0, rightShift, bits,
- tmp1);
- INTER_MROP_SOLID(tmp1, pDst, pDst);
- }
- else
- {
- INTER_MROP_SOLID (tmp, pDst, pDst);
- }
- INTER_NEXT_GROUP(pDst);
- nlw--;
- }
- }
- if (endmask)
- {
- NextTileBits
- if (rightShift == INTER_PGSZ)
- INTER_CLR(bits);
- INTER_MSKINSM(~0, leftShift, tmp, ~0, rightShift, bits, tmp1);
- INTER_MROP_MASK(tmp1, pDst, endmask, pDst);
- }
- pDstLine += widthDst;
- pSrcLine += widthSrc * INTER_PLANES;
- if (++srcy == tileHeight)
- {
- srcy = 0;
- pSrcLine = pSrcBase;
- }
- }
- pBox++;
- }
-}
-
-void
-INTER_MROP_NAME(iplFillSpanTileOdd) (pDrawable, n, ppt, pwidth, tile, xrot, yrot, alu, planemask)
- DrawablePtr pDrawable;
- int n;
- DDXPointPtr ppt;
- int *pwidth;
- PixmapPtr tile;
- int xrot, yrot;
- int alu;
- unsigned long planemask;
-{
- int tileWidth; /* width of tile in pixels */
- int tileHeight; /* height of the tile */
- int widthSrc;
-
- int widthDst; /* width in longwords of the dest pixmap */
- int w; /* width of current span */
- INTER_DECLAREG(startmask);
- INTER_DECLAREG (endmask); /* masks for reggedy bits at either end of line */
- int nlwSrc; /* number of whole longwords in source */
-
- register int nlw; /* loop version of nlwMiddle */
- int srcy; /* current tile y position */
- int srcx; /* current tile x position */
- int xoffDst, xoffSrc;
- int leftShift, rightShift;
-
- INTER_MROP_DECLARE_REG()
-
- INTER_DECLAREG(*pDstBase); /* pointer to start of dest */
- INTER_DECLAREG(*pDstLine); /* poitner to start of dest box */
- INTER_DECLAREG(*pSrcBase); /* pointer to start of source */
- INTER_DECLAREG(*pSrcLine); /* pointer to start of source line */
- INTER_DECLAREG(*pDst);
- INTER_DECLAREG(*pSrc);
- INTER_DECLAREGP(bits);
- INTER_DECLAREGP(tmp);
- INTER_DECLAREGP(tmp1);
- register int nlwPart;
- int xoffStart, xoff;
- int leftShiftStart, rightShiftStart, nlwSrcStart;
- INTER_DECLAREG(tileEndMask);
- int tileEndLeftShift, tileEndRightShift;
- int xoffStep;
- int tileEndPart;
- int needFirst;
- unsigned short narrow[2 * INTER_PLANES];
- INTER_DECLAREG(narrowMask);
- int narrowShift;
- Bool narrowTile;
- int narrowRep;
-
- INTER_MROP_INITIALIZE (alu, planemask)
-
- tileHeight = tile->drawable.height;
- tileWidth = tile->drawable.width;
- widthSrc = tile->devKind / (INTER_PGSZB * INTER_PLANES);
- narrowTile = FALSE;
- if (widthSrc == 1)
- {
- narrowRep = INTER_PPG / tileWidth;
- narrowMask = iplendpartial [tileWidth];
- tileWidth *= narrowRep;
- narrowShift = tileWidth;
- tileWidth *= 2;
- widthSrc = 2;
- narrowTile = TRUE;
- }
- pSrcBase = (unsigned short *)tile->devPrivate.ptr;
-
- iplGetGroupWidthAndPointer (pDrawable, widthDst, pDstBase)
-
- tileEndPart = tileWidth & INTER_PIM;
- tileEndMask = iplendpartial[tileEndPart];
- tileEndLeftShift = (tileEndPart) << LEFTSHIFT_AMT;
- tileEndRightShift = INTER_PGSZ - tileEndLeftShift;
- xoffStep = INTER_PPG - tileEndPart;
- while (n--)
- {
- w = *pwidth++;
- modulus (ppt->x - xrot, tileWidth, srcx);
- modulus (ppt->y - yrot, tileHeight, srcy);
- xoffDst = ppt->x & INTER_PIM;
- if (xoffDst + w < INTER_PPG)
- {
- INTER_maskpartialbits(ppt->x, w, startmask);
- endmask = 0;
- nlw = 0;
- }
- else
- {
- INTER_maskbits (ppt->x, w, startmask, endmask, nlw)
- }
- pDstLine = pDstBase + (ppt->y * widthDst) +
- (ppt->x >> INTER_PGSH) * INTER_PLANES;
- pSrcLine = pSrcBase + (srcy * widthSrc) * INTER_PLANES;
- xoffSrc = srcx & INTER_PIM;
- if (xoffSrc >= xoffDst)
- {
- xoffStart = xoffSrc - xoffDst;
- needFirst = 1;
- }
- else
- {
- xoffStart = INTER_PPG - (xoffDst - xoffSrc);
- needFirst = 0;
- }
- leftShiftStart = (xoffStart) << LEFTSHIFT_AMT;
- rightShiftStart = INTER_PGSZ - leftShiftStart;
- nlwSrcStart = widthSrc - (srcx >> INTER_PGSH);
- /* XXX only works when narrowShift >= INTER_PPG/2 */
- if (narrowTile)
- {
- int tmpnarrowRep;
- int shift=narrowShift/narrowRep;
- INTER_ANDMSK(pSrcBase + srcy * INTER_PLANES, narrowMask, tmp);
- tmpnarrowRep=narrowRep;
- /* copy tile until its nearly a whole group wide */
- while (--tmpnarrowRep)
- INTER_MSKINSM(~0,0,tmp,~0,shift,tmp,tmp);
- INTER_MSKINSM(~0, 0, tmp, ~0, narrowShift, tmp, narrow);
- INTER_MSKINSM(~0, INTER_PPG - narrowShift, tmp,
- ~0, 2 * narrowShift - INTER_PPG, tmp,
- narrow + INTER_PLANES);
- pSrcLine = narrow;
- }
- xoff = xoffStart;
- leftShift = leftShiftStart;
- rightShift = rightShiftStart;
- nlwSrc = nlwSrcStart;
- pSrc = pSrcLine + (srcx >> INTER_PGSH) * INTER_PLANES;
- pDst = pDstLine;
- INTER_CLR(bits);
- if (needFirst)
- {
- NextTileBits
- }
- if (startmask)
- {
- NextTileBits
- INTER_SCRLEFT(leftShift, tmp, tmp);
- if (rightShift != INTER_PGSZ)
- INTER_MSKINSM(~0, 0, tmp, ~0, rightShift, bits, tmp);
- INTER_MROP_MASK (tmp, pDst, startmask, pDst);
- INTER_NEXT_GROUP(pDst);
- }
- while (nlw)
- {
- {
- NextTileBits
- if (rightShift != INTER_PGSZ)
- {
- INTER_MSKINSM(~0, leftShift, tmp, ~0, rightShift, bits,
- tmp1);
- INTER_MROP_SOLID(tmp1, pDst, pDst);
- INTER_NEXT_GROUP(pDst);
- }
- else
- {
- INTER_MROP_SOLID (tmp, pDst, pDst);
- INTER_NEXT_GROUP(pDst);
- }
- nlw--;
- }
- }
- if (endmask)
- {
- NextTileBits
- if (rightShift == INTER_PGSZ)
- INTER_CLR(bits);
-
- INTER_MSKINSM(~0, leftShift, tmp, ~0, rightShift, bits, tmp1);
- INTER_MROP_MASK(tmp1, pDst, endmask, pDst);
- }
- ppt++;
- }
-}
-
-# include "fastblt.h"
-
-#define IncSrcPtr INTER_NEXT_GROUP(psrc); if (!--srcRemaining) { srcRemaining = widthSrc; psrc = psrcStart; }
-
-void
-INTER_MROP_NAME(iplFillBoxTile32s) (pDrawable, nBox, pBox, tile, xrot, yrot, alu, planemask)
- DrawablePtr pDrawable;
- int nBox; /* number of boxes to fill */
- register BoxPtr pBox; /* pointer to list of boxes to fill */
- PixmapPtr tile; /* tile */
- int xrot, yrot;
- int alu;
- unsigned long planemask;
-{
- int tileWidth; /* width of tile */
- int tileHeight; /* height of the tile */
- int widthSrc; /* width in longwords of the source tile */
-
- int widthDst; /* width in longwords of the dest pixmap */
- int w; /* width of current box */
- int h; /* height of current box */
- INTER_DECLAREG(startmask);
- INTER_DECLAREG(endmask); /* masks for reggedy bits at either end of line */
- int nlMiddle; /* number of longwords between sides of boxes */
-
- register int nl; /* loop version of nlMiddle */
- int srcy; /* current tile y position */
- int srcx; /* current tile x position */
- int srcRemaining; /* number of longwords remaining in source */
- int xoffDst, xoffSrc;
- int srcStart; /* number of longwords source offset at left of box */
- int leftShift, rightShift;
-
- INTER_MROP_DECLARE_REG()
-
- INTER_DECLAREG(*pdstBase); /* pointer to start of dest */
- INTER_DECLAREG(*pdstLine); /* poitner to start of dest box */
- INTER_DECLAREG(*psrcBase); /* pointer to start of source */
- INTER_DECLAREG(*psrcLine); /* pointer to fetch point of source */
- INTER_DECLAREG(*psrcStart); /* pointer to start of source line */
- INTER_DECLAREG(*pdst);
- INTER_DECLAREG(*psrc);
- INTER_DECLAREGP(bits);
- INTER_DECLAREGP(bits1);
- register int nlTemp;
-
- INTER_MROP_INITIALIZE (alu, planemask)
-
- psrcBase = (unsigned short *)tile->devPrivate.ptr;
- tileHeight = tile->drawable.height;
- tileWidth = tile->drawable.width;
- widthSrc = tile->devKind / (INTER_PGSZB * INTER_PLANES);
-
- iplGetGroupWidthAndPointer (pDrawable, widthDst, pdstBase)
-
- while (nBox--)
- {
- w = pBox->x2 - pBox->x1;
- h = pBox->y2 - pBox->y1;
-
- /* set up source */
- modulus (pBox->x1 - xrot, tileWidth, srcx);
- modulus (pBox->y1 - yrot, tileHeight, srcy);
- xoffSrc = srcx & INTER_PIM;
- srcStart = srcx >> INTER_PGSH;
- psrcStart = psrcBase + (srcy * widthSrc) * INTER_PLANES;
- psrcLine = psrcStart + srcStart * INTER_PLANES;
-
- /* set up dest */
- xoffDst = pBox->x1 & INTER_PIM;
- pdstLine = pdstBase + (pBox->y1 * widthDst) +
- (pBox->x1 >> INTER_PGSH) * INTER_PLANES;
- /* set up masks */
- if (xoffDst + w < INTER_PPG)
- {
- INTER_maskpartialbits(pBox->x1, w, startmask);
- endmask = 0;
- nlMiddle = 0;
- }
- else
- {
- INTER_maskbits (pBox->x1, w, startmask, endmask, nlMiddle)
- }
- if (xoffSrc == xoffDst)
- {
- while (h--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- srcRemaining = widthSrc - srcStart;
- if (startmask)
- {
- INTER_MROP_MASK (psrc, pdst, startmask, pdst);
- INTER_NEXT_GROUP(pdst);
- IncSrcPtr
- }
- nlTemp = nlMiddle;
- while (nlTemp)
- {
- nl = nlTemp;
- if (nl > srcRemaining)
- nl = srcRemaining;
-
- nlTemp -= nl;
- srcRemaining -= nl;
-
- while (nl--) {
- INTER_MROP_SOLID (psrc, pdst, pdst);
- INTER_NEXT_GROUP(pdst); INTER_NEXT_GROUP(psrc);
- }
-
- if (!srcRemaining)
- {
- srcRemaining = widthSrc;
- psrc = psrcStart;
- }
- }
- if (endmask)
- {
- INTER_MROP_MASK (psrc, pdst, endmask, pdst);
- }
- pdstLine += widthDst;
- psrcLine += widthSrc * INTER_PLANES;
- psrcStart += widthSrc * INTER_PLANES;
- if (++srcy == tileHeight)
- {
- psrcStart = psrcBase;
- psrcLine = psrcStart + srcStart * INTER_PLANES;
- srcy = 0;
- }
- }
- }
- else
- {
- if (xoffSrc > xoffDst)
- {
- leftShift = (xoffSrc - xoffDst) << LEFTSHIFT_AMT;
- rightShift = INTER_PGSZ - leftShift;
- }
- else
- {
- rightShift = (xoffDst - xoffSrc) << LEFTSHIFT_AMT;
- leftShift = INTER_PGSZ - rightShift;
- }
- while (h--)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- INTER_CLR(bits);
- srcRemaining = widthSrc - srcStart;
- if (xoffSrc > xoffDst)
- {
- INTER_COPY(psrc, bits);
- IncSrcPtr
- }
- if (startmask)
- {
- INTER_SCRLEFT(leftShift, bits, bits1);
- INTER_COPY(psrc, bits);
- IncSrcPtr
- INTER_MSKINSM(~0, 0, bits1, ~0, rightShift, bits, bits1);
- INTER_MROP_MASK(bits1, pdst, startmask, pdst);
- INTER_NEXT_GROUP(pdst);
- }
- nlTemp = nlMiddle;
- while (nlTemp)
- {
- nl = nlTemp;
- if (nl > srcRemaining)
- nl = srcRemaining;
-
- nlTemp -= nl;
- srcRemaining -= nl;
-
- while (nl--) {
- INTER_SCRLEFT(leftShift, bits, bits1);
- INTER_COPY(psrc, bits); INTER_NEXT_GROUP(psrc);
- INTER_MSKINSM(~0, 0, bits1, ~0, rightShift, bits, bits1);
- INTER_MROP_SOLID (bits1, pdst, pdst);
- INTER_NEXT_GROUP(pdst);
- }
-
- if (!srcRemaining)
- {
- srcRemaining = widthSrc;
- psrc = psrcStart;
- }
- }
-
- if (endmask)
- {
- INTER_SCRLEFT(leftShift, bits, bits1);
- if (endmask << rightShift)
- {
- INTER_COPY(psrc, bits);
- INTER_MSKINSM(~0, 0, bits1, ~0, rightShift, bits, bits1);
- }
- INTER_MROP_MASK (bits1, pdst, endmask, pdst);
- }
- pdstLine += widthDst;
- psrcLine += widthSrc * INTER_PLANES;
- psrcStart += widthSrc * INTER_PLANES;
- if (++srcy == tileHeight)
- {
- psrcStart = psrcBase;
- psrcLine = psrcStart + srcStart * INTER_PLANES;
- srcy = 0;
- }
- }
- }
- pBox++;
- }
-}
-
-void
-INTER_MROP_NAME(iplFillSpanTile32s) (pDrawable, n, ppt, pwidth, tile, xrot, yrot, alu, planemask)
- DrawablePtr pDrawable;
- int n;
- DDXPointPtr ppt;
- int *pwidth;
- PixmapPtr tile;
- int xrot, yrot;
- int alu;
- unsigned long planemask;
-{
- int tileWidth; /* width of tile */
- int tileHeight; /* height of the tile */
- int widthSrc; /* width in longwords of the source tile */
-
- int widthDst; /* width in longwords of the dest pixmap */
- int w; /* width of current box */
- INTER_DECLAREG(startmask);
- INTER_DECLAREG(endmask);/* masks for reggedy bits at either end of line */
- int nlMiddle; /* number of longwords between sides of boxes */
-
- register int nl; /* loop version of nlMiddle */
- int srcy; /* current tile y position */
- int srcx; /* current tile x position */
- int srcRemaining; /* number of longwords remaining in source */
- int xoffDst, xoffSrc;
- int srcStart; /* number of longwords source offset at left of box */
- int leftShift, rightShift;
-
- INTER_MROP_DECLARE_REG()
-
- INTER_DECLAREG(*pdstBase); /* pointer to start of dest */
- INTER_DECLAREG(*pdstLine); /* poitner to start of dest box */
- INTER_DECLAREG(*psrcBase); /* pointer to start of source */
- INTER_DECLAREG(*psrcLine); /* pointer to fetch point of source */
- INTER_DECLAREG(*psrcStart); /* pointer to start of source line */
- INTER_DECLAREG(*pdst);
- INTER_DECLAREG(*psrc);
- INTER_DECLAREGP(bits);
- INTER_DECLAREGP(bits1);
- register int nlTemp;
-
- INTER_MROP_INITIALIZE (alu, planemask)
-
- psrcBase = (unsigned short *)tile->devPrivate.ptr;
- tileHeight = tile->drawable.height;
- tileWidth = tile->drawable.width;
- widthSrc = tile->devKind / (INTER_PGSZB * INTER_PLANES);
-
- iplGetGroupWidthAndPointer (pDrawable, widthDst, pdstBase)
-
- while (n--)
- {
- w = *pwidth++;
-
- /* set up source */
- modulus (ppt->x - xrot, tileWidth, srcx);
- modulus (ppt->y - yrot, tileHeight, srcy);
- xoffSrc = srcx & INTER_PIM;
- srcStart = srcx >> INTER_PGSH;
- psrcStart = psrcBase + (srcy * widthSrc) * INTER_PLANES;
- psrcLine = psrcStart + srcStart * INTER_PLANES;
-
- /* set up dest */
- xoffDst = ppt->x & INTER_PIM;
- pdstLine = pdstBase + (ppt->y * widthDst) +
- (ppt->x >> INTER_PGSH) * INTER_PLANES;
- /* set up masks */
- if (xoffDst + w < INTER_PPG)
- {
- INTER_maskpartialbits(ppt->x, w, startmask);
- endmask = 0;
- nlMiddle = 0;
- }
- else
- {
- INTER_maskbits (ppt->x, w, startmask, endmask, nlMiddle)
- }
-
- if (xoffSrc == xoffDst)
- {
- psrc = psrcLine;
- pdst = pdstLine;
- srcRemaining = widthSrc - srcStart;
- if (startmask)
- {
- INTER_MROP_MASK (psrc, pdst, startmask, pdst);
- INTER_NEXT_GROUP(pdst);
- IncSrcPtr
- }
- nlTemp = nlMiddle;
- while (nlTemp)
- {
- nl = nlTemp;
- if (nl > srcRemaining)
- nl = srcRemaining;
-
- nlTemp -= nl;
- srcRemaining -= nl;
-
- while (nl--) {
- INTER_MROP_SOLID (psrc, pdst, pdst);
- INTER_NEXT_GROUP(pdst); INTER_NEXT_GROUP(psrc);
- }
-
- if (!srcRemaining)
- {
- srcRemaining = widthSrc;
- psrc = psrcStart;
- }
- }
- if (endmask)
- {
- INTER_MROP_MASK (psrc, pdst, endmask, pdst);
- }
- }
- else
- {
- if (xoffSrc > xoffDst)
- {
- leftShift = (xoffSrc - xoffDst) << LEFTSHIFT_AMT;
- rightShift = INTER_PGSZ - leftShift;
- }
- else
- {
- rightShift = (xoffDst - xoffSrc) << LEFTSHIFT_AMT;
- leftShift = INTER_PGSZ - rightShift;
- }
- psrc = psrcLine;
- pdst = pdstLine;
- INTER_CLR(bits);
- srcRemaining = widthSrc - srcStart;
- if (xoffSrc > xoffDst)
- {
- INTER_COPY(psrc, bits);
- IncSrcPtr
- }
- if (startmask)
- {
- INTER_SCRLEFT(leftShift, bits, bits1);
- INTER_COPY(psrc, bits);
- IncSrcPtr
- INTER_MSKINSM(~0, 0, bits1, ~0, rightShift, bits, bits1);
- INTER_MROP_MASK(bits1, pdst, startmask, pdst);
- INTER_NEXT_GROUP(pdst);
- }
- nlTemp = nlMiddle;
- while (nlTemp)
- {
- nl = nlTemp;
- if (nl > srcRemaining)
- nl = srcRemaining;
-
- nlTemp -= nl;
- srcRemaining -= nl;
-
- while (nl--) {
- INTER_SCRLEFT(leftShift, bits, bits1);
- INTER_COPY(psrc, bits); INTER_NEXT_GROUP(psrc);
- INTER_MSKINSM(~0, 0, bits1, ~0, rightShift, bits, bits1);
- INTER_MROP_SOLID(bits1, pdst, pdst);
- INTER_NEXT_GROUP(pdst);
- }
-
- if (!srcRemaining)
- {
- srcRemaining = widthSrc;
- psrc = psrcStart;
- }
- }
-
- if (endmask)
- {
- INTER_SCRLEFT(leftShift, bits, bits1);
- if (endmask << rightShift)
- {
- INTER_COPY(psrc, bits);
- INTER_MSKINSM(~0, 0, bits1, ~0, rightShift, bits, bits1);
- }
- INTER_MROP_MASK (bits1, pdst, endmask, pdst);
- }
- }
- ppt++;
- }
-}