From 0dab6fa3582b70ccd0f01459902415c28dbc81ff Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Fri, 11 Apr 2008 09:47:51 -0400 Subject: So long, and thanks for all the cfb. --- cfb/Makefile.am | 21 - cfb/Makefile.am.inc | 153 ----- cfb/cfb.h | 1268 ----------------------------------------- cfb/cfb16.h | 93 --- cfb/cfb24.h | 97 ---- cfb/cfb32.h | 93 --- cfb/cfb8bit.c | 469 --------------- cfb/cfb8bit.h | 1570 --------------------------------------------------- cfb/cfb8line.c | 1503 ------------------------------------------------ cfb/cfballpriv.c | 70 --- cfb/cfbbitblt.c | 1455 ----------------------------------------------- cfb/cfbblt.c | 933 ------------------------------ cfb/cfbbres.c | 340 ----------- cfb/cfbbresd.c | 404 ------------- cfb/cfbcmap.c | 119 ---- cfb/cfbcppl.c | 486 ---------------- cfb/cfbfillarc.c | 374 ------------ cfb/cfbfillrct.c | 305 ---------- cfb/cfbfillsp.c | 1004 -------------------------------- cfb/cfbgc.c | 799 -------------------------- cfb/cfbgetsp.c | 213 ------- cfb/cfbglblt8.c | 477 ---------------- cfb/cfbhrzvert.c | 554 ------------------ cfb/cfbigblt8.c | 106 ---- cfb/cfbimage.c | 206 ------- cfb/cfbline.c | 756 ------------------------- cfb/cfbmap.h | 210 ------- cfb/cfbmskbits.c | 1400 --------------------------------------------- cfb/cfbmskbits.h | 854 ---------------------------- cfb/cfbpixmap.c | 375 ------------ cfb/cfbply1rct.c | 363 ------------ cfb/cfbpolypnt.c | 202 ------- cfb/cfbpush8.c | 184 ------ cfb/cfbrctstp8.c | 593 ------------------- cfb/cfbrrop.c | 227 -------- cfb/cfbrrop.h | 343 ----------- cfb/cfbscrinit.c | 223 -------- cfb/cfbsetsp.c | 316 ----------- cfb/cfbsolid.c | 1365 -------------------------------------------- cfb/cfbteblt8.c | 589 ------------------- cfb/cfbtegblt.c | 218 ------- cfb/cfbtile32.c | 517 ----------------- cfb/cfbtileodd.c | 1245 ---------------------------------------- cfb/cfbunmap.h | 161 ------ cfb/cfbwindow.c | 160 ------ cfb/cfbzerarc.c | 322 ----------- cfb/stip68kgnu.h | 121 ---- cfb/stipmips.s | 281 --------- cfb/stipsparc.s | 290 ---------- cfb/stipsprc32.s | 291 ---------- 50 files changed, 24718 deletions(-) delete mode 100644 cfb/Makefile.am delete mode 100644 cfb/Makefile.am.inc delete mode 100644 cfb/cfb.h delete mode 100644 cfb/cfb16.h delete mode 100644 cfb/cfb24.h delete mode 100644 cfb/cfb32.h delete mode 100644 cfb/cfb8bit.c delete mode 100644 cfb/cfb8bit.h delete mode 100644 cfb/cfb8line.c delete mode 100644 cfb/cfballpriv.c delete mode 100644 cfb/cfbbitblt.c delete mode 100644 cfb/cfbblt.c delete mode 100644 cfb/cfbbres.c delete mode 100644 cfb/cfbbresd.c delete mode 100644 cfb/cfbcmap.c delete mode 100644 cfb/cfbcppl.c delete mode 100644 cfb/cfbfillarc.c delete mode 100644 cfb/cfbfillrct.c delete mode 100644 cfb/cfbfillsp.c delete mode 100644 cfb/cfbgc.c delete mode 100644 cfb/cfbgetsp.c delete mode 100644 cfb/cfbglblt8.c delete mode 100644 cfb/cfbhrzvert.c delete mode 100644 cfb/cfbigblt8.c delete mode 100644 cfb/cfbimage.c delete mode 100644 cfb/cfbline.c delete mode 100644 cfb/cfbmap.h delete mode 100644 cfb/cfbmskbits.c delete mode 100644 cfb/cfbmskbits.h delete mode 100644 cfb/cfbpixmap.c delete mode 100644 cfb/cfbply1rct.c delete mode 100644 cfb/cfbpolypnt.c delete mode 100644 cfb/cfbpush8.c delete mode 100644 cfb/cfbrctstp8.c delete mode 100644 cfb/cfbrrop.c delete mode 100644 cfb/cfbrrop.h delete mode 100644 cfb/cfbscrinit.c delete mode 100644 cfb/cfbsetsp.c delete mode 100644 cfb/cfbsolid.c delete mode 100644 cfb/cfbteblt8.c delete mode 100644 cfb/cfbtegblt.c delete mode 100644 cfb/cfbtile32.c delete mode 100644 cfb/cfbtileodd.c delete mode 100644 cfb/cfbunmap.h delete mode 100644 cfb/cfbwindow.c delete mode 100644 cfb/cfbzerarc.c delete mode 100644 cfb/stip68kgnu.h delete mode 100644 cfb/stipmips.s delete mode 100644 cfb/stipsparc.s delete mode 100644 cfb/stipsprc32.s (limited to 'cfb') diff --git a/cfb/Makefile.am b/cfb/Makefile.am deleted file mode 100644 index 901fc95ae..000000000 --- a/cfb/Makefile.am +++ /dev/null @@ -1,21 +0,0 @@ -noinst_LTLIBRARIES = libcfb.la - -include Makefile.am.inc - -DISTCLEANFILES += cfbglrop8.c - -libcfb_la_SOURCES = cfb8bit.c cfbteblt8.c cfbglrop8.c cfbpush8.c cfbrctstp8.c \ - $(libcfb_gen_sources) $(libcfb_common_sources) - -libcfb_la_LIBADD = ../mfb/libmfb.la - -AM_CFLAGS = -DPSZ=8 $(DIX_CFLAGS) $(PLATFORMDEFS) - -INCLUDES = $(CFB_INCLUDES) -I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/common - -EXTRA_DIST = cfbline.c cfbfillarc.c cfbzerarc.c cfbblt.c cfbsolid.c \ - cfbtileodd.c cfbtile32.c cfb8line.c cfbply1rct.c cfbglblt8.c \ - cfb16.h cfb24.h cfb32.h cfb8bit.h cfbrrop.h \ - stip68kgnu.h stipmips.s stipsparc.s stipsprc32.s - -sdk_HEADERS = cfb.h cfb32.h cfb16.h cfbmap.h cfbunmap.h cfbmskbits.h diff --git a/cfb/Makefile.am.inc b/cfb/Makefile.am.inc deleted file mode 100644 index a2ee143aa..000000000 --- a/cfb/Makefile.am.inc +++ /dev/null @@ -1,153 +0,0 @@ -libcfb_gen_sources = cfbseg.c cfbfillarcC.c cfbfillarcG.c cfbzerarcC.c cfbzerarcX.c cfbzerarcG.c \ - cfbbltC.c cfbbltX.c cfbbltO.c cfbbltG.c cfbsolidC.c cfbsolidX.c cfbsolidG.c cfbtileoddC.c \ - cfbtileoddG.c cfbtile32C.c cfbtile32G.c cfb8lineCO.c cfb8lineCP.c cfb8lineX.c cfb8lineG.c \ - cfb8segCS.c cfb8segC.c cfb8segX.c cfb8setG.c cfbply1rctC.c cfbply1rctG.c - -DISTCLEANFILES = $(libcfb_gen_sources) - -CFB_INCLUDES = -I$(top_srcdir)/mfb -I$(top_srcdir)/cfb - -libcfb_common_sources = $(top_srcdir)/cfb/cfbgc.c $(top_srcdir)/cfb/cfbrrop.c \ - $(top_srcdir)/cfb/cfbwindow.c \ - $(top_srcdir)/cfb/cfbmskbits.c $(top_srcdir)/cfb/cfbpixmap.c \ - $(top_srcdir)/cfb/cfbbitblt.c $(top_srcdir)/cfb/cfbfillsp.c \ - $(top_srcdir)/cfb/cfbsetsp.c $(top_srcdir)/cfb/cfbscrinit.c \ - $(top_srcdir)/cfb/cfballpriv.c $(top_srcdir)/cfb/cfbgetsp.c \ - $(top_srcdir)/cfb/cfbfillrct.c $(top_srcdir)/cfb/cfbigblt8.c \ - $(top_srcdir)/cfb/cfbglblt8.c $(top_srcdir)/cfb/cfbtegblt.c \ - $(top_srcdir)/cfb/cfbpolypnt.c \ - $(top_srcdir)/cfb/cfbbres.c $(top_srcdir)/cfb/cfbline.c \ - $(top_srcdir)/cfb/cfbhrzvert.c $(top_srcdir)/cfb/cfbbresd.c \ - $(top_srcdir)/cfb/cfbimage.c $(top_srcdir)/cfb/cfbcppl.c \ - $(top_srcdir)/cfb/cfbcmap.c - -cfbseg.c: - echo "#define POLYSEGMENT" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbline.c\"" >> $@ - -cfbfillarcC.c: - echo "#define RROP GXcopy" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbfillarc.c\"" >> $@ - -cfbfillarcG.c: - echo "#define RROP GXset" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbfillarc.c\"" >> $@ - -cfbzerarcC.c: - echo "#define RROP GXcopy" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbzerarc.c\"" >> $@ - -cfbzerarcX.c: - echo "#define RROP GXxor" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbzerarc.c\"" >> $@ - -cfbzerarcG.c: - echo "#define RROP GXset" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbzerarc.c\"" >> $@ - -cfbbltC.c: - echo "#define MROP Mcopy" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbblt.c\"" >> $@ - -cfbbltX.c: - echo "#define MROP Mxor" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbblt.c\"" >> $@ - -cfbbltO.c: - echo "#define MROP Mor" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbblt.c\"" >> $@ - -cfbbltG.c: - echo "#define MROP 0" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbblt.c\"" >> $@ - -cfbsolidC.c: - echo "#define RROP GXcopy" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbsolid.c\"" >> $@ - -cfbsolidX.c: - echo "#define RROP GXxor" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbsolid.c\"" >> $@ - -cfbsolidG.c: - echo "#define RROP GXset" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbsolid.c\"" >> $@ - -cfbtileoddC.c: - echo "#define MROP Mcopy" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbtileodd.c\"" >> $@ - -cfbtileoddG.c: - echo "#define MROP 0" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbtileodd.c\"" >> $@ - -cfbtile32C.c: - echo "#define MROP Mcopy" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbtile32.c\"" >> $@ - -cfbtile32G.c: - echo "#define MROP 0" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbtile32.c\"" >> $@ - -cfb8lineCO.c: - echo "#define RROP GXcopy" > $@ - echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@ - -cfb8lineCP.c: - echo "#define RROP GXcopy" > $@ - echo "#define PREVIOUS" >> $@ - echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@ - -cfb8lineX.c: - echo "#define RROP GXxor" > $@ - echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@ - -cfb8lineG.c: - echo "#define RROP GXset" > $@ - echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@ - -cfb8segCS.c: - echo "#define RROP GXcopy" > $@ - echo "#define POLYSEGMENT" >> $@ - echo "#define WIDTH_SHIFT" >> $@ - echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@ - -cfb8segC.c: - echo "#define RROP GXcopy" > $@ - echo "#define POLYSEGMENT" >> $@ - echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@ - -cfb8segX.c: - echo "#define RROP GXxor" > $@ - echo "#define POLYSEGMENT" >> $@ - echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@ - -cfb8setG.c: - echo "#define RROP GXset" > $@ - echo "#define POLYSEGMENT" >> $@ - echo "#include \"$(top_srcdir)/cfb/cfb8line.c\"" >> $@ - -cfbply1rctC.c: - echo "#define RROP GXcopy" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbply1rct.c\"" >> $@ - -cfbply1rctG.c: - echo "#define RROP GXset" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbply1rct.c\"" >> $@ - -cfbglrop8.c: - echo "#define GLYPHROP" > $@ - echo "#include \"$(top_srcdir)/cfb/cfbglblt8.c\"" >> $@ - - -if XPRINT - -PLATFORMDEFS = -DXFREE86 - -cfb8bit.o: compiler.h - -compiler.h: - echo "#include \"$(top_srcdir)/hw/xfree86/common/compiler.h\"" >> $@ - -endif - diff --git a/cfb/cfb.h b/cfb/cfb.h deleted file mode 100644 index aece13341..000000000 --- a/cfb/cfb.h +++ /dev/null @@ -1,1268 +0,0 @@ -/************************************************************ -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - -********************************************************/ - -#if !defined(__CFB_H__) || defined(CFB_PROTOTYPES_ONLY) - -#include -#include "globals.h" -#include "pixmap.h" -#include "region.h" -#include "gc.h" -#include "colormap.h" -#include "miscstruct.h" -#include "servermd.h" -#include "privates.h" -#include "windowstr.h" -#include "mfb.h" -#undef PixelType - -#include "cfbmap.h" - -#ifndef CfbBits -#define CfbBits CARD32 -#endif - -#ifndef CFB_PROTOTYPES_ONLY -#define __CFB_H__ -/* - private filed of pixmap - pixmap.devPrivate = (unsigned int *)pointer_to_bits - pixmap.devKind = width_of_pixmap_in_bytes -*/ - -extern DevPrivateKey cfbGCPrivateKey; - -/* private field of GC */ -typedef struct { - unsigned char rop; /* special case rop values */ - /* next two values unused in cfb, included for compatibility with mfb */ - unsigned char ropOpStip; /* rop for opaque stipple */ - /* this value is ropFillArea in mfb, usurped for cfb */ - unsigned char oneRect; /* drawable has one clip rect */ - CfbBits xor, and; /* reduced rop values */ - } cfbPrivGC; - -typedef cfbPrivGC *cfbPrivGCPtr; - -#define cfbGetGCPrivate(pGC) ((cfbPrivGCPtr)\ - dixLookupPrivate(&(pGC)->devPrivates, cfbGCPrivateKey)) - -#define cfbGetCompositeClip(pGC) ((pGC)->pCompositeClip) - -/* way to carry RROP info around */ -typedef struct { - unsigned char rop; - CfbBits xor, and; -} cfbRRopRec, *cfbRRopPtr; - -/* cfb8bit.c */ - -extern int cfbSetStipple( - int /*alu*/, - CfbBits /*fg*/, - CfbBits /*planemask*/ -); - -extern int cfbSetOpaqueStipple( - int /*alu*/, - CfbBits /*fg*/, - CfbBits /*bg*/, - CfbBits /*planemask*/ -); - -extern int cfbComputeClipMasks32( - BoxPtr /*pBox*/, - int /*numRects*/, - int /*x*/, - int /*y*/, - int /*w*/, - int /*h*/, - CARD32 * /*clips*/ -); -#endif /* !CFB_PROTOTYPES_ONLY */ -/* cfb8cppl.c */ - -extern void cfbCopyImagePlane( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - int /*rop*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/ -); - -#ifndef CFB_PROTOTYPES_ONLY -extern void cfbCopyPlane8to1( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - int /*rop*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/, - unsigned long /*bitPlane*/ -); - -extern void cfbCopyPlane16to1( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - int /*rop*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/, - unsigned long /*bitPlane*/ -); - -extern void cfbCopyPlane24to1( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - int /*rop*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/, - unsigned long /*bitPlane*/ -); - -extern void cfbCopyPlane32to1( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - int /*rop*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/, - unsigned long /*bitPlane*/ -); -#endif - -/* cfb8lineCO.c */ - -extern int cfb8LineSS1RectCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*mode*/, - int /*npt*/, - DDXPointPtr /*pptInit*/, - DDXPointPtr /*pptInitOrig*/, - int * /*x1p*/, - int * /*y1p*/, - int * /*x2p*/, - int * /*y2p*/ -); - -extern void cfb8LineSS1Rect( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*mode*/, - int /*npt*/, - DDXPointPtr /*pptInit*/ -); - -extern void cfb8ClippedLineCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*x1*/, - int /*y1*/, - int /*x2*/, - int /*y2*/, - BoxPtr /*boxp*/, - Bool /*shorten*/ -); -/* cfb8lineCP.c */ - -extern int cfb8LineSS1RectPreviousCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*mode*/, - int /*npt*/, - DDXPointPtr /*pptInit*/, - DDXPointPtr /*pptInitOrig*/, - int * /*x1p*/, - int * /*y1p*/, - int * /*x2p*/, - int * /*y2p*/ -); -/* cfb8lineG.c */ - -extern int cfb8LineSS1RectGeneral( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*mode*/, - int /*npt*/, - DDXPointPtr /*pptInit*/, - DDXPointPtr /*pptInitOrig*/, - int * /*x1p*/, - int * /*y1p*/, - int * /*x2p*/, - int * /*y2p*/ -); - -extern void cfb8ClippedLineGeneral( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*x1*/, - int /*y1*/, - int /*x2*/, - int /*y2*/, - BoxPtr /*boxp*/, - Bool /*shorten*/ -); -/* cfb8lineX.c */ - -extern int cfb8LineSS1RectXor( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*mode*/, - int /*npt*/, - DDXPointPtr /*pptInit*/, - DDXPointPtr /*pptInitOrig*/, - int * /*x1p*/, - int * /*y1p*/, - int * /*x2p*/, - int * /*y2p*/ -); - -extern void cfb8ClippedLineXor( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*x1*/, - int /*y1*/, - int /*x2*/, - int /*y2*/, - BoxPtr /*boxp*/, - Bool /*shorten*/ -); -/* cfb8segC.c */ - -extern int cfb8SegmentSS1RectCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nseg*/, - xSegment * /*pSegInit*/ -); -/* cfb8segCS.c */ - -extern int cfb8SegmentSS1RectShiftCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nseg*/, - xSegment * /*pSegInit*/ -); - -extern void cfb8SegmentSS1Rect( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nseg*/, - xSegment * /*pSegInit*/ -); -/* cfb8segG.c */ - -extern int cfb8SegmentSS1RectGeneral( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nseg*/, - xSegment * /*pSegInit*/ -); -/* cfbsegX.c */ - -extern int cfb8SegmentSS1RectXor( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nseg*/, - xSegment * /*pSegInit*/ -); -/* cfballpriv.c */ - -extern Bool cfbAllocatePrivates( - ScreenPtr /*pScreen*/, - DevPrivateKey * /*gc_key*/ -); -/* cfbbitblt.c */ - -extern RegionPtr cfbBitBlt( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - GCPtr/*pGC*/, - int /*srcx*/, - int /*srcy*/, - int /*width*/, - int /*height*/, - int /*dstx*/, - int /*dsty*/, - void (* /*doBitBlt*/)( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/ - ), - unsigned long /*bitPlane*/ -); - -#define cfbCopyPlaneExpand cfbBitBlt - -extern RegionPtr cfbCopyPlaneReduce( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - GCPtr /*pGC*/, - int /*srcx*/, - int /*srcy*/, - int /*width*/, - int /*height*/, - int /*dstx*/, - int /*dsty*/, - void (* /*doCopyPlane*/)( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/, - unsigned long /*bitPlane*/ /* We must know which plane to reduce! */ - ), - unsigned long /*bitPlane*/ -); - -extern void cfbDoBitblt( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/ -); - -extern RegionPtr cfbCopyArea( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - GCPtr/*pGC*/, - int /*srcx*/, - int /*srcy*/, - int /*width*/, - int /*height*/, - int /*dstx*/, - int /*dsty*/ -); - -#ifndef CFB_PROTOTYPES_ONLY -extern void cfbCopyPlane1to8( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - int /*rop*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/ -); -#endif - -extern RegionPtr cfbCopyPlane( - DrawablePtr /*pSrcDrawable*/, - DrawablePtr /*pDstDrawable*/, - GCPtr /*pGC*/, - int /*srcx*/, - int /*srcy*/, - int /*width*/, - int /*height*/, - int /*dstx*/, - int /*dsty*/, - unsigned long /*bitPlane*/ -); -/* cfbbltC.c */ - -extern void cfbDoBitbltCopy( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/ -); -/* cfbbltG.c */ - -extern void cfbDoBitbltGeneral( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/ -); -/* cfbbltO.c */ - -extern void cfbDoBitbltOr( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/ -); -/* cfbbltX.c */ - -extern void cfbDoBitbltXor( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/ -); -/* cfbbres.c */ - -extern void cfbBresS( - int /*rop*/, - CfbBits /*and*/, - CfbBits /*xor*/, - CfbBits * /*addrl*/, - int /*nlwidth*/, - int /*signdx*/, - int /*signdy*/, - int /*axis*/, - int /*x1*/, - int /*y1*/, - int /*e*/, - int /*e1*/, - int /*e2*/, - int /*len*/ -); -/* cfbbresd.c */ - -extern void cfbBresD( - cfbRRopPtr /*rrops*/, - int * /*pdashIndex*/, - unsigned char * /*pDash*/, - int /*numInDashList*/, - int * /*pdashOffset*/, - int /*isDoubleDash*/, - CfbBits * /*addrl*/, - int /*nlwidth*/, - int /*signdx*/, - int /*signdy*/, - int /*axis*/, - int /*x1*/, - int /*y1*/, - int /*e*/, - int /*e1*/, - int /*e2*/, - int /*len*/ -); - -/* cfbcmap.c */ - -#ifndef CFB_PROTOTYPES_ONLY -extern int cfbListInstalledColormaps( - ScreenPtr /*pScreen*/, - Colormap * /*pmaps*/ -); - -extern void cfbInstallColormap( - ColormapPtr /*pmap*/ -); - -extern void cfbUninstallColormap( - ColormapPtr /*pmap*/ -); - -extern void cfbResolveColor( - unsigned short * /*pred*/, - unsigned short * /*pgreen*/, - unsigned short * /*pblue*/, - VisualPtr /*pVisual*/ -); - -extern Bool cfbInitializeColormap( - ColormapPtr /*pmap*/ -); - -extern int cfbExpandDirectColors( - ColormapPtr /*pmap*/, - int /*ndef*/, - xColorItem * /*indefs*/, - xColorItem * /*outdefs*/ -); - -extern Bool cfbCreateDefColormap( - ScreenPtr /*pScreen*/ -); - -extern Bool cfbSetVisualTypes( - int /*depth*/, - int /*visuals*/, - int /*bitsPerRGB*/ -); - -extern void cfbClearVisualTypes(void); - -extern Bool cfbInitVisuals( - VisualPtr * /*visualp*/, - DepthPtr * /*depthp*/, - int * /*nvisualp*/, - int * /*ndepthp*/, - int * /*rootDepthp*/, - VisualID * /*defaultVisp*/, - unsigned long /*sizes*/, - int /*bitsPerRGB*/ -); -#endif -/* cfbfillarcC.c */ - -extern void cfbPolyFillArcSolidCopy( - DrawablePtr /*pDraw*/, - GCPtr /*pGC*/, - int /*narcs*/, - xArc * /*parcs*/ -); -/* cfbfillarcG.c */ - -extern void cfbPolyFillArcSolidGeneral( - DrawablePtr /*pDraw*/, - GCPtr /*pGC*/, - int /*narcs*/, - xArc * /*parcs*/ -); -/* cfbfillrct.c */ - -extern void cfbFillBoxTileOdd( - DrawablePtr /*pDrawable*/, - int /*n*/, - BoxPtr /*rects*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/ -); - -extern void cfbFillRectTileOdd( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); - -extern void cfbPolyFillRect( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nrectFill*/, - xRectangle * /*prectInit*/ -); -/* cfbfillsp.c */ - -extern void cfbUnnaturalTileFS( - DrawablePtr /*pDrawable*/, - GCPtr/*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); - -extern void cfbUnnaturalStippleFS( - DrawablePtr /*pDrawable*/, - GCPtr/*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); - -#ifndef CFB_PROTOTYPES_ONLY -extern void cfb8Stipple32FS( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); - -extern void cfb8OpaqueStipple32FS( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); -#endif -/* cfbgc.c */ - -extern GCOpsPtr cfbMatchCommon( - GCPtr /*pGC*/, - cfbPrivGCPtr /*devPriv*/ -); - -extern Bool cfbCreateGC( - GCPtr /*pGC*/ -); - -extern void cfbValidateGC( - GCPtr /*pGC*/, - unsigned long /*changes*/, - DrawablePtr /*pDrawable*/ -); - -/* cfbgetsp.c */ - -extern void cfbGetSpans( - DrawablePtr /*pDrawable*/, - int /*wMax*/, - DDXPointPtr /*ppt*/, - int * /*pwidth*/, - int /*nspans*/, - char * /*pdstStart*/ -); -/* cfbglblt8.c */ - -extern void cfbPolyGlyphBlt8( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*x*/, - int /*y*/, - unsigned int /*nglyph*/, - CharInfoPtr * /*ppci*/, - pointer /*pglyphBase*/ -); -/* cfbglrop8.c */ - -extern void cfbPolyGlyphRop8( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*x*/, - int /*y*/, - unsigned int /*nglyph*/, - CharInfoPtr * /*ppci*/, - pointer /*pglyphBase*/ -); -/* cfbhrzvert.c */ - -extern void cfbHorzS( - int /*rop*/, - CfbBits /*and*/, - CfbBits /*xor*/, - CfbBits * /*addrl*/, - int /*nlwidth*/, - int /*x1*/, - int /*y1*/, - int /*len*/ -); - -extern void cfbVertS( - int /*rop*/, - CfbBits /*and*/, - CfbBits /*xor*/, - CfbBits * /*addrl*/, - int /*nlwidth*/, - int /*x1*/, - int /*y1*/, - int /*len*/ -); -/* cfbigblt8.c */ - -extern void cfbImageGlyphBlt8( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*x*/, - int /*y*/, - unsigned int /*nglyph*/, - CharInfoPtr * /*ppci*/, - pointer /*pglyphBase*/ -); -/* cfbimage.c */ - -extern void cfbPutImage( - DrawablePtr /*pDraw*/, - GCPtr /*pGC*/, - int /*depth*/, - int /*x*/, - int /*y*/, - int /*w*/, - int /*h*/, - int /*leftPad*/, - int /*format*/, - char * /*pImage*/ -); - -extern void cfbGetImage( - DrawablePtr /*pDrawable*/, - int /*sx*/, - int /*sy*/, - int /*w*/, - int /*h*/, - unsigned int /*format*/, - unsigned long /*planeMask*/, - char * /*pdstLine*/ -); -/* cfbline.c */ - -extern void cfbLineSS( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*mode*/, - int /*npt*/, - DDXPointPtr /*pptInit*/ -); - -extern void cfbLineSD( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*mode*/, - int /*npt*/, - DDXPointPtr /*pptInit*/ -); -/* cfbmskbits.c */ -/* cfbpixmap.c */ - -extern PixmapPtr cfbCreatePixmap( - ScreenPtr /*pScreen*/, - int /*width*/, - int /*height*/, - int /*depth*/, - unsigned /*usage_hint*/ -); - -extern Bool cfbDestroyPixmap( - PixmapPtr /*pPixmap*/ -); - -extern PixmapPtr cfbCopyPixmap( - PixmapPtr /*pSrc*/ -); - -extern void cfbPadPixmap( - PixmapPtr /*pPixmap*/ -); - -extern void cfbXRotatePixmap( - PixmapPtr /*pPix*/, - int /*rw*/ -); - -extern void cfbYRotatePixmap( - PixmapPtr /*pPix*/, - int /*rh*/ -); - -extern void cfbCopyRotatePixmap( - PixmapPtr /*psrcPix*/, - PixmapPtr * /*ppdstPix*/, - int /*xrot*/, - int /*yrot*/ -); -/* cfbply1rctC.c */ - -extern void cfbFillPoly1RectCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*shape*/, - int /*mode*/, - int /*count*/, - DDXPointPtr /*ptsIn*/ -); -/* cfbply1rctG.c */ - -extern void cfbFillPoly1RectGeneral( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*shape*/, - int /*mode*/, - int /*count*/, - DDXPointPtr /*ptsIn*/ -); -/* cfbpolypnt.c */ - -extern void cfbPolyPoint( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*mode*/, - int /*npt*/, - xPoint * /*pptInit*/ -); -/* cfbpush8.c */ - -#ifndef CFB_PROTOTYPES_ONLY -extern void cfbPushPixels8( - GCPtr /*pGC*/, - PixmapPtr /*pBitmap*/, - DrawablePtr /*pDrawable*/, - int /*dx*/, - int /*dy*/, - int /*xOrg*/, - int /*yOrg*/ -); -/* cfbrctstp8.c */ - -extern void cfb8FillRectOpaqueStippled32( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); - -extern void cfb8FillRectTransparentStippled32( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); - -extern void cfb8FillRectStippledUnnatural( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); -#endif -/* cfbrrop.c */ - -extern int cfbReduceRasterOp( - int /*rop*/, - CfbBits /*fg*/, - CfbBits /*pm*/, - CfbBits * /*andp*/, - CfbBits * /*xorp*/ -); -/* cfbscrinit.c */ - -extern Bool cfbCloseScreen( - int /*index*/, - ScreenPtr /*pScreen*/ -); - -extern Bool cfbSetupScreen( - ScreenPtr /*pScreen*/, - pointer /*pbits*/, - int /*xsize*/, - int /*ysize*/, - int /*dpix*/, - int /*dpiy*/, - int /*width*/ -); - -extern Bool cfbFinishScreenInit( - ScreenPtr /*pScreen*/, - pointer /*pbits*/, - int /*xsize*/, - int /*ysize*/, - int /*dpix*/, - int /*dpiy*/, - int /*width*/ -); - -extern Bool cfbScreenInit( - ScreenPtr /*pScreen*/, - pointer /*pbits*/, - int /*xsize*/, - int /*ysize*/, - int /*dpix*/, - int /*dpiy*/, - int /*width*/ -); - -extern PixmapPtr cfbGetScreenPixmap( - ScreenPtr /*pScreen*/ -); - -extern void cfbSetScreenPixmap( - PixmapPtr /*pPix*/ -); - -/* cfbseg.c */ - -extern void cfbSegmentSS( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nseg*/, - xSegment * /*pSeg*/ -); - -extern void cfbSegmentSD( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nseg*/, - xSegment * /*pSeg*/ -); -/* cfbsetsp.c */ - -extern void cfbSetScanline( - int /*y*/, - int /*xOrigin*/, - int /*xStart*/, - int /*xEnd*/, - unsigned int * /*psrc*/, - int /*alu*/, - int * /*pdstBase*/, - int /*widthDst*/, - unsigned long /*planemask*/ -); - -extern void cfbSetSpans( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - char * /*psrc*/, - DDXPointPtr /*ppt*/, - int * /*pwidth*/, - int /*nspans*/, - int /*fSorted*/ -); -/* cfbsolidC.c */ - -extern void cfbFillRectSolidCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); - -extern void cfbSolidSpansCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); -/* cfbsolidG.c */ - -extern void cfbFillRectSolidGeneral( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); - -extern void cfbSolidSpansGeneral( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); -/* cfbsolidX.c */ - -extern void cfbFillRectSolidXor( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); - -extern void cfbSolidSpansXor( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); -/* cfbteblt8.c */ - -#ifndef CFB_PROTOTYPES_ONLY -extern void cfbTEGlyphBlt8( - DrawablePtr /*pDrawable*/, - GCPtr/*pGC*/, - int /*xInit*/, - int /*yInit*/, - unsigned int /*nglyph*/, - CharInfoPtr * /*ppci*/, - pointer /*pglyphBase*/ -); -#endif -/* cfbtegblt.c */ - -extern void cfbTEGlyphBlt( - DrawablePtr /*pDrawable*/, - GCPtr/*pGC*/, - int /*x*/, - int /*y*/, - unsigned int /*nglyph*/, - CharInfoPtr * /*ppci*/, - pointer /*pglyphBase*/ -); -/* cfbtile32C.c */ - -extern void cfbFillRectTile32Copy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); - -extern void cfbTile32FSCopy( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); -/* cfbtile32G.c */ - -extern void cfbFillRectTile32General( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nBox*/, - BoxPtr /*pBox*/ -); - -extern void cfbTile32FSGeneral( - DrawablePtr /*pDrawable*/, - GCPtr /*pGC*/, - int /*nInit*/, - DDXPointPtr /*pptInit*/, - int * /*pwidthInit*/, - int /*fSorted*/ -); -/* cfbtileoddC.c */ - -extern void cfbFillBoxTileOddCopy( - DrawablePtr /*pDrawable*/, - int /*nBox*/, - BoxPtr /*pBox*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/, - int /*alu*/, - unsigned long /*planemask*/ -); - -extern void cfbFillSpanTileOddCopy( - DrawablePtr /*pDrawable*/, - int /*n*/, - DDXPointPtr /*ppt*/, - int * /*pwidth*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/, - int /*alu*/, - unsigned long /*planemask*/ -); - -extern void cfbFillBoxTile32sCopy( - DrawablePtr /*pDrawable*/, - int /*nBox*/, - BoxPtr /*pBox*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/, - int /*alu*/, - unsigned long /*planemask*/ -); - -extern void cfbFillSpanTile32sCopy( - DrawablePtr /*pDrawable*/, - int /*n*/, - DDXPointPtr /*ppt*/, - int * /*pwidth*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/, - int /*alu*/, - unsigned long /*planemask*/ -); -/* cfbtileoddG.c */ - -extern void cfbFillBoxTileOddGeneral( - DrawablePtr /*pDrawable*/, - int /*nBox*/, - BoxPtr /*pBox*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/, - int /*alu*/, - unsigned long /*planemask*/ -); - -extern void cfbFillSpanTileOddGeneral( - DrawablePtr /*pDrawable*/, - int /*n*/, - DDXPointPtr /*ppt*/, - int * /*pwidth*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/, - int /*alu*/, - unsigned long /*planemask*/ -); - -extern void cfbFillBoxTile32sGeneral( - DrawablePtr /*pDrawable*/, - int /*nBox*/, - BoxPtr /*pBox*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/, - int /*alu*/, - unsigned long /*planemask*/ -); - -extern void cfbFillSpanTile32sGeneral( - DrawablePtr /*pDrawable*/, - int /*n*/, - DDXPointPtr /*ppt*/, - int * /*pwidth*/, - PixmapPtr /*tile*/, - int /*xrot*/, - int /*yrot*/, - int /*alu*/, - unsigned long /*planemask*/ -); -/* cfbwindow.c */ - -extern Bool cfbCreateWindow( - WindowPtr /*pWin*/ -); - -extern Bool cfbDestroyWindow( - WindowPtr /*pWin*/ -); - -extern Bool cfbMapWindow( - WindowPtr /*pWindow*/ -); - -extern Bool cfbPositionWindow( - WindowPtr /*pWin*/, - int /*x*/, - int /*y*/ -); - -extern Bool cfbUnmapWindow( - WindowPtr /*pWindow*/ -); - -extern void cfbCopyWindow( - WindowPtr /*pWin*/, - DDXPointRec /*ptOldOrg*/, - RegionPtr /*prgnSrc*/ -); - -extern Bool cfbChangeWindowAttributes( - WindowPtr /*pWin*/, - unsigned long /*mask*/ -); -/* cfbzerarcC.c */ - -extern void cfbZeroPolyArcSS8Copy( - DrawablePtr /*pDraw*/, - GCPtr /*pGC*/, - int /*narcs*/, - xArc * /*parcs*/ -); -/* cfbzerarcG.c */ - -extern void cfbZeroPolyArcSS8General( - DrawablePtr /*pDraw*/, - GCPtr /*pGC*/, - int /*narcs*/, - xArc * /*parcs*/ -); -/* cfbzerarcX.c */ - -extern void cfbZeroPolyArcSS8Xor( - DrawablePtr /*pDraw*/, - GCPtr /*pGC*/, - int /*narcs*/, - xArc * /*parcs*/ -); - -#if (!defined(SINGLEDEPTH) && PSZ != 8) || defined(FORCE_SEPARATE_PRIVATE) - -#define CFB_NEED_SCREEN_PRIVATE - -extern DevPrivateKey cfbScreenPrivateKey; -#endif - -#ifndef CFB_PROTOTYPES_ONLY - -/* Common macros for extracting drawing information */ - -#define cfbGetWindowPixmap(d) \ - ((* ((DrawablePtr)(d))->pScreen->GetWindowPixmap)((WindowPtr)(d))) - -#define cfbGetTypedWidth(pDrawable,wtype) (\ - (((pDrawable)->type != DRAWABLE_PIXMAP) ? \ - (int) (cfbGetWindowPixmap(pDrawable)->devKind) : \ - (int)(((PixmapPtr)pDrawable)->devKind)) / sizeof (wtype)) - -#define cfbGetByteWidth(pDrawable) cfbGetTypedWidth(pDrawable, unsigned char) - -#define cfbGetPixelWidth(pDrawable) cfbGetTypedWidth(pDrawable, PixelType) - -#define cfbGetLongWidth(pDrawable) cfbGetTypedWidth(pDrawable, CfbBits) - -#define cfbGetTypedWidthAndPointer(pDrawable, width, pointer, wtype, ptype) {\ - PixmapPtr _pPix; \ - if ((pDrawable)->type != DRAWABLE_PIXMAP) \ - _pPix = cfbGetWindowPixmap(pDrawable); \ - else \ - _pPix = (PixmapPtr) (pDrawable); \ - (pointer) = (ptype *) _pPix->devPrivate.ptr; \ - (width) = ((int) _pPix->devKind) / sizeof (wtype); \ -} - -#define cfbGetByteWidthAndPointer(pDrawable, width, pointer) \ - cfbGetTypedWidthAndPointer(pDrawable, width, pointer, unsigned char, unsigned char) - -#define cfbGetLongWidthAndPointer(pDrawable, width, pointer) \ - cfbGetTypedWidthAndPointer(pDrawable, width, pointer, CfbBits, CfbBits) - -#define cfbGetPixelWidthAndPointer(pDrawable, width, pointer) \ - cfbGetTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType) - -#define cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, wtype, ptype) {\ - PixmapPtr _pPix = cfbGetWindowPixmap((DrawablePtr) (pWin)); \ - (pointer) = (ptype *) _pPix->devPrivate.ptr; \ - (width) = ((int) _pPix->devKind) / sizeof (wtype); \ -} - -#define cfbGetWindowLongWidthAndPointer(pWin, width, pointer) \ - cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, CfbBits, CfbBits) - -#define cfbGetWindowByteWidthAndPointer(pWin, width, pointer) \ - cfbGetWindowTypedWidthAndPointer(pWin, width, pointer, unsigned char, unsigned char) - -#define cfbGetWindowPixelWidthAndPointer(pDrawable, width, pointer) \ - cfbGetWindowTypedWidthAndPointer(pDrawable, width, pointer, PixelType, PixelType) - -/* - * XFree86 empties the root BorderClip when the VT is inactive, - * here's a macro which uses that to disable GetImage and GetSpans - */ -#define cfbWindowEnabled(pWin) \ - REGION_NOTEMPTY((pWin)->drawable.pScreen, \ - &WindowTable[(pWin)->drawable.pScreen->myNum]->borderClip) - -#define cfbDrawableEnabled(pDrawable) \ - ((pDrawable)->type == DRAWABLE_PIXMAP ? \ - TRUE : cfbWindowEnabled((WindowPtr) pDrawable)) - -#include "micoord.h" - -#endif /* !CFB_PROTOTYPES_ONLY */ - -#endif diff --git a/cfb/cfb16.h b/cfb/cfb16.h deleted file mode 100644 index 6b5c30209..000000000 --- a/cfb/cfb16.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 1994-1998 The XFree86 Project, Inc. All Rights Reserved. - * - * 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 - * XFREE86 PROJECT 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 XFree86 Project 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 - * XFree86 Project. - */ - -#ifndef _CFB16_H_ -#define _CFB16_H_ - -/* - * C's preprocessing language substitutes >text<, not values... - */ - -#ifdef OLDPSZ -# undef OLDPSZ -#endif - -#ifdef PSZ - -# if (PSZ == 8) -# define OLDPSZ 8 -# endif - -# if (PSZ == 16) -# define OLDPSZ 16 -# endif - -# if (PSZ == 24) -# define OLDPSZ 24 -# endif - -# if (PSZ == 32) -# define OLDPSZ 32 -# endif - -# ifndef OLDPSZ - /* Maybe an #error here ? */ -# endif - -# undef PSZ - -#endif - -#define PSZ 16 -#define CFB_PROTOTYPES_ONLY -#include "cfb.h" -#undef CFB_PROTOTYPES_ONLY -#include "cfbunmap.h" - -#undef PSZ -#ifdef OLDPSZ - -# if (OLDPSZ == 8) -# define PSZ 8 -# endif - -# if (OLDPSZ == 16) -# define PSZ 16 -# endif - -# if (OLDPSZ == 24) -# define PSZ 24 -# endif - -# if (OLDPSZ == 32) -# define PSZ 32 -# endif - -# undef OLDPSZ - -#endif - -#endif /* _CFB16_H_ */ diff --git a/cfb/cfb24.h b/cfb/cfb24.h deleted file mode 100644 index ea5fc848e..000000000 --- a/cfb/cfb24.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (C) 1994-1998 The XFree86 Project, Inc. All Rights Reserved. - * - * 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 - * XFREE86 PROJECT 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 XFree86 Project 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 - * XFree86 Project. - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef _CFB24_H_ -#define _CFB24_H_ - -/* - * C's preprocessing language substitutes >text<, not values... - */ - -#ifdef OLDPSZ -# undef OLDPSZ -#endif - -#ifdef PSZ - -# if (PSZ == 8) -# define OLDPSZ 8 -# endif - -# if (PSZ == 16) -# define OLDPSZ 16 -# endif - -# if (PSZ == 24) -# define OLDPSZ 24 -# endif - -# if (PSZ == 32) -# define OLDPSZ 32 -# endif - -# ifndef OLDPSZ - /* Maybe an #error here ? */ -# endif - -# undef PSZ - -#endif - -#define PSZ 24 -#define CFB_PROTOTYPES_ONLY -#include "cfb.h" -#undef CFB_PROTOTYPES_ONLY -#include "cfbunmap.h" - -#undef PSZ -#ifdef OLDPSZ - -# if (OLDPSZ == 8) -# define PSZ 8 -# endif - -# if (OLDPSZ == 16) -# define PSZ 16 -# endif - -# if (OLDPSZ == 24) -# define PSZ 24 -# endif - -# if (OLDPSZ == 32) -# define PSZ 32 -# endif - -# undef OLDPSZ - -#endif - -#endif /* _CFB24_H_ */ diff --git a/cfb/cfb32.h b/cfb/cfb32.h deleted file mode 100644 index 18a5dc1c3..000000000 --- a/cfb/cfb32.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 1994-1998 The XFree86 Project, Inc. All Rights Reserved. - * - * 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 - * XFREE86 PROJECT 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 XFree86 Project 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 - * XFree86 Project. - */ - -#ifndef _CFB32_H_ -#define _CFB32_H_ - -/* - * C's preprocessing language substitutes >text<, not values... - */ - -#ifdef OLDPSZ -# undef OLDPSZ -#endif - -#ifdef PSZ - -# if (PSZ == 8) -# define OLDPSZ 8 -# endif - -# if (PSZ == 16) -# define OLDPSZ 16 -# endif - -# if (PSZ == 24) -# define OLDPSZ 24 -# endif - -# if (PSZ == 32) -# define OLDPSZ 32 -# endif - -# ifndef OLDPSZ - /* Maybe an #error here ? */ -# endif - -# undef PSZ - -#endif - -#define PSZ 32 -#define CFB_PROTOTYPES_ONLY -#include "cfb.h" -#undef CFB_PROTOTYPES_ONLY -#include "cfbunmap.h" - -#undef PSZ -#ifdef OLDPSZ - -# if (OLDPSZ == 8) -# define PSZ 8 -# endif - -# if (OLDPSZ == 16) -# define PSZ 16 -# endif - -# if (OLDPSZ == 24) -# define PSZ 24 -# endif - -# if (OLDPSZ == 32) -# define PSZ 32 -# endif - -# undef OLDPSZ - -#endif - -#endif /* _CFB32_H_ */ diff --git a/cfb/cfb8bit.c b/cfb/cfb8bit.c deleted file mode 100644 index 54a08c53d..000000000 --- a/cfb/cfb8bit.c +++ /dev/null @@ -1,469 +0,0 @@ -/* - -Copyright 1989, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 OPEN GROUP 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 Open Group 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 Open Group. - -*/ - -/* - * cfb8bit.c - * - * 8 bit color frame buffer utility routines - */ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#if PSZ == 8 - -#include -#include -#include -#include "gcstruct.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" - -PixelGroup cfb8StippleMasks[NUM_MASKS] = { -#if NUM_MASKS == 16 - 0x00000000, 0x000000ff, 0x0000ff00, 0x0000ffff, - 0x00ff0000, 0x00ff00ff, 0x00ffff00, 0x00ffffff, - 0xff000000, 0xff0000ff, 0xff00ff00, 0xff00ffff, - 0xffff0000, 0xffff00ff, 0xffffff00, 0xffffffff -#else /* NUM_MASKS == 256 */ - 0x0000000000000000, 0x00000000000000ff, - 0x000000000000ff00, 0x000000000000ffff, - 0x0000000000ff0000, 0x0000000000ff00ff, - 0x0000000000ffff00, 0x0000000000ffffff, - 0x00000000ff000000, 0x00000000ff0000ff, - 0x00000000ff00ff00, 0x00000000ff00ffff, - 0x00000000ffff0000, 0x00000000ffff00ff, - 0x00000000ffffff00, 0x00000000ffffffff, - 0x000000ff00000000, 0x000000ff000000ff, - 0x000000ff0000ff00, 0x000000ff0000ffff, - 0x000000ff00ff0000, 0x000000ff00ff00ff, - 0x000000ff00ffff00, 0x000000ff00ffffff, - 0x000000ffff000000, 0x000000ffff0000ff, - 0x000000ffff00ff00, 0x000000ffff00ffff, - 0x000000ffffff0000, 0x000000ffffff00ff, - 0x000000ffffffff00, 0x000000ffffffffff, - 0x0000ff0000000000, 0x0000ff00000000ff, - 0x0000ff000000ff00, 0x0000ff000000ffff, - 0x0000ff0000ff0000, 0x0000ff0000ff00ff, - 0x0000ff0000ffff00, 0x0000ff0000ffffff, - 0x0000ff00ff000000, 0x0000ff00ff0000ff, - 0x0000ff00ff00ff00, 0x0000ff00ff00ffff, - 0x0000ff00ffff0000, 0x0000ff00ffff00ff, - 0x0000ff00ffffff00, 0x0000ff00ffffffff, - 0x0000ffff00000000, 0x0000ffff000000ff, - 0x0000ffff0000ff00, 0x0000ffff0000ffff, - 0x0000ffff00ff0000, 0x0000ffff00ff00ff, - 0x0000ffff00ffff00, 0x0000ffff00ffffff, - 0x0000ffffff000000, 0x0000ffffff0000ff, - 0x0000ffffff00ff00, 0x0000ffffff00ffff, - 0x0000ffffffff0000, 0x0000ffffffff00ff, - 0x0000ffffffffff00, 0x0000ffffffffffff, - 0x00ff000000000000, 0x00ff0000000000ff, - 0x00ff00000000ff00, 0x00ff00000000ffff, - 0x00ff000000ff0000, 0x00ff000000ff00ff, - 0x00ff000000ffff00, 0x00ff000000ffffff, - 0x00ff0000ff000000, 0x00ff0000ff0000ff, - 0x00ff0000ff00ff00, 0x00ff0000ff00ffff, - 0x00ff0000ffff0000, 0x00ff0000ffff00ff, - 0x00ff0000ffffff00, 0x00ff0000ffffffff, - 0x00ff00ff00000000, 0x00ff00ff000000ff, - 0x00ff00ff0000ff00, 0x00ff00ff0000ffff, - 0x00ff00ff00ff0000, 0x00ff00ff00ff00ff, - 0x00ff00ff00ffff00, 0x00ff00ff00ffffff, - 0x00ff00ffff000000, 0x00ff00ffff0000ff, - 0x00ff00ffff00ff00, 0x00ff00ffff00ffff, - 0x00ff00ffffff0000, 0x00ff00ffffff00ff, - 0x00ff00ffffffff00, 0x00ff00ffffffffff, - 0x00ffff0000000000, 0x00ffff00000000ff, - 0x00ffff000000ff00, 0x00ffff000000ffff, - 0x00ffff0000ff0000, 0x00ffff0000ff00ff, - 0x00ffff0000ffff00, 0x00ffff0000ffffff, - 0x00ffff00ff000000, 0x00ffff00ff0000ff, - 0x00ffff00ff00ff00, 0x00ffff00ff00ffff, - 0x00ffff00ffff0000, 0x00ffff00ffff00ff, - 0x00ffff00ffffff00, 0x00ffff00ffffffff, - 0x00ffffff00000000, 0x00ffffff000000ff, - 0x00ffffff0000ff00, 0x00ffffff0000ffff, - 0x00ffffff00ff0000, 0x00ffffff00ff00ff, - 0x00ffffff00ffff00, 0x00ffffff00ffffff, - 0x00ffffffff000000, 0x00ffffffff0000ff, - 0x00ffffffff00ff00, 0x00ffffffff00ffff, - 0x00ffffffffff0000, 0x00ffffffffff00ff, - 0x00ffffffffffff00, 0x00ffffffffffffff, - 0xff00000000000000, 0xff000000000000ff, - 0xff0000000000ff00, 0xff0000000000ffff, - 0xff00000000ff0000, 0xff00000000ff00ff, - 0xff00000000ffff00, 0xff00000000ffffff, - 0xff000000ff000000, 0xff000000ff0000ff, - 0xff000000ff00ff00, 0xff000000ff00ffff, - 0xff000000ffff0000, 0xff000000ffff00ff, - 0xff000000ffffff00, 0xff000000ffffffff, - 0xff0000ff00000000, 0xff0000ff000000ff, - 0xff0000ff0000ff00, 0xff0000ff0000ffff, - 0xff0000ff00ff0000, 0xff0000ff00ff00ff, - 0xff0000ff00ffff00, 0xff0000ff00ffffff, - 0xff0000ffff000000, 0xff0000ffff0000ff, - 0xff0000ffff00ff00, 0xff0000ffff00ffff, - 0xff0000ffffff0000, 0xff0000ffffff00ff, - 0xff0000ffffffff00, 0xff0000ffffffffff, - 0xff00ff0000000000, 0xff00ff00000000ff, - 0xff00ff000000ff00, 0xff00ff000000ffff, - 0xff00ff0000ff0000, 0xff00ff0000ff00ff, - 0xff00ff0000ffff00, 0xff00ff0000ffffff, - 0xff00ff00ff000000, 0xff00ff00ff0000ff, - 0xff00ff00ff00ff00, 0xff00ff00ff00ffff, - 0xff00ff00ffff0000, 0xff00ff00ffff00ff, - 0xff00ff00ffffff00, 0xff00ff00ffffffff, - 0xff00ffff00000000, 0xff00ffff000000ff, - 0xff00ffff0000ff00, 0xff00ffff0000ffff, - 0xff00ffff00ff0000, 0xff00ffff00ff00ff, - 0xff00ffff00ffff00, 0xff00ffff00ffffff, - 0xff00ffffff000000, 0xff00ffffff0000ff, - 0xff00ffffff00ff00, 0xff00ffffff00ffff, - 0xff00ffffffff0000, 0xff00ffffffff00ff, - 0xff00ffffffffff00, 0xff00ffffffffffff, - 0xffff000000000000, 0xffff0000000000ff, - 0xffff00000000ff00, 0xffff00000000ffff, - 0xffff000000ff0000, 0xffff000000ff00ff, - 0xffff000000ffff00, 0xffff000000ffffff, - 0xffff0000ff000000, 0xffff0000ff0000ff, - 0xffff0000ff00ff00, 0xffff0000ff00ffff, - 0xffff0000ffff0000, 0xffff0000ffff00ff, - 0xffff0000ffffff00, 0xffff0000ffffffff, - 0xffff00ff00000000, 0xffff00ff000000ff, - 0xffff00ff0000ff00, 0xffff00ff0000ffff, - 0xffff00ff00ff0000, 0xffff00ff00ff00ff, - 0xffff00ff00ffff00, 0xffff00ff00ffffff, - 0xffff00ffff000000, 0xffff00ffff0000ff, - 0xffff00ffff00ff00, 0xffff00ffff00ffff, - 0xffff00ffffff0000, 0xffff00ffffff00ff, - 0xffff00ffffffff00, 0xffff00ffffffffff, - 0xffffff0000000000, 0xffffff00000000ff, - 0xffffff000000ff00, 0xffffff000000ffff, - 0xffffff0000ff0000, 0xffffff0000ff00ff, - 0xffffff0000ffff00, 0xffffff0000ffffff, - 0xffffff00ff000000, 0xffffff00ff0000ff, - 0xffffff00ff00ff00, 0xffffff00ff00ffff, - 0xffffff00ffff0000, 0xffffff00ffff00ff, - 0xffffff00ffffff00, 0xffffff00ffffffff, - 0xffffffff00000000, 0xffffffff000000ff, - 0xffffffff0000ff00, 0xffffffff0000ffff, - 0xffffffff00ff0000, 0xffffffff00ff00ff, - 0xffffffff00ffff00, 0xffffffff00ffffff, - 0xffffffffff000000, 0xffffffffff0000ff, - 0xffffffffff00ff00, 0xffffffffff00ffff, - 0xffffffffffff0000, 0xffffffffffff00ff, - 0xffffffffffffff00, 0xffffffffffffffff -#endif -}; - -int cfb8StippleMode, cfb8StippleAlu, cfb8StippleRRop; -PixelGroup cfb8StippleFg, cfb8StippleBg, cfb8StipplePm; -PixelGroup cfb8StippleAnd[NUM_MASKS], cfb8StippleXor[NUM_MASKS]; - -int -cfb8SetStipple (alu, fg, planemask) -int alu; -CfbBits fg, planemask; -{ - CfbBits and, xor, rrop; - int s; - CfbBits c; - - cfb8StippleMode = FillStippled; - cfb8StippleAlu = alu; - cfb8StippleFg = fg & PMSK; - cfb8StipplePm = planemask & PMSK; - rrop = cfbReduceRasterOp (alu, fg, planemask, &and, &xor); - cfb8StippleRRop = rrop; - /* - * create the appropriate pixel-fill bits for current - * foreground - */ - for (s = 0; s < NUM_MASKS; s++) - { - c = cfb8StippleMasks[s]; - cfb8StippleAnd[s] = and | ~c; - cfb8StippleXor[s] = xor & c; - } - return TRUE; -} - - -int -cfb8SetOpaqueStipple (alu, fg, bg, planemask) -int alu; -CfbBits fg, bg, planemask; -{ - CfbBits andfg, xorfg, andbg, xorbg, rropfg, rropbg; - int s; - CfbBits c; - - cfb8StippleMode = FillOpaqueStippled; - cfb8StippleAlu = alu; - cfb8StippleFg = fg & PMSK; - cfb8StippleBg = bg & PMSK; - cfb8StipplePm = planemask & PMSK; - rropfg = cfbReduceRasterOp (alu, cfb8StippleFg, cfb8StipplePm, &andfg, &xorfg); - rropbg = cfbReduceRasterOp (alu, cfb8StippleBg, cfb8StipplePm, &andbg, &xorbg); - if (rropfg == rropbg) - cfb8StippleRRop = rropfg; - else - cfb8StippleRRop = GXset; - /* - * create the appropriate pixel-fill bits for current - * foreground - */ - for (s = 0; s < NUM_MASKS; s++) - { - c = cfb8StippleMasks[s]; - cfb8StippleAnd[s] = (andfg | ~c) & (andbg | c); - cfb8StippleXor[s] = (xorfg & c) | (xorbg & ~c); - } - return TRUE; -} - -/* - * a grungy little routine. This computes clip masks - * for partial character blts. Returns rgnOUT if the - * entire character is clipped; returns rgnIN if the entire - * character is unclipped; returns rgnPART if a portion of - * the character is visible. Computes clip masks for each - * longword of the character -- and those with the - * contents of the glyph to compute the visible bits. - */ - -#if PGSZ == 32 -#if (BITMAP_BIT_ORDER == MSBFirst) -PixelGroup cfb8BitLenMasks[PGSZ] = { - 0xffffffff, 0x7fffffff, 0x3fffffff, 0x1fffffff, - 0x0fffffff, 0x07ffffff, 0x03ffffff, 0x01ffffff, - 0x00ffffff, 0x007fffff, 0x003fffff, 0x001fffff, - 0x000fffff, 0x0007ffff, 0x0003ffff, 0x0001ffff, - 0x0000ffff, 0x00007fff, 0x00003fff, 0x00001fff, - 0x00000fff, 0x000007ff, 0x000003ff, 0x000001ff, - 0x000000ff, 0x0000007f, 0x0000003f, 0x0000001f, - 0x0000000f, 0x00000007, 0x00000003, 0x00000001, -}; -#else -PixelGroup cfb8BitLenMasks[PGSZ] = { - 0xffffffff, 0xfffffffe, 0xfffffffc, 0xfffffff8, - 0xfffffff0, 0xffffffe0, 0xffffffc0, 0xffffff80, - 0xffffff00, 0xfffffe00, 0xfffffc00, 0xfffff800, - 0xfffff000, 0xffffe000, 0xffffc000, 0xffff8000, - 0xffff0000, 0xfffe0000, 0xfffc0000, 0xfff80000, - 0xfff00000, 0xffe00000, 0xffc00000, 0xff800000, - 0xff000000, 0xfe000000, 0xfc000000, 0xf8000000, - 0xf0000000, 0xe0000000, 0xc0000000, 0x80000000, -}; -#endif /* BITMAP_BIT_ORDER */ -#else /* PGSZ == 64 */ -#if (BITMAP_BIT_ORDER == MSBFirst) -PixelGroup cfb8BitLenMasks[PGSZ] = { - 0xffffffffffffffff, 0x7fffffffffffffff, - 0x3fffffffffffffff, 0x1fffffffffffffff, - 0x0fffffffffffffff, 0x07ffffffffffffff, - 0x03ffffffffffffff, 0x01ffffffffffffff, - 0x00ffffffffffffff, 0x007fffffffffffff, - 0x003fffffffffffff, 0x001fffffffffffff, - 0x000fffffffffffff, 0x0007ffffffffffff, - 0x0003ffffffffffff, 0x0001ffffffffffff, - 0x0000ffffffffffff, 0x00007fffffffffff, - 0x00003fffffffffff, 0x00001fffffffffff, - 0x00000fffffffffff, 0x000007ffffffffff, - 0x000003ffffffffff, 0x000001ffffffffff, - 0x000000ffffffffff, 0x0000007fffffffff, - 0x0000003fffffffff, 0x0000001fffffffff, - 0x0000000fffffffff, 0x00000007ffffffff, - 0x00000003ffffffff, 0x00000001ffffffff, - 0x00000000ffffffff, 0x000000007fffffff, - 0x000000003fffffff, 0x000000001fffffff, - 0x000000000fffffff, 0x0000000007ffffff, - 0x0000000003ffffff, 0x0000000001ffffff, - 0x0000000000ffffff, 0x00000000007fffff, - 0x00000000003fffff, 0x00000000001fffff, - 0x00000000000fffff, 0x000000000007ffff, - 0x000000000003ffff, 0x000000000001ffff, - 0x000000000000ffff, 0x0000000000007fff, - 0x0000000000003fff, 0x0000000000001fff, - 0x0000000000000fff, 0x00000000000007ff, - 0x00000000000003ff, 0x00000000000001ff, - 0x00000000000000ff, 0x000000000000007f, - 0x000000000000003f, 0x000000000000001f, - 0x000000000000000f, 0x0000000000000007, - 0x0000000000000003, 0x0000000000000001 -}; -#else -PixelGroup cfb8BitLenMasks[PGSZ] = { - 0xffffffffffffffff, 0xfffffffffffffffe, - 0xfffffffffffffffc, 0xfffffffffffffff8, - 0xfffffffffffffff0, 0xffffffffffffffe0, - 0xffffffffffffffc0, 0xffffffffffffff80, - 0xffffffffffffff00, 0xfffffffffffffe00, - 0xfffffffffffffc00, 0xfffffffffffff800, - 0xfffffffffffff000, 0xffffffffffffe000, - 0xffffffffffffc000, 0xffffffffffff8000, - 0xffffffffffff0000, 0xfffffffffffe0000, - 0xfffffffffffc0000, 0xfffffffffff80000, - 0xfffffffffff00000, 0xffffffffffe00000, - 0xffffffffffc00000, 0xffffffffff800000, - 0xffffffffff000000, 0xfffffffffe000000, - 0xfffffffffc000000, 0xfffffffff8000000, - 0xfffffffff0000000, 0xffffffffe0000000, - 0xffffffffc0000000, 0xffffffff80000000, - 0xffffffff00000000, 0xfffffffe00000000, - 0xfffffffc00000000, 0xfffffff800000000, - 0xfffffff000000000, 0xffffffe000000000, - 0xffffffc000000000, 0xffffff8000000000, - 0xffffff0000000000, 0xfffffe0000000000, - 0xfffffc0000000000, 0xfffff80000000000, - 0xfffff00000000000, 0xffffe00000000000, - 0xffffc00000000000, 0xffff800000000000, - 0xffff000000000000, 0xfffe000000000000, - 0xfffc000000000000, 0xfff8000000000000, - 0xfff0000000000000, 0xffe0000000000000, - 0xffc0000000000000, 0xff80000000000000, - 0xff00000000000000, 0xfe00000000000000, - 0xfc00000000000000, 0xf800000000000000, - 0xf000000000000000, 0xe000000000000000, - 0xc000000000000000, 0x8000000000000000 -}; -#endif /* BITMAP_BIT_ORDER */ -#endif /* PGSZ */ - - - -int -cfb8ComputeClipMasks32 (pBox, numRects, x, y, w, h, clips) - BoxPtr pBox; - int numRects; - int x, y, w, h; - CARD32 *clips; -{ - int yBand, yBandBot; - int ch; - CfbBits clip; - int partIN = FALSE, partOUT = FALSE; - int result; - - if (numRects == 0) - return rgnOUT; - while (numRects && pBox->y2 <= y) - { - --numRects; - ++pBox; - } - if (!numRects || pBox->y1 >= y + h) - return rgnOUT; - yBand = pBox->y1; - while (numRects && pBox->y1 == yBand && pBox->x2 <= x) - { - --numRects; - ++pBox; - } - if (!numRects || pBox->y1 >= y + h) - return rgnOUT; - if (numRects && - x >= pBox->x1 && - x + w <= pBox->x2 && - y >= pBox->y1 && - y + h <= pBox->y2) - { - return rgnIN; - } - ch = 0; - while (numRects && pBox->y1 < y + h) - { - yBand = pBox->y1; - yBandBot = pBox->y2; - while (ch < h && y + ch < yBand) - { - partOUT = TRUE; - clips[ch++] = 0; - } - if (ch >= h) - break; - while (numRects && pBox->y1 == yBand && pBox->x2 <= x) - { - --numRects; - ++pBox; - } - if (!numRects) - break; - clip = 0; - while (numRects && pBox->y1 == yBand && pBox->x1 < x + w) - { - if (x < pBox->x1) - if (pBox->x2 < x + w) - clip |= cfb8BitLenMasks[pBox->x1 - x] & ~cfb8BitLenMasks[pBox->x2 - x]; - else - clip |= cfb8BitLenMasks[pBox->x1 - x]; - else - if (pBox->x2 < x + w) - clip |= ~cfb8BitLenMasks[pBox->x2 - x]; - else - clip = ~0; - --numRects; - ++pBox; - } - if (clip != 0) - partIN = TRUE; - if (clip != ~0) - partOUT = TRUE; - while (ch < h && y + ch < yBandBot) - clips[ch++] = clip; - while (numRects && pBox->y1 == yBand) - { - --numRects; - ++pBox; - } - } - while (ch < h) - { - partOUT = TRUE; - clips[ch++] = 0; - } - result = rgnOUT; - if (partIN) - { - if (partOUT) - result = rgnPART; - else - result = rgnIN; - } - return result; -} - -#endif /* PSZ == 8 */ diff --git a/cfb/cfb8bit.h b/cfb/cfb8bit.h deleted file mode 100644 index 5a17adf4f..000000000 --- a/cfb/cfb8bit.h +++ /dev/null @@ -1,1570 +0,0 @@ -/* - * cfb8bit.h - * - * Defines which are only useful to 8 bit color frame buffers - * - * That doesn't seem to be true any more. Some of the macros in here - * are used for depths other than 8. Perhaps the file should be - * renamed. dpw - */ - -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include "servermd.h" - -#if (BITMAP_BIT_ORDER == MSBFirst) -#define GetBitGroup(x) (((PixelGroup) (x)) >> (PGSZ - PGSZB)) -#define NextBitGroup(x) ((x) <<= PGSZB) -#define NextSomeBits(x,n) ((x) <<= (n)) -#else -#define GetBitGroup(x) ((x) & PGSZBMSK) -#define NextBitGroup(x) ((x) >>= PGSZB) -#define NextSomeBits(x,n) ((x) >>= (n)) -#endif - -#define RotBitsLeft(x,k) ((x) = BitLeft (x,k) | \ - BitRight (x, PGSZ-(k))) - -#if defined(__GNUC__) && defined(mc68020) -#undef RotBitsLeft -#define RotBitsLeft(x,k) asm("rol%.l %2,%0" \ - : "=d" (x) \ - : "0" (x), "dI" (k)) -#endif - -#if PSZ == 8 - -#define GetPixelGroup(x) (cfb8StippleXor[GetBitGroup(x)]) -#define RRopPixels(dst,x) (DoRRop(dst,cfb8StippleAnd[x], cfb8StippleXor[x])) -#define RRopPixelGroup(dst,x) (RRopPixels(dst,GetBitGroup(x))) -#define MaskRRopPixels(dst,x,mask) (DoMaskRRop(dst,cfb8StippleAnd[x], cfb8StippleXor[x], mask)) - -#define NUM_MASKS (1<= MFB_PPW) \ - { \ - inputBits = *srcTemp++; \ - bitsLeft -= MFB_PPW; \ - partBitsLeft = MFB_PPW; \ - } \ - else \ - { \ - inputBits = 0; \ - if (bitsLeft) \ - inputBits = *srcTemp & ~cfb8BitLenMasks[bitsLeft]; \ - srcTemp = srcStart; \ - partBitsLeft = bitsLeft; \ - bitsLeft = bitsWhole; \ - } - -#define NextUnnaturalStippleBits \ - if (partBitsLeft >= PPW) { \ - bits = GetBitGroup (inputBits); \ - NextBitGroup (inputBits); \ - partBitsLeft -= PPW; \ - } else { \ - bits = GetBitGroup (inputBits); \ - nextPartBits = PPW - partBitsLeft; \ - NextUnnaturalStippleWord \ - if (partBitsLeft < nextPartBits) { \ - if (partBitsLeft) {\ - bits |= BitRight (GetBitGroup (inputBits), \ - PPW - nextPartBits) & PPWMSK;\ - nextPartBits -= partBitsLeft; \ - } \ - NextUnnaturalStippleWord \ - } \ - bits |= BitRight (GetBitGroup (inputBits), \ - PPW - nextPartBits) & PPWMSK; \ - NextSomeBits (inputBits, nextPartBits); \ - partBitsLeft -= nextPartBits; \ - } - -#define NextUnnaturalStippleBitsFast \ - if (partBitsLeft >= PPW) { \ - bits = GetBitGroup(inputBits); \ - NextBitGroup(inputBits); \ - partBitsLeft -= PPW; \ - } else { \ - bits = GetBitGroup (inputBits); \ - nextPartBits = PPW - partBitsLeft; \ - inputBits = *srcTemp++; \ - bits |= BitRight (GetBitGroup (inputBits), \ - partBitsLeft) & PPWMSK; \ - NextSomeBits (inputBits, nextPartBits); \ - partBitsLeft = MFB_PPW - nextPartBits; \ - } - -/* - * WriteBitGroup takes the destination address, a pixel - * value (which must be 8 bits duplicated 4 time with PFILL) - * and the PPW bits to write, which must be in the low order - * bits of the register (probably from GetBitGroup) and writes - * the appropriate locations in memory with the pixel value. This - * is a copy-mode only operation. - */ - -#define RRopBitGroup(dst,bits) \ - { \ - *(dst) = RRopPixels(*(dst),bits); \ - } - -#define MaskRRopBitGroup(dst,bits,mask) \ - { \ - *(dst) = MaskRRopPixels(*(dst),bits,mask); \ - } -#endif /* PSZ == 8 */ - -#if !defined(AVOID_MEMORY_READ) && PSZ == 8 - -#define WriteBitGroup(dst,pixel,bits) \ - { \ - register PixelGroup _maskTmp = cfb8PixelMasks[(bits)]; \ - *(dst) = (*(dst) & ~_maskTmp) | ((pixel) & _maskTmp); \ - } - -#define SwitchBitGroup(dst,pixel,bits) \ - { \ - register PixelGroup _maskTmp = cfb8PixelMasks[(bits)]; \ - register PixelGroup _pixTmp = ((pixel) & _maskTmp); \ - _maskTmp = ~_maskTmp; \ - SwitchBitsLoop (*(dst) = (*(dst) & _maskTmp) | _pixTmp;) \ - } - -#else /* AVOID_MEMORY_READ */ - -#if PGSZ == 32 -#if (BITMAP_BIT_ORDER == MSBFirst) -#define SinglePixel0 3 -#define SinglePixel1 2 -#define SinglePixel2 1 -#define SinglePixel3 0 -#define SinglePixel4 7 -#define SinglePixel5 6 -#define SinglePixel6 5 -#define SinglePixel7 4 -#define SinglePixel8 0xB -#define SinglePixel9 0xA -#define DoublePixel0 1 -#define DoublePixel1 0 -#define DoublePixel2 3 -#define DoublePixel3 2 -#define DoublePixel4 5 -#define DoublePixel5 4 -#else -#define SinglePixel0 0 -#define SinglePixel1 1 -#define SinglePixel2 2 -#define SinglePixel3 3 -#define SinglePixel4 4 -#define SinglePixel5 5 -#define SinglePixel6 6 -#define SinglePixel7 7 -#define SinglePixel8 8 -#define SinglePixel9 9 -#define DoublePixel0 0 -#define DoublePixel1 1 -#define DoublePixel2 2 -#define DoublePixel3 3 -#define DoublePixel4 4 -#define DoublePixel5 5 -#endif -#define QuadPixel0 0 -#define QuadPixel1 1 -#define QuadPixel2 2 -#else /* PGSZ == 64 */ -#if (BITMAP_BIT_ORDER == MSBFirst) -#define SinglePixel0 7 -#define SinglePixel1 6 -#define SinglePixel2 5 -#define SinglePixel3 4 -#define SinglePixel4 3 -#define SinglePixel5 2 -#define SinglePixel6 1 -#define SinglePixel7 0 -#define DoublePixel0 3 -#define DoublePixel1 2 -#define DoublePixel2 1 -#define DoublePixel3 0 -#define QuadPixel0 1 -#define QuadPixel1 0 -#else -#define SinglePixel0 0 -#define SinglePixel1 1 -#define SinglePixel2 2 -#define SinglePixel3 3 -#define SinglePixel4 4 -#define SinglePixel5 5 -#define SinglePixel6 6 -#define SinglePixel7 7 -#define DoublePixel0 0 -#define DoublePixel1 1 -#define DoublePixel2 2 -#define DoublePixel3 3 -#define QuadPixel0 0 -#define QuadPixel1 1 -#endif -#define OctaPixel0 0 -#endif /* PGSZ == 64 */ - -#if PSZ == 8 - -#if PGSZ == 32 -#define WriteBitGroup(dst,pixel,bits) \ - switch (bits) { \ - case 0: \ - break; \ - case 1: \ - ((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - break; \ - case 2: \ - ((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 3: \ - ((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - break; \ - case 4: \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 5: \ - ((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 6: \ - ((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 7: \ - ((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 8: \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 9: \ - ((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 10: \ - ((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 11: \ - ((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 12: \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 13: \ - ((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 14: \ - ((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[0] = (pixel); \ - break; \ - } -#else /* PGSZ == 64 */ -#define WriteBitGroup(dst,pixel,bits) \ - if ( bits == 0xff ) \ - ((PixelGroup *) (dst))[OctaPixel0] = (pixel); \ - else { \ - switch (bits & 0x0f) { \ - case 0: \ - break; \ - case 1: \ - ((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - break; \ - case 2: \ - ((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 3: \ - ((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - break; \ - case 4: \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 5: \ - ((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 6: \ - ((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 7: \ - ((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 8: \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 9: \ - ((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 10: \ - ((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 11: \ - ((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 12: \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 13: \ - ((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 14: \ - ((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[QuadPixel0] = (pixel); \ - break; \ - } \ - switch ((bits & 0xf0) >> 4) { \ - case 0: \ - break; \ - case 1: \ - ((CARD8 *) (dst))[SinglePixel4] = (pixel); \ - break; \ - case 2: \ - ((CARD8 *) (dst))[SinglePixel5] = (pixel); \ - break; \ - case 3: \ - ((CARD16 *) (dst))[DoublePixel2] = (pixel); \ - break; \ - case 4: \ - ((CARD8 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 5: \ - ((CARD8 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 6: \ - ((CARD8 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 7: \ - ((CARD16 *) (dst))[DoublePixel2] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 8: \ - ((CARD8 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 9: \ - ((CARD8 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 10: \ - ((CARD8 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 11: \ - ((CARD16 *) (dst))[DoublePixel2] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 12: \ - ((CARD16 *) (dst))[DoublePixel3] = (pixel); \ - break; \ - case 13: \ - ((CARD8 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel3] = (pixel); \ - break; \ - case 14: \ - ((CARD8 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel3] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[QuadPixel1] = (pixel); \ - break; \ - } \ - } -#endif /* PGSZ == 64 */ - -#if PGSZ == 32 -#define SwitchBitGroup(dst,pixel,bits) { \ - switch (bits) { \ - case 0: \ - break; \ - case 1: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel);) \ - break; \ - case 2: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel);) \ - break; \ - case 3: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel);) \ - break; \ - case 4: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 5: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 6: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 7: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 8: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 9: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 10: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 11: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 12: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel1] = (pixel);) \ - break; \ - case 13: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel);) \ - break; \ - case 14: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel);) \ - break; \ - case 15: \ - SwitchBitsLoop (((CARD32 *) (dst))[0] = (pixel);) \ - break; \ - } \ -} -#else /* PGSZ == 64 */ -#define SwitchBitGroup(dst,pixel,bits) { \ - if ( bits == 0xff ) \ - SwitchBitsLoop (((PixelGroup *) (dst))[OctaPixel0] = (pixel);) \ - else { \ - switch (bits & 0x0f) { \ - case 0: \ - break; \ - case 1: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel);) \ - break; \ - case 2: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel);) \ - break; \ - case 3: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel);)\ - break; \ - case 4: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 5: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 6: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 7: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 8: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 9: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 10: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 11: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 12: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel1] = (pixel);)\ - break; \ - case 13: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel);)\ - break; \ - case 14: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel1] = (pixel);)\ - break; \ - case 15: \ - SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel);) \ - break; \ - } \ - switch ((bits & 0xf0) >> 4) { \ - case 0: \ - break; \ - case 1: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel);) \ - break; \ - case 2: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel);) \ - break; \ - case 3: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel);)\ - break; \ - case 4: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel6] = (pixel);) \ - break; \ - case 5: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \ - break; \ - case 6: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \ - break; \ - case 7: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel6] = (pixel);) \ - break; \ - case 8: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel7] = (pixel);) \ - break; \ - case 9: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \ - break; \ - case 10: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \ - break; \ - case 11: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel2] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel7] = (pixel);) \ - break; \ - case 12: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel);)\ - break; \ - case 13: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel3] = (pixel);)\ - break; \ - case 14: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel3] = (pixel);)\ - break; \ - case 15: \ - SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel1] = (pixel);) \ - break; \ - } \ - } \ -} -#endif /* PGSZ == 64 */ -#endif /* PSZ == 8 */ - -#if PSZ == 16 - -#if PGSZ == 32 -#define WriteBitGroup(dst,pixel,bits) \ - switch (bits) { \ - case 0: \ - break; \ - case 1: \ - ((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - break; \ - case 2: \ - ((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 3: \ - ((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - break; \ - case 4: \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 5: \ - ((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 6: \ - ((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 7: \ - ((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 8: \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 9: \ - ((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 10: \ - ((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 11: \ - ((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 12: \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 13: \ - ((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 14: \ - ((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - } -#else /* PGSZ == 64 */ -#define WriteBitGroup(dst,pixel,bits) \ - if ( bits == 0xff ) { \ - ((PixelGroup *) (dst))[QuadPixel0] = (pixel); \ - ((PixelGroup *) (dst))[QuadPixel1] = (pixel); \ - } \ - else { \ - switch (bits & 0x0f) { \ - case 0: \ - break; \ - case 1: \ - ((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - break; \ - case 2: \ - ((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 3: \ - ((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - break; \ - case 4: \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 5: \ - ((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 6: \ - ((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 7: \ - ((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 8: \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 9: \ - ((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 10: \ - ((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 11: \ - ((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 12: \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 13: \ - ((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 14: \ - ((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel); \ - break; \ - } \ - switch ((bits & 0xf0) >> 4) { \ - case 0: \ - break; \ - case 1: \ - ((CARD16 *) (dst))[SinglePixel4] = (pixel); \ - break; \ - case 2: \ - ((CARD16 *) (dst))[SinglePixel5] = (pixel); \ - break; \ - case 3: \ - ((CARD32 *) (dst))[DoublePixel2] = (pixel); \ - break; \ - case 4: \ - ((CARD16 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 5: \ - ((CARD16 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 6: \ - ((CARD16 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 7: \ - ((CARD32 *) (dst))[DoublePixel2] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 8: \ - ((CARD16 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 9: \ - ((CARD16 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 10: \ - ((CARD16 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 11: \ - ((CARD32 *) (dst))[DoublePixel2] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 12: \ - ((CARD32 *) (dst))[DoublePixel3] = (pixel); \ - break; \ - case 13: \ - ((CARD16 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel3] = (pixel); \ - break; \ - case 14: \ - ((CARD16 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel3] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[DoublePixel2] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel3] = (pixel); \ - break; \ - } \ - } -#endif /* PGSZ */ - -#if PGSZ == 32 -#define SwitchBitGroup(dst,pixel,bits) { \ - switch (bits) { \ - case 0: \ - break; \ - case 1: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel);) \ - break; \ - case 2: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel);) \ - break; \ - case 3: \ - SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel);) \ - break; \ - case 4: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 5: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 6: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 7: \ - SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 8: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 9: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 10: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 11: \ - SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD16 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 12: \ - SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel1] = (pixel);) \ - break; \ - case 13: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \ - break; \ - case 14: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \ - break; \ - case 15: \ - SwitchBitsLoop (((CARD32 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD32 *) (dst))[DoublePixel1] = (pixel);) \ - break; \ - } \ -} -#else /* PGSZ == 64 */ -#define SwitchBitGroup(dst,pixel,bits) { \ - cfb cannot hack 64-bit SwitchBitGroup psz=PSZ -#endif /* PGSZ */ - -#endif /* PSZ == 16 */ - -#if PSZ == 24 -/* 32 000011112222*/ -/* 24 000111222333*/ -/* 16 001122334455*/ -/* 8 0123456789AB*/ -#if PGSZ == 32 -#define WriteBitGroup(dst,pixel,bits) \ - { \ - register CARD32 reg_pixel = (pixel); \ - switch (bits) { \ - case 0: \ - break; \ - case 1: \ - ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \ - ((CARD8 *) (dst))[SinglePixel2] = ((reg_pixel>>16)&0xFF); \ - break; \ - case 2: \ - ((CARD8 *) (dst))[SinglePixel3] = reg_pixel&0xFF; \ - ((CARD16 *) (dst))[DoublePixel2] = (reg_pixel>>8)&0xFFFF; \ - break; \ - case 3: \ - ((CARD8 *) (dst))[SinglePixel3] = reg_pixel & 0xFF; \ - ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \ - ((CARD16 *) (dst))[DoublePixel2] = (reg_pixel>>8)&0xFFFF; \ - ((CARD8 *) (dst))[SinglePixel2] = (reg_pixel>>16&0xFF); \ - break; \ - case 4: \ - ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \ - ((CARD8 *) (dst))[SinglePixel8] = (reg_pixel>>16)&0xFF; \ - break; \ - case 5: \ - ((CARD16 *) (dst))[DoublePixel0] = \ - ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \ - reg_pixel >>= 16; \ - ((CARD8 *) (dst))[SinglePixel2] = \ - ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \ - break; \ - case 6: \ - ((CARD8 *) (dst))[SinglePixel3] = reg_pixel; \ - ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel2] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \ - break; \ - case 7: \ - ((CARD16 *) (dst))[DoublePixel0] = \ - ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \ - ((CARD8 *) (dst))[SinglePixel3] = reg_pixel&0xFF; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel2] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD8 *) (dst))[SinglePixel2] = \ - ((CARD8 *) (dst))[SinglePixel8] = reg_pixel&0xFF; \ - break; \ - case 8: \ - ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \ - ((CARD16 *) (dst))[DoublePixel5] = (reg_pixel>>8); \ - break; \ - case 9: \ - ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \ - ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD8 *) (dst))[SinglePixel2] = reg_pixel&0xFF; \ - break; \ - case 10: \ - ((CARD8 *) (dst))[SinglePixel3] = \ - ((CARD8 *) (dst))[SinglePixel9] = reg_pixel&0xFF; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel2] = \ - ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \ - break; \ - case 11: \ - ((CARD8 *) (dst))[SinglePixel3] = \ - ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \ - ((CARD16 *) (dst))[DoublePixel0] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel2] = \ - ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD8 *) (dst))[SinglePixel2] = reg_pixel; \ - break; \ - case 12: \ - ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \ - ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \ - break; \ - case 13: \ - ((CARD16 *) (dst))[DoublePixel0] = \ - ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \ - ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD8 *) (dst))[SinglePixel2] = \ - ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \ - break; \ - case 14: \ - ((CARD8 *) (dst))[SinglePixel3] = \ - ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \ - ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel2] = \ - ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD8 *) (dst))[SinglePixel8] = reg_pixel; \ - break; \ - case 15: \ - ((CARD16 *) (dst))[DoublePixel0] = \ - ((CARD16 *) (dst))[DoublePixel3] = reg_pixel; \ - ((CARD8 *) (dst))[SinglePixel3] = \ - ((CARD8 *) (dst))[SinglePixel9] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD16 *) (dst))[DoublePixel2] = \ - ((CARD16 *) (dst))[DoublePixel5] = reg_pixel; \ - reg_pixel >>= 8; \ - ((CARD8 *) (dst))[SinglePixel8] = \ - ((CARD8 *) (dst))[SinglePixel2] = reg_pixel; \ - break; \ - } \ - } -#else /* PGSZ == 64 */ -#define WriteBitGroup(dst,pixel,bits) \ - if ( bits == 0xff ) { \ - ((PixelGroup *) (dst))[DoublePixel0] = (pixel); \ - ((PixelGroup *) (dst))[DoublePixel1] = (pixel); \ - ((PixelGroup *) (dst))[DoublePixel2] = (pixel); \ - ((PixelGroup *) (dst))[DoublePixel3] = (pixel); \ - } \ - else { \ - switch (bits & 0x0f) { \ - case 0: \ - break; \ - case 1: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - break; \ - case 2: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 3: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 4: \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 5: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 6: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 7: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 8: \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 9: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 10: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 11: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 12: \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 13: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 14: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - } \ - switch ((bits & 0xf0) >> 4) { \ - case 0: \ - break; \ - case 1: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - break; \ - case 2: \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - break; \ - case 3: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - break; \ - case 4: \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 5: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 6: \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 7: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 8: \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 9: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 10: \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 11: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 12: \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 13: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 14: \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - } \ - } -#endif /* PGSZ */ - -#if PGSZ == 32 -#define SwitchBitGroup(dst,pixel,bits) { \ - switch (bits) { \ - case 0: \ - break; \ - case 1: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 2: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel2] = (pixel);) \ - break; \ - case 3: \ - SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel2] = (pixel);) \ - break; \ - case 4: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \ - break; \ - case 5: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel3] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \ - break; \ - case 6: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - ((CARD32 *) (dst))[QuadPixel2] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \ - break; \ - case 7: \ - SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \ - ((CARD32 *) (dst))[QuadPixel1] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel8] = (pixel);) \ - break; \ - case 8: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel9] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \ - break; \ - case 9: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel9] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \ - break; \ - case 10: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel2] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel9] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \ - break; \ - case 11: \ - SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel3] = (pixel);) \ - ((CARD8 *) (dst))[SinglePixel9] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel5] = (pixel);) \ - break; \ - case 12: \ - SwitchBitsLoop (((CARD16 *) (dst))[DoublePixel3] = (pixel); \ - ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \ - break; \ - case 13: \ - SwitchBitsLoop (((CARD16 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD8 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD16 *) (dst))[DoublePixel3] = (pixel); \ - ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \ - break; \ - case 14: \ - SwitchBitsLoop (((CARD8 *) (dst))[SinglePixel3] = (pixel); \ - ((CARD32 *) (dst))[QuadPixel1] = (pixel); \ - ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \ - break; \ - case 15: \ - SwitchBitsLoop (((CARD32 *) (dst))[QuadPixel0] = (pixel); \ - ((CARD32 *) (dst))[QuadPixel1] = (pixel); \ - ((CARD32 *) (dst))[QuadPixel2] = (pixel);) \ - break; \ - } \ -} -#else /* PGSZ == 64 */ -#define SwitchBitGroup(dst,pixel,bits) { \ - cfb cannot hack 64-bit SwitchBitGroup psz=PSZ -#endif /* PGSZ */ - -#endif /* PSZ == 24 */ - -#if PSZ == 32 - -#if PGSZ == 32 -#define WriteBitGroup(dst,pixel,bits) \ - switch (bits) { \ - case 0: \ - break; \ - case 1: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - break; \ - case 2: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 3: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 4: \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 5: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 6: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 7: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 8: \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 9: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 10: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 11: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 12: \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 13: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 14: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - } -#else /* PGSZ == 64 */ -#define WriteBitGroup(dst,pixel,bits) \ - if ( bits == 0xff ) { \ - ((PixelGroup *) (dst))[DoublePixel0] = (pixel); \ - ((PixelGroup *) (dst))[DoublePixel1] = (pixel); \ - ((PixelGroup *) (dst))[DoublePixel2] = (pixel); \ - ((PixelGroup *) (dst))[DoublePixel3] = (pixel); \ - } \ - else { \ - switch (bits & 0x0f) { \ - case 0: \ - break; \ - case 1: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - break; \ - case 2: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 3: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - break; \ - case 4: \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 5: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 6: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 7: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - break; \ - case 8: \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 9: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 10: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 11: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 12: \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 13: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 14: \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel); \ - break; \ - } \ - switch ((bits & 0xf0) >> 4) { \ - case 0: \ - break; \ - case 1: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - break; \ - case 2: \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - break; \ - case 3: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - break; \ - case 4: \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 5: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 6: \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 7: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - break; \ - case 8: \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 9: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 10: \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 11: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 12: \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 13: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 14: \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - case 15: \ - ((CARD32 *) (dst))[SinglePixel4] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel5] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel6] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel7] = (pixel); \ - break; \ - } \ - } -#endif /* PGSZ */ - -#if PGSZ == 32 -#define SwitchBitGroup(dst,pixel,bits) { \ - switch (bits) { \ - case 0: \ - break; \ - case 1: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel);) \ - break; \ - case 2: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel);) \ - break; \ - case 3: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel);) \ - break; \ - case 4: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 5: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 6: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 7: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel);) \ - break; \ - case 8: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 9: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 10: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 11: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 12: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 13: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 14: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - case 15: \ - SwitchBitsLoop (((CARD32 *) (dst))[SinglePixel0] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel1] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel2] = (pixel); \ - ((CARD32 *) (dst))[SinglePixel3] = (pixel);) \ - break; \ - } \ -} -#else /* PGSZ == 64 */ -#define SwitchBitGroup(dst,pixel,bits) { \ - cfb cannot hack 64-bit SwitchBitGroup psz=PSZ -#endif /* PGSZ */ - -#endif /* PSZ == 32 */ -#endif /* AVOID_MEMORY_READ */ - -extern PixelGroup cfb8BitLenMasks[PGSZ]; - -extern int cfb8SetStipple ( - int /*alu*/, - CfbBits /*fg*/, - CfbBits /*planemask*/ -); - -extern int cfb8SetOpaqueStipple ( - int /*alu*/, - CfbBits /*fg*/, - CfbBits /*bg*/, - CfbBits /*planemask*/ -); - -extern int cfb8ComputeClipMasks32 ( - BoxPtr /*pBox*/, - int /*numRects*/, - int /*x*/, - int /*y*/, - int /*w*/, - int /*h*/, - CARD32 * /*clips*/ -); diff --git a/cfb/cfb8line.c b/cfb/cfb8line.c deleted file mode 100644 index 8c00d9fea..000000000 --- a/cfb/cfb8line.c +++ /dev/null @@ -1,1503 +0,0 @@ -/* - * -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - * - * Jeff Anton'x fixes: cfb8line.c 97/02/07 - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include - -#include "gcstruct.h" -#include "windowstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "scrnintstr.h" -#include "mistruct.h" - -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfbrrop.h" -#include "miline.h" - -#ifdef PIXEL_ADDR - -#if defined(__GNUC__) && defined(mc68020) -#define STUPID volatile -#define REARRANGE -#else -#define STUPID -#endif - -#ifdef __GNUC__ -/* lame compiler doesn't even look at 'register' attributes */ -#define I_H do{ -#define I_T }while(0); -#define IMPORTANT_START I_H I_H I_H I_H I_H I_H I_H I_H I_H I_H -#define IMPORTANT_END I_T I_T I_T I_T I_T I_T I_T I_T I_T I_T -#else -#define IMPORTANT_START -#define IMPORTANT_END -#endif - -#define isClipped(c,ul,lr) ((((c) - (ul)) | ((lr) - (c))) & ClipMask) - -#ifdef POLYSEGMENT - -# if (defined(sun) || defined(__bsdi__)) && \ - (defined(sparc) || defined(__sparc__)) -# define WIDTH_FAST 1152 -# endif - -# ifdef ultrix -# define WIDTH_FAST 1024 -# endif - -# ifdef Mips -# define WIDTH_FAST 4096 -# endif -# ifdef WIDTH_FAST -# if WIDTH_FAST == 1024 -# define FAST_MUL(y) ((y) << 10) -# endif - -# if WIDTH_FAST == 1152 -# define FAST_MUL(y) (((y) << 10) + ((y) << 7)) -# endif - -# if WIDTH_FAST == 1280 -# define FAST_MUL(y) (((y) << 10) + ((y) << 8)) -# endif - -# if WIDTH_FAST == 2048 -# define FAST_MUL(y) ((y) << 11) -# endif - -# if WIDTH_FAST == 4096 -# define FAST_MUL(y) ((y) << 12) -# endif -# endif - -# if defined(WIDTH_SHIFT) -# ifdef FAST_MUL -# define FUNC_NAME(e) RROP_NAME(RROP_NAME_CAT(e,Shift)) -# if RROP == GXcopy -# define INCLUDE_OTHERS -# define SERIOUS_UNROLLING -# endif -# define INCLUDE_DRAW -# define NWIDTH(nwidth) WIDTH_FAST -# define WIDTH_MUL(y,w) FAST_MUL(y) -# endif -# else -# define FUNC_NAME(e) RROP_NAME(e) -# define WIDTH_MUL(y,w) ((y) * (w)) -# define NWIDTH(nwidth) (nwidth) -# define INCLUDE_DRAW -# if !defined (FAST_MUL) && RROP == GXcopy -# define INCLUDE_OTHERS -# define SERIOUS_UNROLLING -# endif -# endif -#else - -# define INCLUDE_DRAW -# define WIDTH_MUL(y,w) ((y) * (w)) -# define NWIDTH(nwidth) nwidth -# ifdef PREVIOUS -# define FUNC_NAME(e) RROP_NAME(RROP_NAME_CAT(e,Previous)) -# else -# define FUNC_NAME(e) RROP_NAME(e) -# if RROP == GXcopy -# define INCLUDE_OTHERS -# ifdef PLENTIFUL_REGISTERS -# define SAVE_X2Y2 -# endif -# define ORIGIN -# define SERIOUS_UNROLLING -# else -# define EITHER_MODE -# endif -# endif -#endif - -#if PSZ == 24 -#define PXL2ADR(x) ((x)*3 >> 2) - -#if RROP == GXcopy -#define body_rop \ - addrp = (PixelType *)((unsigned long)addrb & ~0x03); \ - switch((unsigned long)addrb & 3){ \ - case 0: \ - *addrp = (*addrp & 0xFF000000)|(piQxelXor[0] & 0xFFFFFF); \ - break; \ - case 1: \ - *addrp = (*addrp & 0xFF)|(piQxelXor[2] & 0xFFFFFF00); \ - break; \ - case 3: \ - *addrp = (*addrp & 0xFFFFFF)|(piQxelXor[0] & 0xFF000000); \ - *(addrp+1)=(*(addrp+1) & 0xFFFF0000)|(piQxelXor[1] & 0xFFFF); \ - break; \ - case 2: \ - *addrp = (*addrp & 0xFFFF)|(piQxelXor[1] & 0xFFFF0000); \ - *(addrp+1)=(*(addrp+1) & 0xFFFFFF00)|(piQxelXor[2] & 0xFF); \ - break; \ - } -#endif -#if RROP == GXxor -#define body_rop \ - addrp = (PixelType *)((unsigned long)addrb & ~0x03); \ - switch((unsigned long)addrb & 3){ \ - case 0: \ - *addrp ^= piQxelXor[0] & 0xFFFFFF; \ - break; \ - case 1: \ - *addrp ^= piQxelXor[2] & 0xFFFFFF00; \ - break; \ - case 3: \ - *addrp ^= piQxelXor[0] & 0xFF000000; \ - *(addrp+1) ^= piQxelXor[1] & 0xFFFF; \ - break; \ - case 2: \ - *addrp ^= piQxelXor[1] & 0xFFFF0000; \ - *(addrp+1) ^= piQxelXor[2] & 0xFF; \ - break; \ - } -#endif -#if RROP == GXand -#define body_rop \ - addrp = (PixelType *)((unsigned long)addrb & ~0x03); \ - switch((unsigned long)addrb & 3){ \ - case 0: \ - *addrp &= piQxelAnd[0] | 0xFF000000; \ - break; \ - case 1: \ - *addrp &= piQxelAnd[2] | 0xFF; \ - break; \ - case 3: \ - *addrp &= 0xFFFFFF | piQxelAnd[0]; \ - *(addrp+1) &= 0xFFFF0000 | piQxelAnd[1]; \ - break; \ - case 2: \ - *addrp &= 0xFFFF | piQxelAnd[1]; \ - *(addrp+1) &= 0xFFFFFF00 | piQxelAnd[2]; \ - break; \ - } -#endif -#if RROP == GXor -#define body_rop \ - addrp = (PixelType *)((unsigned long)addrb & ~0x03); \ - switch((unsigned long)addrb & 3){ \ - case 0: \ - *addrp |= piQxelOr[0] & 0xFFFFFF; \ - break; \ - case 1: \ - *addrp |= piQxelOr[2] & 0xFFFFFF00; \ - break; \ - case 3: \ - *addrp |= piQxelOr[0] & 0xFF000000; \ - *(addrp+1) |= piQxelOr[1] & 0xFFFF; \ - break; \ - case 2: \ - *addrp |= piQxelOr[1] & 0xFFFF0000; \ - *(addrp+1) |= piQxelOr[2] & 0xFF; \ - break; \ - } -#endif -#if RROP == GXset -#define body_rop \ - addrp = (PixelType *)((unsigned long)addrb & ~0x03); \ - switch((unsigned long)addrb & 3){ \ - case 0: \ - *addrp = (*addrp & (piQxelAnd[0]|0xFF000000)) \ - ^ (piQxelXor[0] & 0xFFFFFF); \ - break; \ - case 1: \ - *addrp = (*addrp & (piQxelAnd[2]|0xFF)) \ - ^ (piQxelXor[2] & 0xFFFFFF00); \ - break; \ - case 3: \ - *addrp = (*addrp & (piQxelAnd[0]|0xFFFFFF)) \ - ^ (piQxelXor[0] & 0xFF000000); \ - *(addrp+1) = (*(addrp+1) & (piQxelAnd[1]|0xFFFF0000)) \ - ^ (piQxelXor[1] & 0xFFFF); \ - break; \ - case 2: \ - *addrp = (*addrp & (piQxelAnd[1]|0xFFFF)) \ - ^ (piQxelXor[1] & 0xFFFF0000); \ - *(addrp+1) = (*(addrp+1) & (piQxelAnd[2]|0xFFFFFF00)) \ - ^ (piQxelXor[2] & 0xFF); \ - break; \ - } -#endif -#endif /* PSZ == 24 */ - -#define BUGFIX_clip - -#ifdef INCLUDE_DRAW - -int -#ifdef POLYSEGMENT -FUNC_NAME(cfb8SegmentSS1Rect) (pDrawable, pGC, nseg, pSegInit) - DrawablePtr pDrawable; - GCPtr pGC; - int nseg; - xSegment *pSegInit; -#else -FUNC_NAME(cfb8LineSS1Rect) (pDrawable, pGC, mode, npt, pptInit, pptInitOrig, - x1p,y1p,x2p,y2p) - DrawablePtr pDrawable; - GCPtr pGC; - int mode; /* Origin or Previous */ - int npt; /* number of points */ - DDXPointPtr pptInit, pptInitOrig; - int *x1p, *y1p, *x2p, *y2p; -#endif /* POLYSEGMENT */ -{ - register long e; - register int y1_or_e1; - register PixelType *addrp; - register int stepmajor; - register int stepminor; -#ifndef REARRANGE - register long e3; -#endif -#ifdef mc68000 - register short x1_or_len; -#else - register int x1_or_len; -#endif - RROP_DECLARE - -#ifdef SAVE_X2Y2 -# define c2 y2 -#else - register int c2; -#endif -#if !defined(ORIGIN) && !defined(POLYSEGMENT) - register int _x1 = 0, _y1 = 0, _x2 = 0, _y2 = 0; - int extents_x1, extents_y1, extents_x2, extents_y2; -#endif /* !ORIGIN */ -#ifndef PREVIOUS - register int upperleft, lowerright; - CARD32 ClipMask = 0x80008000; -#endif /* !PREVIOUS */ -#ifdef POLYSEGMENT - register int capStyle; -#endif /* POLYSEGMENT */ -#ifdef SAVE_X2Y2 - register int x2, y2; -# define X1 x1_or_len -# define Y1 y1_or_e1 -# define X2 x2 -# define Y2 y2 -#else -# ifdef POLYSEGMENT -# define X1 x1_or_len -# define Y1 y1_or_e1 -# else -# define X1 intToX(y1_or_e1) -# define Y1 intToY(y1_or_e1) -# endif /* POLYSEGMENT */ -# define X2 intToX(c2) -# define Y2 intToY(c2) -#endif /* SAVE_X2Y2 */ - PixelType *addr; - int nwidth; - cfbPrivGCPtr devPriv; - BoxPtr extents; - int *ppt; -#if PSZ == 24 - int xBase; /* x of addr */ - int xOffset; /* x of addrp */ - PixelType *addrLineEnd; - char *addrb; - int stepmajor3, stepminor3, majordx, minordx; -#endif -#ifndef POLYSEGMENT -#ifndef ORIGIN -#ifdef BUGFIX_clip - int ex_x1, ex_y1, ex_x2, ex_y2; -#endif -#endif -#endif - int octant; - unsigned int bias = miGetZeroLineBias(pDrawable->pScreen); - - devPriv = cfbGetGCPrivate(pGC); - cfbGetPixelWidthAndPointer (pDrawable, nwidth, addr); -#ifndef REARRANGE - RROP_FETCH_GCPRIV(devPriv); -#endif - extents = &pGC->pCompositeClip->extents; -#ifndef PREVIOUS - c2 = *((int *) &pDrawable->x); - c2 -= (c2 & 0x8000) << 1; - upperleft = *((int *) &extents->x1) - c2; - lowerright = *((int *) &extents->x2) - c2 - 0x00010001; -#endif /* !PREVIOUS */ -#ifndef POLYSEGMENT -#ifndef ORIGIN -#ifdef BUGFIX_clip - ex_x1 = extents->x1 - pDrawable->x; - ex_y1 = extents->y1 - pDrawable->y; - ex_x2 = extents->x2 - pDrawable->x; - ex_y2 = extents->y2 - pDrawable->y; -#endif -#endif -#endif -#if PSZ == 24 - xBase = pDrawable->x; - addr += WIDTH_MUL(pDrawable->y,nwidth); -#else - addr = addr + WIDTH_MUL(pDrawable->y,nwidth) + pDrawable->x; -#endif -#ifdef POLYSEGMENT - capStyle = pGC->capStyle - CapNotLast; - ppt = (int *) pSegInit; - while (nseg--) -#else /* POLYSEGMENT */ -#ifdef EITHER_MODE - mode -= CoordModePrevious; - if (!mode) -#endif /* EITHER_MODE */ -#ifndef ORIGIN - { /* CoordModePrevious */ - ppt = (int *)pptInit + 1; - _x1 = *x1p; - _y1 = *y1p; - extents_x1 = extents->x1 - pDrawable->x; - extents_x2 = extents->x2 - pDrawable->x; - extents_y1 = extents->y1 - pDrawable->y; - extents_y2 = extents->y2 - pDrawable->y; - if (_x1 < extents_x1 || _x1 >= extents_x2 || - _y1 < extents_y1 || _y1 >= extents_y2) - { - c2 = *ppt++; - intToCoord(c2, _x2, _y2); - *x2p = _x1 + _x2; - *y2p = _y1 + _y2; - return 1; - } -#if PSZ == 24 - addrLineEnd = addr + WIDTH_MUL(_y1, nwidth); - xOffset = xBase + _x1; - addrb = (char *)addrLineEnd + xOffset * 3; - addrp = (PixelType *)((unsigned long)addrb & ~0x03); -#else - addrp = addr + WIDTH_MUL(_y1, nwidth) + _x1; -#endif - _x2 = _x1; - _y2 = _y1; - } -#endif /* !ORIGIN */ -#ifdef EITHER_MODE - else -#endif /* EITHER_MODE */ -#ifndef PREVIOUS - { - ppt = (int *) pptInit; - c2 = *ppt++; - if (isClipped (c2, upperleft, lowerright)) - { - return 1; - } -#ifdef SAVE_X2Y2 - intToCoord(c2,x2,y2); -#endif -#if PSZ == 24 - addrLineEnd = addr + WIDTH_MUL(Y2, nwidth); - xOffset = xBase + X2; - addrb = (char *)addrLineEnd + xOffset * 3; - addrp = (PixelType *)((unsigned long)addrb & ~0x03); -#else - addrp = addr + WIDTH_MUL(Y2, nwidth) + X2; -#endif - } -#endif /* !PREVIOUS */ - while (--npt) -#endif /* POLYSEGMENT */ - { -#ifdef POLYSEGMENT - y1_or_e1 = ppt[0]; - c2 = ppt[1]; - ppt += 2; - if (isClipped(y1_or_e1,upperleft,lowerright)|isClipped(c2,upperleft,lowerright)) - break; - intToCoord(y1_or_e1,x1_or_len,y1_or_e1); - /* compute now to avoid needing x1, y1 later */ -#if PSZ == 24 - addrLineEnd = addr + WIDTH_MUL(y1_or_e1, nwidth); - xOffset = xBase + x1_or_len; - addrb = (char *)addrLineEnd + xOffset * 3; - addrp = (PixelType *)((unsigned long)addrb & ~0x03); -#else - addrp = addr + WIDTH_MUL(y1_or_e1, nwidth) + x1_or_len; -#endif -#else /* !POLYSEGMENT */ -#ifdef EITHER_MODE - if (!mode) -#endif /* EITHER_MODE */ -#ifndef ORIGIN - { - /* CoordModePrevious */ - _x1 = _x2; - _y1 = _y2; - c2 = *ppt++; - intToCoord(c2, _x2, _y2); - _x2 = _x1 + _x2; - _y2 = _y1 + _y2; - -#ifdef BUGFIX_clip - if (_x2 < ex_x1 || _x2 >= ex_x2 || - _y2 < ex_y1 || _y2 >= ex_y2) -#else - if (_x2 < extents_x1 || _x2 >= extents_x2 || - _y2 < extents_y1 || _y2 >= extents_y2) -#endif - { - break; - } - CalcLineDeltas(_x1, _y1, _x2, _y2, x1_or_len, y1_or_e1, - stepmajor, stepminor, 1, NWIDTH(nwidth), octant); - } -#endif /* !ORIGIN */ -#ifdef EITHER_MODE - else -#endif /* EITHER_MODE */ -#ifndef PREVIOUS - { -#ifndef SAVE_X2Y2 - y1_or_e1 = c2; -#else - y1_or_e1 = y2; - x1_or_len = x2; -#endif /* SAVE_X2Y2 */ - c2 = *ppt++; - - if (isClipped (c2, upperleft, lowerright)) - break; -#ifdef SAVE_X2Y2 - intToCoord(c2,x2,y2); -#endif - CalcLineDeltas(X1, Y1, X2, Y2, x1_or_len, y1_or_e1, - stepmajor, stepminor, 1, NWIDTH(nwidth), octant); - } -#endif /* !PREVIOUS */ -#endif /* POLYSEGMENT */ - -#ifdef POLYSEGMENT - CalcLineDeltas(X1, Y1, X2, Y2, x1_or_len, y1_or_e1, - stepmajor, stepminor, 1, NWIDTH(nwidth), octant); - /* - * although the horizontal code works for polyline, it - * slows down 10 pixel lines by 15%. Thus, this - * code is optimized for horizontal segments and - * random orientation lines, which seems like a reasonable - * assumption - */ - if (y1_or_e1 != 0) - { -#endif /* POLYSEGMENT */ - if (x1_or_len < y1_or_e1) - { -#ifdef REARRANGE - register int e3; -#endif - - e3 = x1_or_len; - x1_or_len = y1_or_e1; - y1_or_e1 = e3; - - e3 = stepminor; - stepminor = stepmajor; - stepmajor = e3; - SetYMajorOctant(octant); - } - - e = -x1_or_len; -#ifdef POLYSEGMENT - if (!capStyle) - x1_or_len--; -#endif - - { -#ifdef REARRANGE - register int e3; - RROP_DECLARE - RROP_FETCH_GCPRIV(devPriv); -#endif - - y1_or_e1 = y1_or_e1 << 1; - e3 = e << 1; - - FIXUP_ERROR(e, octant, bias); - -#if PSZ == 24 - if (stepmajor == 1 || stepmajor == -1){ - stepmajor3 = stepmajor * 3; - stepminor3 = stepminor * sizeof (CfbBits); - majordx = stepmajor; minordx = 0; - } else { - stepmajor3 = stepmajor * sizeof (CfbBits); - stepminor3 = stepminor * 3; - majordx = 0; minordx = stepminor; - } -#endif - -#if PSZ == 24 -#define body {\ - body_rop \ - addrb += stepmajor3; \ - xOffset += majordx; \ - e += y1_or_e1; \ - if (e >= 0){ \ - addrb += stepminor3; \ - xOffset += minordx; \ - e += e3; \ - } \ - } -#else /* PSZ == 24 */ - -#define body {\ - RROP_SOLID(addrp); \ - addrp += stepmajor; \ - e += y1_or_e1; \ - if (e >= 0) \ - { \ - addrp += stepminor; \ - e += e3; \ - } \ - } -#endif /* PSZ == 24 */ - -#ifdef LARGE_INSTRUCTION_CACHE - -# ifdef SERIOUS_UNROLLING -# define UNROLL 16 -# else -# define UNROLL 4 -# endif -#define CASE(n) case -n: body - - while ((x1_or_len -= UNROLL) >= 0) - { - body body body body -# if UNROLL >= 8 - body body body body -# endif -# if UNROLL >= 12 - body body body body -# endif -# if UNROLL >= 16 - body body body body -# endif - } - switch (x1_or_len) - { - CASE(1) CASE(2) CASE(3) -# if UNROLL >= 8 - CASE(4) CASE(5) CASE(6) CASE(7) -# endif -# if UNROLL >= 12 - CASE(8) CASE(9) CASE(10) CASE(11) -# endif -# if UNROLL >= 16 - CASE(12) CASE(13) CASE(14) CASE(15) -# endif - } -#else /* !LARGE_INSTRUCTION_CACHE */ - - IMPORTANT_START - IMPORTANT_START - - if (x1_or_len & 1) - body - x1_or_len >>= 1; - while (x1_or_len--) { - body body - } - - IMPORTANT_END - IMPORTANT_END -#endif /* LARGE_INSTRUCTION_CACHE */ - -#ifdef POLYSEGMENT -#if PSZ == 24 - body_rop -#else - RROP_SOLID(addrp); -#endif -#endif -#if PSZ == 24 - addrp = (PixelType *)((unsigned long)addrb & ~0x03); -#endif - } -#undef body -#ifdef POLYSEGMENT - } - else /* Polysegment horizontal line optimization */ - { -# ifdef REARRANGE - register int e3; - RROP_DECLARE - RROP_FETCH_GCPRIV(devPriv); -# endif /* REARRANGE */ - if (stepmajor < 0) - { -#if PSZ == 24 - xOffset -= x1_or_len; - addrp = addrLineEnd + PXL2ADR(xOffset); -#else - addrp -= x1_or_len; -#endif - if (capStyle) - x1_or_len++; - else -#if PSZ == 24 - xOffset++; - addrp = addrLineEnd + PXL2ADR(xOffset); -#else - addrp++; -#endif - } - else - { -#if PSZ == 24 - addrp = addrLineEnd + PXL2ADR(xOffset); -#endif - if (capStyle) - x1_or_len++; - } -# if PSZ == 24 - y1_or_e1 = xOffset & 3; -# else -# if PGSZ == 64 /* PIM value from is not it! (for 16/32 PSZ)*/ - y1_or_e1 = ((long) addrp) & 0x7; - addrp = (PixelType *) (((unsigned char *) addrp) - y1_or_e1); -# else - y1_or_e1 = ((long) addrp) & PIM; - addrp = (PixelType *) (((unsigned char *) addrp) - y1_or_e1); -# endif -#if PGSZ == 32 -# if PWSH != 2 - y1_or_e1 >>= (2 - PWSH); -# endif -#else /* PGSZ == 64 */ -# if PWSH != 3 - y1_or_e1 >>= (3 - PWSH); -# endif -#endif /* PGSZ */ -# endif /* PSZ == 24 */ -#if PSZ == 24 - { -#if RROP == GXcopy - register int nlmiddle; - int leftIndex = xOffset & 3; - int rightIndex = (xOffset + x1_or_len) & 3; -#else - register int pidx; -#endif - -#if RROP == GXcopy - nlmiddle = x1_or_len; - if(leftIndex){ - nlmiddle -= (4 - leftIndex); - } - if(rightIndex){ - nlmiddle -= rightIndex; - } - - nlmiddle >>= 2; - switch(leftIndex+x1_or_len){ - case 4: - switch(leftIndex){ - case 0: - *addrp++ = piQxelXor[0]; - *addrp++ = piQxelXor[1]; - *addrp = piQxelXor[2]; - break; - case 1: - *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - addrp++; - *addrp = piQxelXor[1]; - addrp++; - *addrp = piQxelXor[2]; - break; - case 2: - *addrp = ((*addrp) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - addrp++; - *addrp = piQxelXor[2]; - break; - case 3: - *addrp = ((*addrp) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00); - break; - } - break; - case 3: - switch(leftIndex){ - case 0: - *addrp++ = piQxelXor[0]; - *addrp++ = piQxelXor[1]; - *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - break; - case 1: - *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - addrp++; - *addrp = piQxelXor[1]; - addrp++; - *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - break; - case 2: - *addrp = ((*addrp) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - addrp++; - *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - break; - } - break; - case 2: - switch(leftIndex){ -/* - case 2: - *addrp = ((*addrp) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - addrp++; - *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - break; -*/ - case 1: - *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - addrp++; - *addrp = ((*addrp) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - break; - case 0: - *addrp++ = piQxelXor[0]; - *addrp = ((*addrp) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - break; - } - break; - case 1: /*only if leftIndex = 0 and w = 1*/ - if(x1_or_len){ - *addrp = ((*addrp) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF); - } -/* - else{ - *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - addrp++; - *addrp = ((*addrp) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - } -*/ - break; - case 0: /*never*/ - break; - default: - { -/* - maskbits(y1_or_e1, x1_or_len, e, e3, x1_or_len) -*/ - switch(leftIndex){ - case 0: - break; - case 1: - *addrp = ((*addrp) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - addrp++; - *addrp = piQxelXor[1]; - addrp++; - *addrp = piQxelXor[2]; - addrp++; - break; - case 2: - *addrp = ((*addrp) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - addrp++; - *addrp = piQxelXor[2]; - addrp++; - break; - case 3: - *addrp = ((*addrp) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00); - addrp++; - break; - } - while(nlmiddle--){ - *addrp++ = piQxelXor[0]; - *addrp++ = piQxelXor[1]; - *addrp++ = piQxelXor[2]; - } - switch(rightIndex++){ - case 0: - break; - case 1: - *addrp = ((*addrp) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF); - break; - case 2: - *addrp++ = piQxelXor[0]; - *addrp = ((*addrp) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - break; - case 3: - *addrp++ = piQxelXor[0]; - *addrp++ = piQxelXor[1]; - *addrp = ((*addrp) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - break; - } -/* - if (e3){ - e3 &= 0xFFFFFF; - switch(rightIndex&3){ - case 0: - *addrp = ((*addrp) & (0xFF000000 | ~e3)) - | (piQxelXor[0] & 0xFFFFFF & e3); - break; - case 1: - *addrp = ((*addrp) & (0xFFFFFF | ~(e3<<24))) - + (piQxelXor[0] & 0xFF000000 & (e3<<24)); - addrp++; - *addrp = ((*addrp) & (0xFFFF0000|~(e3 >> 8))) - | (piQxelXor[1] & 0xFFFF & (e3 >> 8)); - break; - case 2: - *addrp = ((*addrp) & (0xFFFF|~(e3 << 16))) - | (piQxelXor[1] & 0xFFFF0000 & (e3 << 16)); - addrp++; - *addrp = ((*addrp) & (0xFFFFFF00|~(e3>>16))) - | (piQxelXor[2] & 0xFF & (e3 >> 16)); - break; - case 3: - *addrp = ((*addrp) & (0xFF|~(e3<<8))) - | (piQxelXor[2] & 0xFFFFFF00 & (e3<<8)); - addrp++; - break; - } - } -*/ - } - } -#else /* GXcopy */ - addrp = (PixelType *)((char *)addrLineEnd + ((xOffset * 3) & ~0x03)); - if (x1_or_len <= 1){ - if (x1_or_len) - RROP_SOLID24(addrp, xOffset); - } else { - maskbits(xOffset, x1_or_len, e, e3, x1_or_len); - pidx = xOffset & 3; - if (e){ - RROP_SOLID_MASK(addrp, e, pidx-1); - addrp++; - if (pidx == 3) - pidx = 0; - } - while (--x1_or_len >= 0){ - RROP_SOLID(addrp, pidx); - addrp++; - if (++pidx == 3) - pidx = 0; - } - if (e3) - RROP_SOLID_MASK(addrp, e3, pidx); - } -#endif /* GXcopy */ - } -#else /* PSZ == 24 */ - if (y1_or_e1 + x1_or_len <= PPW) - { - if (x1_or_len) - { - maskpartialbits(y1_or_e1, x1_or_len, e) - RROP_SOLID_MASK((CfbBits *) addrp, e); - } - } - else - { - maskbits(y1_or_e1, x1_or_len, e, e3, x1_or_len) - if (e) - { - RROP_SOLID_MASK((CfbBits *) addrp, e); - addrp += PPW; - } - RROP_SPAN(addrp, x1_or_len) - if (e3) - RROP_SOLID_MASK((CfbBits *) addrp, e3); - } -#endif /* PSZ == 24 */ - } -#endif /* POLYSEGMENT */ - } -#ifdef POLYSEGMENT - if (nseg >= 0) - return (xSegment *) ppt - pSegInit; -#else - if (npt) - { -#ifdef EITHER_MODE - if (!mode) -#endif /* EITHER_MODE */ -#ifndef ORIGIN - { - *x1p = _x1; - *y1p = _y1; - *x2p = _x2; - *y2p = _y2; - } -#endif /* !ORIGIN */ - return ((DDXPointPtr) ppt - pptInit) - 1; - } - -# ifndef ORIGIN -# define C2 c2 -# else -# define C2 ppt[-1] -# endif -#ifdef EITHER_MODE - if (pGC->capStyle != CapNotLast && - ((mode ? (C2 != *((int *) pptInitOrig)) - : ((_x2 != pptInitOrig->x) || - (_y2 != pptInitOrig->y))) - || (ppt == ((int *)pptInitOrig) + 2))) -#endif /* EITHER_MODE */ -#ifdef PREVIOUS - if (pGC->capStyle != CapNotLast && - ((_x2 != pptInitOrig->x) || - (_y2 != pptInitOrig->y) || - (ppt == ((int *)pptInitOrig) + 2))) -#endif /* PREVIOUS */ -#ifdef ORIGIN - if (pGC->capStyle != CapNotLast && - ((C2 != *((int *) pptInitOrig)) || - (ppt == ((int *)pptInitOrig) + 2))) -#endif /* !PREVIOUS */ - { -# ifdef REARRANGE - RROP_DECLARE - - RROP_FETCH_GCPRIV(devPriv); -# endif -#if PSZ == 24 -#if RROP == GXcopy - switch(xOffset & 3){ - case 0: - *addrp = ((*addrp)&0xFF000000)|(piQxelXor[0] & 0xFFFFFF); - break; - case 3: - *addrp = ((*addrp)&0xFF)|(piQxelXor[2] & 0xFFFFFF00); - break; - case 1: - *addrp = ((*addrp)&0xFFFFFF)|(piQxelXor[0] & 0xFF000000); - *(addrp+1) = ((*(addrp+1))&0xFFFF0000)|(piQxelXor[1] & 0xFFFF); - break; - case 2: - *addrp = ((*addrp)&0xFFFF)|(piQxelXor[1] & 0xFFFF0000); - *(addrp+1) = ((*(addrp+1))&0xFFFFFF00)|(piQxelXor[2] & 0xFF); - break; - } -#endif -#if RROP == GXxor - switch(xOffset & 3){ - case 0: - *addrp ^= (piQxelXor[0] & 0xFFFFFF); - break; - case 3: - *addrp ^= (piQxelXor[2] & 0xFFFFFF00); - break; - case 1: - *addrp ^= (piQxelXor[0] & 0xFF000000); - *(addrp+1) ^= (piQxelXor[1] & 0xFFFF); - break; - case 2: - *addrp ^= (piQxelXor[1] & 0xFFFF0000); - *(addrp+1) ^= (piQxelXor[2] & 0xFF); - break; - } -#endif -#if RROP == GXand - switch(xOffset & 3){ - case 0: - *addrp &= (piQxelAnd[0] | 0xFF000000); - break; - case 3: - *addrp &= (piQxelAnd[2] | 0xFF); - break; - case 1: - *addrp &= (0xFFFFFF|piQxelAnd[0]); - *(addrp+1) &= (0xFFFF0000|piQxelAnd[1]); - break; - case 2: - *addrp &= (0xFFFF|piQxelAnd[1]); - *(addrp+1) &= (0xFFFFFF00|piQxelAnd[2]); - break; - } -#endif -#if RROP == GXor - switch(xOffset & 3){ - case 0: - *addrp |= (piQxelOr[0] & 0xFFFFFF); - break; - case 3: - *addrp |= (piQxelOr[2] & 0xFFFFFF00); - break; - case 1: - *addrp |= (piQxelOr[0] & 0xFF000000); - *(addrp+1) |= (piQxelOr[1] & 0xFFFF); - break; - case 2: - *addrp |= (piQxelOr[1] & 0xFFFF0000); - *(addrp+1) |= (piQxelOr[2] & 0xFF); - break; - } -#endif -#if RROP == GXset - switch(xOffset & 3){ - case 0: - *addrp = (((*addrp)&(piQxelAnd[0] |0xFF000000))^(piQxelXor[0] & 0xFFFFFF)); - break; - case 3: - *addrp = (((*addrp)&(piQxelAnd[2]|0xFF))^(piQxelXor[2] & 0xFFFFFF00)); - break; - case 1: - *addrp = (((*addrp)&(piQxelAnd[0]|0xFFFFFF))^(piQxelXor[0] & 0xFF000000)); - *(addrp+1) = (((*(addrp+1))&(piQxelAnd[1]|0xFFFF0000))^(piQxelXor[1] & 0xFFFF)); - break; - case 2: - *addrp = (((*addrp)&(piQxelAnd[1]|0xFFFF))^(piQxelXor[1] & 0xFFFF0000)); - *(addrp+1) = (((*(addrp+1))&(piQxelAnd[2]|0xFFFFFF00))^(piQxelXor[2] & 0xFF)); - break; - } -#endif -#else - RROP_SOLID (addrp); -# endif - } -#endif /* !POLYSEGMENT */ - RROP_UNDECLARE; - return -1; -} - -#endif /* INCLUDE_DRAW */ - - -#ifdef INCLUDE_OTHERS - -#ifdef POLYSEGMENT - -void -cfb8SegmentSS1Rect (pDrawable, pGC, nseg, pSegInit) - DrawablePtr pDrawable; - GCPtr pGC; - int nseg; - xSegment *pSegInit; -{ - int (*func)(DrawablePtr, GCPtr, int, xSegment *); - void (*clip)(DrawablePtr, GCPtr, int, int, int, int, BoxPtr, Bool); - int drawn; - cfbPrivGCPtr devPriv; - -#if defined(__arm32__) && PSZ != 8 - /* XXX -JJK */ - /* There is a painting bug when PSZ != 8; I need to track it down! */ - cfbSegmentSS(pDrawable, pGC, nseg, pSegInit); - return; -#endif - - devPriv = cfbGetGCPrivate(pGC); -#ifdef NO_ONE_RECT - if (REGION_NUM_RECTS(pGC->pCompositeClip) != 1) - { - cfbSegmentSS(pDrawable, pGC, nseg, pSegInit); - return; - } -#endif - switch (devPriv->rop) - { - case GXcopy: - func = cfb8SegmentSS1RectCopy; - clip = cfb8ClippedLineCopy; -#ifdef FAST_MUL - if (cfbGetPixelWidth (pDrawable) == WIDTH_FAST) - func = cfb8SegmentSS1RectShiftCopy; -#endif - break; - case GXxor: - func = cfb8SegmentSS1RectXor; - clip = cfb8ClippedLineXor; - break; - default: - func = cfb8SegmentSS1RectGeneral; - clip = cfb8ClippedLineGeneral; - break; - } - while (nseg) - { - drawn = (*func) (pDrawable, pGC, nseg, pSegInit); - if (drawn == -1) - break; - (*clip) (pDrawable, pGC, - pSegInit[drawn-1].x1, pSegInit[drawn-1].y1, - pSegInit[drawn-1].x2, pSegInit[drawn-1].y2, - &pGC->pCompositeClip->extents, - pGC->capStyle == CapNotLast); - pSegInit += drawn; - nseg -= drawn; - } -} - -#else /* POLYSEGMENT */ - -void -cfb8LineSS1Rect (pDrawable, pGC, mode, npt, pptInit) - DrawablePtr pDrawable; - GCPtr pGC; - int mode; - int npt; - DDXPointPtr pptInit; -{ - int (*func)(DrawablePtr, GCPtr, int, int, - DDXPointPtr, DDXPointPtr, - int *, int *, int *, int *); - void (*clip)(DrawablePtr, GCPtr, int, int, int, int, BoxPtr, Bool); - int drawn; - cfbPrivGCPtr devPriv; - int x1, y1, x2, y2; - DDXPointPtr pptInitOrig = pptInit; - -#if defined(__arm32__) && PSZ != 8 - /* XXX -JJK */ - /* There is a painting bug when PSZ != 8; I need to track it down! */ - cfbLineSS(pDrawable, pGC, mode, npt, pptInit); - return; -#endif - - devPriv = cfbGetGCPrivate(pGC); -#ifdef NO_ONE_RECT - if (REGION_NUM_RECTS(pGC->pCompositeClip) != 1) - { - cfbLineSS(pDrawable, pGC, mode, npt, pptInit); - return; - } -#endif - switch (devPriv->rop) - { - case GXcopy: - func = cfb8LineSS1RectCopy; - clip = cfb8ClippedLineCopy; - if (mode == CoordModePrevious) - func = cfb8LineSS1RectPreviousCopy; - break; - case GXxor: - func = cfb8LineSS1RectXor; - clip = cfb8ClippedLineXor; - break; - default: - func = cfb8LineSS1RectGeneral; - clip = cfb8ClippedLineGeneral; - break; - } - if (mode == CoordModePrevious) - { - x1 = pptInit->x; - y1 = pptInit->y; - while (npt > 1) - { - drawn = (*func) (pDrawable, pGC, mode, npt, pptInit, pptInitOrig, - &x1, &y1, &x2, &y2); - if (drawn == -1) - break; - (*clip) (pDrawable, pGC, x1, y1, x2, y2, - &pGC->pCompositeClip->extents, - drawn != npt - 1 || pGC->capStyle == CapNotLast); - pptInit += drawn; - npt -= drawn; - x1 = x2; - y1 = y2; - } - } - else - { - while (npt > 1) - { - drawn = (*func) (pDrawable, pGC, mode, npt, pptInit, pptInitOrig, - &x1, &y1, &x2, &y2); - if (drawn == -1) - break; - (*clip) (pDrawable, pGC, - pptInit[drawn-1].x, pptInit[drawn-1].y, - pptInit[drawn].x, pptInit[drawn].y, - &pGC->pCompositeClip->extents, - drawn != npt - 1 || pGC->capStyle == CapNotLast); - pptInit += drawn; - npt -= drawn; - } - } -} - -#endif /* else POLYSEGMENT */ -#endif /* INCLUDE_OTHERS */ - -#if !defined(POLYSEGMENT) && !defined (PREVIOUS) - -void -RROP_NAME (cfb8ClippedLine) (pDrawable, pGC, x1, y1, x2, y2, boxp, shorten) - DrawablePtr pDrawable; - GCPtr pGC; - int x1, y1, x2, y2; - BoxPtr boxp; - Bool shorten; -{ - int oc1, oc2; - int e, e1, e3, len; - int adx, ady; - - PixelType *addr; - int nwidth; - int stepx, stepy; - int xorg, yorg; - int new_x1, new_y1, new_x2, new_y2; - Bool pt1_clipped, pt2_clipped; - int changex, changey, result; -#if PSZ == 24 - PixelType *addrLineEnd; - char *addrb; - int stepx3, stepy3; -#endif - int octant; - unsigned int bias = miGetZeroLineBias(pDrawable->pScreen); - - cfbGetPixelWidthAndPointer(pDrawable, nwidth, addr); - - xorg = pDrawable->x; - yorg = pDrawable->y; - x1 += xorg; - y1 += yorg; - x2 += xorg; - y2 += yorg; - oc1 = 0; - oc2 = 0; - OUTCODES (oc1, x1, y1, boxp); - OUTCODES (oc2, x2, y2, boxp); - - if (oc1 & oc2) - return; - - CalcLineDeltas(x1, y1, x2, y2, adx, ady, stepx, stepy, 1, nwidth, octant); - - if (adx <= ady) - { - int t; - - t = adx; - adx = ady; - ady = t; - - t = stepx; - stepx = stepy; - stepy = t; - - SetYMajorOctant(octant); - } - e = - adx; - e1 = ady << 1; - e3 = - (adx << 1); - - FIXUP_ERROR(e, octant, bias); - - new_x1 = x1; - new_y1 = y1; - new_x2 = x2; - new_y2 = y2; - pt1_clipped = 0; - pt2_clipped = 0; - - if (IsXMajorOctant(octant)) - { - result = miZeroClipLine(boxp->x1, boxp->y1, boxp->x2 - 1, boxp->y2 - 1, - &new_x1, &new_y1, &new_x2, &new_y2, - adx, ady, - &pt1_clipped, &pt2_clipped, - octant, bias, oc1, oc2); - if (result == -1) - return; - - len = abs(new_x2 - new_x1) - 1; /* this routine needs the "-1" */ - - /* if we've clipped the endpoint, always draw the full length - * of the segment, because then the capstyle doesn't matter - * if x2,y2 isn't clipped, use the capstyle - * (shorten == TRUE <--> CapNotLast) - */ - if (pt2_clipped || !shorten) - len++; - - if (pt1_clipped) - { - /* must calculate new error terms */ - changex = abs(new_x1 - x1); - changey = abs(new_y1 - y1); - e = e + changey * e3 + changex * e1; - } - } - else /* Y_AXIS */ - { - result = miZeroClipLine(boxp->x1, boxp->y1, boxp->x2 - 1, boxp->y2 - 1, - &new_x1, &new_y1, &new_x2, &new_y2, - ady, adx, - &pt1_clipped, &pt2_clipped, - octant, bias, oc1, oc2); - if (result == -1) - return; - - len = abs(new_y2 - new_y1) - 1; /* this routine needs the "-1" */ - - /* if we've clipped the endpoint, always draw the full length - * of the segment, because then the capstyle doesn't matter - * if x2,y2 isn't clipped, use the capstyle - * (shorten == TRUE <--> CapNotLast) - */ - if (pt2_clipped || !shorten) - len++; - - if (pt1_clipped) - { - /* must calculate new error terms */ - changex = abs(new_x1 - x1); - changey = abs(new_y1 - y1); - e = e + changex * e3 + changey * e1; - } - } - x1 = new_x1; - y1 = new_y1; - { - register PixelType *addrp; - RROP_DECLARE - - RROP_FETCH_GC(pGC); - -#if PSZ == 24 - addrLineEnd = addr + (y1 * nwidth); - addrb = (char *)addrLineEnd + x1 * 3; - if (stepx == 1 || stepx == -1){ - stepx3 = stepx * 3; - stepy3 = stepy * sizeof (CfbBits); - } else { - stepx3 = stepx * sizeof (CfbBits); - stepy3 = stepy * 3; - } -#else - addrp = addr + (y1 * nwidth) + x1; -#endif - -#ifndef REARRANGE - if (!ady) - { -#if PSZ == 24 -#define body {\ - body_rop \ - addrb += stepx3; \ - } -#else -#define body { RROP_SOLID(addrp); addrp += stepx; } -#endif - while (len >= PGSZB) - { - body body body body -#if PGSZ == 64 - body body body body -#endif - len -= PGSZB; - } - switch (len) - { -#if PGSZ == 64 - case 7: body case 6: body case 5: body case 4: body -#endif - case 3: body case 2: body case 1: body - } -#undef body - } - else -#endif /* !REARRANGE */ - { -#if PSZ == 24 -#define body {\ - body_rop \ - addrb += stepx3; \ - e += e1; \ - if (e >= 0) \ - { \ - addrb += stepy3; \ - e += e3; \ - } \ - } -#else -#define body {\ - RROP_SOLID(addrp); \ - addrp += stepx; \ - e += e1; \ - if (e >= 0) \ - { \ - addrp += stepy; \ - e += e3; \ - } \ - } -#endif - -#ifdef LARGE_INSTRUCTION_CACHE - while ((len -= PGSZB) >= 0) - { - body body body body -#if PGSZ == 64 - body body body body -#endif - } - switch (len) - { - case -1: body case -2: body case -3: body -#if PGSZ == 64 - case -4: body case -5: body case -6: body case -7: body -#endif - } -#else /* !LARGE_INSTRUCTION_CACHE */ - IMPORTANT_START; - - while ((len -= 2) >= 0) - { - body body; - } - if (len & 1) - body; - - IMPORTANT_END; -#endif /* LARGE_INSTRUCTION_CACHE */ - } -#if PSZ == 24 - body_rop -#else - RROP_SOLID(addrp); -#endif -#undef body - RROP_UNDECLARE - } -} - -#endif /* !POLYSEGMENT && !PREVIOUS */ -#endif /* PIXEL_ADDR */ diff --git a/cfb/cfballpriv.c b/cfb/cfballpriv.c deleted file mode 100644 index 3b58266c5..000000000 --- a/cfb/cfballpriv.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * -Copyright 1991, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "resource.h" -#include "colormap.h" -#include "colormapst.h" -#include "cfb.h" -#include "mi.h" -#include "mistruct.h" -#include "dix.h" -#include "cfbmskbits.h" -#include "mibstore.h" - -#if 1 || PSZ==8 -DevPrivateKey cfbGCPrivateKey = &cfbGCPrivateKey; -#endif -#ifdef CFB_NEED_SCREEN_PRIVATE -DevPrivateKey cfbScreenPrivateKey = &cfbScreenPrivateKey; -#endif - - -Bool -cfbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *gc_key) -{ - if (!gc_key || !*gc_key) - { - if (!mfbAllocatePrivates(pScreen, &cfbGCPrivateKey)) - return FALSE; - if (gc_key) - *gc_key = cfbGCPrivateKey; - } - else - { - cfbGCPrivateKey = *gc_key; - } - return dixRequestPrivate(cfbGCPrivateKey, sizeof(cfbPrivGC)); -} diff --git a/cfb/cfbbitblt.c b/cfb/cfbbitblt.c deleted file mode 100644 index 00bf41367..000000000 --- a/cfb/cfbbitblt.c +++ /dev/null @@ -1,1455 +0,0 @@ -/* - * cfb copy area - */ - - -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - -Author: Keith Packard - -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include -#include -#include -#include "gcstruct.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "mi.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" -#include "fastblt.h" -#define MFB_CONSTS_ONLY -#include "maskbits.h" - -#if PSZ == 8 -#define cfbCopyPlane1toN cfbCopyPlane1to8 -#define cfbCopyPlaneNto1 cfbCopyPlane8to1 -#else -static unsigned int FgPixel, BgPixel; -# if PSZ == 16 -#define cfbCopyPlane1toN cfbCopyPlane1to16 -#define cfbCopyPlaneNto1 cfbCopyPlane16to1 -# endif -# if PSZ == 24 -#define cfbCopyPlane1toN cfbCopyPlane1to24 -#define cfbCopyPlaneNto1 cfbCopyPlane24to1 -# endif -# if PSZ == 32 -#define cfbCopyPlane1toN cfbCopyPlane1to32 -#define cfbCopyPlaneNto1 cfbCopyPlane32to1 -# endif -#endif - -/* cfbBitBltcfb == cfbCopyPlaneExpand */ -RegionPtr -cfbBitBlt ( - register DrawablePtr pSrcDrawable, - register DrawablePtr pDstDrawable, - GC *pGC, - int srcx, int srcy, - int width, int height, - int dstx, int dsty, - void (*doBitBlt)( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/), - unsigned long bitPlane) -{ - RegionPtr prgnSrcClip = NULL; /* may be a new region, or just a copy */ - Bool freeSrcClip = FALSE; - - RegionPtr prgnExposed; - RegionRec rgnDst; - DDXPointPtr pptSrc; - register DDXPointPtr ppt; - register BoxPtr pbox; - int i; - register int dx; - register int dy; - xRectangle origSource; - DDXPointRec origDest; - int numRects; - BoxRec fastBox; - int fastClip = 0; /* for fast clipping with pixmap source */ - int fastExpose = 0; /* for fast exposures with pixmap source */ - - origSource.x = srcx; - origSource.y = srcy; - origSource.width = width; - origSource.height = height; - origDest.x = dstx; - origDest.y = dsty; - - if ((pSrcDrawable != pDstDrawable) && - pSrcDrawable->pScreen->SourceValidate) - { - (*pSrcDrawable->pScreen->SourceValidate) (pSrcDrawable, srcx, srcy, width, height); - } - - srcx += pSrcDrawable->x; - srcy += pSrcDrawable->y; - - /* clip the source */ - - if (pSrcDrawable->type == DRAWABLE_PIXMAP) - { - if ((pSrcDrawable == pDstDrawable) && - (pGC->clientClipType == CT_NONE)) - { - prgnSrcClip = cfbGetCompositeClip(pGC); - } - else - { - fastClip = 1; - } - } - else - { - if (pGC->subWindowMode == IncludeInferiors) - { - /* - * XFree86 DDX empties the border clip when the - * VT is inactive - */ - if (!((WindowPtr) pSrcDrawable)->parent && - REGION_NOTEMPTY (pSrcDrawable->pScreen, - &((WindowPtr) pSrcDrawable)->borderClip)) - { - /* - * special case bitblt from root window in - * IncludeInferiors mode; just like from a pixmap - */ - fastClip = 1; - } - else if ((pSrcDrawable == pDstDrawable) && - (pGC->clientClipType == CT_NONE)) - { - prgnSrcClip = cfbGetCompositeClip(pGC); - } - else - { - prgnSrcClip = NotClippedByChildren((WindowPtr)pSrcDrawable); - freeSrcClip = TRUE; - } - } - else - { - prgnSrcClip = &((WindowPtr)pSrcDrawable)->clipList; - } - } - - fastBox.x1 = srcx; - fastBox.y1 = srcy; - fastBox.x2 = srcx + width; - fastBox.y2 = srcy + height; - - /* Don't create a source region if we are doing a fast clip */ - if (fastClip) - { - fastExpose = 1; - /* - * clip the source; if regions extend beyond the source size, - * make sure exposure events get sent - */ - if (fastBox.x1 < pSrcDrawable->x) - { - fastBox.x1 = pSrcDrawable->x; - fastExpose = 0; - } - if (fastBox.y1 < pSrcDrawable->y) - { - fastBox.y1 = pSrcDrawable->y; - fastExpose = 0; - } - if (fastBox.x2 > pSrcDrawable->x + (int) pSrcDrawable->width) - { - fastBox.x2 = pSrcDrawable->x + (int) pSrcDrawable->width; - fastExpose = 0; - } - if (fastBox.y2 > pSrcDrawable->y + (int) pSrcDrawable->height) - { - fastBox.y2 = pSrcDrawable->y + (int) pSrcDrawable->height; - fastExpose = 0; - } - } - else - { - REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1); - REGION_INTERSECT(pGC->pScreen, &rgnDst, &rgnDst, prgnSrcClip); - } - - dstx += pDstDrawable->x; - dsty += pDstDrawable->y; - - if (pDstDrawable->type == DRAWABLE_WINDOW) - { - if (!((WindowPtr)pDstDrawable)->realized) - { - if (!fastClip) - REGION_UNINIT(pGC->pScreen, &rgnDst); - if (freeSrcClip) - REGION_DESTROY(pGC->pScreen, prgnSrcClip); - return NULL; - } - } - - dx = srcx - dstx; - dy = srcy - dsty; - - /* Translate and clip the dst to the destination composite clip */ - if (fastClip) - { - RegionPtr cclip; - - /* Translate the region directly */ - fastBox.x1 -= dx; - fastBox.x2 -= dx; - fastBox.y1 -= dy; - fastBox.y2 -= dy; - - /* If the destination composite clip is one rectangle we can - do the clip directly. Otherwise we have to create a full - blown region and call intersect */ - - /* XXX because CopyPlane uses this routine for 8-to-1 bit - * copies, this next line *must* also correctly fetch the - * composite clip from an mfb gc - */ - - cclip = cfbGetCompositeClip(pGC); - if (REGION_NUM_RECTS(cclip) == 1) - { - BoxPtr pBox = REGION_RECTS(cclip); - - if (fastBox.x1 < pBox->x1) fastBox.x1 = pBox->x1; - if (fastBox.x2 > pBox->x2) fastBox.x2 = pBox->x2; - if (fastBox.y1 < pBox->y1) fastBox.y1 = pBox->y1; - if (fastBox.y2 > pBox->y2) fastBox.y2 = pBox->y2; - - /* Check to see if the region is empty */ - if (fastBox.x1 >= fastBox.x2 || fastBox.y1 >= fastBox.y2) - { - REGION_NULL(pGC->pScreen, &rgnDst); - } - else - { - REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1); - } - } - else - { - /* We must turn off fastClip now, since we must create - a full blown region. It is intersected with the - composite clip below. */ - fastClip = 0; - REGION_INIT(pGC->pScreen, &rgnDst, &fastBox,1); - } - } - else - { - REGION_TRANSLATE(pGC->pScreen, &rgnDst, -dx, -dy); - } - - if (!fastClip) - { - REGION_INTERSECT(pGC->pScreen, &rgnDst, - &rgnDst, - cfbGetCompositeClip(pGC)); - } - - /* Do bit blitting */ - numRects = REGION_NUM_RECTS(&rgnDst); - if (numRects && width && height) - { - if(!(pptSrc = (DDXPointPtr)xalloc(numRects * - sizeof(DDXPointRec)))) - { - REGION_UNINIT(pGC->pScreen, &rgnDst); - if (freeSrcClip) - REGION_DESTROY(pGC->pScreen, prgnSrcClip); - return NULL; - } - pbox = REGION_RECTS(&rgnDst); - ppt = pptSrc; - for (i = numRects; --i >= 0; pbox++, ppt++) - { - ppt->x = pbox->x1 + dx; - ppt->y = pbox->y1 + dy; - } - - (*doBitBlt) (pSrcDrawable, pDstDrawable, pGC->alu, &rgnDst, pptSrc, pGC->planemask); - xfree(pptSrc); - } - - prgnExposed = NULL; - if (pGC->fExpose) - { - /* Pixmap sources generate a NoExposed (we return NULL to do this) */ - if (!fastExpose) - prgnExposed = - miHandleExposures(pSrcDrawable, pDstDrawable, pGC, - origSource.x, origSource.y, - (int)origSource.width, - (int)origSource.height, - origDest.x, origDest.y, bitPlane); - } - REGION_UNINIT(pGC->pScreen, &rgnDst); - if (freeSrcClip) - REGION_DESTROY(pGC->pScreen, prgnSrcClip); - return prgnExposed; -} - - -RegionPtr -cfbCopyPlaneReduce ( - register DrawablePtr pSrcDrawable, - register DrawablePtr pDstDrawable, - GC *pGC, - int srcx, int srcy, - int width, int height, - int dstx, int dsty, - void (*doCopyPlane)( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/, - unsigned long /*bitPlane*/), - unsigned long bitPlane) -{ - RegionPtr prgnSrcClip = NULL; /* may be a new region, or just a copy */ - Bool freeSrcClip = FALSE; - - RegionPtr prgnExposed; - RegionRec rgnDst; - DDXPointPtr pptSrc; - register DDXPointPtr ppt; - register BoxPtr pbox; - int i; - register int dx; - register int dy; - xRectangle origSource; - DDXPointRec origDest; - int numRects; - BoxRec fastBox; - int fastClip = 0; /* for fast clipping with pixmap source */ - int fastExpose = 0; /* for fast exposures with pixmap source */ - - origSource.x = srcx; - origSource.y = srcy; - origSource.width = width; - origSource.height = height; - origDest.x = dstx; - origDest.y = dsty; - - if ((pSrcDrawable != pDstDrawable) && - pSrcDrawable->pScreen->SourceValidate) - { - (*pSrcDrawable->pScreen->SourceValidate) (pSrcDrawable, srcx, srcy, width, height); - } - - srcx += pSrcDrawable->x; - srcy += pSrcDrawable->y; - - /* clip the source */ - - if (pSrcDrawable->type == DRAWABLE_PIXMAP) - { - if ((pSrcDrawable == pDstDrawable) && - (pGC->clientClipType == CT_NONE)) - { - prgnSrcClip = cfbGetCompositeClip(pGC); - } - else - { - fastClip = 1; - } - } - else - { - if (pGC->subWindowMode == IncludeInferiors) - { - /* - * XFree86 DDX empties the border clip when the - * VT is inactive - */ - if (!((WindowPtr) pSrcDrawable)->parent && - REGION_NOTEMPTY (pSrcDrawable->pScreen, - &((WindowPtr) pSrcDrawable)->borderClip)) - { - /* - * special case bitblt from root window in - * IncludeInferiors mode; just like from a pixmap - */ - fastClip = 1; - } - else if ((pSrcDrawable == pDstDrawable) && - (pGC->clientClipType == CT_NONE)) - { - prgnSrcClip = cfbGetCompositeClip(pGC); - } - else - { - prgnSrcClip = NotClippedByChildren((WindowPtr)pSrcDrawable); - freeSrcClip = TRUE; - } - } - else - { - prgnSrcClip = &((WindowPtr)pSrcDrawable)->clipList; - } - } - - fastBox.x1 = srcx; - fastBox.y1 = srcy; - fastBox.x2 = srcx + width; - fastBox.y2 = srcy + height; - - /* Don't create a source region if we are doing a fast clip */ - if (fastClip) - { - fastExpose = 1; - /* - * clip the source; if regions extend beyond the source size, - * make sure exposure events get sent - */ - if (fastBox.x1 < pSrcDrawable->x) - { - fastBox.x1 = pSrcDrawable->x; - fastExpose = 0; - } - if (fastBox.y1 < pSrcDrawable->y) - { - fastBox.y1 = pSrcDrawable->y; - fastExpose = 0; - } - if (fastBox.x2 > pSrcDrawable->x + (int) pSrcDrawable->width) - { - fastBox.x2 = pSrcDrawable->x + (int) pSrcDrawable->width; - fastExpose = 0; - } - if (fastBox.y2 > pSrcDrawable->y + (int) pSrcDrawable->height) - { - fastBox.y2 = pSrcDrawable->y + (int) pSrcDrawable->height; - fastExpose = 0; - } - } - else - { - REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1); - REGION_INTERSECT(pGC->pScreen, &rgnDst, &rgnDst, prgnSrcClip); - } - - dstx += pDstDrawable->x; - dsty += pDstDrawable->y; - - if (pDstDrawable->type == DRAWABLE_WINDOW) - { - if (!((WindowPtr)pDstDrawable)->realized) - { - if (!fastClip) - REGION_UNINIT(pGC->pScreen, &rgnDst); - if (freeSrcClip) - REGION_DESTROY(pGC->pScreen, prgnSrcClip); - return NULL; - } - } - - dx = srcx - dstx; - dy = srcy - dsty; - - /* Translate and clip the dst to the destination composite clip */ - if (fastClip) - { - RegionPtr cclip; - - /* Translate the region directly */ - fastBox.x1 -= dx; - fastBox.x2 -= dx; - fastBox.y1 -= dy; - fastBox.y2 -= dy; - - /* If the destination composite clip is one rectangle we can - do the clip directly. Otherwise we have to create a full - blown region and call intersect */ - - /* XXX because CopyPlane uses this routine for 8-to-1 bit - * copies, this next line *must* also correctly fetch the - * composite clip from an mfb gc - */ - - cclip = cfbGetCompositeClip(pGC); - if (REGION_NUM_RECTS(cclip) == 1) - { - BoxPtr pBox = REGION_RECTS(cclip); - - if (fastBox.x1 < pBox->x1) fastBox.x1 = pBox->x1; - if (fastBox.x2 > pBox->x2) fastBox.x2 = pBox->x2; - if (fastBox.y1 < pBox->y1) fastBox.y1 = pBox->y1; - if (fastBox.y2 > pBox->y2) fastBox.y2 = pBox->y2; - - /* Check to see if the region is empty */ - if (fastBox.x1 >= fastBox.x2 || fastBox.y1 >= fastBox.y2) - { - REGION_NULL(pGC->pScreen, &rgnDst); - } - else - { - REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1); - } - } - else - { - /* We must turn off fastClip now, since we must create - a full blown region. It is intersected with the - composite clip below. */ - fastClip = 0; - REGION_INIT(pGC->pScreen, &rgnDst, &fastBox, 1); - } - } - else - { - REGION_TRANSLATE(pGC->pScreen, &rgnDst, -dx, -dy); - } - - if (!fastClip) - { - REGION_INTERSECT(pGC->pScreen, &rgnDst, - &rgnDst, - cfbGetCompositeClip(pGC)); - } - - /* Do bit blitting */ - numRects = REGION_NUM_RECTS(&rgnDst); - if (numRects && width && height) - { - if(!(pptSrc = (DDXPointPtr)xalloc(numRects * - sizeof(DDXPointRec)))) - { - REGION_UNINIT(pGC->pScreen, &rgnDst); - if (freeSrcClip) - REGION_DESTROY(pGC->pScreen, prgnSrcClip); - return NULL; - } - pbox = REGION_RECTS(&rgnDst); - ppt = pptSrc; - for (i = numRects; --i >= 0; pbox++, ppt++) - { - ppt->x = pbox->x1 + dx; - ppt->y = pbox->y1 + dy; - } - - (*doCopyPlane) (pSrcDrawable, pDstDrawable, pGC->alu, &rgnDst, pptSrc, pGC->planemask, bitPlane); - xfree(pptSrc); - } - - prgnExposed = NULL; - if (pGC->fExpose) - { - /* Pixmap sources generate a NoExposed (we return NULL to do this) */ - if (!fastExpose) - prgnExposed = - miHandleExposures(pSrcDrawable, pDstDrawable, pGC, - origSource.x, origSource.y, - (int)origSource.width, - (int)origSource.height, - origDest.x, origDest.y, bitPlane); - } - REGION_UNINIT(pGC->pScreen, &rgnDst); - if (freeSrcClip) - REGION_DESTROY(pGC->pScreen, prgnSrcClip); - return prgnExposed; -} - - -void -cfbDoBitblt (pSrc, pDst, alu, prgnDst, pptSrc, planemask) - DrawablePtr pSrc, pDst; - int alu; - RegionPtr prgnDst; - DDXPointPtr pptSrc; - unsigned long planemask; -{ - void (*doBitBlt)( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/) - = cfbDoBitbltGeneral; - - if ((planemask & PMSK) == PMSK) { - switch (alu) { - case GXcopy: - doBitBlt = cfbDoBitbltCopy; - break; - case GXxor: - doBitBlt = cfbDoBitbltXor; - break; - case GXor: - doBitBlt = cfbDoBitbltOr; - break; - } - } - (*doBitBlt) (pSrc, pDst, alu, prgnDst, pptSrc, planemask); -} - -RegionPtr -cfbCopyArea(pSrcDrawable, pDstDrawable, - pGC, srcx, srcy, width, height, dstx, dsty) - register DrawablePtr pSrcDrawable; - register DrawablePtr pDstDrawable; - GC *pGC; - int srcx, srcy; - int width, height; - int dstx, dsty; -{ - void (*doBitBlt) ( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/); - - doBitBlt = cfbDoBitbltCopy; - if (pGC->alu != GXcopy || (pGC->planemask & PMSK) != PMSK) - { - doBitBlt = cfbDoBitbltGeneral; - if ((pGC->planemask & PMSK) == PMSK) - { - switch (pGC->alu) { - case GXxor: - doBitBlt = cfbDoBitbltXor; - break; - case GXor: - doBitBlt = cfbDoBitbltOr; - break; - } - } - } - return cfbBitBlt (pSrcDrawable, pDstDrawable, - pGC, srcx, srcy, width, height, dstx, dsty, doBitBlt, 0L); -} - -#if PSZ == 8 -void -cfbCopyPlane1to8 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc, planemask) - DrawablePtr pSrcDrawable; /* must be a bitmap */ - DrawablePtr pDstDrawable; /* must be depth 8 drawable */ - int rop; /* not used; caller must call cfb8CheckOpaqueStipple - * beforehand to get cfb8StippleRRop set correctly */ - RegionPtr prgnDst; /* region in destination to draw to; - * screen relative coords. if dest is a window; - * drawable relative if dest is a pixmap */ - DDXPointPtr pptSrc; /* drawable relative src coords to copy from; - * must be one point for each box in prgnDst */ - unsigned long planemask; /* to apply to destination writes */ -{ - int srcx, srcy; /* upper left corner of box being copied in source */ - int dstx, dsty; /* upper left corner of box being copied in dest */ - int width, height; /* in pixels, unpadded, of box being copied */ - int xoffSrc; /* bit # in leftmost word of row from which copying starts */ - int xoffDst; /* byte # in leftmost word of row from which copying starts */ - CfbBits *psrcBase, *pdstBase; /* start of drawable's pixel data */ - int widthSrc; /* # of groups of 32 pixels (1 bit/pixel) in src bitmap*/ - int widthDst; /* # of groups of 4 pixels (8 bits/pixel) in dst */ - CfbBits *psrcLine, *pdstLine; /* steps a row at a time thru src/dst; - * may point into middle of row */ - register CfbBits *psrc, *pdst; /* steps within the row */ - register CfbBits bits, tmp; /* bits from source */ - register int leftShift; - register int rightShift; - CfbBits startmask; /* left edge pixel mask */ - CfbBits endmask; /* right edge pixel mask */ - register int nlMiddle; /* number of words in middle of the row to draw */ - register int nl; - int firstoff = 0; - int secondoff = 0; - CfbBits src; - int nbox; /* number of boxes in region to copy */ - BoxPtr pbox; /* steps thru boxes in region */ - int pixelsRemainingOnRightEdge; /* # pixels to be drawn on a row after - * the main "middle" loop */ - - cfbGetLongWidthAndPointer (pSrcDrawable, widthSrc, psrcBase) - cfbGetLongWidthAndPointer (pDstDrawable, widthDst, pdstBase) - - nbox = REGION_NUM_RECTS(prgnDst); - pbox = REGION_RECTS(prgnDst); - while (nbox--) - { - dstx = pbox->x1; - dsty = pbox->y1; - srcx = pptSrc->x; - srcy = pptSrc->y; - width = pbox->x2 - pbox->x1; - height = pbox->y2 - pbox->y1; - pbox++; - pptSrc++; - - psrcLine = psrcBase + srcy * widthSrc + (srcx >> MFB_PWSH); - pdstLine = pdstBase + dsty * widthDst + (dstx >> PWSH); - xoffSrc = srcx & MFB_PIM; /* finds starting bit in src */ - xoffDst = dstx & PIM; /* finds starting byte in dst */ - - /* compute startmask, endmask, nlMiddle */ - - if (xoffDst + width < PPW) /* XXX should this be '<= PPW' ? */ - { /* the copy only affects one word per row in destination */ - maskpartialbits(dstx, width, startmask); - endmask = 0; /* nothing on right edge */ - nlMiddle = 0; /* nothing in middle */ - } - else - { /* the copy will affect multiple words per row in destination */ - maskbits(dstx, width, startmask, endmask, nlMiddle); - } - - /* - * compute constants for the first four bits to be - * copied. This avoids troubles with partial first - * writes, and difficult shift computation - */ - if (startmask) - { - firstoff = xoffSrc - xoffDst; - if (firstoff > (MFB_PPW-PPW)) - secondoff = MFB_PPW - firstoff; - if (xoffDst) - { - srcx += (PPW-xoffDst); - xoffSrc = srcx & MFB_PIM; - } - } - leftShift = xoffSrc; - rightShift = MFB_PPW - leftShift; - - pixelsRemainingOnRightEdge = (nlMiddle & 7) * PPW + - ((dstx + width) & PIM); - - /* setup is done; now let's move some bits */ - - /* caller must call cfb8CheckOpaqueStipple before this function - * to set cfb8StippleRRop! - */ - - if (cfb8StippleRRop == GXcopy) - { - while (height--) - { /* one iteration of this loop copies one row */ - psrc = psrcLine; - pdst = pdstLine; - psrcLine += widthSrc; - pdstLine += widthDst; - bits = *psrc++; - if (startmask) - { - if (firstoff < 0) - tmp = BitRight (bits, -firstoff); - else - { - tmp = BitLeft (bits, firstoff); - /* - * need a more cautious test for partialmask - * case... - */ - if (firstoff >= (MFB_PPW-PPW)) - { - bits = *psrc++; - if (firstoff != (MFB_PPW-PPW)) - tmp |= BitRight (bits, secondoff); - } - } - *pdst = (*pdst & ~startmask) | (GetPixelGroup(tmp) & startmask); - pdst++; - } - nl = nlMiddle; - while (nl >= 8) - { - nl -= 8; - tmp = BitLeft(bits, leftShift); - bits = *psrc++; - if (rightShift != MFB_PPW) - tmp |= BitRight(bits, rightShift); - -#ifdef FAST_CONSTANT_OFFSET_MODE -# define StorePixels(pdst,o,pixels) (pdst)[o] = (pixels) -# define EndStep(pdst,o) (pdst) += (o) -# define StoreRopPixels(pdst,o,and,xor) (pdst)[o] = DoRRop((pdst)[o],and,xor); -#else -# define StorePixels(pdst,o,pixels) *(pdst)++ = (pixels) -# define EndStep(pdst,o) -# define StoreRopPixels(pdst,o,and,xor) *(pdst) = DoRRop(*(pdst),and,xor); (pdst)++; -#endif - -#define Step(c) NextBitGroup(c); -#define StoreBitsPlain(o,c) StorePixels(pdst,o,GetPixelGroup(c)) -#define StoreRopBitsPlain(o,c) StoreRopPixels(pdst,o,\ - cfb8StippleAnd[GetBitGroup(c)], \ - cfb8StippleXor[GetBitGroup(c)]) -#define StoreBits0(c) StoreBitsPlain(0,c) -#define StoreRopBits0(c) StoreRopBitsPlain(0,c) - -#if (BITMAP_BIT_ORDER == MSBFirst) -# define StoreBits(o,c) StoreBitsPlain(o,c) -# define StoreRopBits(o,c) StoreRopBitsPlain(o,c) -# define FirstStep(c) Step(c) -#else /* BITMAP_BIT_ORDER == LSBFirst */ -#if PGSZ == 64 -# define StoreBits(o,c) StorePixels(pdst,o, (cfb8Pixels[c & 0xff])) -# define StoreRopBits(o,c) StoreRopPixels(pdst,o, \ - (cfb8StippleAnd[c & 0xff]), \ - (cfb8StippleXor[c & 0xff])) -# define FirstStep(c) c = BitLeft (c, 8); -#else -/* 0x3c is 0xf << 2 (4 bits, long word) */ -# define StoreBits(o,c) StorePixels(pdst,o,*((CfbBits *)\ - (((char *) cfb8Pixels) + (c & 0x3c)))) -# define StoreRopBits(o,c) StoreRopPixels(pdst,o, \ - *((CfbBits *) (((char *) cfb8StippleAnd) + (c & 0x3c))), \ - *((CfbBits *) (((char *) cfb8StippleXor) + (c & 0x3c)))) -# define FirstStep(c) c = BitLeft (c, 2); -#endif /* PGSZ */ -#endif /* BITMAP_BIT_ORDER */ - - StoreBits0(tmp); FirstStep(tmp); - StoreBits(1,tmp); Step(tmp); - StoreBits(2,tmp); Step(tmp); - StoreBits(3,tmp); Step(tmp); - StoreBits(4,tmp); Step(tmp); - StoreBits(5,tmp); Step(tmp); - StoreBits(6,tmp); Step(tmp); - StoreBits(7,tmp); EndStep (pdst,8); - } - - /* do rest of middle and partial word on right edge */ - - if (pixelsRemainingOnRightEdge) - { - tmp = BitLeft(bits, leftShift); - - if (pixelsRemainingOnRightEdge > rightShift) - { - bits = *psrc++; - tmp |= BitRight (bits, rightShift); - } - EndStep (pdst, nl); - switch (nl) - { - case 7: - StoreBitsPlain(-7,tmp); Step(tmp); - case 6: - StoreBitsPlain(-6,tmp); Step(tmp); - case 5: - StoreBitsPlain(-5,tmp); Step(tmp); - case 4: - StoreBitsPlain(-4,tmp); Step(tmp); - case 3: - StoreBitsPlain(-3,tmp); Step(tmp); - case 2: - StoreBitsPlain(-2,tmp); Step(tmp); - case 1: - StoreBitsPlain(-1,tmp); Step(tmp); - } - if (endmask) - *pdst = (*pdst & ~endmask) | (GetPixelGroup(tmp) & endmask); - } - } - } - else /* cfb8StippleRRop != GXcopy */ - { - while (height--) - { /* one iteration of this loop copies one row */ - psrc = psrcLine; - pdst = pdstLine; - psrcLine += widthSrc; - pdstLine += widthDst; - bits = *psrc++; - - /* do partial word on left edge */ - - if (startmask) - { - if (firstoff < 0) - tmp = BitRight (bits, -firstoff); - else - { - tmp = BitLeft (bits, firstoff); - if (firstoff >= (MFB_PPW-PPW)) - { - bits = *psrc++; - if (firstoff != (MFB_PPW-PPW)) - tmp |= BitRight (bits, secondoff); - } - } - src = GetBitGroup(tmp); - *pdst = MaskRRopPixels (*pdst, src, startmask); - pdst++; - } - - /* do middle of row */ - - nl = nlMiddle; - while (nl >= 8) - { - nl -= 8; - tmp = BitLeft(bits, leftShift); - bits = *psrc++; - if (rightShift != MFB_PPW) - tmp |= BitRight(bits, rightShift); - StoreRopBits0(tmp); FirstStep(tmp); - StoreRopBits(1,tmp); Step(tmp); - StoreRopBits(2,tmp); Step(tmp); - StoreRopBits(3,tmp); Step(tmp); - StoreRopBits(4,tmp); Step(tmp); - StoreRopBits(5,tmp); Step(tmp); - StoreRopBits(6,tmp); Step(tmp); - StoreRopBits(7,tmp); EndStep(pdst,8); - } - - /* do rest of middle and partial word on right edge */ - - if (pixelsRemainingOnRightEdge) - { - tmp = BitLeft(bits, leftShift); - - if (pixelsRemainingOnRightEdge > rightShift) - { - bits = *psrc++; /* XXX purify abr here */ - tmp |= BitRight (bits, rightShift); - } - while (nl--) - { - src = GetBitGroup (tmp); - *pdst = RRopPixels (*pdst, src); - pdst++; - NextBitGroup(tmp); - } - if (endmask) - { - src = GetBitGroup (tmp); - *pdst = MaskRRopPixels (*pdst, src, endmask); - } - } - } /* end copy one row */ - } /* end alu is non-copy-mode case */ - } /* end iteration over region boxes */ -} - -#else /* PSZ == 8 */ - -#define mfbmaskbits(x, w, startmask, endmask, nlw) \ - startmask = mfbGetstarttab((x)&0x1f); \ - endmask = mfbGetendtab(((x)+(w)) & 0x1f); \ - if (startmask) \ - nlw = (((w) - (32 - ((x)&0x1f))) >> 5); \ - else \ - nlw = (w) >> 5; - -#define mfbmaskpartialbits(x, w, mask) \ - mask = mfbGetpartmasks((x)&0x1f,(w)&0x1f); - -#define LeftMost 0 -#define StepBit(bit, inc) ((bit) += (inc)) - - -#define GetBits(psrc, nBits, curBit, bitPos, bits) {\ - bits = 0; \ - while (nBits--) \ - { \ - bits |= ((*psrc++ >> bitPos) & 1) << curBit; \ - StepBit (curBit, 1); \ - } \ -} - -/******************************************************************/ - -static void -#if PSZ == 16 -cfbCopyPlane1to16 -#endif -#if PSZ == 24 -cfbCopyPlane1to24 -#endif -#if PSZ == 32 -cfbCopyPlane1to32 -#endif -( - DrawablePtr pSrcDrawable, - DrawablePtr pDstDrawable, - int rop, - RegionPtr prgnDst, - DDXPointPtr pptSrc, - unsigned long planemask) -{ - int srcx, srcy, dstx, dsty; - int width, height; - int xoffSrc; - CfbBits *psrcBase, *pdstBase; - int widthSrc, widthDst; - unsigned int *psrcLine; - register unsigned int *psrc; -#if PSZ == 16 - unsigned short *pdstLine; - register unsigned short *pdst; -#endif -#if PSZ == 32 - unsigned int *pdstLine; - register unsigned int *pdst; -#endif -#if PSZ == 24 - unsigned char *pdstLine; - register unsigned char *pdst; -#endif - register unsigned int bits, tmp; - register unsigned int fgpixel, bgpixel; - register unsigned int src; -#if PSZ == 24 - register unsigned int dst; -#endif - register int leftShift, rightShift; - register int i, nl; - int nbox; - BoxPtr pbox; - int result; - -#if PSZ == 16 - unsigned int doublet[4]; /* Pixel values for 16bpp expansion. */ -#endif -#if PSZ == 32 - unsigned int doublet[8]; /* Pixel values for 32bpp expansion */ -#endif - - fgpixel = FgPixel & planemask; - bgpixel = BgPixel & planemask; - -#if PSZ == 16 - if (rop == GXcopy && (planemask & PMSK) == PMSK) { - doublet[0] = bgpixel | (bgpixel << 16); - doublet[1] = fgpixel | (bgpixel << 16); - doublet[2] = bgpixel | (fgpixel << 16); - doublet[3] = fgpixel | (fgpixel << 16); - } -#endif -#if PSZ == 32 - if (rop == GXcopy && (planemask & PMSK) == PMSK) { - doublet[0] = bgpixel; doublet[1] = bgpixel; - doublet[2] = fgpixel; doublet[3] = bgpixel; - doublet[4] = bgpixel; doublet[5] = fgpixel; - doublet[6] = fgpixel; doublet[7] = fgpixel; - } -#endif - - /* must explicitly ask for "int" widths, as code below expects it */ - /* on some machines (Alpha), "long" and "int" are not the same size */ - cfbGetTypedWidthAndPointer (pSrcDrawable, widthSrc, psrcBase, int, CfbBits) - cfbGetTypedWidthAndPointer (pDstDrawable, widthDst, pdstBase, int, CfbBits) - -#if PSZ == 16 - widthDst <<= 1; -#endif -#if PSZ == 24 - widthDst <<= 2; -#endif - - nbox = REGION_NUM_RECTS(prgnDst); - pbox = REGION_RECTS(prgnDst); - - while (nbox--) - { - dstx = pbox->x1; - dsty = pbox->y1; - srcx = pptSrc->x; - srcy = pptSrc->y; - width = pbox->x2 - pbox->x1; - height = pbox->y2 - pbox->y1; - pbox++; - pptSrc++; - psrcLine = (unsigned int *)psrcBase + srcy * widthSrc + (srcx >> 5); -#if PSZ == 16 - pdstLine = (unsigned short *)pdstBase + dsty * widthDst + dstx; -#endif -#if PSZ == 24 - pdstLine = (unsigned char *)pdstBase + dsty * widthDst + dstx * 3; -#endif -#if PSZ == 32 - pdstLine = (unsigned int *)pdstBase + dsty * widthDst + dstx; -#endif - xoffSrc = srcx & 0x1f; - - /* - * compute constants for the first four bits to be - * copied. This avoids troubles with partial first - * writes, and difficult shift computation - */ - leftShift = xoffSrc; - rightShift = 32 - leftShift; - - if (rop == GXcopy && (planemask & PMSK) == PMSK) - { - while (height--) - { - psrc = psrcLine; - pdst = pdstLine; - psrcLine += widthSrc; - pdstLine += widthDst; - bits = *psrc++; - nl = width; - while (nl >= 32) - { - tmp = BitLeft(bits, leftShift); - bits = *psrc++; - if (rightShift != 32) - tmp |= BitRight(bits, rightShift); - i = 0; -#if PSZ == 16 - /* - * I've thrown in some optimization to at least write - * some aligned 32-bit words instead of 16-bit shorts. - */ - if ((unsigned long)psrc & 2) { - /* Write unaligned 16-bit word at left edge. */ - if (tmp & 0x01) - *pdst = fgpixel; - else - *pdst = bgpixel; - pdst++; - i++; - } - while (i <= 24) - { - unsigned tmpbits = tmp >> i; - *(unsigned int *)pdst = doublet[tmpbits & 0x03]; - *(unsigned int *)(pdst + 2) = - doublet[(tmpbits >> 2) & 0x03]; - *(unsigned int *)(pdst + 4) = - doublet[(tmpbits >> 4) & 0x03]; - *(unsigned int *)(pdst + 6) = - doublet[(tmpbits >> 6) & 0x03]; - pdst += 8; /* Advance four 32-bit words. */ - i += 8; - } - while (i <= 30) - { - *(unsigned int *)pdst = - doublet[(tmp >> i) & 0x03]; - pdst += 2; /* Advance one 32-bit word. */ - i += 2; - } - if (i == 31) { - if ((tmp >> 31) & 0x01) - *pdst = fgpixel; - else - *pdst = bgpixel; - pdst++; - } -#endif -#if PSZ == 24 - while (i < 32) { - if ((tmp >> i) & 0x01) { - *pdst = fgpixel; - *(pdst + 1) = fgpixel >> 8; - *(pdst + 2) = fgpixel >> 16; - } - else { - *pdst = bgpixel; - *(pdst + 1) = bgpixel >> 8; - *(pdst + 2) = bgpixel >> 16; - } - pdst += 3; - i++; - } -#endif -#if PSZ == 32 - while (i <= 28) { - int pair; - pair = (tmp >> i) & 0x03; - *pdst = doublet[pair * 2]; - *(pdst + 1) = doublet[pair * 2 + 1]; - pair = (tmp >> (i + 2)) & 0x03; - *(pdst + 2) = doublet[pair * 2]; - *(pdst + 3) = doublet[pair * 2 + 1]; - pdst += 4; - i += 4; - } - while (i < 32) { - *pdst = ((tmp >> i) & 0x01) ? fgpixel : bgpixel; - pdst++; - i++; - } -#endif - nl -= 32; - } - - if (nl) - { - tmp = BitLeft(bits, leftShift); - /* - * better condition needed -- mustn't run - * off the end of the source... - */ - if (rightShift != 32) - { - bits = *psrc++; - tmp |= BitRight (bits, rightShift); - } - i = 32; - while (nl--) - { - --i; -#if PSZ == 24 - if ((tmp >> (31 - i)) & 0x01) { - *pdst = fgpixel; - *(pdst + 1) = fgpixel >> 8; - *(pdst + 2) = fgpixel >> 16; - } - else { - *pdst = bgpixel; - *(pdst + 1) = bgpixel >> 8; - *(pdst + 2) = bgpixel >> 16; - } - pdst += 3; -#else - *pdst = ((tmp >> (31 - i)) & 0x01) ? fgpixel : bgpixel; - pdst++; -#endif - } - } - } - } - else - { - while (height--) - { - psrc = psrcLine; - pdst = pdstLine; - psrcLine += widthSrc; - pdstLine += widthDst; - bits = *psrc++; - nl = width; - while (nl >= 32) - { - tmp = BitLeft(bits, leftShift); - bits = *psrc++; - if (rightShift != 32) - tmp |= BitRight(bits, rightShift); - i = 32; - while (i--) - { - src = ((tmp >> (31 - i)) & 0x01) ? fgpixel : bgpixel; -#if PSZ == 24 - dst = *pdst; - dst |= (*(pdst + 1)) << 8; - dst |= (*(pdst + 2)) << 16; - DoRop (result, rop, src, dst); - *pdst = (dst & ~planemask) | - (result & planemask); - *(pdst+1) = ((dst & ~planemask) >> 8) | - ((result & planemask) >> 8); - *(pdst+2) = ((dst & ~planemask) >> 16) | - ((result & planemask) >> 16); - pdst += 3; -#else - DoRop (result, rop, src, *pdst); - - *pdst = (*pdst & ~planemask) | - (result & planemask); - pdst++; -#endif - } - nl -= 32; - } - - if (nl) - { - tmp = BitLeft(bits, leftShift); - /* - * better condition needed -- mustn't run - * off the end of the source... - */ - if (rightShift != 32) - { - bits = *psrc++; - tmp |= BitRight (bits, rightShift); - } - i = 32; - while (nl--) - { - --i; - src = ((tmp >> (31 - i)) & 0x01) ? fgpixel : bgpixel; -#if PSZ == 24 - dst = *pdst; - dst |= (*(pdst + 1)) << 8; - dst |= (*(pdst + 2)) << 16; - DoRop (result, rop, src, dst); - *pdst = (dst & ~planemask) | - (result & planemask); - *(pdst+1) = ((dst & ~planemask) >> 8) | - ((result & planemask) >> 8); - *(pdst+2) = ((dst & ~planemask) >> 16) | - ((result & planemask) >> 16); - pdst += 3; -#else - DoRop (result, rop, src, *pdst); - - *pdst = (*pdst & ~planemask) | - (result & planemask); - pdst++; -#endif - } - } - } - } - } -} - -#endif /* PSZ == 8 */ - -/* shared among all different cfb depths through linker magic */ - -RegionPtr cfbCopyPlane(pSrcDrawable, pDstDrawable, - pGC, srcx, srcy, width, height, dstx, dsty, bitPlane) - DrawablePtr pSrcDrawable; - DrawablePtr pDstDrawable; - GCPtr pGC; - int srcx, srcy; - int width, height; - int dstx, dsty; - unsigned long bitPlane; -{ - RegionPtr ret; - -#if IMAGE_BYTE_ORDER == LSBFirst - - void (*doCopyPlaneExpand)( - DrawablePtr /*pSrc*/, - DrawablePtr /*pDst*/, - int /*alu*/, - RegionPtr /*prgnDst*/, - DDXPointPtr /*pptSrc*/, - unsigned long /*planemask*/); - - if (pSrcDrawable->bitsPerPixel == 1 && pDstDrawable->bitsPerPixel == PSZ) - { - if (bitPlane == 1) - { - doCopyPlaneExpand = cfbCopyPlane1toN; -#if PSZ == 8 - cfb8CheckOpaqueStipple (pGC->alu, - pGC->fgPixel, pGC->bgPixel, - pGC->planemask); -#else - FgPixel = pGC->fgPixel; - BgPixel = pGC->bgPixel; -#endif - ret = cfbCopyPlaneExpand (pSrcDrawable, pDstDrawable, - pGC, srcx, srcy, width, height, dstx, dsty, doCopyPlaneExpand, bitPlane); - } - else - ret = miHandleExposures (pSrcDrawable, pDstDrawable, - pGC, srcx, srcy, width, height, dstx, dsty, bitPlane); - } - else if (pSrcDrawable->bitsPerPixel == PSZ && pDstDrawable->bitsPerPixel == 1) - { - int oldalu; - - oldalu = pGC->alu; - if ((pGC->fgPixel & 1) == 0 && (pGC->bgPixel&1) == 1) - pGC->alu = mfbGetInverseAlu(pGC->alu); - else if ((pGC->fgPixel & 1) == (pGC->bgPixel & 1)) - pGC->alu = mfbReduceRop(pGC->alu, pGC->fgPixel); - ret = cfbCopyPlaneReduce(pSrcDrawable, pDstDrawable, - pGC, srcx, srcy, width, height, dstx, dsty, - cfbCopyPlaneNto1, bitPlane); - pGC->alu = oldalu; - } - else if (pSrcDrawable->bitsPerPixel == PSZ && pDstDrawable->bitsPerPixel == PSZ) - { - PixmapPtr pBitmap; - ScreenPtr pScreen = pSrcDrawable->pScreen; - GCPtr pGC1; - - pBitmap = (*pScreen->CreatePixmap) (pScreen, width, height, 1, - CREATE_PIXMAP_USAGE_SCRATCH); - if (!pBitmap) - return NULL; - pGC1 = GetScratchGC (1, pScreen); - if (!pGC1) - { - (*pScreen->DestroyPixmap) (pBitmap); - return NULL; - } - /* - * don't need to set pGC->fgPixel,bgPixel as copyPlaneNto1 - * ignores pixel values, expecting the rop to "do the - * right thing", which GXcopy will. - */ - ValidateGC ((DrawablePtr) pBitmap, pGC1); - /* no exposures here, scratch GC's don't get graphics expose */ - cfbCopyPlaneReduce(pSrcDrawable, (DrawablePtr) pBitmap, - pGC1, srcx, srcy, width, height, 0, 0, - cfbCopyPlaneNto1, bitPlane); -#if PSZ == 8 - cfb8CheckOpaqueStipple (pGC->alu, - pGC->fgPixel, pGC->bgPixel, - pGC->planemask); -#else - FgPixel = pGC->fgPixel; - BgPixel = pGC->bgPixel; -#endif - /* no exposures here, copy bits from inside a pixmap */ - cfbCopyPlaneExpand((DrawablePtr) pBitmap, pDstDrawable, pGC, - 0, 0, width, height, dstx, dsty, cfbCopyPlane1toN, 1); - FreeScratchGC (pGC1); - (*pScreen->DestroyPixmap) (pBitmap); - /* compute resultant exposures */ - ret = miHandleExposures (pSrcDrawable, pDstDrawable, pGC, - srcx, srcy, width, height, - dstx, dsty, bitPlane); - } - else -#endif - ret = miCopyPlane (pSrcDrawable, pDstDrawable, - pGC, srcx, srcy, width, height, dstx, dsty, bitPlane); - return ret; -} - - diff --git a/cfb/cfbblt.c b/cfb/cfbblt.c deleted file mode 100644 index ff34589ff..000000000 --- a/cfb/cfbblt.c +++ /dev/null @@ -1,933 +0,0 @@ -/* - * cfb copy area - */ - -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - -Author: Keith Packard - -*/ - -/* 24-bit bug fixes: Peter Wainwright, 1998/11/28 */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include -#include -#include -#include "gcstruct.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" -#include "fastblt.h" -#include "mergerop.h" - -#ifdef notdef /* XXX fails right now, walks off end of pixmaps */ -#if defined (FAST_UNALIGNED_READS) && PSZ == 8 -#define DO_UNALIGNED_BITBLT -#endif -#endif - -#if defined(FAST_MEMCPY) && (MROP == Mcopy) && PSZ == 8 -#define DO_MEMCPY -#endif - -/* ................................................. */ -/* SPECIAL CODE FOR 24 BITS by Peter Wainwright */ - -#if PSZ == 24 && (MROP) == 0 - -/* The default macros are defined in mergerop.h, and none of them are - really appropriate for what we want to do. - - There are two ways of fixing this: either define SLOW_24BIT_COPY - to copy pixel by pixel, or (by default) use the following macros - modified from mergerop.h - - MROP_SOLID and MROP_MASK are defined for each of the operations, - i.e. each value of MROP. - - There are special cases for Mcopy, McopyInverted, Mxor, and Mor. - There is a completely generic version for MROP=0, and a simplified - generic version which works for (Mcopy|Mxor|MandReverse|Mor). - - However, the generic version does not work for the 24-bit case - because the pixels cannot be packed exactly into a machine word (32 - bits). - - Alternative macros MROP_SOLID24 and MROP_MASK24 are provided for - the 24-bit case. However, these each copy a single *pixel*, not a - single machine word. They take an rvalue source pixel, an lvalue - destination, and the pixel index. The latter is used to find the - position of the pixel data within the two words *dst and *(dst+1). - - Further macros MROP_SOLID24P and MROP_MASK24P are used to copy from - an lvalue source to an lvalue destination. MROP_PIXEL24 is used to - assemble the source pixel from the adjacent words *src and - *(src+1), and this is then split between the destination words - using the non-P macros above. - - But we want to copy entire words for the sake of efficiency. - Unfortunately if a plane mask is specified this must be shifted - from one word to the next. Fortunately the pattern repeats after 3 - words, so we unroll the planemask here and redefine MROP_SOLID - and MROP_MASK. */ - - -#endif /* MROP == 0 && PSZ == 24 */ - -/* ................................................. */ - -#if PSZ == 24 -#define BYPP 3 -#if PGSZ == 32 -#define P3W 4 /* pixels in 3 machine words */ -#define PAM 3 /* pixel align mask; PAM = P3W -1 */ -#define P2WSH 2 -#else -#define P3W 8 /* pixels in 3 machine words */ -#define PAM 7 /* pixel align mask; PAM = P3W -1 */ -#define P2WSH 3 -#endif -#endif - -void -MROP_NAME(cfbDoBitblt)( - DrawablePtr pSrc, - DrawablePtr pDst, - int alu, - RegionPtr prgnDst, - DDXPointPtr pptSrc, - unsigned long planemask) -{ - CfbBits *psrcBase, *pdstBase; - /* start of src and dst bitmaps */ - int widthSrc, widthDst; /* add to get to same position in next line */ - - BoxPtr pbox; - int nbox; - - BoxPtr pboxTmp, pboxNext, pboxBase, pboxNew1, pboxNew2; - /* temporaries for shuffling rectangles */ - DDXPointPtr pptTmp, pptNew1, pptNew2; - /* shuffling boxes entails shuffling the - source points too */ - int w, h; - int xdir; /* 1 = left right, -1 = right left/ */ - int ydir; /* 1 = top down, -1 = bottom up */ - - CfbBits *psrcLine, *pdstLine; - /* pointers to line with current src and dst */ - register CfbBits *psrc;/* pointer to current src longword */ - register CfbBits *pdst;/* pointer to current dst longword */ - - MROP_DECLARE_REG() - - /* following used for looping through a line */ - CfbBits startmask, endmask; /* masks for writing ends of dst */ - int nlMiddle; /* whole longwords in dst */ - int xoffSrc, xoffDst; - register int nl; /* temp copy of nlMiddle */ - int careful; - -#if (PSZ != 24) || (MROP != 0) - register int leftShift, rightShift; - register CfbBits bits; - register CfbBits bits1; -#endif - -#if PSZ == 24 -#ifdef DO_MEMCPY - int w2; -#endif - -#if MROP == 0 - int widthSrcBytes = cfbGetByteWidth(pSrc); - int widthDstBytes = cfbGetByteWidth(pDst); -#endif -#endif - - MROP_INITIALIZE(alu,planemask) - - cfbGetLongWidthAndPointer (pSrc, widthSrc, psrcBase) - - cfbGetLongWidthAndPointer (pDst, widthDst, pdstBase) - - /* XXX we have to err on the side of safety when both are windows, - * because we don't know if IncludeInferiors is being used. - */ - careful = ((pSrc == pDst) || - ((pSrc->type == DRAWABLE_WINDOW) && - (pDst->type == DRAWABLE_WINDOW))); - - pbox = REGION_RECTS(prgnDst); - nbox = REGION_NUM_RECTS(prgnDst); - - pboxNew1 = NULL; - pptNew1 = NULL; - pboxNew2 = NULL; - pptNew2 = NULL; - if (careful && (pptSrc->y < pbox->y1)) - { - /* walk source botttom to top */ - ydir = -1; - widthSrc = -widthSrc; - widthDst = -widthDst; - - if (nbox > 1) - { - /* keep ordering in each band, reverse order of bands */ - pboxNew1 = (BoxPtr)xalloc(sizeof(BoxRec) * nbox); - if(!pboxNew1) - return; - pptNew1 = (DDXPointPtr)xalloc(sizeof(DDXPointRec) * nbox); - if(!pptNew1) - { - xfree(pboxNew1); - return; - } - pboxBase = pboxNext = pbox+nbox-1; - while (pboxBase >= pbox) - { - while ((pboxNext >= pbox) && - (pboxBase->y1 == pboxNext->y1)) - pboxNext--; - pboxTmp = pboxNext+1; - pptTmp = pptSrc + (pboxTmp - pbox); - while (pboxTmp <= pboxBase) - { - *pboxNew1++ = *pboxTmp++; - *pptNew1++ = *pptTmp++; - } - pboxBase = pboxNext; - } - pboxNew1 -= nbox; - pbox = pboxNew1; - pptNew1 -= nbox; - pptSrc = pptNew1; - } - } - else - { - /* walk source top to bottom */ - ydir = 1; - } - - if (careful && (pptSrc->x < pbox->x1)) - { - /* walk source right to left */ - xdir = -1; - - if (nbox > 1) - { - /* reverse order of rects in each band */ - pboxNew2 = (BoxPtr)xalloc(sizeof(BoxRec) * nbox); - pptNew2 = (DDXPointPtr)xalloc(sizeof(DDXPointRec) * nbox); - if(!pboxNew2 || !pptNew2) - { - if (pptNew2) xfree(pptNew2); - if (pboxNew2) xfree(pboxNew2); - if (pboxNew1) - { - xfree(pptNew1); - xfree(pboxNew1); - } - return; - } - pboxBase = pboxNext = pbox; - while (pboxBase < pbox+nbox) - { - while ((pboxNext < pbox+nbox) && - (pboxNext->y1 == pboxBase->y1)) - pboxNext++; - pboxTmp = pboxNext; - pptTmp = pptSrc + (pboxTmp - pbox); - while (pboxTmp != pboxBase) - { - *pboxNew2++ = *--pboxTmp; - *pptNew2++ = *--pptTmp; - } - pboxBase = pboxNext; - } - pboxNew2 -= nbox; - pbox = pboxNew2; - pptNew2 -= nbox; - pptSrc = pptNew2; - } - } - else - { - /* walk source left to right */ - xdir = 1; - } - - while(nbox--) - { - w = pbox->x2 - pbox->x1; - h = pbox->y2 - pbox->y1; - -#if PSZ == 24 -#ifdef DO_MEMCPY - w2 = w * BYPP; -#endif -#endif - if (ydir == -1) /* start at last scanline of rectangle */ - { - psrcLine = psrcBase + ((pptSrc->y+h-1) * -widthSrc); - pdstLine = pdstBase + ((pbox->y2-1) * -widthDst); - } - else /* start at first scanline */ - { - psrcLine = psrcBase + (pptSrc->y * widthSrc); - pdstLine = pdstBase + (pbox->y1 * widthDst); - } -#if PSZ == 24 - if (w == 1 && ((pbox->x1 & PAM) == 0 || (pbox->x1 & PAM) == PAM)) -#else - if ((pbox->x1 & PIM) + w <= PPW) -#endif - { - maskpartialbits (pbox->x1, w, endmask); - startmask = 0; - nlMiddle = 0; - } - else - { - maskbits(pbox->x1, w, startmask, endmask, nlMiddle); - } - -#if PSZ == 24 -#if 0 - nlMiddle = w - (pbox->x2 &PAM);; - if(pbox->x1 & PAM){ - nlMiddle -= (PAM+1 - (pbox->x1 &PAM)); - } - nlMiddle >>= P2WSH; - if(nlMiddle < 0) - nlMiddle = 0; -#endif -#endif - -#ifdef DO_MEMCPY - /* If the src and dst scanline don't overlap, do forward case. */ - - if ((xdir == 1) || (pptSrc->y != pbox->y1) - || (pptSrc->x + w <= pbox->x1)) - { -#if PSZ == 24 - char *psrc = (char *) psrcLine + (pptSrc->x * BYPP); - char *pdst = (char *) pdstLine + (pbox->x1 * BYPP); -#else - char *psrc = (char *) psrcLine + pptSrc->x; - char *pdst = (char *) pdstLine + pbox->x1; -#endif - while (h--) - { -#if PSZ == 24 - memcpy(pdst, psrc, w2); -#else - memcpy(pdst, psrc, w); -#endif - pdst += widthDst << PWSH; - psrc += widthSrc << PWSH; - } - } -#else /* ! DO_MEMCPY */ - if (xdir == 1) - { -#if PSZ == 24 && MROP == 0 - /* Note: x is a pixel number; the byte offset is 3*x; - therefore the offset within a word is (3*x) & 3 == - (4*x-x) & 3 == (-x) & 3. The offsets therefore - DECREASE by 1 for each pixel. - */ - xoffSrc = ( - pptSrc->x) & PAM; - xoffDst = ( - pbox->x1) & PAM; -#if 1 - if((int)xoffSrc != (int)xoffDst /* Alignments must be same. */ - || ((widthDstBytes & PAM) != (widthSrcBytes & PAM) && h > 1)) -#else - if(1) -#endif - /* Width also must be same, if hight > 1 */ - { - /* ...otherwise, pixel by pixel operation */ - while (h--) - { - register int i, si, sii, di; - - for (i = 0, si = pptSrc->x, di = pbox->x1; - i < w; - i++, si++, di++) { - psrc = psrcLine + ((si * BYPP) >> P2WSH); - pdst = pdstLine + ((di * BYPP) >> P2WSH); - sii = (si & 3); - MROP_SOLID24P(psrc, pdst, sii, di); - } - pdstLine += widthDst; - psrcLine += widthSrc; - } - } - else -#endif - { - -#if PSZ == 24 - -#if MROP != 0 - xoffSrc = ( - pptSrc->x) & PAM; - xoffDst = ( - pbox->x1) & PAM; -#endif - pdstLine += (pbox->x1 * BYPP) >> P2WSH; - psrcLine += (pptSrc->x * BYPP) >> P2WSH; -#else - xoffSrc = pptSrc->x & PIM; - xoffDst = pbox->x1 & PIM; - pdstLine += (pbox->x1 >> PWSH); - psrcLine += (pptSrc->x >> PWSH); -#endif -#ifdef DO_UNALIGNED_BITBLT - nl = xoffSrc - xoffDst; - psrcLine = (CfbBits *) - (((unsigned char *) psrcLine) + nl); -#else -#if PSZ == 24 && MROP == 0 - /* alredy satisfied */ -#else - if (xoffSrc == xoffDst) -#endif -#endif - { - while (h--) - { -#if PSZ == 24 && MROP == 0 - register int index; - register int im3; -#endif /* PSZ == 24 && MROP == 0 */ - psrc = psrcLine; - pdst = pdstLine; - pdstLine += widthDst; - psrcLine += widthSrc; -#if PSZ == 24 && MROP == 0 - index = (int)(pdst - pdstBase); - im3 = index % 3; -#endif /* PSZ == 24 && MROP == 0 */ - if (startmask) - { -#if PSZ == 24 && MROP == 0 - *pdst = DoMaskMergeRop24u(*psrc, *pdst, startmask, im3); - index++; - im3 = index % 3; -#else /* PSZ != 24 || MROP != 0 */ - *pdst = MROP_MASK(*psrc, *pdst, startmask); -#endif /* PSZ == 24 && MROP == 0 */ - psrc++; - pdst++; - } - - nl = nlMiddle; -#ifdef LARGE_INSTRUCTION_CACHE -#ifdef FAST_CONSTANT_OFFSET_MODE - - psrc += nl & (UNROLL-1); - pdst += nl & (UNROLL-1); - -#if PSZ == 24 && MROP == 0 -#define BodyOdd(n) pdst[-n] = DoMergeRop24u(psrc[-n], pdst[-n], ((int)(pdst - n - pdstBase))%3); -#define BodyEven(n) pdst[-n] = DoMergeRop24u(psrc[-n], pdst[-n], ((int)(pdst - n - pdstBase))%3); -#else /* PSZ != 24 || MROP != 0 */ -#define BodyOdd(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]); -#define BodyEven(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]); -#endif /* PSZ == 24 && MROP == 0 */ - -#define LoopReset \ -pdst += UNROLL; \ -psrc += UNROLL; - -#else - -#if PSZ == 24 && MROP == 0 -#define BodyOdd(n) *pdst = DoMergeRop24u(*psrc, *pdst, im3); pdst++; psrc++; index++; im3 = index % 3; -#define BodyEven(n) BodyOdd(n) -#else /* PSZ != 24 || MROP != 0 */ -#define BodyOdd(n) *pdst = MROP_SOLID (*psrc, *pdst); pdst++; psrc++; -#define BodyEven(n) BodyOdd(n) -#endif /* PSZ == 24 && MROP == 0 */ - -#define LoopReset ; - -#endif - PackedLoop - -#undef BodyOdd -#undef BodyEven -#undef LoopReset - -#else -#ifdef NOTDEF - /* you'd think this would be faster -- - * a single instruction instead of 6 - * but measurements show it to be ~15% slower - */ - while ((nl -= 6) >= 0) - { - asm ("moveml %1+,#0x0c0f;moveml#0x0c0f,%0" - : "=m" (*(char *)pdst) - : "m" (*(char *)psrc) - : "d0", "d1", "d2", "d3", - "a2", "a3"); - pdst += 6; - } - nl += 6; - while (nl--) - *pdst++ = *psrc++; -#endif -#if 0 /*PSZ == 24 && MROP == 0*/ - DuffL(nl, label1, - *pdst = DoMergeRop24u(*psrc, *pdst, im3); - pdst++; psrc++; index++;im3 = index % 3;) -#else /* !(PSZ == 24 && MROP == 0) */ - DuffL(nl, label1, - *pdst = MROP_SOLID (*psrc, *pdst); - pdst++; psrc++;) -#endif /* PSZ == 24 && MROP == 0 */ -#endif - - if (endmask) -#if PSZ == 24 && MROP == 0 - *pdst = DoMaskMergeRop24u(*psrc, *pdst, endmask, (int)(pdst - pdstBase) % 3); -#else /* !(PSZ == 24 && MROP == 0) */ - *pdst = MROP_MASK(*psrc, *pdst, endmask); -#endif /* PSZ == 24 && MROP == 0 */ - } - } -#ifndef DO_UNALIGNED_BITBLT -#if PSZ == 24 && MROP == 0 - /* can not happen */ -#else /* !(PSZ == 24 && MROP == 0) */ - else /* xoffSrc != xoffDst */ - { - if (xoffSrc > xoffDst) - { -#if PSZ == 24 - leftShift = (xoffSrc - xoffDst) << 3; -#else -#if PGSZ == 32 - leftShift = (xoffSrc - xoffDst) << (5 - PWSH); -#else /* PGSZ == 64 */ - leftShift = (xoffSrc - xoffDst) << (6 - PWSH); -#endif /* PGSZ */ -#endif - rightShift = PGSZ - leftShift; - } - else - { -#if PSZ == 24 - rightShift = (xoffDst - xoffSrc) << 3; -#else -#if PGSZ == 32 - rightShift = (xoffDst - xoffSrc) << (5 - PWSH); -#else /* PGSZ == 64 */ - rightShift = (xoffDst - xoffSrc) << (6 - PWSH); -#endif /* PGSZ */ -#endif - leftShift = PGSZ - rightShift; - } - while (h--) - { - psrc = psrcLine; - pdst = pdstLine; - pdstLine += widthDst; - psrcLine += widthSrc; - bits = 0; - if (xoffSrc > xoffDst) - bits = *psrc++; - if (startmask) - { - bits1 = BitLeft(bits,leftShift); - bits = *psrc++; - bits1 |= BitRight(bits,rightShift); - *pdst = MROP_MASK(bits1, *pdst, startmask); - pdst++; - } - nl = nlMiddle; -#ifdef LARGE_INSTRUCTION_CACHE - bits1 = bits; - -#ifdef FAST_CONSTANT_OFFSET_MODE - - psrc += nl & (UNROLL-1); - pdst += nl & (UNROLL-1); - -#define BodyOdd(n) \ -bits = psrc[-n]; \ -pdst[-n] = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), pdst[-n]); - -#define BodyEven(n) \ -bits1 = psrc[-n]; \ -pdst[-n] = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), pdst[-n]); - -#define LoopReset \ -pdst += UNROLL; \ -psrc += UNROLL; - -#else - -#define BodyOdd(n) \ -bits = *psrc++; \ -*pdst = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), *pdst); \ -pdst++; - -#define BodyEven(n) \ -bits1 = *psrc++; \ -*pdst = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), *pdst); \ -pdst++; - -#define LoopReset ; - -#endif /* !FAST_CONSTANT_OFFSET_MODE */ - - PackedLoop - -#undef BodyOdd -#undef BodyEven -#undef LoopReset - -#else - DuffL (nl,label2, - bits1 = BitLeft(bits, leftShift); - bits = *psrc++; - *pdst = MROP_SOLID (bits1 | BitRight(bits, rightShift), *pdst); - pdst++; - ) -#endif - - if (endmask) - { - bits1 = BitLeft(bits, leftShift); - if (BitLeft(endmask, rightShift)) - { - bits = *psrc; - bits1 |= BitRight(bits, rightShift); - } - *pdst = MROP_MASK (bits1, *pdst, endmask); - } - } - } -#endif /* (PSZ == 24 && MROP == 0) */ -#endif /* DO_UNALIGNED_BITBLT */ - - } - } -#endif /* ! DO_MEMCPY */ - else /* xdir == -1 */ - { -#if PSZ == 24 && MROP == 0 - xoffSrc = (-(pptSrc->x + w)) & PAM; - xoffDst = (-pbox->x2) & PAM; -#if 1 - if(xoffSrc != xoffDst /* Alignments must be same. */ - || ((widthDstBytes & PAM) != (widthSrcBytes & PAM) && h > 1)) -#else - if(1) -#endif - /* Width also must be same, if hight > 1 */ - { - /* ...otherwise, pixel by pixel operation */ - while (h--) - { - register int i, si, sii, di; - - for (i = 0, si = pptSrc->x + w - 1, di = pbox->x2 - 1; - i < w; - i++, si--, di--) { - psrc = psrcLine + ((si * BYPP) >> P2WSH); - pdst = pdstLine + ((di * BYPP) >> P2WSH); - sii = (si & PAM); - MROP_SOLID24P(psrc, pdst, sii, di); - } - psrcLine += widthSrc; - pdstLine += widthDst; - } - }else -#endif /* MROP == 0 && PSZ == 24 */ - { - -#if PSZ == 24 -#if MROP == 0 - /* already calculated */ -#else - xoffSrc = (pptSrc->x + w) & PAM; - xoffDst = pbox->x2 & PAM; -#endif - pdstLine += ((pbox->x2 * BYPP - 1) >> P2WSH) + 1; - psrcLine += (((pptSrc->x+w) * BYPP - 1) >> P2WSH) + 1; -#else - xoffSrc = (pptSrc->x + w - 1) & PIM; - xoffDst = (pbox->x2 - 1) & PIM; - pdstLine += ((pbox->x2-1) >> PWSH) + 1; - psrcLine += ((pptSrc->x+w - 1) >> PWSH) + 1; -#endif -#ifdef DO_UNALIGNED_BITBLT -#if PSZ == 24 - nl = xoffDst - xoffSrc; -#else - nl = xoffSrc - xoffDst; -#endif - psrcLine = (CfbBits *) - (((unsigned char *) psrcLine) + nl); -#else -#if PSZ == 24 && MROP == 0 - /* already satisfied */ -#else - if (xoffSrc == xoffDst) -#endif -#endif - { - while (h--) - { -#if PSZ == 24 && MROP == 0 - register int index; - register int im3; -#endif /* PSZ == 24 && MROP == 0 */ - psrc = psrcLine; - pdst = pdstLine; - pdstLine += widthDst; - psrcLine += widthSrc; -#if PSZ == 24 && MROP == 0 - index = (int)(pdst - pdstBase); -#endif /* PSZ == 24 && MROP == 0 */ - - if (endmask) - { - pdst--; - psrc--; -#if PSZ == 24 && MROP == 0 - index--; - im3 = index % 3; - *pdst = DoMaskMergeRop24u(*psrc, *pdst, endmask, im3); -#else /* !(PSZ == 24 && MROP == 0) */ - *pdst = MROP_MASK (*psrc, *pdst, endmask); -#endif /* PSZ == 24 && MROP == 0 */ - } - nl = nlMiddle; -#ifdef LARGE_INSTRUCTION_CACHE -#ifdef FAST_CONSTANT_OFFSET_MODE - psrc -= nl & (UNROLL - 1); - pdst -= nl & (UNROLL - 1); - -#if PSZ == 24 && MROP == 0 -#define BodyOdd(n) pdst[n-1] = DoMergeRop24u(psrc[n-1], pdst[n-1], ((int)(pdst - (n - 1) -pdstBase)) % 3); -#else /* !(PSZ == 24 && MROP == 0) */ -#define BodyOdd(n) pdst[n-1] = MROP_SOLID (psrc[n-1], pdst[n-1]); -#endif /* PSZ == 24 && MROP == 0 */ - -#define BodyEven(n) BodyOdd(n) - -#define LoopReset \ -pdst -= UNROLL;\ -psrc -= UNROLL; - -#else - -#if PSZ == 24 && MROP == 0 -#define BodyOdd(n) --pdst; --psrc; --index; im3 = index % 3;*pdst = DoMergeRop24u(*psrc, *pdst, im3); -#else /* !(PSZ == 24 && MROP == 0) */ -#define BodyOdd(n) --pdst; --psrc; *pdst = MROP_SOLID(*psrc, *pdst); -#endif /* PSZ == 24 && MROP == 0 */ -#define BodyEven(n) BodyOdd(n) -#define LoopReset ; - -#endif - PackedLoop - -#undef BodyOdd -#undef BodyEven -#undef LoopReset - -#else -#if PSZ == 24 && MROP == 0 - DuffL(nl,label3, - --pdst; --psrc; --index; im3= index%3;*pdst = DoMergeRop24u(*psrc, *pdst, im3);) -#else /* !(PSZ == 24 && MROP == 0) */ - DuffL(nl,label3, - --pdst; --psrc; *pdst = MROP_SOLID (*psrc, *pdst);) -#endif /* PSZ == 24 && MROP == 0 */ -#endif - - if (startmask) - { - --pdst; - --psrc; -#if PSZ == 24 && MROP == 0 - *pdst = DoMaskMergeRop24u(*psrc, *pdst, startmask, (int)(pdst - pdstBase) % 3); -#else /* !(PSZ == 24 && MROP == 0) */ - *pdst = MROP_MASK(*psrc, *pdst, startmask); -#endif /* PSZ == 24 && MROP == 0 */ - } - } - } -#ifndef DO_UNALIGNED_BITBLT -#if PSZ == 24 && MROP == 0 - /* can not happen */ -#else /* !( PSZ == 24 && MROP == 0) */ - else - { - if (xoffDst > xoffSrc) - { -#if PSZ == 24 - leftShift = (xoffDst - xoffSrc) << 3; - rightShift = PGSZ - leftShift; -#else -#if PGSZ == 32 - rightShift = (xoffDst - xoffSrc) << (5 - PWSH); -#else /* PGSZ == 64 */ - rightShift = (xoffDst - xoffSrc) << (6 - PWSH); -#endif /* PGSZ */ - leftShift = PGSZ - rightShift; -#endif - } - else - { -#if PSZ == 24 - rightShift = (xoffSrc - xoffDst) << 3; - leftShift = PGSZ - rightShift; -#else -#if PGSZ == 32 - leftShift = (xoffSrc - xoffDst) << (5 - PWSH); -#else /* PGSZ == 64 */ - leftShift = (xoffSrc - xoffDst) << (6 - PWSH); -#endif /* PGSZ */ - rightShift = PGSZ - leftShift; -#endif - } - while (h--) - { - psrc = psrcLine; - pdst = pdstLine; - pdstLine += widthDst; - psrcLine += widthSrc; - bits = 0; -#if PSZ == 24 - if (xoffSrc > xoffDst) -#else - if (xoffDst > xoffSrc) -#endif - bits = *--psrc; - if (endmask) - { - bits1 = BitRight(bits, rightShift); - bits = *--psrc; - bits1 |= BitLeft(bits, leftShift); - pdst--; - *pdst = MROP_MASK(bits1, *pdst, endmask); - } - nl = nlMiddle; -#ifdef LARGE_INSTRUCTION_CACHE - bits1 = bits; -#ifdef FAST_CONSTANT_OFFSET_MODE - psrc -= nl & (UNROLL - 1); - pdst -= nl & (UNROLL - 1); - -#define BodyOdd(n) \ -bits = psrc[n-1]; \ -pdst[n-1] = MROP_SOLID(BitRight(bits1, rightShift) | BitLeft(bits, leftShift),pdst[n-1]); - -#define BodyEven(n) \ -bits1 = psrc[n-1]; \ -pdst[n-1] = MROP_SOLID(BitRight(bits, rightShift) | BitLeft(bits1, leftShift),pdst[n-1]); - -#define LoopReset \ -pdst -= UNROLL; \ -psrc -= UNROLL; - -#else - -#define BodyOdd(n) \ -bits = *--psrc; --pdst; \ -*pdst = MROP_SOLID(BitRight(bits1, rightShift) | BitLeft(bits, leftShift),*pdst); - -#define BodyEven(n) \ -bits1 = *--psrc; --pdst; \ -*pdst = MROP_SOLID(BitRight(bits, rightShift) | BitLeft(bits1, leftShift),*pdst); - -#define LoopReset ; - -#endif - - PackedLoop - -#undef BodyOdd -#undef BodyEven -#undef LoopReset - -#else - DuffL (nl, label4, - bits1 = BitRight(bits, rightShift); - bits = *--psrc; - --pdst; - *pdst = MROP_SOLID(bits1 | BitLeft(bits, leftShift),*pdst); - ) -#endif - - if (startmask) - { - bits1 = BitRight(bits, rightShift); - if (BitRight (startmask, leftShift)) - { - bits = *--psrc; - bits1 |= BitLeft(bits, leftShift); - } - --pdst; - *pdst = MROP_MASK(bits1, *pdst, startmask); - } - } - } -#endif /* PSZ == 24 && MROP == 0 */ -#endif - } - } - pbox++; - pptSrc++; - } - if (pboxNew2) - { - xfree(pptNew2); - xfree(pboxNew2); - } - if (pboxNew1) - { - xfree(pptNew1); - xfree(pboxNew1); - } -} diff --git a/cfb/cfbbres.c b/cfb/cfbbres.c deleted file mode 100644 index fa1ee1379..000000000 --- a/cfb/cfbbres.c +++ /dev/null @@ -1,340 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include "misc.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "servermd.h" -#include "miline.h" - -/* Solid bresenham line */ -/* NOTES - e2 is used less often than e1, so it's not in a register -*/ - -void -cfbBresS(rop, and, xor, addrl, nlwidth, signdx, signdy, axis, x1, y1, e, e1, - e2, len) - int rop; - CfbBits and, xor; - CfbBits *addrl; /* pointer to base of bitmap */ - int nlwidth; /* width in longwords of bitmap */ - register int signdx; - int signdy; /* signs of directions */ - int axis; /* major axis (Y_AXIS or X_AXIS) */ - int x1, y1; /* initial point */ - register int e; /* error accumulator */ - register int e1; /* bresenham increments */ - int e2; - int len; /* length of line */ -{ - register int e3 = e2-e1; -#if PSZ == 24 - CfbBits piQxelXor[3],piQxelAnd[3]; - char *addrb; - int nlwidth3, signdx3; -#endif -#ifdef PIXEL_ADDR - register PixelType *addrp; /* Pixel pointer */ - - if (len == 0) - return; - /* point to first point */ - nlwidth <<= PWSH; -#if PSZ == 24 - addrp = (PixelType *)(addrl) + (y1 * nlwidth); - addrb = (char *)addrp + x1 * 3; - - piQxelXor[0] = (xor << 24) | xor; - piQxelXor[1] = (xor << 16)| (xor >> 8); - piQxelXor[2] = (xor << 8) | (xor >> 16); - piQxelAnd[0] = (and << 24) | and; - piQxelAnd[1] = (and << 16)| (and >> 8); - piQxelAnd[2] = (and << 8) | (and >> 16); -#else - addrp = (PixelType *)(addrl) + (y1 * nlwidth) + x1; -#endif - if (signdy < 0) - nlwidth = -nlwidth; - e = e-e1; /* to make looping easier */ -#if PSZ == 24 - nlwidth3 = nlwidth * sizeof (CfbBits); - signdx3 = signdx * 3; -#endif - - if (axis == Y_AXIS) - { - int t; - - t = nlwidth; - nlwidth = signdx; - signdx = t; -#if PSZ == 24 - t = nlwidth3; - nlwidth3 = signdx3; - signdx3 = t; -#endif - } - if (rop == GXcopy) - { - --len; -#if PSZ == 24 -#define body_copy \ - addrp = (PixelType *)((unsigned long)addrb & ~0x03); \ - switch((unsigned long)addrb & 3){ \ - case 0: \ - *addrp = ((*addrp)&0xFF000000)|(piQxelXor[0] & 0xFFFFFF); \ - break; \ - case 1: \ - *addrp = ((*addrp)&0xFF)|(piQxelXor[2] & 0xFFFFFF00); \ - break; \ - case 3: \ - *addrp = ((*addrp)&0xFFFFFF)|(piQxelXor[0] & 0xFF000000); \ - *(addrp+1) = ((*(addrp+1))&0xFFFF0000)|(piQxelXor[1] & 0xFFFF); \ - break; \ - case 2: \ - *addrp = ((*addrp)&0xFFFF)|(piQxelXor[1] & 0xFFFF0000); \ - *(addrp+1) = ((*(addrp+1))&0xFFFFFF00)|(piQxelXor[2] & 0xFF); \ - break; \ - } -#define body {\ - body_copy \ - addrb += signdx3; \ - e += e1; \ - if (e >= 0) \ - { \ - addrb += nlwidth3; \ - e += e3; \ - } \ - } -#else /* PSZ == 24 */ -#define body {\ - *addrp = xor; \ - addrp += signdx; \ - e += e1; \ - if (e >= 0) \ - { \ - addrp += nlwidth; \ - e += e3; \ - } \ - } -#endif /* PSZ == 24 */ - while (len >= 4) - { - body body body body - len -= 4; - } - switch (len) - { - case 3: body case 2: body case 1: body - } -#undef body -#if PSZ == 24 - body_copy -# undef body_copy -#else - *addrp = xor; -#endif - } - else /* not GXcopy */ - { - while(len--) - { -#if PSZ == 24 - addrp = (PixelType *)((unsigned long)addrb & ~0x03); - switch((unsigned long)addrb & 3){ - case 0: - *addrp = (*addrp & (piQxelAnd[0]|0xFF000000)) - ^ (piQxelXor[0] & 0xFFFFFF); - break; - case 1: - *addrp = (*addrp & (piQxelAnd[2]|0xFF)) - ^ (piQxelXor[2] & 0xFFFFFF00); - break; - case 3: - *addrp = (*addrp & (piQxelAnd[0]|0xFFFFFF)) - ^ (piQxelXor[0] & 0xFF000000); - *(addrp+1) = (*(addrp+1) & (piQxelAnd[1]|0xFFFF0000)) - ^ (piQxelXor[1] & 0xFFFF); - break; - case 2: - *addrp = (*addrp & (piQxelAnd[1]|0xFFFF)) - ^ (piQxelXor[1] & 0xFFFF0000); - *(addrp+1) = (*(addrp+1) & (piQxelAnd[2]|0xFFFFFF00)) - ^ (piQxelXor[2] & 0xFF); - break; - } - e += e1; - if (e >= 0) - { - addrb += nlwidth3; - e += e3; - } - addrb += signdx3; -#else /* PSZ == 24 */ - *addrp = DoRRop (*addrp, and, xor); - e += e1; - if (e >= 0) - { - addrp += nlwidth; - e += e3; - } - addrp += signdx; -#endif /* PSZ == 24 */ - } - } -#else /* !PIXEL_ADDR */ - register CfbBits tmp, bit; - CfbBits leftbit, rightbit; - - /* point to longword containing first point */ -#if PSZ == 24 - addrl = (addrl + (y1 * nlwidth) + ((x1 * 3) >>2); -#else - addrl = (addrl + (y1 * nlwidth) + (x1 >> PWSH)); -#endif - if (signdy < 0) - nlwidth = -nlwidth; - e = e-e1; /* to make looping easier */ - - leftbit = cfbmask[0]; -#if PSZ == 24 - rightbit = cfbmask[(PPW-1)<<1]; - bit = cfbmask[(x1 & 3)<<1]; -#else - rightbit = cfbmask[PPW-1]; - bit = cfbmask[x1 & PIM]; -#endif - - if (axis == X_AXIS) - { - if (signdx > 0) - { - while (len--) - { - *addrl = DoMaskRRop (*addrl, and, xor, bit); - bit = SCRRIGHT(bit,1); - e += e1; - if (e >= 0) - { - addrl += nlwidth; - e += e3; - } - if (!bit) - { - bit = leftbit; - addrl++; - } - } - } - else - { - while (len--) - { - *addrl = DoMaskRRop (*addrl, and, xor, bit); - e += e1; - bit = SCRLEFT(bit,1); - if (e >= 0) - { - addrl += nlwidth; - e += e3; - } - if (!bit) - { - bit = rightbit; - addrl--; - } - } - } - } /* if X_AXIS */ - else - { - if (signdx > 0) - { - while(len--) - { - *addrl = DoMaskRRop (*addrl, and, xor, bit); - e += e1; - if (e >= 0) - { - bit = SCRRIGHT(bit,1); - if (!bit) - { - bit = leftbit; - addrl++; - } - e += e3; - } - addrl += nlwidth; - } - } - else - { - while(len--) - { - *addrl = DoMaskRRop (*addrl, and, xor, bit); - e += e1; - if (e >= 0) - { - bit = SCRLEFT(bit,1); - if (!bit) - { - bit = rightbit; - addrl--; - } - e += e3; - } - addrl += nlwidth; - } - } - } /* else Y_AXIS */ -#endif -} diff --git a/cfb/cfbbresd.c b/cfb/cfbbresd.c deleted file mode 100644 index ee48a74ec..000000000 --- a/cfb/cfbbresd.c +++ /dev/null @@ -1,404 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include "misc.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "miline.h" - -/* Dashed bresenham line */ - -void -cfbBresD(rrops, - pdashIndex, pDash, numInDashList, pdashOffset, isDoubleDash, - addrl, nlwidth, - signdx, signdy, axis, x1, y1, e, e1, e2, len) - cfbRRopPtr rrops; - int *pdashIndex; /* current dash */ - unsigned char *pDash; /* dash list */ - int numInDashList; /* total length of dash list */ - int *pdashOffset; /* offset into current dash */ - int isDoubleDash; - CfbBits *addrl; /* pointer to base of bitmap */ - int nlwidth; /* width in longwords of bitmap */ - int signdx, signdy; /* signs of directions */ - int axis; /* major axis (Y_AXIS or X_AXIS) */ - int x1, y1; /* initial point */ - register int e; /* error accumulator */ - register int e1; /* bresenham increments */ - int e2; - int len; /* length of line */ -{ -#ifdef PIXEL_ADDR - register PixelType *addrp; -#endif - register int e3 = e2-e1; - int dashIndex; - int dashOffset; - int dashRemaining; - CfbBits xorFg, andFg, xorBg, andBg; - Bool isCopy; - int thisDash; -#if PSZ == 24 - CfbBits xorPiQxlFg[3], andPiQxlFg[3], xorPiQxlBg[3], andPiQxlBg[3]; - char *addrb; - int signdx3, signdy3; -#endif - - dashOffset = *pdashOffset; - dashIndex = *pdashIndex; - isCopy = (rrops[0].rop == GXcopy && rrops[1].rop == GXcopy); -#if PSZ == 24 - xorFg = rrops[0].xor & 0xffffff; - andFg = rrops[0].and & 0xffffff; - xorBg = rrops[1].xor & 0xffffff; - andBg = rrops[1].and & 0xffffff; - xorPiQxlFg[0] = xorFg | (xorFg << 24); - xorPiQxlFg[1] = (xorFg >> 8) | (xorFg << 16); - xorPiQxlFg[2] = (xorFg >> 16) | (xorFg << 8); - andPiQxlFg[0] = andFg | (andFg << 24); - andPiQxlFg[1] = (andFg >> 8) | (andFg << 16); - andPiQxlFg[2] = (andFg >> 16) | (andFg << 8); - xorPiQxlBg[0] = xorBg | (xorBg << 24); - xorPiQxlBg[1] = (xorBg >> 8) | (xorBg << 16); - xorPiQxlBg[2] = (xorBg >> 16) | (xorBg << 8); - andPiQxlBg[0] = andBg | (andBg << 24); - andPiQxlBg[1] = (andBg >> 8) | (andBg << 16); - andPiQxlBg[2] = (andFg >> 16) | (andBg << 8); -#else - xorFg = rrops[0].xor; - andFg = rrops[0].and; - xorBg = rrops[1].xor; - andBg = rrops[1].and; -#endif - dashRemaining = pDash[dashIndex] - dashOffset; - if ((thisDash = dashRemaining) >= len) - { - thisDash = len; - dashRemaining -= len; - } - e = e-e1; /* to make looping easier */ - -#define BresStep(minor,major) {if ((e += e1) >= 0) { e += e3; minor; } major;} - -#define NextDash {\ - dashIndex++; \ - if (dashIndex == numInDashList) \ - dashIndex = 0; \ - dashRemaining = pDash[dashIndex]; \ - if ((thisDash = dashRemaining) >= len) \ - { \ - dashRemaining -= len; \ - thisDash = len; \ - } \ -} - -#ifdef PIXEL_ADDR - -#if PSZ == 24 -#define Loop(store) while (thisDash--) {\ - store; \ - BresStep(addrb+=signdy3,addrb+=signdx3) \ - } - /* point to first point */ - nlwidth <<= PWSH; - addrp = (PixelType *)(addrl) + (y1 * nlwidth); - addrb = (char *)addrp + x1 * 3; - -#else -#define Loop(store) while (thisDash--) {\ - store; \ - BresStep(addrp+=signdy,addrp+=signdx) \ - } - /* point to first point */ - nlwidth <<= PWSH; - addrp = (PixelType *)(addrl) + (y1 * nlwidth) + x1; -#endif - signdy *= nlwidth; -#if PSZ == 24 - signdx3 = signdx * 3; - signdy3 = signdy * sizeof (CfbBits); -#endif - if (axis == Y_AXIS) - { - int t; - - t = signdx; - signdx = signdy; - signdy = t; -#if PSZ == 24 - t = signdx3; - signdx3 = signdy3; - signdy3 = t; -#endif - } - - if (isCopy) - { -#if PSZ == 24 -#define body_copy(pix) { \ - addrp = (PixelType *)((unsigned long)addrb & ~0x03); \ - switch((unsigned long)addrb & 3){ \ - case 0: \ - *addrp = (*addrp & 0xFF000000)|((pix)[0] & 0xFFFFFF); \ - break; \ - case 1: \ - *addrp = (*addrp & 0xFF)|((pix)[2] & 0xFFFFFF00); \ - break; \ - case 3: \ - *addrp = (*addrp & 0xFFFFFF)|((pix)[0] & 0xFF000000); \ - *(addrp+1) = (*(addrp+1) & 0xFFFF0000)|((pix)[1] & 0xFFFF); \ - break; \ - case 2: \ - *addrp = (*addrp & 0xFFFF)|((pix)[1] & 0xFFFF0000); \ - *(addrp+1) = (*(addrp+1) & 0xFFFFFF00)|((pix)[2] & 0xFF); \ - break; \ - } \ -} -#endif /* PSZ == 24 */ - - for (;;) - { - len -= thisDash; - if (dashIndex & 1) { - if (isDoubleDash) { -#if PSZ == 24 - Loop(body_copy(xorPiQxlBg)) -#else - Loop(*addrp = xorBg) -#endif - } else { - Loop(;) - } - } else { -#if PSZ == 24 - Loop(body_copy(xorPiQxlFg)) -#else - Loop(*addrp = xorFg) -#endif - } - if (!len) - break; - NextDash - } -#undef body_copy - } - else - { -#define body_set(and, xor) { \ - addrp = (PixelType *)((unsigned long)addrb & ~0x03); \ - switch((unsigned long)addrb & 3){ \ - case 0: \ - *addrp = (*addrp & ((and)[0]|0xFF000000)) ^ ((xor)[0] & 0xFFFFFF); \ - break; \ - case 1: \ - *addrp = (*addrp & ((and)[2]|0xFF)) ^ ((xor)[2] & 0xFFFFFF00); \ - break; \ - case 3: \ - *addrp = (*addrp & ((and)[0]|0xFFFFFF)) ^ ((xor)[0] & 0xFF000000); \ - *(addrp+1)=(*(addrp+1)&((and)[1]|0xFFFF0000)) ^ ((xor)[1]&0xFFFF); \ - break; \ - case 2: \ - *addrp = (*addrp & ((and)[1]|0xFFFF)) ^ ((xor)[1] & 0xFFFF0000); \ - *(addrp+1)=(*(addrp+1)&((and)[2]|0xFFFFFF00)) ^ ((xor)[2] & 0xFF); \ - break; \ - } \ -} - - for (;;) - { - len -= thisDash; - if (dashIndex & 1) { - if (isDoubleDash) { -#if PSZ == 24 - Loop(body_set(andPiQxlBg, xorPiQxlBg)) -#else - Loop(*addrp = DoRRop(*addrp,andBg, xorBg)) -#endif - } else { - Loop(;) - } - } else { -#if PSZ == 24 - Loop(body_set(andPiQxlFg, xorPiQxlFg)) -#else - Loop(*addrp = DoRRop(*addrp,andFg, xorFg)) -#endif - } - if (!len) - break; - NextDash - } -#undef body_set - } -#else /* !PIXEL_ADDR */ - { - register CfbBits tmp; - CfbBits startbit, bit; - - /* point to longword containing first point */ -#if PSZ == 24 - addrl = (addrl + (y1 * nlwidth) + ((x1*3) >> 2); -#else - addrl = (addrl + (y1 * nlwidth) + (x1 >> PWSH)); -#endif - signdy = signdy * nlwidth; - - if (signdx > 0) - startbit = cfbmask[0]; - else -#if PSZ == 24 - startbit = cfbmask[(PPW-1)<<1]; - bit = cfbmask[(x1 & 3)<<1]; -#else - startbit = cfbmask[PPW-1]; - bit = cfbmask[x1 & PIM]; -#endif - -#if PSZ == 24 -#define X_Loop(store) while(thisDash--) {\ - store; \ - BresStep(addrl += signdy, \ - if (signdx > 0) \ - bit = SCRRIGHT(bit,1); \ - else \ - bit = SCRLEFT(bit,1); \ - if (!bit) \ - { \ - bit = startbit; \ - addrl += signdx; \ - }) \ - } -#define Y_Loop(store) while(thisDash--) {\ - store; \ - BresStep(if (signdx > 0) \ - bit = SCRRIGHT(bit,1); \ - else \ - bit = SCRLEFT(bit,1); \ - if (!bit) \ - { \ - bit = startbit; \ - addrl += signdx; \ - }, \ - addrl += signdy) \ - } -#else -#define X_Loop(store) while(thisDash--) {\ - store; \ - BresStep(addrl += signdy, \ - if (signdx > 0) \ - bit = SCRRIGHT(bit,1); \ - else \ - bit = SCRLEFT(bit,1); \ - if (!bit) \ - { \ - bit = startbit; \ - addrl += signdx; \ - }) \ - } -#define Y_Loop(store) while(thisDash--) {\ - store; \ - BresStep(if (signdx > 0) \ - bit = SCRRIGHT(bit,1); \ - else \ - bit = SCRLEFT(bit,1); \ - if (!bit) \ - { \ - bit = startbit; \ - addrl += signdx; \ - }, \ - addrl += signdy) \ - } -#endif - - if (axis == X_AXIS) - { - for (;;) - { - len -= thisDash; - if (dashIndex & 1) { - if (isDoubleDash) { - X_Loop(*addrl = DoMaskRRop(*addrl, andBg, xorBg, bit)); - } else { - X_Loop(;) - } - } else { - X_Loop(*addrl = DoMaskRRop(*addrl, andFg, xorFg, bit)); - } - if (!len) - break; - NextDash - } - } /* if X_AXIS */ - else - { - for (;;) - { - len -= thisDash; - if (dashIndex & 1) { - if (isDoubleDash) { - Y_Loop(*addrl = DoMaskRRop(*addrl, andBg, xorBg, bit)); - } else { - Y_Loop(;) - } - } else { - Y_Loop(*addrl = DoMaskRRop(*addrl, andFg, xorFg, bit)); - } - if (!len) - break; - NextDash - } - } /* else Y_AXIS */ - } -#endif - *pdashIndex = dashIndex; - *pdashOffset = pDash[dashIndex] - dashRemaining; -} diff --git a/cfb/cfbcmap.c b/cfb/cfbcmap.c deleted file mode 100644 index b96f67170..000000000 --- a/cfb/cfbcmap.c +++ /dev/null @@ -1,119 +0,0 @@ -/************************************************************ -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - -********************************************************/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "scrnintstr.h" -#include "colormapst.h" -#include "resource.h" -#include "micmap.h" -#include "cfb.h" - -int -cfbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps) -{ - return miListInstalledColormaps(pScreen, pmaps); -} - -void -cfbInstallColormap(ColormapPtr pmap) -{ - miInstallColormap(pmap); -} - -void -cfbUninstallColormap(ColormapPtr pmap) -{ - miUninstallColormap(pmap); -} - -void -cfbResolveColor(unsigned short *pred, - unsigned short *pgreen, - unsigned short *pblue, - VisualPtr pVisual) -{ - miResolveColor(pred, pgreen, pblue, pVisual); -} - -Bool -cfbInitializeColormap(ColormapPtr pmap) -{ - return miInitializeColormap(pmap); -} - -int -cfbExpandDirectColors (ColormapPtr pmap, int ndef, - xColorItem *indefs, xColorItem *outdefs) -{ - return miExpandDirectColors(pmap, ndef, indefs, outdefs); -} - -Bool -cfbCreateDefColormap(ScreenPtr pScreen) -{ - return miCreateDefColormap(pScreen); -} - -void -cfbClearVisualTypes(void) -{ - miClearVisualTypes(); -} - -Bool -cfbSetVisualTypes (int depth, int visuals, int bitsPerRGB) -{ - return miSetVisualTypes(depth, visuals, bitsPerRGB, -1); -} - -/* - * Given a list of formats for a screen, create a list - * of visuals and depths for the screen which coorespond to - * the set which can be used with this version of cfb. - */ - -Bool -cfbInitVisuals (VisualPtr *visualp, - DepthPtr *depthp, - int *nvisualp, - int *ndepthp, - int *rootDepthp, - VisualID *defaultVisp, - unsigned long sizes, - int bitsPerRGB) -{ - return miInitVisuals(visualp, depthp, nvisualp, ndepthp, rootDepthp, - defaultVisp, sizes, bitsPerRGB, -1); -} diff --git a/cfb/cfbcppl.c b/cfb/cfbcppl.c deleted file mode 100644 index 00714cbc4..000000000 --- a/cfb/cfbcppl.c +++ /dev/null @@ -1,486 +0,0 @@ -/* -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "gcstruct.h" -#include "window.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "windowstr.h" -#include "cfb.h" -#if PSZ == 8 -#undef PSZ /* for maskbits.h */ -#include "maskbits.h" -#define PSZ 8 -#include "mergerop.h" -#endif - - -void -cfbCopyImagePlane( - DrawablePtr pSrcDrawable, - DrawablePtr pDstDrawable, - int rop, - RegionPtr prgnDst, - DDXPointPtr pptSrc, - unsigned long planemask) -{ - /* note: there must be some sort of trick behind, - passing a planemask value with all bits set - whilst using the current planemask for the bitPlane value. */ -#if PSZ == 8 - cfbCopyPlane8to1 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc, - (unsigned long) ~0L, planemask); -#endif -#if PSZ == 16 - cfbCopyPlane16to1 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc, - (unsigned long) ~0L, planemask); -#endif -#if PSZ == 24 - cfbCopyPlane24to1 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc, - (unsigned long) ~0L, planemask); -#endif -#if PSZ == 32 - cfbCopyPlane32to1 (pSrcDrawable, pDstDrawable, rop, prgnDst, pptSrc, - (unsigned long) ~0L, planemask); -#endif -} - -#if PSZ == 8 - -#if BITMAP_BIT_ORDER == MSBFirst -#define LeftMost (MFB_PPW-1) -#define StepBit(bit, inc) ((bit) -= (inc)) -#else -#define LeftMost 0 -#define StepBit(bit, inc) ((bit) += (inc)) -#endif - -#define GetBits(psrc, nBits, curBit, bitPos, bits) {\ - bits = 0; \ - while (nBits--) \ - { \ - bits |= (PixelType)(((*psrc++ >> bitPos) & 1)) << curBit; \ - StepBit (curBit, 1); \ - } \ -} - -void -cfbCopyPlane8to1( - DrawablePtr pSrcDrawable, - DrawablePtr pDstDrawable, - int rop, - RegionPtr prgnDst, - DDXPointPtr pptSrc, - unsigned long planemask, - unsigned long bitPlane) -{ - int srcx, srcy, dstx, dsty, width, height; - unsigned char *psrcBase; - PixelType *pdstBase; - int widthSrc, widthDst; - unsigned char *psrcLine; - PixelType *pdstLine; - register unsigned char *psrc; - register int i; - register int curBit; - register int bitPos; - register CfbBits bits; - register PixelType *pdst; - PixelType startmask, endmask; - int niStart = 0, niEnd = 0; - int bitStart = 0, bitEnd = 0; - int nl, nlMiddle; - int nbox; - BoxPtr pbox; - MROP_DECLARE() - - if (!(planemask & 1)) - return; - - if (rop != GXcopy) - MROP_INITIALIZE (rop, planemask); - - cfbGetByteWidthAndPointer (pSrcDrawable, widthSrc, psrcBase) - - mfbGetPixelWidthAndPointer (pDstDrawable, widthDst, pdstBase) - - bitPos = ffs (bitPlane) - 1; - - nbox = REGION_NUM_RECTS(prgnDst); - pbox = REGION_RECTS(prgnDst); - while (nbox--) - { - dstx = pbox->x1; - dsty = pbox->y1; - srcx = pptSrc->x; - srcy = pptSrc->y; - width = pbox->x2 - pbox->x1; - height = pbox->y2 - pbox->y1; - pbox++; - pptSrc++; - psrcLine = psrcBase + srcy * widthSrc + srcx; - pdstLine = mfbScanline(pdstBase, dstx, dsty, widthDst); - dstx &= MFB_PIM; - if (dstx + width <= MFB_PPW) - { - maskpartialbits(dstx, width, startmask); - nlMiddle = 0; - endmask = 0; - } - else - { - maskbits (dstx, width, startmask, endmask, nlMiddle); - } - if (startmask) - { - niStart = min(MFB_PPW - dstx, width); - bitStart = LeftMost; - StepBit (bitStart, dstx); - } - if (endmask) - { - niEnd = (dstx + width) & MFB_PIM; - bitEnd = LeftMost; - } - if (rop == GXcopy) - { - while (height--) - { - psrc = psrcLine; - pdst = pdstLine; - psrcLine += widthSrc; - mfbScanlineInc(pdstLine, widthDst); - if (startmask) - { - i = niStart; - curBit = bitStart; - GetBits (psrc, i, curBit, bitPos, bits); - *pdst = (*pdst & ~startmask) | bits; - pdst++; - } - nl = nlMiddle; - while (nl--) - { - i = MFB_PPW; - curBit = LeftMost; - GetBits (psrc, i, curBit, bitPos, bits); - *pdst++ = bits; - } - if (endmask) - { - i = niEnd; - curBit = bitEnd; - GetBits (psrc, i, curBit, bitPos, bits); - *pdst = (*pdst & ~endmask) | bits; - } - } - } - else - { - while (height--) - { - psrc = psrcLine; - pdst = pdstLine; - psrcLine += widthSrc; - mfbScanlineInc(pdstLine, widthDst); - if (startmask) - { - i = niStart; - curBit = bitStart; - GetBits (psrc, i, curBit, bitPos, bits); - *pdst = MROP_MASK(bits, *pdst, startmask); - pdst++; - } - nl = nlMiddle; - while (nl--) - { - i = MFB_PPW; - curBit = LeftMost; - GetBits (psrc, i, curBit, bitPos, bits); - *pdst = MROP_SOLID(bits, *pdst); - pdst++; - } - if (endmask) - { - i = niEnd; - curBit = bitEnd; - GetBits (psrc, i, curBit, bitPos, bits); - *pdst = MROP_MASK (bits, *pdst, endmask); - } - } - } - } -} - -#else /* PSZ == 8 */ - -#define mfbmaskbits(x, w, startmask, endmask, nlw) \ - startmask = mfbGetstarttab((x)&0x1f); \ - endmask = mfbGetendtab(((x)+(w)) & 0x1f); \ - if (startmask) \ - nlw = (((w) - (32 - ((x)&0x1f))) >> 5); \ - else \ - nlw = (w) >> 5; - -#define mfbmaskpartialbits(x, w, mask) \ - mask = mfbGetpartmasks((x)&0x1f,(w)&0x1f); - -#define LeftMost 0 -#define StepBit(bit, inc) ((bit) += (inc)) - - -#if PSZ == 24 -#define GetBits(psrc, nBits, curBit, bitPos, bits) {\ - bits = 0; \ - while (nBits--) \ - { \ - if (bitPos < 8) \ - { \ - bits |= ((*psrc++ >> bitPos) & 1) << curBit; \ - psrc += 2; \ - } \ - else if (bitPos < 16) \ - { \ - psrc++; \ - bits |= ((*psrc++ >> (bitPos - 8)) & 1) << curBit; \ - psrc++; \ - } \ - else \ - { \ - psrc += 2; \ - bits |= ((*psrc++ >> (bitPos - 16)) & 1) << curBit; \ - } \ - StepBit (curBit, 1); \ - } \ -} -#else -#define GetBits(psrc, nBits, curBit, bitPos, bits) {\ - bits = 0; \ - while (nBits--) \ - { \ - bits |= ((*psrc++ >> bitPos) & 1) << curBit; \ - StepBit (curBit, 1); \ - } \ -} -#endif - -void -#if PSZ == 16 -cfbCopyPlane16to1 -#endif -#if PSZ == 24 -cfbCopyPlane24to1 -#endif -#if PSZ == 32 -cfbCopyPlane32to1 -#endif -( - DrawablePtr pSrcDrawable, - DrawablePtr pDstDrawable, - int rop, - RegionPtr prgnDst, - DDXPointPtr pptSrc, - unsigned long planemask, - unsigned long bitPlane) -{ - int srcx, srcy, dstx, dsty, width, height; - CfbBits *psrcBase; - CfbBits *pdstBase; - int widthSrc, widthDst; -#if PSZ == 16 - unsigned short *psrcLine; - register unsigned short *psrc; -#endif -#if PSZ == 24 - unsigned char *psrcLine; - register unsigned char *psrc; -#endif -#if PSZ == 32 - unsigned int *psrcLine; - register unsigned int *psrc; -#endif - unsigned int *pdstLine; - register unsigned int *pdst; - register int i; - register int curBit; - register int bitPos; - register unsigned int bits; - unsigned int startmask = 0, endmask = 0; - int niStart = 0, niEnd = 0; - int bitStart = 0, bitEnd = 0; - int nl, nlMiddle; - int nbox; - BoxPtr pbox; - int result; - - - if (!(planemask & 1)) - return; - - /* must explicitly ask for "int" widths, as code below expects it */ - /* on some machines (Alpha), "long" and "int" are not the same size */ - cfbGetTypedWidthAndPointer (pSrcDrawable, widthSrc, psrcBase, int, CfbBits) - cfbGetTypedWidthAndPointer (pDstDrawable, widthDst, pdstBase, int, CfbBits) - -#if PSZ == 16 - widthSrc <<= 1; -#endif -#if PSZ == 24 - widthSrc <<= 2; -#endif - - bitPos = ffs (bitPlane) - 1; - - nbox = REGION_NUM_RECTS(prgnDst); - pbox = REGION_RECTS(prgnDst); - while (nbox--) - { - dstx = pbox->x1; - dsty = pbox->y1; - srcx = pptSrc->x; - srcy = pptSrc->y; - width = pbox->x2 - pbox->x1; - height = pbox->y2 - pbox->y1; - pbox++; - pptSrc++; -#if PSZ == 16 - psrcLine = (unsigned short *)psrcBase + srcy * widthSrc + srcx; -#endif -#if PSZ == 24 - psrcLine = (unsigned char *)psrcBase + srcy * widthSrc + srcx * 3; -#endif -#if PSZ == 32 - psrcLine = (unsigned int *)psrcBase + srcy * widthSrc + srcx; -#endif - pdstLine = (unsigned int *)pdstBase + dsty * widthDst + (dstx >> 5); - if (dstx + width <= 32) - { - mfbmaskpartialbits(dstx, width, startmask); - nlMiddle = 0; - endmask = 0; - } - else - { - mfbmaskbits (dstx, width, startmask, endmask, nlMiddle); - } - if (startmask) - { - niStart = 32 - (dstx & 0x1f); - bitStart = LeftMost; - StepBit (bitStart, (dstx & 0x1f)); - } - if (endmask) - { - niEnd = (dstx + width) & 0x1f; - bitEnd = LeftMost; - } - if (rop == GXcopy) - { - while (height--) - { - psrc = psrcLine; - pdst = pdstLine; - psrcLine += widthSrc; - pdstLine += widthDst; - if (startmask) - { - i = niStart; - curBit = bitStart; - GetBits (psrc, i, curBit, bitPos, bits); - - *pdst = (*pdst & ~startmask) | bits; - pdst++; - } - nl = nlMiddle; - while (nl--) - { - i = 32; - curBit = LeftMost; - GetBits (psrc, i, curBit, bitPos, bits); - *pdst++ = bits; - } - if (endmask) - { - i = niEnd; - curBit = bitEnd; - GetBits (psrc, i, curBit, bitPos, bits); - - *pdst = (*pdst & ~endmask) | bits; - } - } - } - else - { - while (height--) - { - psrc = psrcLine; - pdst = pdstLine; - psrcLine += widthSrc; - pdstLine += widthDst; - if (startmask) - { - i = niStart; - curBit = bitStart; - GetBits (psrc, i, curBit, bitPos, bits); - DoRop (result, rop, bits, *pdst); - - *pdst = (*pdst & ~startmask) | - (result & startmask); - pdst++; - } - nl = nlMiddle; - while (nl--) - { - i = 32; - curBit = LeftMost; - GetBits (psrc, i, curBit, bitPos, bits); - DoRop (result, rop, bits, *pdst); - *pdst = result; - ++pdst; - } - if (endmask) - { - i = niEnd; - curBit = bitEnd; - GetBits (psrc, i, curBit, bitPos, bits); - DoRop (result, rop, bits, *pdst); - - *pdst = (*pdst & ~endmask) | - (result & endmask); - } - } - } - } -} - -#endif /* PSZ == 8 */ diff --git a/cfb/cfbfillarc.c b/cfb/cfbfillarc.c deleted file mode 100644 index 0eb5ff469..000000000 --- a/cfb/cfbfillarc.c +++ /dev/null @@ -1,374 +0,0 @@ -/************************************************************ - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - -********************************************************/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include -#include -#include "regionstr.h" -#include "gcstruct.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "mifillarc.h" -#include "cfbrrop.h" -#include "mi.h" - -/* gcc 1.35 is stupid */ -#if defined(__GNUC__) && __GNUC__ < 2 && defined(mc68020) -#define STUPID volatile -#else -#define STUPID -#endif - -static void -RROP_NAME(cfbFillEllipseSolid)( - DrawablePtr pDraw, - GCPtr pGC, - xArc *arc) -{ - STUPID int x, y, e; - STUPID int yk, xk, ym, xm, dx, dy, xorg, yorg; - miFillArcRec info; -#if PSZ == 24 - unsigned char *addrlt, *addrlb; -#else - CfbBits *addrlt, *addrlb; -#endif - register CfbBits *addrl; - register int n; - int nlwidth; - RROP_DECLARE - register int xpos; - register int slw; - CfbBits startmask, endmask; - int nlmiddle; -#if PSZ == 24 - register int pidx; - int xpos3; -#endif - -#if PSZ == 24 - cfbGetByteWidthAndPointer (pDraw, nlwidth, addrlt) -#else - cfbGetLongWidthAndPointer (pDraw, nlwidth, addrlt) -#endif - - RROP_FETCH_GC(pGC); - miFillArcSetup(arc, &info); - MIFILLARCSETUP(); - xorg += pDraw->x; - yorg += pDraw->y; - addrlb = addrlt; - addrlt += nlwidth * (yorg - y); - addrlb += nlwidth * (yorg + y + dy); - while (y) - { - addrlt += nlwidth; - addrlb -= nlwidth; - MIFILLARCSTEP(slw); - if (!slw) - continue; - xpos = xorg - x; -#if PSZ == 24 - xpos3 = (xpos * 3) & ~0x03; - addrl = (CfbBits *)((char *)addrlt + xpos3); - if (slw == 1){ - RROP_SOLID24(addrl, xpos); - if (miFillArcLower(slw)){ - addrl = (CfbBits *)((char *)addrlb + xpos3); - RROP_SOLID24(addrl, xpos); - } - continue; - } - maskbits(xpos, slw, startmask, endmask, nlmiddle); - xpos &= 3; - pidx = xpos; - if (startmask){ - RROP_SOLID_MASK(addrl, startmask, pidx-1); - addrl++; - if (pidx == 3) - pidx = 0; - } - n = nlmiddle; - while (--n >= 0){ - RROP_SOLID(addrl, pidx); - addrl++; - if (++pidx == 3) - pidx = 0; - } - if (endmask) - RROP_SOLID_MASK(addrl, endmask, pidx); - if (!miFillArcLower(slw)) - continue; - addrl = (CfbBits *)((char *)addrlb + xpos3); - pidx = xpos; - if (startmask){ - RROP_SOLID_MASK(addrl, startmask, pidx-1); - addrl++; - if (pidx == 3) - pidx = 0; - } - n = nlmiddle; - while (--n >= 0){ - RROP_SOLID(addrl, pidx); - addrl++; - if (++pidx == 3) - pidx = 0; - } - if (endmask) - RROP_SOLID_MASK(addrl, endmask, pidx); -#else /* PSZ == 24 */ - addrl = addrlt + (xpos >> PWSH); - if (((xpos & PIM) + slw) <= PPW) - { - maskpartialbits(xpos, slw, startmask); - RROP_SOLID_MASK(addrl,startmask); - if (miFillArcLower(slw)) - { - addrl = addrlb + (xpos >> PWSH); - RROP_SOLID_MASK(addrl, startmask); - } - continue; - } - maskbits(xpos, slw, startmask, endmask, nlmiddle); - if (startmask) - { - RROP_SOLID_MASK(addrl, startmask); - addrl++; - } - n = nlmiddle; - RROP_SPAN(addrl,n) - - if (endmask) - RROP_SOLID_MASK(addrl, endmask); - if (!miFillArcLower(slw)) - continue; - addrl = addrlb + (xpos >> PWSH); - if (startmask) - { - RROP_SOLID_MASK(addrl, startmask); - addrl++; - } - n = nlmiddle; - RROP_SPAN(addrl, n); - if (endmask) - RROP_SOLID_MASK(addrl, endmask); -#endif /* PSZ == 24 */ - } - RROP_UNDECLARE -} - -#if PSZ == 24 -#define FILLSPAN(xl,xr,addr) \ - if (xr >= xl){ \ - n = xr - xl + 1; \ - addrl = (CfbBits *)((char *)addr + ((xl * 3) & ~0x03)); \ - if (n <= 1){ \ - if (n) \ - RROP_SOLID24(addrl, xl); \ - } else { \ - maskbits(xl, n, startmask, endmask, n); \ - pidx = xl & 3; \ - if (startmask){ \ - RROP_SOLID_MASK(addrl, startmask, pidx-1); \ - addrl++; \ - if (pidx == 3) \ - pidx = 0; \ - } \ - while (--n >= 0){ \ - RROP_SOLID(addrl, pidx); \ - addrl++; \ - if (++pidx == 3) \ - pidx = 0; \ - } \ - if (endmask) \ - RROP_SOLID_MASK(addrl, endmask, pidx); \ - } \ - } -#else /* PSZ == 24 */ -#define FILLSPAN(xl,xr,addr) \ - if (xr >= xl) \ - { \ - n = xr - xl + 1; \ - addrl = addr + (xl >> PWSH); \ - if (((xl & PIM) + n) <= PPW) \ - { \ - maskpartialbits(xl, n, startmask); \ - RROP_SOLID_MASK(addrl, startmask); \ - } \ - else \ - { \ - maskbits(xl, n, startmask, endmask, n); \ - if (startmask) \ - { \ - RROP_SOLID_MASK(addrl, startmask); \ - addrl++; \ - } \ - while (n--) \ - { \ - RROP_SOLID(addrl); \ - ++addrl; \ - } \ - if (endmask) \ - RROP_SOLID_MASK(addrl, endmask); \ - } \ - } -#endif /* PSZ == 24 */ - -#define FILLSLICESPANS(flip,addr) \ - if (!flip) \ - { \ - FILLSPAN(xl, xr, addr); \ - } \ - else \ - { \ - xc = xorg - x; \ - FILLSPAN(xc, xr, addr); \ - xc += slw - 1; \ - FILLSPAN(xl, xc, addr); \ - } - -static void -RROP_NAME(cfbFillArcSliceSolid)( - DrawablePtr pDraw, - GCPtr pGC, - xArc *arc) -{ - int yk, xk, ym, xm, dx, dy, xorg, yorg, slw; - register int x, y, e; - miFillArcRec info; - miArcSliceRec slice; - int xl, xr, xc; -#if PSZ == 24 - unsigned char *addrlt, *addrlb; -#else - CfbBits *addrlt, *addrlb; -#endif - register CfbBits *addrl; - register int n; - int nlwidth; - RROP_DECLARE - CfbBits startmask, endmask; -#if PSZ == 24 - register int pidx; -#endif /* PSZ == 24 */ - -#if PSZ == 24 - cfbGetByteWidthAndPointer (pDraw, nlwidth, addrlt) -#else - cfbGetLongWidthAndPointer (pDraw, nlwidth, addrlt) -#endif - - RROP_FETCH_GC(pGC); - miFillArcSetup(arc, &info); - miFillArcSliceSetup(arc, &slice, pGC); - MIFILLARCSETUP(); - xorg += pDraw->x; - yorg += pDraw->y; - addrlb = addrlt; - addrlt += nlwidth * (yorg - y); - addrlb += nlwidth * (yorg + y + dy); - slice.edge1.x += pDraw->x; - slice.edge2.x += pDraw->x; - while (y > 0) - { - addrlt += nlwidth; - addrlb -= nlwidth; - MIFILLARCSTEP(slw); - MIARCSLICESTEP(slice.edge1); - MIARCSLICESTEP(slice.edge2); - if (miFillSliceUpper(slice)) - { - MIARCSLICEUPPER(xl, xr, slice, slw); - FILLSLICESPANS(slice.flip_top, addrlt); - } - if (miFillSliceLower(slice)) - { - MIARCSLICELOWER(xl, xr, slice, slw); - FILLSLICESPANS(slice.flip_bot, addrlb); - } - } - RROP_UNDECLARE -} - -void -RROP_NAME(cfbPolyFillArcSolid) (pDraw, pGC, narcs, parcs) - DrawablePtr pDraw; - GCPtr pGC; - int narcs; - xArc *parcs; -{ - register xArc *arc; - register int i; - int x2, y2; - BoxRec box; - RegionPtr cclip; - - cclip = cfbGetCompositeClip(pGC); - for (arc = parcs, i = narcs; --i >= 0; arc++) - { - if (miFillArcEmpty(arc)) - continue; - if (miCanFillArc(arc)) - { - box.x1 = arc->x + pDraw->x; - box.y1 = arc->y + pDraw->y; - /* - * Because box.x2 and box.y2 get truncated to 16 bits, and the - * RECT_IN_REGION test treats the resulting number as a signed - * integer, the RECT_IN_REGION test alone can go the wrong way. - * This can result in a server crash because the rendering - * routines in this file deal directly with cpu addresses - * of pixels to be stored, and do not clip or otherwise check - * that all such addresses are within their respective pixmaps. - * So we only allow the RECT_IN_REGION test to be used for - * values that can be expressed correctly in a signed short. - */ - x2 = box.x1 + (int)arc->width + 1; - box.x2 = x2; - y2 = box.y1 + (int)arc->height + 1; - box.y2 = y2; - if ( (x2 <= SHRT_MAX) && (y2 <= SHRT_MAX) && - (RECT_IN_REGION(pDraw->pScreen, cclip, &box) == rgnIN) ) - { - if ((arc->angle2 >= FULLCIRCLE) || - (arc->angle2 <= -FULLCIRCLE)) - RROP_NAME(cfbFillEllipseSolid)(pDraw, pGC, arc); - else - RROP_NAME(cfbFillArcSliceSolid)(pDraw, pGC, arc); - continue; - } - } - miPolyFillArc(pDraw, pGC, 1, arc); - } -} diff --git a/cfb/cfbfillrct.c b/cfb/cfbfillrct.c deleted file mode 100644 index fc2d31bdc..000000000 --- a/cfb/cfbfillrct.c +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Fill rectangles. - */ - -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" -#include "gcstruct.h" -#include "window.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "windowstr.h" -#include "mi.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "mergerop.h" - - -void -cfbFillBoxTileOdd (pDrawable, n, rects, tile, xrot, yrot) - DrawablePtr pDrawable; - int n; - BoxPtr rects; - PixmapPtr tile; - int xrot, yrot; -{ -#if PSZ == 24 - if (tile->drawable.width & 3) -#else - if (tile->drawable.width & PIM) -#endif - cfbFillBoxTileOddCopy (pDrawable, n, rects, tile, xrot, yrot, GXcopy, ~0L); - else - cfbFillBoxTile32sCopy (pDrawable, n, rects, tile, xrot, yrot, GXcopy, ~0L); -} - -void -cfbFillRectTileOdd (pDrawable, pGC, nBox, pBox) - DrawablePtr pDrawable; - GCPtr pGC; - int nBox; - BoxPtr pBox; -{ - int xrot, yrot; - void (*fill)(DrawablePtr, int, BoxPtr, PixmapPtr, int, int, int, unsigned long); - - xrot = pDrawable->x + pGC->patOrg.x; - yrot = pDrawable->y + pGC->patOrg.y; -#if PSZ == 24 - if (pGC->tile.pixmap->drawable.width & 3) -#else - if (pGC->tile.pixmap->drawable.width & PIM) -#endif - { - fill = cfbFillBoxTileOddGeneral; - if ((pGC->planemask & PMSK) == PMSK) - { - if (pGC->alu == GXcopy) - fill = cfbFillBoxTileOddCopy; - } - } - else - { - fill = cfbFillBoxTile32sGeneral; - if ((pGC->planemask & PMSK) == PMSK) - { - if (pGC->alu == GXcopy) - fill = cfbFillBoxTile32sCopy; - } - } - (*fill) (pDrawable, nBox, pBox, pGC->tile.pixmap, xrot, yrot, pGC->alu, pGC->planemask); -} - -#define NUM_STACK_RECTS 1024 - -void -cfbPolyFillRect(pDrawable, pGC, nrectFill, prectInit) - DrawablePtr pDrawable; - register GCPtr pGC; - int nrectFill; /* number of rectangles to fill */ - xRectangle *prectInit; /* Pointer to first rectangle to fill */ -{ - xRectangle *prect; - RegionPtr prgnClip; - register BoxPtr pbox; - register BoxPtr pboxClipped; - BoxPtr pboxClippedBase; - BoxPtr pextent; - BoxRec stackRects[NUM_STACK_RECTS]; - cfbPrivGC *priv; - int numRects; - void (*BoxFill)(DrawablePtr, GCPtr, int, BoxPtr); - int n; - int xorg, yorg; - -#if PSZ != 8 - if ((pGC->fillStyle == FillStippled) || - (pGC->fillStyle == FillOpaqueStippled)) { - miPolyFillRect(pDrawable, pGC, nrectFill, prectInit); - return; - } -#endif - - priv = cfbGetGCPrivate(pGC); - prgnClip = pGC->pCompositeClip; - - BoxFill = 0; - switch (pGC->fillStyle) - { - case FillSolid: - switch (priv->rop) { - case GXcopy: - BoxFill = cfbFillRectSolidCopy; - break; - case GXxor: - BoxFill = cfbFillRectSolidXor; - break; - default: - BoxFill = cfbFillRectSolidGeneral; - break; - } - break; - case FillTiled: - if (!pGC->pRotatedPixmap) - BoxFill = cfbFillRectTileOdd; - else - { - if (pGC->alu == GXcopy && (pGC->planemask & PMSK) == PMSK) - BoxFill = cfbFillRectTile32Copy; - else - BoxFill = cfbFillRectTile32General; - } - break; -#if PSZ == 8 - case FillStippled: - if (!pGC->pRotatedPixmap) - BoxFill = cfb8FillRectStippledUnnatural; - else - BoxFill = cfb8FillRectTransparentStippled32; - break; - case FillOpaqueStippled: - if (!pGC->pRotatedPixmap) - BoxFill = cfb8FillRectStippledUnnatural; - else - BoxFill = cfb8FillRectOpaqueStippled32; - break; -#endif - } - prect = prectInit; - xorg = pDrawable->x; - yorg = pDrawable->y; - if (xorg || yorg) - { - prect = prectInit; - n = nrectFill; - while(n--) - { - prect->x += xorg; - prect->y += yorg; - prect++; - } - } - - prect = prectInit; - - numRects = REGION_NUM_RECTS(prgnClip) * nrectFill; - if (numRects > NUM_STACK_RECTS) - { - pboxClippedBase = (BoxPtr)xalloc(numRects * sizeof(BoxRec)); - if (!pboxClippedBase) - return; - } - else - pboxClippedBase = stackRects; - - pboxClipped = pboxClippedBase; - - if (REGION_NUM_RECTS(prgnClip) == 1) - { - int x1, y1, x2, y2, bx2, by2; - - pextent = REGION_RECTS(prgnClip); - x1 = pextent->x1; - y1 = pextent->y1; - x2 = pextent->x2; - y2 = pextent->y2; - while (nrectFill--) - { - if ((pboxClipped->x1 = prect->x) < x1) - pboxClipped->x1 = x1; - - if ((pboxClipped->y1 = prect->y) < y1) - pboxClipped->y1 = y1; - - bx2 = (int) prect->x + (int) prect->width; - if (bx2 > x2) - bx2 = x2; - pboxClipped->x2 = bx2; - - by2 = (int) prect->y + (int) prect->height; - if (by2 > y2) - by2 = y2; - pboxClipped->y2 = by2; - - prect++; - if ((pboxClipped->x1 < pboxClipped->x2) && - (pboxClipped->y1 < pboxClipped->y2)) - { - pboxClipped++; - } - } - } - else - { - int x1, y1, x2, y2, bx2, by2; - - pextent = REGION_EXTENTS(pGC->pScreen, prgnClip); - x1 = pextent->x1; - y1 = pextent->y1; - x2 = pextent->x2; - y2 = pextent->y2; - while (nrectFill--) - { - BoxRec box; - - if ((box.x1 = prect->x) < x1) - box.x1 = x1; - - if ((box.y1 = prect->y) < y1) - box.y1 = y1; - - bx2 = (int) prect->x + (int) prect->width; - if (bx2 > x2) - bx2 = x2; - box.x2 = bx2; - - by2 = (int) prect->y + (int) prect->height; - if (by2 > y2) - by2 = y2; - box.y2 = by2; - - prect++; - - if ((box.x1 >= box.x2) || (box.y1 >= box.y2)) - continue; - - n = REGION_NUM_RECTS (prgnClip); - pbox = REGION_RECTS(prgnClip); - - /* clip the rectangle to each box in the clip region - this is logically equivalent to calling Intersect() - */ - while(n--) - { - pboxClipped->x1 = max(box.x1, pbox->x1); - pboxClipped->y1 = max(box.y1, pbox->y1); - pboxClipped->x2 = min(box.x2, pbox->x2); - pboxClipped->y2 = min(box.y2, pbox->y2); - pbox++; - - /* see if clipping left anything */ - if(pboxClipped->x1 < pboxClipped->x2 && - pboxClipped->y1 < pboxClipped->y2) - { - pboxClipped++; - } - } - } - } - if (pboxClipped != pboxClippedBase) - (*BoxFill) (pDrawable, pGC, - pboxClipped-pboxClippedBase, pboxClippedBase); - if (pboxClippedBase != stackRects) - xfree(pboxClippedBase); -} diff --git a/cfb/cfbfillsp.c b/cfb/cfbfillsp.c deleted file mode 100644 index 36710b612..000000000 --- a/cfb/cfbfillsp.c +++ /dev/null @@ -1,1004 +0,0 @@ -/************************************************************ -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - -********************************************************/ - -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" -#include "gcstruct.h" -#include "window.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "windowstr.h" - -#include "cfb.h" -#include "cfbmskbits.h" - -#include "mergerop.h" - -#if PSZ == 8 -#include "cfb8bit.h" -#endif - -#define MFB_CONSTS_ONLY -#include "maskbits.h" - -#include "mi.h" -#include "mispans.h" - -/* scanline filling for color frame buffer - written by drewry, oct 1986 modified by smarks - changes for compatibility with Little-endian systems Jul 1987; MIT:yba. - - these routines all clip. they assume that anything that has called -them has already translated the points (i.e. pGC->miTranslate is -non-zero, which is howit gets set in cfbCreateGC().) - - the number of new scnalines created by clipping == -MaxRectsPerBand * nSpans. - - FillSolid is overloaded to be used for OpaqueStipple as well, -if fgPixel == bgPixel. -Note that for solids, PrivGC.rop == PrivGC.ropOpStip - - - FillTiled is overloaded to be used for OpaqueStipple, if -fgPixel != bgPixel. based on the fill style, it uses -{RotatedTile, gc.alu} or {RotatedStipple, PrivGC.ropOpStip} -*/ - -#ifdef notdef -#include -static -dumpspans(n, ppt, pwidth) - int n; - DDXPointPtr ppt; - int *pwidth; -{ - fprintf(stderr,"%d spans\n", n); - while (n--) { - fprintf(stderr, "[%d,%d] %d\n", ppt->x, ppt->y, *pwidth); - ppt++; - pwidth++; - } - fprintf(stderr, "\n"); -} -#endif - -/* Fill spans with tiles that aren't 32 bits wide */ -void -cfbUnnaturalTileFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted) -DrawablePtr pDrawable; -GC *pGC; -int nInit; /* number of spans to fill */ -DDXPointPtr pptInit; /* pointer to list of start points */ -int *pwidthInit; /* pointer to list of n widths */ -int fSorted; -{ - int n; /* number of spans to fill */ - register DDXPointPtr ppt; /* pointer to list of start points */ - register int *pwidth; /* pointer to list of n widths */ - void (*fill)(DrawablePtr, int, DDXPointPtr, int *, PixmapPtr, int, int, int, unsigned long); - int xrot, yrot; - - if (!(pGC->planemask)) - return; - -#if PSZ == 24 - if (pGC->tile.pixmap->drawable.width & 3) -#else - if (pGC->tile.pixmap->drawable.width & PIM) -#endif - { - fill = cfbFillSpanTileOddGeneral; - if ((pGC->planemask & PMSK) == PMSK) - { - if (pGC->alu == GXcopy) - fill = cfbFillSpanTileOddCopy; - } - } - else - { - fill = cfbFillSpanTile32sGeneral; - if ((pGC->planemask & PMSK) == PMSK) - { - if (pGC->alu == GXcopy) - fill = cfbFillSpanTile32sCopy; - } - } - n = nInit * miFindMaxBand( cfbGetCompositeClip(pGC) ); - if ( n == 0 ) - return; - pwidth = (int *)xalloc(n * sizeof(int)); - ppt = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec)); - if(!ppt || !pwidth) - { - if (ppt) xfree(ppt); - if (pwidth) xfree(pwidth); - return; - } - n = miClipSpans( cfbGetCompositeClip(pGC), - pptInit, pwidthInit, nInit, - ppt, pwidth, fSorted); - - xrot = pDrawable->x + pGC->patOrg.x; - yrot = pDrawable->y + pGC->patOrg.y; - - (*fill) (pDrawable, n, ppt, pwidth, pGC->tile.pixmap, xrot, yrot, pGC->alu, pGC->planemask); - - xfree(ppt); - xfree(pwidth); -} - -#if PSZ == 8 - -void -cfbUnnaturalStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted) -DrawablePtr pDrawable; -GC *pGC; -int nInit; /* number of spans to fill */ -DDXPointPtr pptInit; /* pointer to list of start points */ -int *pwidthInit; /* pointer to list of n widths */ -int fSorted; -{ - /* next three parameters are post-clip */ - int n; /* number of spans to fill */ - DDXPointPtr ppt; /* pointer to list of start points */ - int *pwidth; /* pointer to list of n widths */ - int *pwidthFree;/* copies of the pointers to free */ - DDXPointPtr pptFree; - CfbBits *pdstBase; /* pointer to start of bitmap */ - int nlwDst; /* width in longwords of bitmap */ - register CfbBits *pdst; /* pointer to current word in bitmap */ - PixmapPtr pStipple; /* pointer to stipple we want to fill with */ - int nlw; - int x, y, w, xrem, xSrc, ySrc; - int stwidth, stippleWidth; - int stippleHeight; - register CfbBits bits, inputBits; - register int partBitsLeft; - int nextPartBits; - int bitsLeft, bitsWhole; - CfbBits *srcTemp, *srcStart; - CfbBits *psrcBase; - CfbBits startmask, endmask; - - if (pGC->fillStyle == FillStippled) - cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask); - else - cfb8CheckOpaqueStipple (pGC->alu, pGC->fgPixel, pGC->bgPixel, pGC->planemask); - - if (cfb8StippleRRop == GXnoop) - return; - - n = nInit * miFindMaxBand( cfbGetCompositeClip(pGC) ); - if ( n == 0 ) - return; - pwidthFree = (int *)xalloc(n * sizeof(int)); - pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec)); - if(!pptFree || !pwidthFree) - { - if (pptFree) xfree(pptFree); - if (pwidthFree) xfree(pwidthFree); - return; - } - - pwidth = pwidthFree; - ppt = pptFree; - n = miClipSpans( cfbGetCompositeClip(pGC), - pptInit, pwidthInit, nInit, - ppt, pwidth, fSorted); - - /* - * OK, so what's going on here? We have two Drawables: - * - * The Stipple: - * Depth = 1 - * Width = stippleWidth - * Words per scanline = stwidth - * Pointer to pixels = pStipple->devPrivate.ptr - */ - - pStipple = pGC->stipple; - - stwidth = pStipple->devKind >> PWSH; - stippleWidth = pStipple->drawable.width; - stippleHeight = pStipple->drawable.height; - psrcBase = (CfbBits *) pStipple->devPrivate.ptr; - - /* - * The Target: - * Depth = PSZ - * Width = determined from *pwidth - * Words per scanline = nlwDst - * Pointer to pixels = addrlBase - */ - - cfbGetLongWidthAndPointer (pDrawable, nlwDst, pdstBase) - - /* this replaces rotating the stipple. Instead we just adjust the offset - * at which we start grabbing bits from the stipple. - * Ensure that ppt->x - xSrc >= 0 and ppt->y - ySrc >= 0, - * so that iline and xrem always stay within the stipple bounds. - */ - - modulus (pGC->patOrg.x, stippleWidth, xSrc); - xSrc += pDrawable->x - stippleWidth; - modulus (pGC->patOrg.y, stippleHeight, ySrc); - ySrc += pDrawable->y - stippleHeight; - - bitsWhole = stippleWidth; - - while (n--) - { - x = ppt->x; - y = ppt->y; - ppt++; - w = *pwidth++; - pdst = pdstBase + y * nlwDst + (x >> PWSH); - y = (y - ySrc) % stippleHeight; - srcStart = psrcBase + y * stwidth; - xrem = ((x & ~(PGSZB-1)) - xSrc) % stippleWidth; - srcTemp = srcStart + (xrem >> MFB_PWSH); - bitsLeft = stippleWidth - (xrem & ~MFB_PIM); - xrem &= MFB_PIM; - NextUnnaturalStippleWord - if (partBitsLeft < xrem) - FatalError ("cfbUnnaturalStippleFS bad partBitsLeft %d xrem %d", - partBitsLeft, xrem); - NextSomeBits (inputBits, xrem); - partBitsLeft -= xrem; - if (((x & PIM) + w) <= PPW) - { - maskpartialbits (x, w, startmask) - NextUnnaturalStippleBits - *pdst = MaskRRopPixels(*pdst,bits,startmask); - } - else - { - maskbits (x, w, startmask, endmask, nlw); - nextPartBits = (x & (PGSZB-1)) + w; - if (nextPartBits < partBitsLeft) - { - if (startmask) - { - MaskRRopBitGroup(pdst,GetBitGroup(inputBits),startmask) - pdst++; - NextBitGroup (inputBits); - } - while (nlw--) - { - RRopBitGroup (pdst, GetBitGroup (inputBits)); - pdst++; - NextBitGroup (inputBits); - } - if (endmask) - { - MaskRRopBitGroup(pdst,GetBitGroup(inputBits),endmask) - } - } - else if (bitsLeft != bitsWhole && nextPartBits < partBitsLeft + bitsLeft) - { - NextUnnaturalStippleBitsFast - if (startmask) - { - *pdst = MaskRRopPixels(*pdst,bits,startmask); - pdst++; - NextUnnaturalStippleBitsFast - } - while (nlw--) - { - *pdst = RRopPixels(*pdst,bits); - pdst++; - NextUnnaturalStippleBitsFast - } - if (endmask) - *pdst = MaskRRopPixels (*pdst,bits,endmask); - } - else - { - NextUnnaturalStippleBits - if (startmask) - { - *pdst = MaskRRopPixels(*pdst,bits,startmask); - pdst++; - NextUnnaturalStippleBits - } - while (nlw--) - { - *pdst = RRopPixels(*pdst,bits); - pdst++; - NextUnnaturalStippleBits - } - if (endmask) - *pdst = MaskRRopPixels(*pdst,bits,endmask); - } - } - } - xfree(pptFree); - xfree(pwidthFree); -} - -#else /* PSZ != 8 */ - -/* Fill spans with stipples that aren't 32 bits wide */ -void -cfbUnnaturalStippleFS(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted) -DrawablePtr pDrawable; -GC *pGC; -int nInit; /* number of spans to fill */ -DDXPointPtr pptInit; /* pointer to list of start points */ -int *pwidthInit; /* pointer to list of n widths */ -int fSorted; -{ - /* next three parameters are post-clip */ - int n; /* number of spans to fill */ - register DDXPointPtr ppt; /* pointer to list of start points */ - register int *pwidth; /* pointer to list of n widths */ - int iline; /* first line of tile to use */ - CfbBits *addrlBase; /* pointer to start of bitmap */ - int nlwidth; /* width in longwords of bitmap */ - register CfbBits *pdst; /* pointer to current word in bitmap */ - PixmapPtr pStipple; /* pointer to stipple we want to fill with */ - register int w; - int width, x, xrem, xSrc, ySrc; - CfbBits tmpSrc, tmpDst1, tmpDst2; - int stwidth, stippleWidth; - CfbBits *psrcS; - int rop, stiprop = 0; - int stippleHeight; - int *pwidthFree; /* copies of the pointers to free */ - DDXPointPtr pptFree; - CfbBits fgfill, bgfill; - - if (!(pGC->planemask)) - return; - - n = nInit * miFindMaxBand( cfbGetCompositeClip(pGC) ); - if ( n == 0 ) - return; - pwidthFree = (int *)xalloc(n * sizeof(int)); - pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec)); - if(!pptFree || !pwidthFree) - { - if (pptFree) xfree(pptFree); - if (pwidthFree) xfree(pwidthFree); - return; - } - pwidth = pwidthFree; - ppt = pptFree; - n = miClipSpans( cfbGetCompositeClip(pGC), - pptInit, pwidthInit, nInit, - ppt, pwidth, fSorted); - rop = pGC->alu; - if (pGC->fillStyle == FillStippled) { - switch (rop) { - case GXand: - case GXcopy: - case GXnoop: - case GXor: - stiprop = rop; - break; - default: - stiprop = rop; - rop = GXcopy; - } - } - fgfill = PFILL(pGC->fgPixel); - bgfill = PFILL(pGC->bgPixel); - - /* - * OK, so what's going on here? We have two Drawables: - * - * The Stipple: - * Depth = 1 - * Width = stippleWidth - * Words per scanline = stwidth - * Pointer to pixels = pStipple->devPrivate.ptr - */ - pStipple = pGC->stipple; - - stwidth = pStipple->devKind / PGSZB; - stippleWidth = pStipple->drawable.width; - stippleHeight = pStipple->drawable.height; - - /* - * The Target: - * Depth = PSZ - * Width = determined from *pwidth - * Words per scanline = nlwidth - * Pointer to pixels = addrlBase - */ - - cfbGetLongWidthAndPointer (pDrawable, nlwidth, addrlBase) - - /* this replaces rotating the stipple. Instead we just adjust the offset - * at which we start grabbing bits from the stipple. - * Ensure that ppt->x - xSrc >= 0 and ppt->y - ySrc >= 0, - * so that iline and xrem always stay within the stipple bounds. - */ - modulus (pGC->patOrg.x, stippleWidth, xSrc); - xSrc += pDrawable->x - stippleWidth; - modulus (pGC->patOrg.y, stippleHeight, ySrc); - ySrc += pDrawable->y - stippleHeight; - - while (n--) - { - iline = (ppt->y - ySrc) % stippleHeight; - x = ppt->x; - pdst = addrlBase + (ppt->y * nlwidth); - psrcS = (CfbBits *) pStipple->devPrivate.ptr + (iline * stwidth); - - if (*pwidth) - { - width = *pwidth; - while(width > 0) - { - int xtemp; -#if PSZ != 32 || PPW != 1 - int tmpx; -#endif - register CfbBits *ptemp; - register CfbBits *pdsttmp; - /* - * Do a stripe through the stipple & destination w pixels - * wide. w is not more than: - * - the width of the destination - * - the width of the stipple - * - the distance between x and the next word - * boundary in the destination - * - the distance between x and the next word - * boundary in the stipple - */ - - /* width of dest/stipple */ - xrem = (x - xSrc) % stippleWidth; -#if PSZ == 24 - w = 1; -#else - w = min((stippleWidth - xrem), width); - /* dist to word bound in dest */ - w = min(w, PPW - (x & PIM)); - /* dist to word bound in stip */ - w = min(w, MFB_PPW - (x & MFB_PIM)); -#endif - - xtemp = (xrem & MFB_PIM); - ptemp = (CfbBits *)(psrcS + (xrem >> MFB_PWSH)); -#if PSZ == 24 - tmpx = x & 3; - pdsttmp = pdst + ((x * 3)>>2); -#else -#if PSZ != 32 || PPW != 1 - tmpx = x & PIM; -#endif - pdsttmp = pdst + (x>>PWSH); -#endif - switch ( pGC->fillStyle ) { - case FillOpaqueStippled: -#if PSZ == 24 - getstipplepixels24(ptemp, xtemp, 0, &bgfill, &tmpDst1, xrem); - getstipplepixels24(ptemp, xtemp, 1, &fgfill, &tmpDst2, xrem); -#else - getstipplepixels(ptemp, xtemp, w, 0, &bgfill, &tmpDst1); - getstipplepixels(ptemp, xtemp, w, 1, &fgfill, &tmpDst2); -#endif - break; - case FillStippled: - /* Fill tmpSrc with the source pixels */ -#if PSZ == 24 - getbits24(pdsttmp, tmpSrc, x); - getstipplepixels24(ptemp, xtemp, 0, &tmpSrc, &tmpDst1, xrem); -#else - getbits(pdsttmp, tmpx, w, tmpSrc); - getstipplepixels(ptemp, xtemp, w, 0, &tmpSrc, &tmpDst1); -#endif - if (rop != stiprop) { -#if PSZ == 24 - putbitsrop24(fgfill, 0, &tmpSrc, pGC->planemask, stiprop); -#else - putbitsrop(fgfill, 0, w, &tmpSrc, pGC->planemask, stiprop); -#endif - } else { - tmpSrc = fgfill; - } -#if PSZ == 24 - getstipplepixels24(ptemp, xtemp, 1, &tmpSrc, &tmpDst2, xrem); -#else - getstipplepixels(ptemp, xtemp, w, 1, &tmpSrc, &tmpDst2); -#endif - break; - } - tmpDst2 |= tmpDst1; -#if PSZ == 24 - putbitsrop24(tmpDst2, tmpx, pdsttmp, pGC->planemask, rop); -#else - putbitsrop(tmpDst2, tmpx, w, pdsttmp, pGC->planemask, rop); -#endif - x += w; - width -= w; - } - } - ppt++; - pwidth++; - } - xfree(pptFree); - xfree(pwidthFree); -} - -#endif /* PSZ == 8 */ - -#if PSZ == 8 - -void -cfb8Stipple32FS (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted) - DrawablePtr pDrawable; - GCPtr pGC; - int nInit; /* number of spans to fill */ - DDXPointPtr pptInit; /* pointer to list of start points */ - int *pwidthInit; /* pointer to list of n widths */ - int fSorted; -{ - /* next three parameters are post-clip */ - int n; /* number of spans to fill */ - DDXPointPtr ppt; /* pointer to list of start points */ - int *pwidth; /* pointer to list of n widths */ - CfbBits *src; /* pointer to bits in stipple, if needed */ - int stippleHeight; /* height of the stipple */ - PixmapPtr stipple; - - int nlwDst; /* width in longwords of the dest pixmap */ - int x,y,w; /* current span */ - CfbBits startmask; - CfbBits endmask; - register CfbBits *dst; /* pointer to bits we're writing */ - register int nlw; - CfbBits *dstTmp; - int nlwTmp; - - CfbBits *pbits; /* pointer to start of pixmap */ - register CfbBits xor; - register CfbBits mask; - register CfbBits bits; /* bits from stipple */ - int wEnd; - - int *pwidthFree; /* copies of the pointers to free */ - DDXPointPtr pptFree; - cfbPrivGCPtr devPriv; - - devPriv = cfbGetGCPrivate(pGC); - cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask); - n = nInit * miFindMaxBand(pGC->pCompositeClip); - if ( n == 0 ) - return; - pwidthFree = (int *)xalloc(n * sizeof(int)); - pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec)); - if(!pptFree || !pwidthFree) - { - if (pptFree) xfree(pptFree); - if (pwidthFree) xfree(pwidthFree); - return; - } - pwidth = pwidthFree; - ppt = pptFree; - n = miClipSpans(pGC->pCompositeClip, pptInit, pwidthInit, nInit, - ppt, pwidth, fSorted); - - stipple = pGC->pRotatedPixmap; - src = (CfbBits *)stipple->devPrivate.ptr; - stippleHeight = stipple->drawable.height; - - cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits) - - while (n--) - { - w = *pwidth++; - x = ppt->x; - y = ppt->y; - ppt++; - dst = pbits + (y * nlwDst) + (x >> PWSH); - if (((x & PIM) + w) <= PPW) - { - maskpartialbits(x, w, startmask); - endmask = 0; - nlw = 0; - } - else - { - maskbits (x, w, startmask, endmask, nlw); - } - bits = src[y % stippleHeight]; - RotBitsLeft (bits, (x & ((PGSZ-1) & ~PIM))); -#if PPW == 4 - if (cfb8StippleRRop == GXcopy) - { - xor = devPriv->xor; - if (w < (PGSZ*2)) - { - if (startmask) - { - mask = cfb8PixelMasks[GetBitGroup(bits)]; - *dst = (*dst & ~(mask & startmask)) | - (xor & (mask & startmask)); - dst++; - RotBitsLeft (bits, PGSZB); - } - while (nlw--) - { - WriteBitGroup (dst,xor,GetBitGroup(bits)) - dst++; - RotBitsLeft (bits, PGSZB); - } - if (endmask) - { - mask = cfb8PixelMasks[GetBitGroup(bits)]; - *dst = (*dst & ~(mask & endmask)) | - (xor & (mask & endmask)); - } - } - else - { /* XXX constants probably not OK here */ - wEnd = 7 - (nlw & 7); - nlw = (nlw >> 3) + 1; - dstTmp = dst; - nlwTmp = nlw; - if (startmask) - { - mask = cfb8PixelMasks[GetBitGroup(bits)]; - *dstTmp = (*dstTmp & ~(mask & startmask)) | - (xor & (mask & startmask)); - dstTmp++; - RotBitsLeft (bits, PGSZB); - } - w = 7 - wEnd; - while (w--) - { - dst = dstTmp; - dstTmp++; - nlw = nlwTmp; -#if defined(__GNUC__) && defined(mc68020) - mask = cfb8PixelMasks[GetBitGroup(bits)]; - xor = xor & mask; - mask = ~mask; - while (nlw--) - { - *dst = (*dst & mask) | xor; - dst += 8; - } - xor = devPriv->xor; -#else -#define SwitchBitsLoop(body) \ - while (nlw--) \ - { \ - body \ - dst += 8; \ - } - SwitchBitGroup(dst, xor, GetBitGroup(bits)); -#undef SwitchBitsLoop -#endif - NextBitGroup (bits); - } - nlwTmp--; - w = wEnd + 1; - if (endmask) - { - mask = cfb8PixelMasks[GetBitGroup(bits)]; - dst = dstTmp + (nlwTmp << 3); - *dst = (*dst & ~(mask & endmask)) | - (xor & (mask & endmask)); - } - while (w--) - { - nlw = nlwTmp; - dst = dstTmp; - dstTmp++; -#if defined(__GNUC__) && defined(mc68020) - mask = cfb8PixelMasks[GetBitGroup(bits)]; - xor = xor & mask; - mask = ~mask; - while (nlw--) - { - *dst = (*dst & mask) | xor; - dst += 8; - } - xor = devPriv->xor; -#else -#define SwitchBitsLoop(body) \ - while (nlw--) \ - { \ - body \ - dst += 8; \ - } - SwitchBitGroup(dst, xor, GetBitGroup(bits)); -#undef SwitchBitsLoop -#endif - NextBitGroup (bits); - } - } - } - else -#endif /* PPW == 4 */ - { - if (startmask) - { - xor = GetBitGroup(bits); - *dst = MaskRRopPixels(*dst, xor, startmask); - dst++; - RotBitsLeft (bits, PGSZB); - } - while (nlw--) - { - RRopBitGroup(dst, GetBitGroup(bits)); - dst++; - RotBitsLeft (bits, PGSZB); - } - if (endmask) - { - xor = GetBitGroup(bits); - *dst = MaskRRopPixels(*dst, xor, endmask); - } - } - } - xfree(pptFree); - xfree(pwidthFree); -} - -void -cfb8OpaqueStipple32FS (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted) - DrawablePtr pDrawable; - GCPtr pGC; - int nInit; /* number of spans to fill */ - DDXPointPtr pptInit; /* pointer to list of start points */ - int *pwidthInit; /* pointer to list of n widths */ - int fSorted; -{ - /* next three parameters are post-clip */ - int n; /* number of spans to fill */ - DDXPointPtr ppt; /* pointer to list of start points */ - int *pwidth; /* pointer to list of n widths */ - CfbBits *src; /* pointer to bits in stipple, if needed */ - int stippleHeight; /* height of the stipple */ - PixmapPtr stipple; - - int nlwDst; /* width in longwords of the dest pixmap */ - int x,y,w; /* current span */ - CfbBits startmask; - CfbBits endmask; - register CfbBits *dst; /* pointer to bits we're writing */ - register int nlw; - CfbBits *dstTmp; - int nlwTmp; - - CfbBits *pbits; /* pointer to start of pixmap */ - register CfbBits xor; - register CfbBits bits; /* bits from stipple */ - int wEnd; - - int *pwidthFree; /* copies of the pointers to free */ - DDXPointPtr pptFree; - cfbPrivGCPtr devPriv; - - devPriv = cfbGetGCPrivate(pGC); - - cfb8CheckOpaqueStipple(pGC->alu, pGC->fgPixel, pGC->bgPixel, pGC->planemask); - - n = nInit * miFindMaxBand(pGC->pCompositeClip); - if ( n == 0 ) - return; - pwidthFree = (int *)xalloc(n * sizeof(int)); - pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec)); - if(!pptFree || !pwidthFree) - { - if (pptFree) xfree(pptFree); - if (pwidthFree) xfree(pwidthFree); - return; - } - pwidth = pwidthFree; - ppt = pptFree; - n = miClipSpans(pGC->pCompositeClip, pptInit, pwidthInit, nInit, - ppt, pwidth, fSorted); - - stipple = pGC->pRotatedPixmap; - src = (CfbBits *)stipple->devPrivate.ptr; - stippleHeight = stipple->drawable.height; - - cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits) - - while (n--) - { - w = *pwidth++; - x = ppt->x; - y = ppt->y; - ppt++; - dst = pbits + (y * nlwDst) + (x >> PWSH); - if (((x & PIM) + w) <= PPW) - { - maskpartialbits(x, w, startmask); - endmask = 0; - nlw = 0; - } - else - { - maskbits (x, w, startmask, endmask, nlw); - } - bits = src[y % stippleHeight]; - RotBitsLeft (bits, (x & ((PGSZ-1) & ~PIM))); -#if PPW == 4 - if (cfb8StippleRRop == GXcopy) - { - xor = devPriv->xor; - if (w < PGSZ*2) - { - if (startmask) - { - *dst = (*dst & ~startmask) | - (GetPixelGroup (bits) & startmask); - dst++; - RotBitsLeft (bits, PGSZB); - } - while (nlw--) - { - *dst++ = GetPixelGroup(bits); - RotBitsLeft (bits, PGSZB); - } - if (endmask) - { - *dst = (*dst & ~endmask) | - (GetPixelGroup (bits) & endmask); - } - } - else - { /* XXX consts probably not OK here */ - wEnd = 7 - (nlw & 7); - nlw = (nlw >> 3) + 1; - dstTmp = dst; - nlwTmp = nlw; - if (startmask) - { - *dstTmp = (*dstTmp & ~startmask) | - (GetPixelGroup (bits) & startmask); - dstTmp++; - RotBitsLeft (bits, PGSZB); - } - w = 7 - wEnd; - while (w--) - { - nlw = nlwTmp; - dst = dstTmp; - dstTmp++; - xor = GetPixelGroup (bits); - while (nlw--) - { - *dst = xor; - dst += 8; - } - NextBitGroup (bits); - } - nlwTmp--; - w = wEnd + 1; - if (endmask) - { - dst = dstTmp + (nlwTmp << 3); - *dst = (*dst & ~endmask) | - (GetPixelGroup (bits) & endmask); - } - while (w--) - { - nlw = nlwTmp; - dst = dstTmp; - dstTmp++; - xor = GetPixelGroup (bits); - while (nlw--) - { - *dst = xor; - dst += 8; - } - NextBitGroup (bits); - } - } - } - else -#endif /* PPW == 4 */ - { - if (startmask) - { - xor = GetBitGroup(bits); - *dst = MaskRRopPixels(*dst, xor, startmask); - dst++; - RotBitsLeft (bits, PGSZB); - } - while (nlw--) - { - RRopBitGroup(dst, GetBitGroup(bits)); - dst++; - RotBitsLeft (bits, PGSZB); - } - if (endmask) - { - xor = GetBitGroup(bits); - *dst = MaskRRopPixels(*dst, xor, endmask); - } - } - } - xfree(pptFree); - xfree(pwidthFree); -} - -#endif /* PSZ == 8 */ diff --git a/cfb/cfbgc.c b/cfb/cfbgc.c deleted file mode 100644 index a74c28c15..000000000 --- a/cfb/cfbgc.c +++ /dev/null @@ -1,799 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include -#include -#include -#include "cfb.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "region.h" - -#include "mistruct.h" -#include "mibstore.h" -#include "migc.h" - -#include "cfbmskbits.h" -#include "cfb8bit.h" - -#if PSZ == 8 -# define useTEGlyphBlt cfbTEGlyphBlt8 -#else -# ifdef WriteBitGroup -# define useTEGlyphBlt cfbImageGlyphBlt8 -# else -# define useTEGlyphBlt cfbTEGlyphBlt -# endif -#endif - -#ifdef WriteBitGroup -# define useImageGlyphBlt cfbImageGlyphBlt8 -# define usePolyGlyphBlt cfbPolyGlyphBlt8 -#else -# define useImageGlyphBlt miImageGlyphBlt -# define usePolyGlyphBlt miPolyGlyphBlt -#endif - -static void cfbUnPushPixels (GCPtr, PixmapPtr, DrawablePtr, int, int, int, int); - -#ifdef FOUR_BIT_CODE -# define usePushPixels cfbPushPixels8 -#else -# define usePushPixels cfbUnPushPixels -#endif - -#ifdef PIXEL_ADDR -# define ZeroPolyArc cfbZeroPolyArcSS8Copy -#else -# define ZeroPolyArc miZeroPolyArc -#endif - -GCFuncs cfbGCFuncs = { - cfbValidateGC, - miChangeGC, - miCopyGC, - miDestroyGC, - miChangeClip, - miDestroyClip, - miCopyClip, -}; - -GCOps cfbTEOps1Rect = { - cfbSolidSpansCopy, - cfbSetSpans, - cfbPutImage, - cfbCopyArea, - cfbCopyPlane, - cfbPolyPoint, -#ifdef PIXEL_ADDR - cfb8LineSS1Rect, - cfb8SegmentSS1Rect, -#else - cfbLineSS, - cfbSegmentSS, -#endif - miPolyRectangle, - ZeroPolyArc, - cfbFillPoly1RectCopy, - cfbPolyFillRect, - cfbPolyFillArcSolidCopy, - miPolyText8, - miPolyText16, - miImageText8, - miImageText16, - useTEGlyphBlt, - usePolyGlyphBlt, - usePushPixels -}; - -GCOps cfbNonTEOps1Rect = { - cfbSolidSpansCopy, - cfbSetSpans, - cfbPutImage, - cfbCopyArea, - cfbCopyPlane, - cfbPolyPoint, -#ifdef PIXEL_ADDR - cfb8LineSS1Rect, - cfb8SegmentSS1Rect, -#else - cfbLineSS, - cfbSegmentSS, -#endif - miPolyRectangle, - ZeroPolyArc, - cfbFillPoly1RectCopy, - cfbPolyFillRect, - cfbPolyFillArcSolidCopy, - miPolyText8, - miPolyText16, - miImageText8, - miImageText16, - useImageGlyphBlt, - usePolyGlyphBlt, - usePushPixels -}; - -GCOps cfbTEOps = { - cfbSolidSpansCopy, - cfbSetSpans, - cfbPutImage, - cfbCopyArea, - cfbCopyPlane, - cfbPolyPoint, - cfbLineSS, - cfbSegmentSS, - miPolyRectangle, - ZeroPolyArc, - miFillPolygon, - cfbPolyFillRect, - cfbPolyFillArcSolidCopy, - miPolyText8, - miPolyText16, - miImageText8, - miImageText16, - useTEGlyphBlt, - usePolyGlyphBlt, - usePushPixels -}; - -GCOps cfbNonTEOps = { - cfbSolidSpansCopy, - cfbSetSpans, - cfbPutImage, - cfbCopyArea, - cfbCopyPlane, - cfbPolyPoint, - cfbLineSS, - cfbSegmentSS, - miPolyRectangle, -#ifdef PIXEL_ADDR - cfbZeroPolyArcSS8Copy, -#else - miZeroPolyArc, -#endif - miFillPolygon, - cfbPolyFillRect, - cfbPolyFillArcSolidCopy, - miPolyText8, - miPolyText16, - miImageText8, - miImageText16, - useImageGlyphBlt, - usePolyGlyphBlt, - usePushPixels -}; - -GCOps * -cfbMatchCommon (pGC, devPriv) - GCPtr pGC; - cfbPrivGCPtr devPriv; -{ - if (pGC->lineWidth != 0) - return 0; - if (pGC->lineStyle != LineSolid) - return 0; - if (pGC->fillStyle != FillSolid) - return 0; - if (devPriv->rop != GXcopy) - return 0; - if (pGC->font && - FONTMAXBOUNDS(pGC->font,rightSideBearing) - - FONTMINBOUNDS(pGC->font,leftSideBearing) <= 32 && - FONTMINBOUNDS(pGC->font,characterWidth) >= 0) - { - if (TERMINALFONT(pGC->font) -#ifdef FOUR_BIT_CODE - && FONTMAXBOUNDS(pGC->font,characterWidth) >= PGSZB -#endif - ) -#ifdef NO_ONE_RECT - return &cfbTEOps1Rect; -#else - if (devPriv->oneRect) - return &cfbTEOps1Rect; - else - return &cfbTEOps; -#endif - else -#ifdef NO_ONE_RECT - return &cfbNonTEOps1Rect; -#else - if (devPriv->oneRect) - return &cfbNonTEOps1Rect; - else - return &cfbNonTEOps; -#endif - } - return 0; -} - -Bool -cfbCreateGC(pGC) - register GCPtr pGC; -{ - cfbPrivGC *pPriv; - - if (PixmapWidthPaddingInfo[pGC->depth].padPixelsLog2 == LOG2_BITMAP_PAD) - return (mfbCreateGC(pGC)); - pGC->clientClip = NULL; - pGC->clientClipType = CT_NONE; - - if (cfbNonTEOps.PushPixels == cfbUnPushPixels) - { - cfbTEOps1Rect.PushPixels = mfbPushPixelsWeak(); - cfbNonTEOps1Rect.PushPixels = mfbPushPixelsWeak(); - cfbTEOps.PushPixels = mfbPushPixelsWeak(); - cfbNonTEOps.PushPixels = mfbPushPixelsWeak(); - } - - /* - * some of the output primitives aren't really necessary, since they - * will be filled in ValidateGC because of dix/CreateGC() setting all - * the change bits. Others are necessary because although they depend - * on being a color frame buffer, they don't change - */ - - pGC->ops = &cfbNonTEOps; - pGC->funcs = &cfbGCFuncs; - - /* cfb wants to translate before scan conversion */ - pGC->miTranslate = 1; - - pPriv = cfbGetGCPrivate(pGC); - pPriv->rop = pGC->alu; - pPriv->oneRect = FALSE; - pGC->fExpose = TRUE; - pGC->freeCompClip = FALSE; - pGC->pRotatedPixmap = (PixmapPtr) NULL; - return TRUE; -} - -/* Clipping conventions - if the drawable is a window - CT_REGION ==> pCompositeClip really is the composite - CT_other ==> pCompositeClip is the window clip region - if the drawable is a pixmap - CT_REGION ==> pCompositeClip is the translated client region - clipped to the pixmap boundary - CT_other ==> pCompositeClip is the pixmap bounding box -*/ - -void -cfbValidateGC(pGC, changes, pDrawable) - register GCPtr pGC; - unsigned long changes; - DrawablePtr pDrawable; -{ - int mask; /* stateChanges */ - int index; /* used for stepping through bitfields */ - int new_rrop; - int new_line, new_text, new_fillspans, new_fillarea; - int new_rotate; - int xrot, yrot; - /* flags for changing the proc vector */ - cfbPrivGCPtr devPriv; - int oneRect; - - new_rotate = pGC->lastWinOrg.x != pDrawable->x || - pGC->lastWinOrg.y != pDrawable->y; - - pGC->lastWinOrg.x = pDrawable->x; - pGC->lastWinOrg.y = pDrawable->y; - devPriv = cfbGetGCPrivate(pGC); - - new_rrop = FALSE; - new_line = FALSE; - new_text = FALSE; - new_fillspans = FALSE; - new_fillarea = FALSE; - - /* - * if the client clip is different or moved OR the subwindowMode has - * changed OR the window's clip has changed since the last validation - * we need to recompute the composite clip - */ - - if ((changes & (GCClipXOrigin|GCClipYOrigin|GCClipMask|GCSubwindowMode)) || - (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS)) - ) - { - miComputeCompositeClip (pGC, pDrawable); -#ifdef NO_ONE_RECT - devPriv->oneRect = FALSE; -#else - oneRect = REGION_NUM_RECTS(pGC->pCompositeClip) == 1; - if (oneRect != devPriv->oneRect) - new_line = TRUE; - devPriv->oneRect = oneRect; -#endif - } - - mask = changes; - while (mask) { - index = lowbit (mask); - mask &= ~index; - - /* - * this switch acculmulates a list of which procedures might have - * to change due to changes in the GC. in some cases (e.g. - * changing one 16 bit tile for another) we might not really need - * a change, but the code is being paranoid. this sort of batching - * wins if, for example, the alu and the font have been changed, - * or any other pair of items that both change the same thing. - */ - switch (index) { - case GCFunction: - case GCForeground: - new_rrop = TRUE; - break; - case GCPlaneMask: - new_rrop = TRUE; - new_text = TRUE; - break; - case GCBackground: - break; - case GCLineStyle: - case GCLineWidth: - new_line = TRUE; - break; - case GCJoinStyle: - case GCCapStyle: - break; - case GCFillStyle: - new_text = TRUE; - new_fillspans = TRUE; - new_line = TRUE; - new_fillarea = TRUE; - break; - case GCFillRule: - break; - case GCTile: - new_fillspans = TRUE; - new_fillarea = TRUE; - break; - - case GCStipple: - if (pGC->stipple) - { - int width = pGC->stipple->drawable.width; - PixmapPtr nstipple; - - if ((width <= PGSZ) && !(width & (width - 1)) && - (nstipple = cfbCopyPixmap(pGC->stipple))) - { - cfbPadPixmap(nstipple); - (*pGC->pScreen->DestroyPixmap)(pGC->stipple); - pGC->stipple = nstipple; - } - } - new_fillspans = TRUE; - new_fillarea = TRUE; - break; - - case GCTileStipXOrigin: - new_rotate = TRUE; - break; - - case GCTileStipYOrigin: - new_rotate = TRUE; - break; - - case GCFont: - new_text = TRUE; - break; - case GCSubwindowMode: - break; - case GCGraphicsExposures: - break; - case GCClipXOrigin: - break; - case GCClipYOrigin: - break; - case GCClipMask: - break; - case GCDashOffset: - break; - case GCDashList: - break; - case GCArcMode: - break; - default: - break; - } - } - - /* - * If the drawable has changed, ensure suitable - * entries are in the proc vector. - */ - if (pDrawable->serialNumber != (pGC->serialNumber & (DRAWABLE_SERIAL_BITS))) { - new_fillspans = TRUE; /* deal with FillSpans later */ - } - - if (new_rotate || new_fillspans) - { - Bool new_pix = FALSE; - - xrot = pGC->patOrg.x + pDrawable->x; - yrot = pGC->patOrg.y + pDrawable->y; - - switch (pGC->fillStyle) - { - case FillTiled: - if (!pGC->tileIsPixel) - { - int width = pGC->tile.pixmap->drawable.width * PSZ; - - if ((width <= PGSZ) && !(width & (width - 1))) - { - cfbCopyRotatePixmap(pGC->tile.pixmap, &pGC->pRotatedPixmap, - xrot, yrot); - new_pix = TRUE; - } - } - break; -#ifdef FOUR_BIT_CODE - case FillStippled: - case FillOpaqueStippled: - { - int width = pGC->stipple->drawable.width; - - if ((width <= PGSZ) && !(width & (width - 1))) - { - mfbCopyRotatePixmap(pGC->stipple, &pGC->pRotatedPixmap, - xrot, yrot); - new_pix = TRUE; - } - } - break; -#endif - } - if (!new_pix && pGC->pRotatedPixmap) - { - (*pGC->pScreen->DestroyPixmap)(pGC->pRotatedPixmap); - pGC->pRotatedPixmap = (PixmapPtr) NULL; - } - } - - if (new_rrop) - { - int old_rrop; - - old_rrop = devPriv->rop; - devPriv->rop = cfbReduceRasterOp (pGC->alu, pGC->fgPixel, - pGC->planemask, - &devPriv->and, &devPriv->xor); - if (old_rrop == devPriv->rop) - new_rrop = FALSE; - else - { -#ifdef PIXEL_ADDR - new_line = TRUE; -#endif -#ifdef WriteBitGroup - new_text = TRUE; -#endif - new_fillspans = TRUE; - new_fillarea = TRUE; - } - } - - if (new_rrop || new_fillspans || new_text || new_fillarea || new_line) - { - GCOps *newops; - - if ((newops = cfbMatchCommon (pGC, devPriv))) - { - if (pGC->ops->devPrivate.val) - miDestroyGCOps (pGC->ops); - pGC->ops = newops; - new_rrop = new_line = new_fillspans = new_text = new_fillarea = 0; - } - else - { - if (!pGC->ops->devPrivate.val) - { - pGC->ops = miCreateGCOps (pGC->ops); - pGC->ops->devPrivate.val = 1; - } - } - } - - /* deal with the changes we've collected */ - if (new_line) - { - pGC->ops->FillPolygon = miFillPolygon; -#ifdef NO_ONE_RECT - if (pGC->fillStyle == FillSolid) - { - switch (devPriv->rop) { - case GXcopy: - pGC->ops->FillPolygon = cfbFillPoly1RectCopy; - break; - default: - pGC->ops->FillPolygon = cfbFillPoly1RectGeneral; - break; - } - } -#else - if (devPriv->oneRect && pGC->fillStyle == FillSolid) - { - switch (devPriv->rop) { - case GXcopy: - pGC->ops->FillPolygon = cfbFillPoly1RectCopy; - break; - default: - pGC->ops->FillPolygon = cfbFillPoly1RectGeneral; - break; - } - } -#endif - if (pGC->lineWidth == 0) - { -#ifdef PIXEL_ADDR - if ((pGC->lineStyle == LineSolid) && (pGC->fillStyle == FillSolid)) - { - switch (devPriv->rop) - { - case GXxor: - pGC->ops->PolyArc = cfbZeroPolyArcSS8Xor; - break; - case GXcopy: - pGC->ops->PolyArc = cfbZeroPolyArcSS8Copy; - break; - default: - pGC->ops->PolyArc = cfbZeroPolyArcSS8General; - break; - } - } - else -#endif - pGC->ops->PolyArc = miZeroPolyArc; - } - else - pGC->ops->PolyArc = miPolyArc; - pGC->ops->PolySegment = miPolySegment; - switch (pGC->lineStyle) - { - case LineSolid: - if(pGC->lineWidth == 0) - { - if (pGC->fillStyle == FillSolid) - { -#if defined(PIXEL_ADDR) && !defined(NO_ONE_RECT) - if (devPriv->oneRect && - ((pDrawable->x >= pGC->pScreen->width - 32768) && - (pDrawable->y >= pGC->pScreen->height - 32768))) - { - pGC->ops->Polylines = cfb8LineSS1Rect; - pGC->ops->PolySegment = cfb8SegmentSS1Rect; - } else -#endif -#ifdef NO_ONE_RECT - { - pGC->ops->Polylines = cfb8LineSS1Rect; - pGC->ops->PolySegment = cfb8SegmentSS1Rect; - } -#else - { - pGC->ops->Polylines = cfbLineSS; - pGC->ops->PolySegment = cfbSegmentSS; - } -#endif - } - else - pGC->ops->Polylines = miZeroLine; - } - else - pGC->ops->Polylines = miWideLine; - break; - case LineOnOffDash: - case LineDoubleDash: - if (pGC->lineWidth == 0 && pGC->fillStyle == FillSolid) - { - pGC->ops->Polylines = cfbLineSD; - pGC->ops->PolySegment = cfbSegmentSD; - } else - pGC->ops->Polylines = miWideDash; - break; - } - } - - if (new_text && (pGC->font)) - { - if (FONTMAXBOUNDS(pGC->font,rightSideBearing) - - FONTMINBOUNDS(pGC->font,leftSideBearing) > 32 || - FONTMINBOUNDS(pGC->font,characterWidth) < 0) - { - pGC->ops->PolyGlyphBlt = miPolyGlyphBlt; - pGC->ops->ImageGlyphBlt = miImageGlyphBlt; - } - else - { -#ifdef WriteBitGroup - if (pGC->fillStyle == FillSolid) - { - if (devPriv->rop == GXcopy) - pGC->ops->PolyGlyphBlt = cfbPolyGlyphBlt8; - else -#ifdef FOUR_BIT_CODE - pGC->ops->PolyGlyphBlt = cfbPolyGlyphRop8; -#else - pGC->ops->PolyGlyphBlt = miPolyGlyphBlt; -#endif - } - else -#endif - pGC->ops->PolyGlyphBlt = miPolyGlyphBlt; - /* special case ImageGlyphBlt for terminal emulator fonts */ -#if !defined(WriteBitGroup) || PSZ == 8 - if (TERMINALFONT(pGC->font) && - (pGC->planemask & PMSK) == PMSK -#ifdef FOUR_BIT_CODE - && FONTMAXBOUNDS(pGC->font,characterWidth) >= PGSZB -#endif - ) - { - pGC->ops->ImageGlyphBlt = useTEGlyphBlt; - } - else -#endif - { -#ifdef WriteBitGroup - if (devPriv->rop == GXcopy && - pGC->fillStyle == FillSolid && - (pGC->planemask & PMSK) == PMSK) - pGC->ops->ImageGlyphBlt = cfbImageGlyphBlt8; - else -#endif - pGC->ops->ImageGlyphBlt = miImageGlyphBlt; - } - } - } - - - if (new_fillspans) { - switch (pGC->fillStyle) { - case FillSolid: - switch (devPriv->rop) { - case GXcopy: - pGC->ops->FillSpans = cfbSolidSpansCopy; - break; - case GXxor: - pGC->ops->FillSpans = cfbSolidSpansXor; - break; - default: - pGC->ops->FillSpans = cfbSolidSpansGeneral; - break; - } - break; - case FillTiled: - if (pGC->pRotatedPixmap) - { - if (pGC->alu == GXcopy && (pGC->planemask & PMSK) == PMSK) - pGC->ops->FillSpans = cfbTile32FSCopy; - else - pGC->ops->FillSpans = cfbTile32FSGeneral; - } - else - pGC->ops->FillSpans = cfbUnnaturalTileFS; - break; - case FillStippled: -#ifdef FOUR_BIT_CODE - if (pGC->pRotatedPixmap) - pGC->ops->FillSpans = cfb8Stipple32FS; - else -#endif - pGC->ops->FillSpans = cfbUnnaturalStippleFS; - break; - case FillOpaqueStippled: -#ifdef FOUR_BIT_CODE - if (pGC->pRotatedPixmap) - pGC->ops->FillSpans = cfb8OpaqueStipple32FS; - else -#endif - pGC->ops->FillSpans = cfbUnnaturalStippleFS; - break; - default: - FatalError("cfbValidateGC: illegal fillStyle\n"); - } - } /* end of new_fillspans */ - - if (new_fillarea) { -#ifndef FOUR_BIT_CODE - pGC->ops->PolyFillRect = miPolyFillRect; - if (pGC->fillStyle == FillSolid || pGC->fillStyle == FillTiled) - { - pGC->ops->PolyFillRect = cfbPolyFillRect; - } -#endif -#ifdef FOUR_BIT_CODE - pGC->ops->PushPixels = mfbPushPixelsWeak(); - if (pGC->fillStyle == FillSolid && devPriv->rop == GXcopy) - pGC->ops->PushPixels = cfbPushPixels8; -#endif - pGC->ops->PolyFillArc = miPolyFillArc; - if (pGC->fillStyle == FillSolid) - { - switch (devPriv->rop) - { - case GXcopy: - pGC->ops->PolyFillArc = cfbPolyFillArcSolidCopy; - break; - default: - pGC->ops->PolyFillArc = cfbPolyFillArcSolidGeneral; - break; - } - } - } -} - -/* - * this is never called, it just exists to have its address - * taken in mfbCreateGC. - */ -static void -cfbUnPushPixels (pGC, pBitmap, pDrawable, dx, dy, xOrg, yOrg) - GCPtr pGC; - PixmapPtr pBitmap; - DrawablePtr pDrawable; - int dx, dy, xOrg, yOrg; -{ - return; -} diff --git a/cfb/cfbgetsp.c b/cfb/cfbgetsp.c deleted file mode 100644 index 672196a6c..000000000 --- a/cfb/cfbgetsp.c +++ /dev/null @@ -1,213 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" - -#include "misc.h" -#include "region.h" -#include "gc.h" -#include "windowstr.h" -#include "pixmapstr.h" -#include "scrnintstr.h" - -#include "cfb.h" -#include "cfbmskbits.h" - -/* GetSpans -- for each span, gets bits from drawable starting at ppt[i] - * and continuing for pwidth[i] bits - * Each scanline returned will be server scanline padded, i.e., it will come - * out to an integral number of words. - */ -void -cfbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pchardstStart) - DrawablePtr pDrawable; /* drawable from which to get bits */ - int wMax; /* largest value of all *pwidths */ - register DDXPointPtr ppt; /* points to start copying from */ - int *pwidth; /* list of number of bits to copy */ - int nspans; /* number of scanlines to copy */ - char *pchardstStart; /* where to put the bits */ -{ - PixelGroup *pdstStart = (PixelGroup *)pchardstStart; - register PixelGroup *pdst; /* where to put the bits */ - register PixelGroup *psrc; /* where to get the bits */ - register PixelGroup tmpSrc; /* scratch buffer for bits */ - PixelGroup *psrcBase; /* start of src bitmap */ - int widthSrc; /* width of pixmap in bytes */ - register DDXPointPtr pptLast; /* one past last point to get */ - int xEnd; /* last pixel to copy from */ - int nl, srcBit; - int w; - PixelGroup *pdstNext; -#if PSZ == 24 - register char *psrcb, *pdstb; - register int xIndex = 0; -#else - register int nstart; -#if PSZ != 32 || PPW != 1 - int nend; -#endif - PixelGroup startmask, endmask; - int nlMiddle; -#endif - - switch (pDrawable->bitsPerPixel) { - case 1: - mfbGetSpans(pDrawable, wMax, ppt, pwidth, nspans, pchardstStart); - return; - case PSZ: - break; - default: - FatalError("cfbGetSpans: invalid depth\n"); - } - - /* - * XFree86 DDX empties the root borderClip when the VT is - * switched away; this checks for that case - */ - if (!cfbDrawableEnabled(pDrawable)) - return; - - cfbGetLongWidthAndPointer (pDrawable, widthSrc, psrcBase) - -#ifdef PIXEL_ADDR -# if PSZ != 24 - if ((nspans == 1) && (*pwidth == 1)) - { - tmpSrc = *((PixelType *)(psrcBase + (ppt->y * widthSrc)) - + ppt->x); -#if BITMAP_BIT_ORDER == MSBFirst - tmpSrc <<= (sizeof (CfbBits) - sizeof (PixelType)) * 8; -#endif - *pdstStart = tmpSrc; - return; - } -# endif /* PSZ != 24 */ -#endif - pdst = pdstStart; - pptLast = ppt + nspans; - while(ppt < pptLast) - { -#if PSZ == 24 - xEnd = min(ppt->x + *pwidth, widthSrc * sizeof(CfbBits) / 3); - w = xEnd - ppt->x; - psrc = psrcBase + ppt->y * widthSrc; - srcBit = ppt->x; - psrcb = (char *)psrc + (ppt->x * 3); - xIndex = 0; - pdstb = (char *)pdst; - pdstNext = pdst + ((w * 3 + 3) >> 2); -#else - xEnd = min(ppt->x + *pwidth, widthSrc << PWSH); - w = xEnd - ppt->x; - psrc = psrcBase + ppt->y * widthSrc + (ppt->x >> PWSH); - srcBit = ppt->x & PIM; - pdstNext = pdst + ((w + PPW - 1) >> PWSH); -#endif - -#if PSZ == 24 - if (w < 0) - FatalError("cfb24GetSpans: Internal error (w < 0)\n"); - nl = w; - while (nl--){ - psrc = (PixelGroup *)((unsigned long)psrcb & ~0x03); - getbits24(psrc, tmpSrc, srcBit); - pdst = (PixelGroup *)((unsigned long)pdstb & ~0x03); - putbits24(tmpSrc, PPW, pdst, ~((CfbBits)0), xIndex); - srcBit++; - psrcb += 3; - xIndex++; - pdstb += 3; - } - pdst = pdstNext; -#else /* PSZ == 24 */ - if (srcBit + w <= PPW) - { - getbits(psrc, srcBit, w, tmpSrc); - putbits(tmpSrc, 0, w, pdst, ~((CfbBits)0)); - pdst++; - } - else - { - maskbits(ppt->x, w, startmask, endmask, nlMiddle); - nstart = 0; - if (startmask) - { - nstart = PPW - srcBit; - getbits(psrc, srcBit, nstart, tmpSrc); - putbits(tmpSrc, 0, nstart, pdst, ~((CfbBits)0)); - if(srcBit + nstart >= PPW) - psrc++; - } - nl = nlMiddle; - while (nl--) - { - tmpSrc = *psrc; - putbits(tmpSrc, nstart, PPW, pdst, ~((CfbBits)0)); - psrc++; - pdst++; - } - if (endmask) - { -#if PSZ != 32 || PPW != 1 - nend = xEnd & PIM; -#endif - getbits(psrc, 0, nend, tmpSrc); - putbits(tmpSrc, nstart, nend, pdst, ~((CfbBits)0)); - } - pdst = pdstNext; - } -#endif /* PSZ == 24 */ - ppt++; - pwidth++; - } -} diff --git a/cfb/cfbglblt8.c b/cfb/cfbglblt8.c deleted file mode 100644 index 4d964b35d..000000000 --- a/cfb/cfbglblt8.c +++ /dev/null @@ -1,477 +0,0 @@ -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. -*/ - -/* - * Poly glyph blt. Accepts an arbitrary font <= 32 bits wide, in Copy mode - * only. - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "cfb.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" - -#define BOX_OVERLAP(box1, box2, xoffset, yoffset) \ - ((box1)->x1 <= ((int) (box2)->x2 + (xoffset)) && \ - ((int) (box2)->x1 + (xoffset)) <= (box1)->x2 && \ - (box1)->y1 <= ((int) (box2)->y2 + (yoffset)) && \ - ((int) (box2)->y1 + (yoffset)) <= (box1)->y2) - -#define BOX_CONTAINS(box1, box2, xoffset, yoffset) \ - ((box1)->x1 <= ((int) (box2)->x1 + (xoffset)) && \ - ((int) (box2)->x2 + (xoffset)) <= (box1)->x2 && \ - (box1)->y1 <= ((int) (box2)->y1 + (yoffset)) && \ - ((int) (box2)->y2 + (yoffset)) <= (box1)->y2) - -#if defined(FOUR_BIT_CODE) || defined(WriteBitGroup) && !defined(GLYPHROP) - -#if GLYPHPADBYTES != 4 -#define USE_LEFTBITS -#endif - -#ifdef USE_LEFTBITS -typedef unsigned char *glyphPointer; - -#define GlyphBits(bits,width,dst) getleftbits(bits,width,dst); \ - (dst) &= widthMask; \ - (bits) += widthGlyph; -#define GlyphBitsS(bits,width,dst,off) GlyphBits(bits,width,dst); \ - dst = BitRight (dst, off); -#else -typedef CARD32 *glyphPointer; - -#define GlyphBits(bits,width,dst) dst = *bits++; -#define GlyphBitsS(bits,width,dst,off) dst = BitRight(*bits++, off); -#endif - -#ifdef GLYPHROP -#define cfbPolyGlyphBlt8 cfbPolyGlyphRop8 -#define cfbPolyGlyphBlt8Clipped cfbPolyGlyphRop8Clipped - -#undef WriteBitGroup -#define WriteBitGroup(dst,pixel,bits) RRopBitGroup(dst,bits) - -#endif - -static void cfbPolyGlyphBlt8Clipped( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nglyph, - CharInfoPtr *ppci, /* array of character info */ - unsigned char *pglyphBase); /* start of array of glyphs */ - -#if defined(HAS_STIPPLE_CODE) && !defined(GLYPHROP) && !defined(USE_LEFTBITS) -#define USE_STIPPLE_CODE -#endif - -#if defined(__GNUC__) && !defined(GLYPHROP) && (defined(mc68020) || defined(mc68000) || defined(__mc68000__)) && PSZ == 8 && !defined(USE_LEFTBITS) -#ifdef USE_STIPPLE_CODE -#undef USE_STIPPLE_CODE -#endif -#include "stip68kgnu.h" -#endif - -#if PSZ == 24 -#define DST_INC 3 -#else -#define DST_INC (PGSZB >> PWSH) -#endif - -/* cfbStippleStack/cfbStippleStackTE are coded in assembly language. - * They are only provided on some architecures. - */ -#ifdef USE_STIPPLE_CODE -extern void cfbStippleStack (), cfbStippleStackTE (); -#endif - -void -cfbPolyGlyphBlt8 (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase) - DrawablePtr pDrawable; - GCPtr pGC; - int x, y; - unsigned int nglyph; - CharInfoPtr *ppci; /* array of character info */ - pointer pglyphBase; /* start of array of glyphs */ -{ -#ifndef GLYPHROP - register CfbBits pixel; -#endif -#if !defined(STIPPLE) && !defined(USE_STIPPLE_CODE) - register CfbBits c; - register CfbBits *dst; -#endif - register glyphPointer glyphBits; - register int xoff; - - FontPtr pfont = pGC->font; - CharInfoPtr pci; - CfbBits *dstLine; - CfbBits *pdstBase; - int hTmp; - int bwidthDst; - int widthDst; - int h; - BoxRec bbox; /* for clipping */ - int w; - RegionPtr clip; - BoxPtr extents; -#ifdef USE_LEFTBITS - int widthGlyph; - CfbBits widthMask; -#endif -#ifndef STIPPLE -#ifdef USE_STIPPLE_CODE - void (*stipple)(); - - stipple = cfbStippleStack; - if (FONTCONSTMETRICS(pfont)) - stipple = cfbStippleStackTE; -#endif -#endif - - x += pDrawable->x; - y += pDrawable->y; - - /* compute an approximate (but covering) bounding box */ - bbox.x1 = 0; - if ((ppci[0]->metrics.leftSideBearing < 0)) - bbox.x1 = ppci[0]->metrics.leftSideBearing; - h = nglyph - 1; - w = ppci[h]->metrics.rightSideBearing; - while (--h >= 0) - w += ppci[h]->metrics.characterWidth; - bbox.x2 = w; - bbox.y1 = -FONTMAXBOUNDS(pfont,ascent); - bbox.y2 = FONTMAXBOUNDS(pfont,descent); - - clip = cfbGetCompositeClip(pGC); - extents = &clip->extents; - - if (!clip->data) - { - if (!BOX_CONTAINS(extents, &bbox, x, y)) - { - if (BOX_OVERLAP (extents, &bbox, x, y)) - cfbPolyGlyphBlt8Clipped(pDrawable, pGC, x, y, - nglyph, ppci, pglyphBase); - return; - } - } - else - { - /* check to make sure some of the text appears on the screen */ - if (!BOX_OVERLAP (extents, &bbox, x, y)) - return; - - bbox.x1 += x; - bbox.x2 += x; - bbox.y1 += y; - bbox.y2 += y; - - switch (RECT_IN_REGION(pGC->pScreen, clip, &bbox)) - { - case rgnPART: - cfbPolyGlyphBlt8Clipped(pDrawable, pGC, x, y, - nglyph, ppci, pglyphBase); - case rgnOUT: - return; - } - } - -#ifdef GLYPHROP - cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask); -#else - pixel = cfbGetGCPrivate(pGC)->xor; -#endif - - cfbGetTypedWidthAndPointer (pDrawable, bwidthDst, pdstBase, char, CfbBits) - - widthDst = bwidthDst / PGSZB; - while (nglyph--) - { - pci = *ppci++; - glyphBits = (glyphPointer) FONTGLYPHBITS(pglyphBase,pci); - xoff = x + pci->metrics.leftSideBearing; -#if PSZ == 24 - dstLine = pdstBase + (y - pci->metrics.ascent) * widthDst +((xoff>> 2)*3); -#else - dstLine = pdstBase + - (y - pci->metrics.ascent) * widthDst + (xoff >> PWSH); -#endif - x += pci->metrics.characterWidth; - if ((hTmp = pci->metrics.descent + pci->metrics.ascent)) - { -#if PSZ == 24 - xoff &= 0x03; -#else - xoff &= PIM; -#endif /* PSZ == 24 */ -#ifdef STIPPLE - STIPPLE(dstLine,glyphBits,pixel,bwidthDst,hTmp,xoff); -#else -#ifdef USE_STIPPLE_CODE - (*stipple)(dstLine,glyphBits,pixel,bwidthDst,hTmp,xoff); -#else -#ifdef USE_LEFTBITS - w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; - widthGlyph = PADGLYPHWIDTHBYTES(w); - widthMask = mfbGetendtab(w); -#endif - do { - dst = dstLine; - dstLine = (CfbBits *) (((char *) dstLine) + bwidthDst); - GlyphBits(glyphBits, w, c) - WriteBitGroup(dst, pixel, GetBitGroup(BitRight(c,xoff))); - dst += DST_INC; - c = BitLeft(c,PGSZB - xoff); - while (c) - { - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst += DST_INC; - } - } while (--hTmp); -#endif /* USE_STIPPLE_CODE else */ -#endif /* STIPPLE else */ - } - } -} - -static void -cfbPolyGlyphBlt8Clipped( - DrawablePtr pDrawable, - GCPtr pGC, - int x, - int y, - unsigned int nglyph, - CharInfoPtr *ppci, /* array of character info */ - unsigned char *pglyphBase) /* start of array of glyphs */ -{ -#ifndef GLYPHROP - register CfbBits pixel; -#endif -#if !defined(STIPPLE) && !defined(USE_STIPPLE_CODE) - register CfbBits c; -#endif - register glyphPointer glyphBits; - register int xoff; -#if defined(USE_LEFTBITS) || (!defined(STIPPLE) && !defined(USE_STIPPLE_CODE)) - register CfbBits *dst; -#endif - - CharInfoPtr pci; - FontPtr pfont = pGC->font; - CfbBits *dstLine; - CfbBits *pdstBase; -#ifdef USE_LEFTBITS - CARD32 *cTmp; -#endif - CARD32 *clips; - int maxAscent, maxDescent; - int minLeftBearing; - int hTmp; - int widthDst; - int bwidthDst; - int xG, yG; - BoxPtr pBox; - int numRects; - int w; - RegionPtr pRegion; - int yBand; -#ifdef GLYPHROP - CfbBits bits; -#endif -#ifdef USE_LEFTBITS - int widthGlyph; - CfbBits widthMask; -#endif - -#ifdef GLYPHROP - cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask); -#else - pixel = cfbGetGCPrivate(pGC)->xor; -#endif - - cfbGetTypedWidthAndPointer (pDrawable, bwidthDst, pdstBase, char, CfbBits) - - widthDst = bwidthDst / PGSZB; - maxAscent = FONTMAXBOUNDS(pfont,ascent); - maxDescent = FONTMAXBOUNDS(pfont,descent); - minLeftBearing = FONTMINBOUNDS(pfont,leftSideBearing); - - pRegion = cfbGetCompositeClip(pGC); - - pBox = REGION_RECTS(pRegion); - numRects = REGION_NUM_RECTS (pRegion); - while (numRects && pBox->y2 <= y - maxAscent) - { - ++pBox; - --numRects; - } - if (!numRects || pBox->y1 >= y + maxDescent) - return; - yBand = pBox->y1; - while (numRects && pBox->y1 == yBand && pBox->x2 <= x + minLeftBearing) - { - ++pBox; - --numRects; - } - if (!numRects) - return; - clips = (CARD32 *)xalloc ((maxAscent + maxDescent) * - sizeof (CARD32)); - while (nglyph--) - { - pci = *ppci++; - glyphBits = (glyphPointer) FONTGLYPHBITS(pglyphBase,pci); - w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; - xG = x + pci->metrics.leftSideBearing; - yG = y - pci->metrics.ascent; - x += pci->metrics.characterWidth; - if ((hTmp = pci->metrics.descent + pci->metrics.ascent)) - { -#if PSZ == 24 - dstLine = pdstBase + yG * widthDst + ((xG>> 2)*3); - /* never use (xG*3)>>2 */ -#else - dstLine = pdstBase + yG * widthDst + (xG >> PWSH); -#endif -#if PSZ == 24 - xoff = xG & 3; -#else - xoff = xG & PIM; -#endif -#ifdef USE_LEFTBITS - w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing; - widthGlyph = PADGLYPHWIDTHBYTES(w); - widthMask = mfbGetendtab(w); -#endif - switch (cfb8ComputeClipMasks32 (pBox, numRects, xG, yG, w, hTmp, clips)) - { - case rgnPART: -#ifdef USE_LEFTBITS - cTmp = clips; - do { - dst = dstLine; - dstLine = (CfbBits *) (((char *) dstLine) + bwidthDst); - GlyphBits(glyphBits, w, c) - c &= *cTmp++; - if (c) - { - WriteBitGroup(dst, pixel, GetBitGroup(BitRight(c,xoff))); - c = BitLeft(c,PGSZB - xoff); - dst += DST_INC; - while (c) - { - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst += DST_INC; - } - } - } while (--hTmp); - break; -#else /* !USE_LEFTBITS */ - { - int h; - - h = hTmp; - do - { - --h; - clips[h] = clips[h] & glyphBits[h]; - } while (h); - } - glyphBits = clips; - /* fall through */ -#endif /* USE_LEFTBITS */ - case rgnIN: -#ifdef STIPPLE - STIPPLE(dstLine,glyphBits,pixel,bwidthDst,hTmp,xoff); -#else -#ifdef USE_STIPPLE_CODE - cfbStippleStackTE(dstLine,glyphBits,pixel,bwidthDst,hTmp,xoff); -#else - do { - dst = dstLine; - dstLine = (CfbBits *) (((char *) dstLine) + bwidthDst); - GlyphBits(glyphBits, w, c) - if (c) - { - /* This code originally could read memory locations - * that were not mapped. Hence we have to check the - * trailing bits to see whether they are zero and if - * then skip them correctly. This is no problem for - * the GXcopy case, since there only the pixels that - * are non-zero are written ... - */ -#ifndef GLYPHROP - WriteBitGroup(dst, pixel, GetBitGroup(BitRight(c,xoff))); - c = BitLeft(c,PGSZB - xoff); - dst += DST_INC; -#else /* GLYPHROP */ - if ((bits = GetBitGroup(BitRight(c,xoff)))) - WriteBitGroup(dst, pixel, bits); - c = BitLeft(c,PGSZB - xoff); - dst += DST_INC; - - while (c && ((bits = GetBitGroup(c)) == 0)) - { - NextBitGroup(c); - dst += DST_INC; - } -#endif /* GLYPHROP */ - while (c) - { - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst += DST_INC; - } - } - } while (--hTmp); -#endif /* USE_STIPPLE_CODE else */ -#endif /* STIPPLE else */ - break; - } - } - } - xfree (clips); -} - -#endif /* FOUR_BIT_CODE */ diff --git a/cfb/cfbhrzvert.c b/cfb/cfbhrzvert.c deleted file mode 100644 index a6a793055..000000000 --- a/cfb/cfbhrzvert.c +++ /dev/null @@ -1,554 +0,0 @@ -/*********************************************************** - -Copyright 1987,1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include "gc.h" -#include "window.h" -#include "pixmap.h" -#include "region.h" - -#include "cfb.h" -#include "cfbmskbits.h" - -/* horizontal solid line - abs(len) > 1 -*/ -void -cfbHorzS(rop, and, xor, addrl, nlwidth, x1, y1, len) -register int rop; -register CfbBits and; -register CfbBits xor; -register CfbBits *addrl; /* pointer to base of bitmap */ -int nlwidth; /* width in longwords of bitmap */ -int x1; /* initial point */ -int y1; -int len; /* length of line */ -{ - register int nlmiddle; - -#if PSZ == 24 - - int leftIndex, rightIndex; - CfbBits piQxelAnd[3], piQxelXor[3]; - piQxelAnd[0] = (and & 0xFFFFFF) | ((and<<24) & 0xFF000000); - piQxelAnd[1] = ((and>>8) & 0xFFFF)| ((and<<16) & 0xFFFF0000); - piQxelAnd[2] = ((and<<8) & 0xFFFFFF00) | ((and>>16) & 0xFF); - - piQxelXor[0] = (xor & 0xFFFFFF) | ((xor<<24) & 0xFF000000); - piQxelXor[1] = ((xor>>8) & 0xFFFF)| ((xor<<16) & 0xFFFF0000); - piQxelXor[2] = ((xor<<8) & 0xFFFFFF00) | ((xor>>16) & 0xFF); - - leftIndex = x1 & 3; - rightIndex = ((x1 + len) < 5)?0:(x1 + len)&3; - nlmiddle = len; - if(leftIndex){ - nlmiddle -= (4 - leftIndex); - } - if(rightIndex){ - nlmiddle -= rightIndex; - } - if (nlmiddle < 0) - nlmiddle = 0; - - nlmiddle >>= 2; - - addrl += (y1 * nlwidth) + (x1 >> 2)*3 + (leftIndex?leftIndex-1:0); - - switch(leftIndex+len){ - case 4: - switch(leftIndex){ - case 0: - *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]); - break; - case 1: - *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFF000000); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]); - break; - case 2: - *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]); - break; - case 3: - *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFFFFFF00); - break; - } - break; - case 3: - switch(leftIndex){ - case 0: - *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]); - addrl++; - *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFF); - break; - case 1: - *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFF000000); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]); - addrl++; - *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFF); - break; - case 2: - *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - addrl++; - *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFF); - break; - } - break; - case 2: - if(leftIndex){ - *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFF000000); - addrl++; - } - else{ - *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]); - addrl++; - } - *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF); - break; - case 1: /*only if leftIndex = 0 and w = 1*/ - *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFFFFFF); - break; - case 0: /*never*/ - break; - default: - { - if (rop == GXcopy){ - switch(leftIndex){ - case 0: - break; - case 1: - *addrl = ((*addrl) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - addrl++; - *addrl++ = piQxelXor[1]; - *addrl++ = piQxelXor[2]; - break; - case 2: - *addrl = ((*addrl) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - addrl++; - *addrl++ = piQxelXor[2]; - break; - case 3: - *addrl = ((*addrl) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00); - addrl++; - break; - } - while(nlmiddle--){ - *addrl++ = piQxelXor[0]; - *addrl++ = piQxelXor[1]; - *addrl++ = piQxelXor[2]; - } - switch(rightIndex){ - case 0: - break; - case 1: - *addrl = ((*addrl) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF); - break; - case 2: - *addrl++ = piQxelXor[0]; - *addrl = ((*addrl) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - break; - case 3: - *addrl++ = piQxelXor[0]; - *addrl++ = piQxelXor[1]; - *addrl = ((*addrl) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - break; - } - } - else{ - if(rop == GXxor){ - switch(leftIndex){ - case 0: - break; - case 1: - *addrl++ ^= (piQxelXor[0]&0xFF000000); - *addrl++ ^= piQxelXor[1]; - *addrl++ ^= piQxelXor[2]; - break; - case 2: - *addrl++ ^= (piQxelXor[1]& 0xFFFF0000); - *addrl++ ^= piQxelXor[2]; - break; - case 3: - *addrl++ ^= (piQxelXor[2]& 0xFFFFFF00); - break; - } - while(nlmiddle--){ - *addrl++ ^= piQxelXor[0]; - *addrl++ ^= piQxelXor[1]; - *addrl++ ^= piQxelXor[2]; - } - switch(rightIndex){ - case 0: - break; - case 1: - *addrl ^= (piQxelXor[0]& 0xFFFFFF); - break; - case 2: - *addrl++ ^= piQxelXor[0]; - *addrl ^= (piQxelXor[1]&0xFFFF); - break; - case 3: - *addrl++ ^= piQxelXor[0]; - *addrl++ ^= piQxelXor[1]; - *addrl ^= (piQxelXor[2]&0xFF); - break; - } - } - else{ - switch(leftIndex){ - case 0: - break; - case 1: - *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFF000000); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]); - addrl++; - break; - case 2: - *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]); - addrl++; - break; - case 3: - *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFFFFFF00); - addrl++; - break; - } - while(nlmiddle--){ - *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[2], piQxelXor[2]); - addrl++; - } - switch(rightIndex){ - case 0: - break; - case 1: - *addrl = DoMaskRRop (*addrl, piQxelAnd[0], piQxelXor[0], 0xFFFFFF); - addrl++; - break; - case 2: - *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]); - addrl++; - *addrl = DoMaskRRop (*addrl, piQxelAnd[1], piQxelXor[1], 0xFFFF); - break; - case 3: - *addrl = DoRRop (*addrl, piQxelAnd[0], piQxelXor[0]); - addrl++; - *addrl = DoRRop (*addrl, piQxelAnd[1], piQxelXor[1]); - addrl++; - *addrl = DoMaskRRop (*addrl, piQxelAnd[2], piQxelXor[2], 0xFF); - break; - } - - } - } - } - } -#else - register CfbBits startmask; - register CfbBits endmask; - - addrl = addrl + (y1 * nlwidth) + (x1 >> PWSH); - - /* all bits inside same longword */ - if ( ((x1 & PIM) + len) < PPW) - { - maskpartialbits(x1, len, startmask); - *addrl = DoMaskRRop (*addrl, and, xor, startmask); - } - else - { - maskbits(x1, len, startmask, endmask, nlmiddle); - if (rop == GXcopy) - { - if (startmask) - { - *addrl = (*addrl & ~startmask) | (xor & startmask); - addrl++; - } - while (nlmiddle--) - *addrl++ = xor; - if (endmask) - *addrl = (*addrl & ~endmask) | (xor & endmask); - } - else - { - if (startmask) - { - *addrl = DoMaskRRop (*addrl, and, xor, startmask); - addrl++; - } - if (rop == GXxor) - { - while (nlmiddle--) - *addrl++ ^= xor; - } - else - { - while (nlmiddle--) - { - *addrl = DoRRop (*addrl, and, xor); - addrl++; - } - } - if (endmask) - *addrl = DoMaskRRop (*addrl, and, xor, endmask); - } - } -#endif -} - -/* vertical solid line */ - -void -cfbVertS(rop, and, xor, addrl, nlwidth, x1, y1, len) -int rop; -register CfbBits and, xor; -register CfbBits *addrl; /* pointer to base of bitmap */ -register int nlwidth; /* width in longwords of bitmap */ -int x1, y1; /* initial point */ -register int len; /* length of line */ -{ -#if PSZ == 24 - int xIdx; - CfbBits and2 = 0, xor2 = 0, mask = 0, mask2; -#endif -#ifdef PIXEL_ADDR - register PixelType *bits = (PixelType *) addrl; - -#if PSZ == 24 - nlwidth <<= PWSH; - xIdx = x1 & 3; - bits = (PixelType *)(addrl + (y1 * nlwidth) + ((x1*3) >> 2)); -#else - nlwidth <<= PWSH; - bits = bits + (y1 * nlwidth) + x1; -#endif -#if PSZ == 24 - mask2 = 0; - switch(xIdx){ - case 0: - mask = 0xFF000000; - xor &= 0xFFFFFF; - and |= 0xFF000000; - break; - case 3: - mask = 0xFF; - xor &= 0xFFFFFF; - xor <<= 8; - and <<= 8; - and |= 0xFF; - break; - case 1: - mask = 0xFFFFFF; - mask2 = 0xFFFF0000; - xor2 = (xor>>8) & 0xFFFF; - xor &= 0xFF; - xor <<= 24; - and2 = (and >> 8 ) | 0xFFFF0000; - and <<= 24; - and |= 0xFFFFFF; - break; - case 2: - mask = 0x0000FFFF; - mask2 = 0xFFFFFF00; - xor2 = (xor >> 16) & 0xFF; - xor <<= 16; - xor &= 0xFFFF0000; - and2 = (and >> 16) | 0xFFFFFF00; - and <<= 16; - and |= 0xFFFF; - break; - } -#endif - - /* - * special case copy and xor to avoid a test per pixel - */ - if (rop == GXcopy) - { -#if PSZ == 24 - switch(xIdx){ - case 0: - case 3: - while (len--){ - *bits = (*bits & mask)| xor; - bits += nlwidth; - } - break; - case 1: - case 2: - while (len--){ - *bits = (*bits & mask)| xor; - bits++; - *bits = (*bits & mask2)| xor2; - bits--; - bits += nlwidth; - } - break; - } -#else - while (len--) - { - *bits = xor; - bits += nlwidth; - } -#endif - } - else if (rop == GXxor) - { -#if PSZ == 24 - switch(xIdx){ - case 0: - case 3: - while (len--){ - *bits ^= xor; - bits += nlwidth; - } - break; - case 1: - case 2: - while (len--){ - *bits ^= xor; - bits++; - *bits ^= xor2; - bits--; - bits += nlwidth; - } - break; - } -#else - while (len--) - { - *bits ^= xor; - bits += nlwidth; - } -#endif - } - else - { -#if PSZ == 24 - switch(xIdx){ - case 0: - while (len--){ - *bits = DoMaskRRop(*bits, and, xor, 0x00FFFFFF); - bits += nlwidth; - } - break; - case 3: - while (len--){ - *bits = DoMaskRRop(*bits, and, xor, 0xFFFFFF00); - bits += nlwidth; - } - break; - case 1: - while (len--){ - *bits = DoMaskRRop(*bits, and, xor, 0xFF000000); - bits++; - *bits = DoMaskRRop(*bits, and2, xor2, 0x0000FFFF); - bits--; - bits += nlwidth; - } - break; - case 2: - while (len--){ - *bits = DoMaskRRop(*bits, and, xor, 0xFFFF0000); - bits++; - *bits = DoMaskRRop(*bits, and2, xor2, 0x000000FF); - bits--; - bits += nlwidth; - } - break; - } -#else - while (len--) - { - *bits = DoRRop(*bits, and, xor); - bits += nlwidth; - } -#endif - } -#else /* !PIXEL_ADDR */ -#if PSZ == 24 - addrl = addrl + (y1 * nlwidth) + ((x1*3) >>2); - - and |= ~cfbmask[(x1 & 3)<<1]; - xor &= cfbmask[(x1 & 3)<<1]; -#else - addrl = addrl + (y1 * nlwidth) + (x1 >> PWSH); - - and |= ~cfbmask[x1 & PIM]; - xor &= cfbmask[x1 & PIM]; -#endif - - while (len--) - { - *addrl = DoRRop (*addrl, and, xor); - addrl += nlwidth; - } -#endif -} diff --git a/cfb/cfbigblt8.c b/cfb/cfbigblt8.c deleted file mode 100644 index 1f1ce6f37..000000000 --- a/cfb/cfbigblt8.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "mi.h" -#include "cfb.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" - -void -cfbImageGlyphBlt8 (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase) - DrawablePtr pDrawable; - GCPtr pGC; - int x, y; - unsigned int nglyph; - CharInfoPtr *ppci; - pointer pglyphBase; -{ - ExtentInfoRec info; /* used by QueryGlyphExtents() */ - xRectangle backrect; - int fgPixel; - cfbPrivGC *priv; - - /* - * We can't avoid GC validations if calling mi functions. - */ - if ((pGC->ops->PolyFillRect == miPolyFillRect) || - (pGC->ops->PolyGlyphBlt == miPolyGlyphBlt)) - { - miImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); - return; - } - - QueryGlyphExtents(pGC->font, ppci, (unsigned long)nglyph, &info); - - if (info.overallWidth >= 0) - { - backrect.x = x; - backrect.width = info.overallWidth; - } - else - { - backrect.x = x + info.overallWidth; - backrect.width = -info.overallWidth; - } - backrect.y = y - FONTASCENT(pGC->font); - backrect.height = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font); - - priv = cfbGetGCPrivate(pGC); - - /* this code cheats by knowing that ValidateGC isn't - * necessary for PolyFillRect - */ - - fgPixel = pGC->fgPixel; - - pGC->fgPixel = pGC->bgPixel; - priv->xor = PFILL(pGC->bgPixel); - - (*pGC->ops->PolyFillRect) (pDrawable, pGC, 1, &backrect); - - pGC->fgPixel = fgPixel; - - priv->xor = PFILL(pGC->fgPixel); - - (*pGC->ops->PolyGlyphBlt) (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); - -} diff --git a/cfb/cfbimage.c b/cfb/cfbimage.c deleted file mode 100644 index 396e1fcb2..000000000 --- a/cfb/cfbimage.c +++ /dev/null @@ -1,206 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include -#include "windowstr.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "gcstruct.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "servermd.h" -#include "mi.h" - -void -cfbPutImage(pDraw, pGC, depth, x, y, w, h, leftPad, format, pImage) - DrawablePtr pDraw; - GCPtr pGC; - int depth, x, y, w, h; - int leftPad; - int format; - char *pImage; -{ - PixmapPtr pPixmap; - - if ((w == 0) || (h == 0)) - return; - - if (format != XYPixmap) - { - pPixmap = GetScratchPixmapHeader(pDraw->pScreen, w+leftPad, h, depth, - BitsPerPixel(depth), PixmapBytePad(w+leftPad, depth), - (pointer)pImage); - if (!pPixmap) - return; - - pGC->fExpose = FALSE; - if (format == ZPixmap) - (void)(*pGC->ops->CopyArea)((DrawablePtr)pPixmap, pDraw, pGC, - leftPad, 0, w, h, x, y); - else - (void)(*pGC->ops->CopyPlane)((DrawablePtr)pPixmap, pDraw, pGC, - leftPad, 0, w, h, x, y, 1); - pGC->fExpose = TRUE; - FreeScratchPixmapHeader(pPixmap); - } - else - { - CfbBits oldFg, oldBg; - XID gcv[3]; - CfbBits oldPlanemask; - unsigned long i; - long bytesPer; - - depth = pGC->depth; - oldPlanemask = pGC->planemask; - oldFg = pGC->fgPixel; - oldBg = pGC->bgPixel; - gcv[0] = ~0L; - gcv[1] = 0; - DoChangeGC(pGC, GCForeground | GCBackground, gcv, 0); - bytesPer = (long)h * BitmapBytePad(w + leftPad); - - for (i = 1 << (depth-1); i != 0; i >>= 1, pImage += bytesPer) - { - if (i & oldPlanemask) - { - gcv[0] = i; - DoChangeGC(pGC, GCPlaneMask, gcv, 0); - ValidateGC(pDraw, pGC); - (*pGC->ops->PutImage)(pDraw, pGC, 1, x, y, w, h, leftPad, - XYBitmap, pImage); - } - } - gcv[0] = oldPlanemask; - gcv[1] = oldFg; - gcv[2] = oldBg; - DoChangeGC(pGC, GCPlaneMask | GCForeground | GCBackground, gcv, 0); - ValidateGC(pDraw, pGC); - } -} - -void -cfbGetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine) - DrawablePtr pDrawable; - int sx, sy, w, h; - unsigned int format; - unsigned long planeMask; - char *pdstLine; -{ - BoxRec box; - DDXPointRec ptSrc; - RegionRec rgnDst; - ScreenPtr pScreen; - PixmapPtr pPixmap; - - if ((w == 0) || (h == 0)) - return; - if (pDrawable->bitsPerPixel == 1) - { - mfbGetImage(pDrawable, sx, sy, w, h, format, planeMask, pdstLine); - return; - } - pScreen = pDrawable->pScreen; - /* - * XFree86 DDX empties the root borderClip when the VT is - * switched away; this checks for that case - */ - if (!cfbDrawableEnabled (pDrawable)) - return; - if (format == ZPixmap) - { - pPixmap = GetScratchPixmapHeader(pScreen, w, h, - pDrawable->depth, pDrawable->bitsPerPixel, - PixmapBytePad(w,pDrawable->depth), (pointer)pdstLine); - if (!pPixmap) - return; - if ((planeMask & PMSK) != PMSK) - bzero((char *)pdstLine, pPixmap->devKind * h); - ptSrc.x = sx + pDrawable->x; - ptSrc.y = sy + pDrawable->y; - box.x1 = 0; - box.y1 = 0; - box.x2 = w; - box.y2 = h; - REGION_INIT(pScreen, &rgnDst, &box, 1); - cfbDoBitblt(pDrawable, (DrawablePtr)pPixmap, GXcopy, &rgnDst, - &ptSrc, planeMask); - REGION_UNINIT(pScreen, &rgnDst); - FreeScratchPixmapHeader(pPixmap); - } - else - { - -#if IMAGE_BYTE_ORDER == LSBFirst - - pPixmap = GetScratchPixmapHeader(pScreen, w, h, /*depth*/ 1, - /*bpp*/ 1, BitmapBytePad(w), (pointer)pdstLine); - if (!pPixmap) - return; - - ptSrc.x = sx + pDrawable->x; - ptSrc.y = sy + pDrawable->y; - box.x1 = 0; - box.y1 = 0; - box.x2 = w; - box.y2 = h; - REGION_INIT(pScreen, &rgnDst, &box, 1); - cfbCopyImagePlane (pDrawable, (DrawablePtr)pPixmap, GXcopy, &rgnDst, - &ptSrc, planeMask); - REGION_UNINIT(pScreen, &rgnDst); - FreeScratchPixmapHeader(pPixmap); -#else - miGetImage (pDrawable, sx, sy, w, h, format, planeMask, pdstLine); -#endif - } -} diff --git a/cfb/cfbline.c b/cfb/cfbline.c deleted file mode 100644 index 84c089a73..000000000 --- a/cfb/cfbline.c +++ /dev/null @@ -1,756 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include - -#include "gcstruct.h" -#include "windowstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "scrnintstr.h" -#include "mistruct.h" - -#include "cfb.h" -#include "cfbmskbits.h" -#include "miline.h" - -/* single-pixel lines on a color frame buffer - - NON-SLOPED LINES - horizontal lines are always drawn left to right; we have to -move the endpoints right by one after they're swapped. - horizontal lines will be confined to a single band of a -region. the code finds that band (giving up if the lower -bound of the band is above the line we're drawing); then it -finds the first box in that band that contains part of the -line. we clip the line to subsequent boxes in that band. - vertical lines are always drawn top to bottom (y-increasing.) -this requires adding one to the y-coordinate of each endpoint -after swapping. - - SLOPED LINES - when clipping a sloped line, we bring the second point inside -the clipping box, rather than one beyond it, and then add 1 to -the length of the line before drawing it. this lets us use -the same box for finding the outcodes for both endpoints. since -the equation for clipping the second endpoint to an edge gives us -1 beyond the edge, we then have to move the point towards the -first point by one step on the major axis. - eventually, there will be a diagram here to explain what's going -on. the method uses Cohen-Sutherland outcodes to determine -outsideness, and a method similar to Pike's layers for doing the -actual clipping. - -*/ - -void -#ifdef POLYSEGMENT -cfbSegmentSS (pDrawable, pGC, nseg, pSeg) - DrawablePtr pDrawable; - GCPtr pGC; - int nseg; - register xSegment *pSeg; -#else -cfbLineSS (pDrawable, pGC, mode, npt, pptInit) - DrawablePtr pDrawable; - GCPtr pGC; - int mode; /* Origin or Previous */ - int npt; /* number of points */ - DDXPointPtr pptInit; -#endif -{ - int nboxInit; - register int nbox; - BoxPtr pboxInit; - register BoxPtr pbox; -#ifndef POLYSEGMENT - register DDXPointPtr ppt; /* pointer to list of translated points */ -#endif - - unsigned int oc1; /* outcode of point 1 */ - unsigned int oc2; /* outcode of point 2 */ - - CfbBits *addrl; /* address of destination pixmap */ - int nlwidth; /* width in longwords of destination pixmap */ - int xorg, yorg; /* origin of window */ - - int adx; /* abs values of dx and dy */ - int ady; - int signdx; /* sign of dx and dy */ - int signdy; - int e, e1, e2; /* bresenham error and increments */ - int len; /* length of segment */ - int axis; /* major axis */ - int octant; - unsigned int bias = miGetZeroLineBias(pDrawable->pScreen); - - /* a bunch of temporaries */ - int tmp; - register int y1, y2; - register int x1, x2; - RegionPtr cclip; - cfbPrivGCPtr devPriv; - CfbBits xor, and; - int alu; - - devPriv = cfbGetGCPrivate(pGC); - cclip = pGC->pCompositeClip; - pboxInit = REGION_RECTS(cclip); - nboxInit = REGION_NUM_RECTS(cclip); - - cfbGetLongWidthAndPointer (pDrawable, nlwidth, addrl) - - alu = devPriv->rop; - xor = devPriv->xor; - and = devPriv->and; - xorg = pDrawable->x; - yorg = pDrawable->y; -#ifdef POLYSEGMENT - while (nseg--) -#else - ppt = pptInit; - x2 = ppt->x + xorg; - y2 = ppt->y + yorg; - while(--npt) -#endif - { - nbox = nboxInit; - pbox = pboxInit; - -#ifdef POLYSEGMENT - x1 = pSeg->x1 + xorg; - y1 = pSeg->y1 + yorg; - x2 = pSeg->x2 + xorg; - y2 = pSeg->y2 + yorg; - pSeg++; -#else - x1 = x2; - y1 = y2; - ++ppt; - if (mode == CoordModePrevious) - { - xorg = x1; - yorg = y1; - } - x2 = ppt->x + xorg; - y2 = ppt->y + yorg; -#endif - - if (x1 == x2) /* vertical line */ - { - /* make the line go top to bottom of screen, keeping - endpoint semantics - */ - if (y1 > y2) - { - register int tmp; - - tmp = y2; - y2 = y1 + 1; - y1 = tmp + 1; -#ifdef POLYSEGMENT - if (pGC->capStyle != CapNotLast) - y1--; -#endif - } -#ifdef POLYSEGMENT - else if (pGC->capStyle != CapNotLast) - y2++; -#endif - /* get to first band that might contain part of line */ - while ((nbox) && (pbox->y2 <= y1)) - { - pbox++; - nbox--; - } - - if (nbox) - { - /* stop when lower edge of box is beyond end of line */ - while((nbox) && (y2 >= pbox->y1)) - { - if ((x1 >= pbox->x1) && (x1 < pbox->x2)) - { - int y1t, y2t; - /* this box has part of the line in it */ - y1t = max(y1, pbox->y1); - y2t = min(y2, pbox->y2); - if (y1t != y2t) - { - cfbVertS (alu, and, xor, - addrl, nlwidth, - x1, y1t, y2t-y1t); - } - } - nbox--; - pbox++; - } - } -#ifndef POLYSEGMENT - y2 = ppt->y + yorg; -#endif - } - else if (y1 == y2) /* horizontal line */ - { - /* force line from left to right, keeping - endpoint semantics - */ - if (x1 > x2) - { - register int tmp; - - tmp = x2; - x2 = x1 + 1; - x1 = tmp + 1; -#ifdef POLYSEGMENT - if (pGC->capStyle != CapNotLast) - x1--; -#endif - } -#ifdef POLYSEGMENT - else if (pGC->capStyle != CapNotLast) - x2++; -#endif - - /* find the correct band */ - while( (nbox) && (pbox->y2 <= y1)) - { - pbox++; - nbox--; - } - - /* try to draw the line, if we haven't gone beyond it */ - if ((nbox) && (pbox->y1 <= y1)) - { - /* when we leave this band, we're done */ - tmp = pbox->y1; - while((nbox) && (pbox->y1 == tmp)) - { - int x1t, x2t; - - if (pbox->x2 <= x1) - { - /* skip boxes until one might contain start point */ - nbox--; - pbox++; - continue; - } - - /* stop if left of box is beyond right of line */ - if (pbox->x1 >= x2) - { - nbox = 0; - break; - } - - x1t = max(x1, pbox->x1); - x2t = min(x2, pbox->x2); - if (x1t != x2t) - { - cfbHorzS (alu, and, xor, - addrl, nlwidth, - x1t, y1, x2t-x1t); - } - nbox--; - pbox++; - } - } -#ifndef POLYSEGMENT - x2 = ppt->x + xorg; -#endif - } - else /* sloped line */ - { - CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy, - 1, 1, octant); - - if (adx > ady) - { - axis = X_AXIS; - e1 = ady << 1; - e2 = e1 - (adx << 1); - e = e1 - adx; - } - else - { - axis = Y_AXIS; - e1 = adx << 1; - e2 = e1 - (ady << 1); - e = e1 - ady; - SetYMajorOctant(octant); - } - - FIXUP_ERROR(e, octant, bias); - - /* we have bresenham parameters and two points. - all we have to do now is clip and draw. - */ - - while(nbox--) - { - oc1 = 0; - oc2 = 0; - OUTCODES(oc1, x1, y1, pbox); - OUTCODES(oc2, x2, y2, pbox); - if ((oc1 | oc2) == 0) - { - if (axis == X_AXIS) - len = adx; - else - len = ady; -#ifdef POLYSEGMENT - if (pGC->capStyle != CapNotLast) - len++; -#endif - cfbBresS (alu, and, xor, - addrl, nlwidth, - signdx, signdy, axis, x1, y1, - e, e1, e2, len); - break; - } - else if (oc1 & oc2) - { - pbox++; - } - else - { - int new_x1 = x1, new_y1 = y1, new_x2 = x2, new_y2 = y2; - int clip1 = 0, clip2 = 0; - int clipdx, clipdy; - int err; - - if (miZeroClipLine(pbox->x1, pbox->y1, pbox->x2-1, - pbox->y2-1, - &new_x1, &new_y1, &new_x2, &new_y2, - adx, ady, &clip1, &clip2, - octant, bias, oc1, oc2) == -1) - { - pbox++; - continue; - } - - if (axis == X_AXIS) - len = abs(new_x2 - new_x1); - else - len = abs(new_y2 - new_y1); -#ifdef POLYSEGMENT - if (clip2 != 0 || pGC->capStyle != CapNotLast) - len++; -#else - len += (clip2 != 0); -#endif - if (len) - { - /* unwind bresenham error term to first point */ - if (clip1) - { - clipdx = abs(new_x1 - x1); - clipdy = abs(new_y1 - y1); - if (axis == X_AXIS) - err = e+((clipdy*e2) + ((clipdx-clipdy)*e1)); - else - err = e+((clipdx*e2) + ((clipdy-clipdx)*e1)); - } - else - err = e; - cfbBresS(alu, and, xor, - addrl, nlwidth, - signdx, signdy, axis, new_x1, new_y1, - err, e1, e2, len); - } - pbox++; - } - } /* while (nbox--) */ - } /* sloped line */ - } /* while (nline--) */ - -#ifndef POLYSEGMENT - /* paint the last point if the end style isn't CapNotLast. - (Assume that a projecting, butt, or round cap that is one - pixel wide is the same as the single pixel of the endpoint.) - */ - - if ((pGC->capStyle != CapNotLast) && - ((ppt->x + xorg != pptInit->x + pDrawable->x) || - (ppt->y + yorg != pptInit->y + pDrawable->y) || - (ppt == pptInit + 1))) - { - nbox = nboxInit; - pbox = pboxInit; - while (nbox--) - { - if ((x2 >= pbox->x1) && - (y2 >= pbox->y1) && - (x2 < pbox->x2) && - (y2 < pbox->y2)) - { - CfbBits mask; - CfbBits scrbits; - -#if PSZ == 24 - mask = cfbmask[(x2 & 3)<<1]; - addrl += (y2 * nlwidth) + ((x2*3) >> 2); -#else - mask = cfbmask[x2 & PIM]; - addrl += (y2 * nlwidth) + (x2 >> PWSH); -#endif - scrbits = *addrl; - *addrl = (scrbits & ~mask) | - (DoRRop (scrbits, and, xor) & mask); - break; - } - else - pbox++; - } - } -#endif -} - -/* - * Draw dashed 1-pixel lines. - */ - -void -#ifdef POLYSEGMENT -cfbSegmentSD (pDrawable, pGC, nseg, pSeg) - DrawablePtr pDrawable; - register GCPtr pGC; - int nseg; - register xSegment *pSeg; -#else -cfbLineSD( pDrawable, pGC, mode, npt, pptInit) - DrawablePtr pDrawable; - register GCPtr pGC; - int mode; /* Origin or Previous */ - int npt; /* number of points */ - DDXPointPtr pptInit; -#endif -{ - int nboxInit; - register int nbox; - BoxPtr pboxInit; - register BoxPtr pbox; -#ifndef POLYSEGMENT - register DDXPointPtr ppt; /* pointer to list of translated points */ -#endif - - register unsigned int oc1; /* outcode of point 1 */ - register unsigned int oc2; /* outcode of point 2 */ - - CfbBits *addrl; /* address of destination pixmap */ - int nlwidth; /* width in longwords of destination pixmap */ - int xorg, yorg; /* origin of window */ - - int adx; /* abs values of dx and dy */ - int ady; - int signdx; /* sign of dx and dy */ - int signdy; - int e, e1, e2; /* bresenham error and increments */ - int len; /* length of segment */ - int axis; /* major axis */ - int octant; - unsigned int bias = miGetZeroLineBias(pDrawable->pScreen); - int x1, x2, y1, y2; - RegionPtr cclip; - cfbRRopRec rrops[2]; - unsigned char *pDash; - int dashOffset; - int numInDashList; - int dashIndex; - int isDoubleDash; - int dashIndexTmp, dashOffsetTmp; - int unclippedlen; - cfbPrivGCPtr devPriv; - - devPriv = cfbGetGCPrivate(pGC); - cclip = pGC->pCompositeClip; - rrops[0].rop = devPriv->rop; - rrops[0].and = devPriv->and; - rrops[0].xor = devPriv->xor; - if (pGC->alu == GXcopy) - { - rrops[1].rop = GXcopy; - rrops[1].and = 0; - rrops[1].xor = PFILL (pGC->bgPixel); - } - else - { - rrops[1].rop = cfbReduceRasterOp (pGC->alu, - pGC->bgPixel, pGC->planemask, - &rrops[1].and, &rrops[1].xor); - } - pboxInit = REGION_RECTS(cclip); - nboxInit = REGION_NUM_RECTS(cclip); - - cfbGetLongWidthAndPointer (pDrawable, nlwidth, addrl) - - /* compute initial dash values */ - - pDash = (unsigned char *) pGC->dash; - numInDashList = pGC->numInDashList; - isDoubleDash = (pGC->lineStyle == LineDoubleDash); - dashIndex = 0; - dashOffset = 0; - miStepDash ((int)pGC->dashOffset, &dashIndex, pDash, - numInDashList, &dashOffset); - - xorg = pDrawable->x; - yorg = pDrawable->y; -#ifdef POLYSEGMENT - while (nseg--) -#else - ppt = pptInit; - x2 = ppt->x + xorg; - y2 = ppt->y + yorg; - while(--npt) -#endif - { - nbox = nboxInit; - pbox = pboxInit; - -#ifdef POLYSEGMENT - x1 = pSeg->x1 + xorg; - y1 = pSeg->y1 + yorg; - x2 = pSeg->x2 + xorg; - y2 = pSeg->y2 + yorg; - pSeg++; -#else - x1 = x2; - y1 = y2; - ++ppt; - if (mode == CoordModePrevious) - { - xorg = x1; - yorg = y1; - } - x2 = ppt->x + xorg; - y2 = ppt->y + yorg; -#endif - - CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy, 1, 1, octant); - - if (adx > ady) - { - axis = X_AXIS; - e1 = ady << 1; - e2 = e1 - (adx << 1); - e = e1 - adx; - unclippedlen = adx; - } - else - { - axis = Y_AXIS; - e1 = adx << 1; - e2 = e1 - (ady << 1); - e = e1 - ady; - unclippedlen = ady; - SetYMajorOctant(octant); - } - - FIXUP_ERROR(e, octant, bias); - - /* we have bresenham parameters and two points. - all we have to do now is clip and draw. - */ - - while(nbox--) - { - oc1 = 0; - oc2 = 0; - OUTCODES(oc1, x1, y1, pbox); - OUTCODES(oc2, x2, y2, pbox); - if ((oc1 | oc2) == 0) - { -#ifdef POLYSEGMENT - if (pGC->capStyle != CapNotLast) - unclippedlen++; - dashIndexTmp = dashIndex; - dashOffsetTmp = dashOffset; - cfbBresD (rrops, - &dashIndexTmp, pDash, numInDashList, - &dashOffsetTmp, isDoubleDash, - addrl, nlwidth, - signdx, signdy, axis, x1, y1, - e, e1, e2, unclippedlen); - break; -#else - cfbBresD (rrops, - &dashIndex, pDash, numInDashList, - &dashOffset, isDoubleDash, - addrl, nlwidth, - signdx, signdy, axis, x1, y1, - e, e1, e2, unclippedlen); - goto dontStep; -#endif - } - else if (oc1 & oc2) - { - pbox++; - } - else /* have to clip */ - { - int new_x1 = x1, new_y1 = y1, new_x2 = x2, new_y2 = y2; - int clip1 = 0, clip2 = 0; - int clipdx, clipdy; - int err; - - if (miZeroClipLine(pbox->x1, pbox->y1, pbox->x2-1, - pbox->y2-1, - &new_x1, &new_y1, &new_x2, &new_y2, - adx, ady, &clip1, &clip2, - octant, bias, oc1, oc2) == -1) - { - pbox++; - continue; - } - - dashIndexTmp = dashIndex; - dashOffsetTmp = dashOffset; - - if (clip1) - { - int dlen; - - if (axis == X_AXIS) - dlen = abs(new_x1 - x1); - else - dlen = abs(new_y1 - y1); - miStepDash (dlen, &dashIndexTmp, pDash, - numInDashList, &dashOffsetTmp); - } - - if (axis == X_AXIS) - len = abs(new_x2 - new_x1); - else - len = abs(new_y2 - new_y1); -#ifdef POLYSEGMENT - if (clip2 != 0 || pGC->capStyle != CapNotLast) - len++; -#else - len += (clip2 != 0); -#endif - if (len) - { - /* unwind bresenham error term to first point */ - if (clip1) - { - clipdx = abs(new_x1 - x1); - clipdy = abs(new_y1 - y1); - if (axis == X_AXIS) - err = e+((clipdy*e2) + ((clipdx-clipdy)*e1)); - else - err = e+((clipdx*e2) + ((clipdy-clipdx)*e1)); - } - else - err = e; - cfbBresD (rrops, - &dashIndexTmp, pDash, numInDashList, - &dashOffsetTmp, isDoubleDash, - addrl, nlwidth, - signdx, signdy, axis, new_x1, new_y1, - err, e1, e2, len); - } - pbox++; - } - } /* while (nbox--) */ -#ifndef POLYSEGMENT - /* - * walk the dash list around to the next line - */ - miStepDash (unclippedlen, &dashIndex, pDash, - numInDashList, &dashOffset); -dontStep: ; -#endif - } /* while (nline--) */ - -#ifndef POLYSEGMENT - /* paint the last point if the end style isn't CapNotLast. - (Assume that a projecting, butt, or round cap that is one - pixel wide is the same as the single pixel of the endpoint.) - */ - - if ((pGC->capStyle != CapNotLast) && - ((dashIndex & 1) == 0 || isDoubleDash) && - ((ppt->x + xorg != pptInit->x + pDrawable->x) || - (ppt->y + yorg != pptInit->y + pDrawable->y) || - (ppt == pptInit + 1))) - { - nbox = nboxInit; - pbox = pboxInit; - while (nbox--) - { - if ((x2 >= pbox->x1) && - (y2 >= pbox->y1) && - (x2 < pbox->x2) && - (y2 < pbox->y2)) - { - CfbBits mask; - int pix; - - pix = 0; - if (dashIndex & 1) - pix = 1; -#if PSZ == 24 - mask = cfbmask[(x2 & 3)<<1]; - addrl += (y2 * nlwidth) + ((x2 *3)>> 2); -#else - mask = cfbmask[x2 & PIM]; - addrl += (y2 * nlwidth) + (x2 >> PWSH); -#endif - *addrl = DoMaskRRop (*addrl, rrops[pix].and, rrops[pix].xor, mask); - break; - } - else - pbox++; - } - } -#endif -} diff --git a/cfb/cfbmap.h b/cfb/cfbmap.h deleted file mode 100644 index 16e4afc3c..000000000 --- a/cfb/cfbmap.h +++ /dev/null @@ -1,210 +0,0 @@ -/* - * -Copyright 1991, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - - -/* - * Map names around so that multiple depths can be supported simultaneously - */ - -/* a losing vendor cpp dumps core if we define CFBNAME in terms of CATNAME */ - -#if PSZ != 8 - -#if PSZ == 32 -#if !defined(UNIXCPP) || defined(ANSICPP) -#define CFBNAME(subname) cfb32##subname -#else -#define CFBNAME(subname) cfb32/**/subname -#endif -#endif - -#if PSZ == 24 -#if !defined(UNIXCPP) || defined(ANSICPP) -#define CFBNAME(subname) cfb24##subname -#else -#define CFBNAME(subname) cfb24/**/subname -#endif -#endif - -#if PSZ == 16 -#if !defined(UNIXCPP) || defined(ANSICPP) -#define CFBNAME(subname) cfb16##subname -#else -#define CFBNAME(subname) cfb16/**/subname -#endif -#endif - -#if PSZ == 4 -#if !defined(UNIXCPP) || defined(ANSICPP) -#define CFBNAME(subname) cfb4##subname -#else -#define CFBNAME(subname) cfb4/**/subname -#endif -#endif - -#ifndef CFBNAME -cfb can not hack PSZ yet -#endif - -#undef CATNAME - -#if !defined(UNIXCPP) || defined(ANSICPP) -#define CATNAME(prefix,subname) prefix##subname -#else -#define CATNAME(prefix,subname) prefix/**/subname -#endif - -#define QuartetBitsTable CFBNAME(QuartetBitsTable) -#define QuartetPixelMaskTable CFBNAME(QuartetPixelMaskTable) -#define cfb8ClippedLineCopy CFBNAME(ClippedLineCopy) -#define cfb8ClippedLineGeneral CFBNAME(ClippedLineGeneral ) -#define cfb8ClippedLineXor CFBNAME(ClippedLineXor) -#define cfb8LineSS1Rect CFBNAME(LineSS1Rect) -#define cfb8LineSS1RectCopy CFBNAME(LineSS1RectCopy) -#define cfb8LineSS1RectGeneral CFBNAME(LineSS1RectGeneral ) -#define cfb8LineSS1RectPreviousCopy CFBNAME(LineSS1RectPreviousCopy) -#define cfb8LineSS1RectXor CFBNAME(LineSS1RectXor) -#define cfb8SegmentSS1Rect CFBNAME(SegmentSS1Rect) -#define cfb8SegmentSS1RectCopy CFBNAME(SegmentSS1RectCopy) -#define cfb8SegmentSS1RectGeneral CFBNAME(SegmentSS1RectGeneral ) -#define cfb8SegmentSS1RectShiftCopy CFBNAME(SegmentSS1RectShiftCopy) -#define cfb8SegmentSS1RectXor CFBNAME(SegmentSS1RectXor) -#define cfbAllocatePrivates CFBNAME(AllocatePrivates) -#define cfbBSFuncRec CFBNAME(BSFuncRec) -#define cfbBitBlt CFBNAME(BitBlt) -#define cfbBresD CFBNAME(BresD) -#define cfbBresS CFBNAME(BresS) -#define cfbChangeWindowAttributes CFBNAME(ChangeWindowAttributes) -#define cfbClearVisualTypes CFBNAME(cfbClearVisualTypes) -#define cfbCloseScreen CFBNAME(CloseScreen) -#define cfbCreateDefColormap CFBNAME (cfbCreateDefColormap) -#define cfbCopyArea CFBNAME(CopyArea) -#define cfbCopyImagePlane CFBNAME(CopyImagePlane) -#define cfbCopyPixmap CFBNAME(CopyPixmap) -#define cfbCopyPlane CFBNAME(CopyPlane) -#define cfbCopyPlaneReduce CFBNAME(CopyPlaneReduce) -#define cfbCopyRotatePixmap CFBNAME(CopyRotatePixmap) -#define cfbCopyWindow CFBNAME(CopyWindow) -#define cfbCreateGC CFBNAME(CreateGC) -#define cfbCreatePixmap CFBNAME(CreatePixmap) -#define cfbCreateScreenResources CFBNAME(CreateScreenResources) -#define cfbCreateWindow CFBNAME(CreateWindow) -#define cfbDestroyPixmap CFBNAME(DestroyPixmap) -#define cfbDestroyWindow CFBNAME(DestroyWindow) -#define cfbDoBitblt CFBNAME(DoBitblt) -#define cfbDoBitbltCopy CFBNAME(DoBitbltCopy) -#define cfbDoBitbltGeneral CFBNAME(DoBitbltGeneral) -#define cfbDoBitbltOr CFBNAME(DoBitbltOr) -#define cfbDoBitbltXor CFBNAME(DoBitbltXor) -#define cfbExpandDirectColors CFBNAME(cfbExpandDirectColors) -#define cfbFillBoxTile32sCopy CFBNAME(FillBoxTile32sCopy) -#define cfbFillBoxTile32sGeneral CFBNAME(FillBoxTile32sGeneral) -#define cfbFillBoxTileOdd CFBNAME(FillBoxTileOdd) -#define cfbFillBoxTileOddCopy CFBNAME(FillBoxTileOddCopy) -#define cfbFillBoxTileOddGeneral CFBNAME(FillBoxTileOddGeneral) -#define cfbFillPoly1RectCopy CFBNAME(FillPoly1RectCopy) -#define cfbFillPoly1RectGeneral CFBNAME(FillPoly1RectGeneral) -#define cfbFillRectSolidCopy CFBNAME(FillRectSolidCopy) -#define cfbFillRectSolidGeneral CFBNAME(FillRectSolidGeneral) -#define cfbFillRectSolidXor CFBNAME(FillRectSolidXor) -#define cfbFillRectTile32Copy CFBNAME(FillRectTile32Copy) -#define cfbFillRectTile32General CFBNAME(FillRectTile32General) -#define cfbFillRectTileOdd CFBNAME(FillRectTileOdd) -#define cfbFillSpanTile32sCopy CFBNAME(FillSpanTile32sCopy) -#define cfbFillSpanTile32sGeneral CFBNAME(FillSpanTile32sGeneral) -#define cfbFillSpanTileOddCopy CFBNAME(FillSpanTileOddCopy) -#define cfbFillSpanTileOddGeneral CFBNAME(FillSpanTileOddGeneral) -#define cfbFinishScreenInit CFBNAME(FinishScreenInit) -#define cfbGCFuncs CFBNAME(GCFuncs) -#define cfbGCPrivateKey CFBNAME(GCPrivateKey) -#define cfbGetImage CFBNAME(GetImage) -#define cfbGetScreenPixmap CFBNAME(GetScreenPixmap) -#define cfbGetSpans CFBNAME(GetSpans) -#define cfbHorzS CFBNAME(HorzS) -#define cfbImageGlyphBlt8 CFBNAME(ImageGlyphBlt8) -#define cfbInitializeColormap CFBNAME(InitializeColormap) -#define cfbInitVisuals CFBNAME(cfbInitVisuals) -#define cfbInstallColormap CFBNAME(InstallColormap) -#define cfbLineSD CFBNAME(LineSD) -#define cfbLineSS CFBNAME(LineSS) -#define cfbListInstalledColormaps CFBNAME(ListInstalledColormaps) -#define cfbMapWindow CFBNAME(MapWindow) -#define cfbMatchCommon CFBNAME(MatchCommon) -#define cfbNonTEOps CFBNAME(NonTEOps) -#define cfbNonTEOps1Rect CFBNAME(NonTEOps1Rect) -#define cfbPadPixmap CFBNAME(PadPixmap) -#define cfbPolyFillArcSolidCopy CFBNAME(PolyFillArcSolidCopy) -#define cfbPolyFillArcSolidGeneral CFBNAME(PolyFillArcSolidGeneral) -#define cfbPolyFillRect CFBNAME(PolyFillRect) -#define cfbPolyGlyphBlt8 CFBNAME(PolyGlyphBlt8) -#define cfbPolyGlyphRop8 CFBNAME(PolyGlyphRop8) -#define cfbPolyPoint CFBNAME(PolyPoint) -#define cfbPositionWindow CFBNAME(PositionWindow) -#define cfbPutImage CFBNAME(PutImage) -#define cfbReduceRasterOp CFBNAME(ReduceRasterOp) -#define cfbResolveColor CFBNAME(ResolveColor) -#define cfbRestoreAreas CFBNAME(RestoreAreas) -#define cfbSaveAreas CFBNAME(SaveAreas) -#define cfbScreenInit CFBNAME(ScreenInit) -#define cfbScreenPrivateKey CFBNAME(ScreenPrivateKey) -#define cfbSegmentSD CFBNAME(SegmentSD) -#define cfbSegmentSS CFBNAME(SegmentSS) -#define cfbSetScanline CFBNAME(SetScanline) -#define cfbSetScreenPixmap CFBNAME(SetScreenPixmap) -#define cfbSetSpans CFBNAME(SetSpans) -#define cfbSetVisualTypes CFBNAME(cfbSetVisualTypes) -#define cfbSetupScreen CFBNAME(SetupScreen) -#define cfbSolidSpansCopy CFBNAME(SolidSpansCopy) -#define cfbSolidSpansGeneral CFBNAME(SolidSpansGeneral) -#define cfbSolidSpansXor CFBNAME(SolidSpansXor) -#define cfbStippleStack CFBNAME(StippleStack) -#define cfbStippleStackTE CFBNAME(StippleStackTE) -#define cfbTEGlyphBlt CFBNAME(TEGlyphBlt) -#define cfbTEOps CFBNAME(TEOps) -#define cfbTEOps1Rect CFBNAME(TEOps1Rect) -#define cfbTile32FSCopy CFBNAME(Tile32FSCopy) -#define cfbTile32FSGeneral CFBNAME(Tile32FSGeneral) -#define cfbUninstallColormap CFBNAME(UninstallColormap) -#define cfbUnmapWindow CFBNAME(UnmapWindow) -#define cfbUnnaturalStippleFS CFBNAME(UnnaturalStippleFS) -#define cfbUnnaturalTileFS CFBNAME(UnnaturalTileFS) -#define cfbValidateGC CFBNAME(ValidateGC) -#define cfbVertS CFBNAME(VertS) -#define cfbWindowPrivateKey CFBNAME(WindowPrivateKey) -#define cfbXRotatePixmap CFBNAME(XRotatePixmap) -#define cfbYRotatePixmap CFBNAME(YRotatePixmap) -#define cfbZeroPolyArcSS8Copy CFBNAME(ZeroPolyArcSSCopy) -#define cfbZeroPolyArcSS8General CFBNAME(ZeroPolyArcSSGeneral) -#define cfbZeroPolyArcSS8Xor CFBNAME(ZeroPolyArcSSXor) -#define cfbendpartial CFBNAME(endpartial) -#define cfbendtab CFBNAME(endtab) -#define cfbmask CFBNAME(mask) -#define cfbrmask CFBNAME(rmask) -#define cfbstartpartial CFBNAME(startpartial) -#define cfbstarttab CFBNAME(starttab) - -#endif /* PSZ != 8 */ diff --git a/cfb/cfbmskbits.c b/cfb/cfbmskbits.c deleted file mode 100644 index 915ea35c1..000000000 --- a/cfb/cfbmskbits.c +++ /dev/null @@ -1,1400 +0,0 @@ -/************************************************************ -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - -********************************************************/ - - -/* - * ========================================================================== - * Converted to Color Frame Buffer by smarks@sun, April-May 1987. The "bit - * numbering" in the doc below really means "byte numbering" now. - * ========================================================================== - */ - -/* - these tables are used by several macros in the cfb code. - - the vax numbers everything left to right, so bit indices on the -screen match bit indices in longwords. the pc-rt and Sun number -bits on the screen the way they would be written on paper, -(i.e. msb to the left), and so a bit index n on the screen is -bit index 32-n in a longword - - see also cfbmskbits.h -*/ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "cfb.h" -#include "cfbmskbits.h" - -#define _cfbBits(a) (PixelGroup)(a) - -#if (BITMAP_BIT_ORDER == MSBFirst) -#define cfbBits(v) _cfbBits(v) -#else /* BITMAP_BIT_ORDER == LSBFirst */ -#define cfbFlip2(a) ((((a) & 0x1) << 1) | (((a) & 0x2) >> 1)) -#define cfbFlip4(a) ((cfbFlip2(a) << 2) | cfbFlip2(a >> 2)) -#define cfbFlip8(a) ((cfbFlip4(a) << 4) | cfbFlip4(a >> 4)) -#define cfbFlip16(a) ((cfbFlip8(a) << 8) | cfbFlip8(a >> 8)) -#define cfbFlip32(a) ((cfbFlip16(a) << 16) | cfbFlip16(a >> 16)) -#if PGSZ == 32 -#define cfbBits(a) cfbFlip32(_cfbBits(a)) -#else /* PGSZ == 64 */ -#define cfbFlip64(a) ((cfbFlip32(a) << 32) | cfbFlip32(a >> 32)) -#define cfbBits(a) cfbFlip64(_cfbBits(a)) -#endif /* PGSZ */ -#endif /* BITMAP_BIT_ORDER */ - -/* NOTE: -the first element in starttab could be 0xffffffff. making it 0 -lets us deal with a full first word in the middle loop, rather -than having to do the multiple reads and masks that we'd -have to do if we thought it was partial. -*/ -#if PSZ == 4 -#if PGSZ == 32 -PixelGroup cfbstarttab[] = - { - cfbBits(0x00000000), - cfbBits(0x0FFFFFFF), - cfbBits(0x00FFFFFF), - cfbBits(0x000FFFFF), - cfbBits(0x0000FFFF), - cfbBits(0x00000FFF), - cfbBits(0x000000FF), - cfbBits(0x0000000F) - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x00000000), - cfbBits(0xF0000000), - cfbBits(0xFF000000), - cfbBits(0xFFF00000), - cfbBits(0xFFFF0000), - cfbBits(0xFFFFF000), - cfbBits(0xFFFFFF00), - cfbBits(0xFFFFFFF0) - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstarttab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0x0FFFFFFFFFFFFFFF), - cfbBits(0x00FFFFFFFFFFFFFF), - cfbBits(0x000FFFFFFFFFFFFF), - cfbBits(0x0000FFFFFFFFFFFF), - cfbBits(0x00000FFFFFFFFFFF), - cfbBits(0x000000FFFFFFFFFF), - cfbBits(0x0000000FFFFFFFFF), - cfbBits(0x00000000FFFFFFFF), - cfbBits(0x000000000FFFFFFF), - cfbBits(0x0000000000FFFFFF), - cfbBits(0x00000000000FFFFF), - cfbBits(0x000000000000FFFF), - cfbBits(0x0000000000000FFF), - cfbBits(0x00000000000000FF), - cfbBits(0x000000000000000F), - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0xF000000000000000), - cfbBits(0xFF00000000000000), - cfbBits(0xFFF0000000000000), - cfbBits(0xFFFF000000000000), - cfbBits(0xFFFFF00000000000), - cfbBits(0xFFFFFF0000000000), - cfbBits(0xFFFFFFF000000000), - cfbBits(0xFFFFFFFF00000000), - cfbBits(0xFFFFFFFFF0000000), - cfbBits(0xFFFFFFFFFF000000), - cfbBits(0xFFFFFFFFFFF00000), - cfbBits(0xFFFFFFFFFFFF0000), - cfbBits(0xFFFFFFFFFFFFF000), - cfbBits(0xFFFFFFFFFFFFFF00), - cfbBits(0xFFFFFFFFFFFFFFF0), - }; -#endif /* PGSZ */ -#endif /* PSZ == 4 */ - -#if PSZ == 8 -#if PGSZ == 32 -PixelGroup cfbstarttab[] = - { - cfbBits(0x00000000), - cfbBits(0x00FFFFFF), - cfbBits(0x0000FFFF), - cfbBits(0x000000FF) - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x00000000), - cfbBits(0xFF000000), - cfbBits(0xFFFF0000), - cfbBits(0xFFFFFF00) - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstarttab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0x00FFFFFFFFFFFFFF), - cfbBits(0x0000FFFFFFFFFFFF), - cfbBits(0x000000FFFFFFFFFF), - cfbBits(0x00000000FFFFFFFF), - cfbBits(0x0000000000FFFFFF), - cfbBits(0x000000000000FFFF), - cfbBits(0x00000000000000FF) - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0xFF00000000000000), - cfbBits(0xFFFF000000000000), - cfbBits(0xFFFFFF0000000000), - cfbBits(0xFFFFFFFF00000000), - cfbBits(0xFFFFFFFFFF000000), - cfbBits(0xFFFFFFFFFFFF0000), - cfbBits(0xFFFFFFFFFFFFFF00) - }; -#endif /* PGSZ */ -#endif /* PSZ == 8 */ - -#if PSZ == 16 -#if PGSZ == 32 -PixelGroup cfbstarttab[] = - { - cfbBits(0x00000000), - cfbBits(0x0000FFFF), - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x00000000), - cfbBits(0xFFFF0000), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstarttab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0x0000FFFFFFFFFFFF), - cfbBits(0x00000000FFFFFFFF), - cfbBits(0x000000000000FFFF), - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0xFFFF000000000000), - cfbBits(0xFFFFFFFF00000000), - cfbBits(0xFFFFFFFFFFFF0000), - }; -#endif /* PGSZ */ -#endif - -#if PSZ == 24 -#if PGSZ == 32 -PixelGroup cfbstarttab[] = - { - cfbBits(0x00000000), - cfbBits(0x000000FF), - cfbBits(0x0000FFFF), - cfbBits(0x00FFFFFF), - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x00000000), - cfbBits(0xFFFFFF00), - cfbBits(0xFFFF0000), - cfbBits(0xFF000000), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstarttab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0x000000FFFFFFFFFF), - cfbBits(0x000000000000FFFF), - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0xFFFFFFFFFF000000), - cfbBits(0xFFFF000000000000), - }; -#endif /* PGSZ */ -#endif /* PSZ == 24 */ - -#if PSZ == 32 -#if PGSZ == 32 -PixelGroup cfbstarttab[] = - { - cfbBits(0x00000000), - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x00000000), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstarttab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0x00000000FFFFFFFF), - }; -PixelGroup cfbendtab[] = - { - cfbBits(0x0000000000000000), - cfbBits(0xFFFFFFFF00000000), - }; -#endif /* PGSZ */ -#endif /* PSZ == 32 */ - -/* a hack, for now, since the entries for 0 need to be all - 1 bits, not all zeros. - this means the code DOES NOT WORK for segments of length - 0 (which is only a problem in the horizontal line code.) -*/ -#if PSZ == 4 -#if PGSZ == 32 -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFF), - cfbBits(0x0FFFFFFF), - cfbBits(0x00FFFFFF), - cfbBits(0x000FFFFF), - cfbBits(0x0000FFFF), - cfbBits(0x00000FFF), - cfbBits(0x000000FF), - cfbBits(0x0000000F) - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFF), - cfbBits(0xF0000000), - cfbBits(0xFF000000), - cfbBits(0xFFF00000), - cfbBits(0xFFFF0000), - cfbBits(0xFFFFF000), - cfbBits(0xFFFFFF00), - cfbBits(0xFFFFFFF0) - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0x0FFFFFFFFFFFFFFF), - cfbBits(0x00FFFFFFFFFFFFFF), - cfbBits(0x000FFFFFFFFFFFFF), - cfbBits(0x0000FFFFFFFFFFFF), - cfbBits(0x00000FFFFFFFFFFF), - cfbBits(0x000000FFFFFFFFFF), - cfbBits(0x0000000FFFFFFFFF), - cfbBits(0x00000000FFFFFFFF), - cfbBits(0x000000000FFFFFFF), - cfbBits(0x0000000000FFFFFF), - cfbBits(0x00000000000FFFFF), - cfbBits(0x000000000000FFFF), - cfbBits(0x0000000000000FFF), - cfbBits(0x00000000000000FF), - cfbBits(0x000000000000000F), - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0xF000000000000000), - cfbBits(0xFF00000000000000), - cfbBits(0xFFF0000000000000), - cfbBits(0xFFFF000000000000), - cfbBits(0xFFFFF00000000000), - cfbBits(0xFFFFFF0000000000), - cfbBits(0xFFFFFFF000000000), - cfbBits(0xFFFFFFFF00000000), - cfbBits(0xFFFFFFFFF0000000), - cfbBits(0xFFFFFFFFFF000000), - cfbBits(0xFFFFFFFFFFF00000), - cfbBits(0xFFFFFFFFFFFF0000), - cfbBits(0xFFFFFFFFFFFFF000), - cfbBits(0xFFFFFFFFFFFFFF00), - cfbBits(0xFFFFFFFFFFFFFFF0), - }; -#endif /* PGSZ */ -#endif /* PSZ == 4 */ - -#if PSZ == 8 -#if PGSZ == 32 -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFF), - cfbBits(0x00FFFFFF), - cfbBits(0x0000FFFF), - cfbBits(0x000000FF) - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFF), - cfbBits(0xFF000000), - cfbBits(0xFFFF0000), - cfbBits(0xFFFFFF00) - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0x00FFFFFFFFFFFFFF), - cfbBits(0x0000FFFFFFFFFFFF), - cfbBits(0x000000FFFFFFFFFF), - cfbBits(0x00000000FFFFFFFF), - cfbBits(0x0000000000FFFFFF), - cfbBits(0x000000000000FFFF), - cfbBits(0x00000000000000FF), - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0xFF00000000000000), - cfbBits(0xFFFF000000000000), - cfbBits(0xFFFFFF0000000000), - cfbBits(0xFFFFFFFF00000000), - cfbBits(0xFFFFFFFFFF000000), - cfbBits(0xFFFFFFFFFFFF0000), - cfbBits(0xFFFFFFFFFFFFFF00), - }; -#endif /* PGSZ */ -#endif /* PSZ == 8 */ - -#if PSZ == 16 -#if PGSZ == 32 -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFF), - cfbBits(0x0000FFFF), - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFF), - cfbBits(0xFFFF0000), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0x0000FFFFFFFFFFFF), - cfbBits(0x00000000FFFFFFFF), - cfbBits(0x000000000000FFFF), - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0xFFFF000000000000), - cfbBits(0xFFFFFFFF00000000), - cfbBits(0xFFFFFFFFFFFF0000), - }; -#endif /* PGSZ */ -#endif /* PSZ == 16 */ - -#if PSZ == 24 -#if PGSZ == 32 -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFF), - cfbBits(0x000000FF), - cfbBits(0x0000FFFF), - cfbBits(0x00FFFFFF), - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFF), - cfbBits(0xFFFFFF00), - cfbBits(0xFFFF0000), - cfbBits(0xFF000000), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0x0000FFFFFFFFFFFF), - cfbBits(0x000000FFFFFFFFFF), - cfbBits(0x00000000FFFFFFFF), - cfbBits(0x0000000000FFFFFF), - cfbBits(0x000000000000FFFF), - cfbBits(0x00000000000000FF), - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0xFFFFFFFFFFFF0000), - cfbBits(0xFFFFFFFFFF000000), - cfbBits(0xFFFFFFFF00000000), - cfbBits(0xFFFFFF0000000000), - cfbBits(0xFFFF000000000000), - cfbBits(0xFF00000000000000), - }; -#endif /* PGSZ */ -#endif /* PSZ == 24 */ - -#if PSZ == 32 -#if PGSZ == 32 -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFF), - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFF), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbstartpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0x00000000FFFFFFFF), - }; - -PixelGroup cfbendpartial[] = - { - cfbBits(0xFFFFFFFFFFFFFFFF), - cfbBits(0xFFFFFFFF00000000), - }; -#endif /* PGSZ */ -#endif /* PSZ == 32 */ - -/* used for masking bits in bresenham lines - mask[n] is used to mask out all but bit n in a longword (n is a -screen position). - rmask[n] is used to mask out the single bit at position n (n -is a screen posiotion.) -*/ - -#if PSZ == 4 -#if PGSZ == 32 -PixelGroup cfbmask[] = - { - cfbBits(0xF0000000), - cfbBits(0x0F000000), - cfbBits(0x00F00000), - cfbBits(0x000F0000), - cfbBits(0x0000F000), - cfbBits(0x00000F00), - cfbBits(0x000000F0), - cfbBits(0x0000000F) - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x0FFFFFFF), - cfbBits(0xF0FFFFFF), - cfbBits(0xFF0FFFFF), - cfbBits(0xFFF0FFFF), - cfbBits(0xFFFF0FFF), - cfbBits(0xFFFFF0FF), - cfbBits(0xFFFFFF0F), - cfbBits(0xFFFFFFF0) - }; -#else /* PGSZ == 64 */ -PixelGroup cfbmask[] = - { - cfbBits(0xF000000000000000), - cfbBits(0x0F00000000000000), - cfbBits(0x00F0000000000000), - cfbBits(0x000F000000000000), - cfbBits(0x0000F00000000000), - cfbBits(0x00000F0000000000), - cfbBits(0x000000F000000000), - cfbBits(0x0000000F00000000), - cfbBits(0x00000000F0000000), - cfbBits(0x000000000F000000), - cfbBits(0x0000000000F00000), - cfbBits(0x00000000000F0000), - cfbBits(0x000000000000F000), - cfbBits(0x0000000000000F00), - cfbBits(0x00000000000000F0), - cfbBits(0x000000000000000F), - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x0FFFFFFFFFFFFFFF), - cfbBits(0xF0FFFFFFFFFFFFFF), - cfbBits(0xFF0FFFFFFFFFFFFF), - cfbBits(0xFFF0FFFFFFFFFFFF), - cfbBits(0xFFFF0FFFFFFFFFFF), - cfbBits(0xFFFFF0FFFFFFFFFF), - cfbBits(0xFFFFFF0FFFFFFFFF), - cfbBits(0xFFFFFFF0FFFFFFFF), - cfbBits(0xFFFFFFFF0FFFFFFF), - cfbBits(0xFFFFFFFFF0FFFFFF), - cfbBits(0xFFFFFFFFFF0FFFFF), - cfbBits(0xFFFFFFFFFFF0FFFF), - cfbBits(0xFFFFFFFFFFFF0FFF), - cfbBits(0xFFFFFFFFFFFFF0FF), - cfbBits(0xFFFFFFFFFFFFFF0F), - cfbBits(0xFFFFFFFFFFFFFFF0), - }; -#endif /* PGSZ */ -#endif /* PSZ == 4 */ - -#if PSZ == 8 -#if PGSZ == 32 -PixelGroup cfbmask[] = - { - cfbBits(0xFF000000), - cfbBits(0x00FF0000), - cfbBits(0x0000FF00), - cfbBits(0x000000FF) - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x00FFFFFF), - cfbBits(0xFF00FFFF), - cfbBits(0xFFFF00FF), - cfbBits(0xFFFFFF00) - }; -#else /* PGSZ == 64 */ -PixelGroup cfbmask[] = - { - cfbBits(0xFF00000000000000), - cfbBits(0x00FF000000000000), - cfbBits(0x0000FF0000000000), - cfbBits(0x000000FF00000000), - cfbBits(0x00000000FF000000), - cfbBits(0x0000000000FF0000), - cfbBits(0x000000000000FF00), - cfbBits(0x00000000000000FF), - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x00FFFFFFFFFFFFFF), - cfbBits(0xFF00FFFFFFFFFFFF), - cfbBits(0xFFFF00FFFFFFFFFF), - cfbBits(0xFFFFFF00FFFFFFFF), - cfbBits(0xFFFFFFFF00FFFFFF), - cfbBits(0xFFFFFFFFFF00FFFF), - cfbBits(0xFFFFFFFFFFFF00FF), - cfbBits(0xFFFFFFFFFFFFFF00), - }; -#endif /* PGSZ */ -#endif /* PSZ == 8 */ - -#if PSZ == 16 -#if PGSZ == 32 -PixelGroup cfbmask[] = - { - cfbBits(0xFFFF0000), - cfbBits(0x0000FFFF), - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x0000FFFF), - cfbBits(0xFFFF0000), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbmask[] = - { - cfbBits(0xFFFF000000000000), - cfbBits(0x0000FFFF00000000), - cfbBits(0x00000000FFFF0000), - cfbBits(0x000000000000FFFF), - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x0000FFFFFFFFFFFF), - cfbBits(0xFFFF0000FFFFFFFF), - cfbBits(0xFFFFFFFF0000FFFF), - cfbBits(0xFFFFFFFFFFFF0000), - }; -#endif /* PGSZ */ -#endif /* PSZ == 16 */ - -#if PSZ == 24 -#if PGSZ == 32 -PixelGroup cfbmask[] = - { - cfbBits(0xFFFFFF00), - cfbBits(0x00000000), - cfbBits(0x000000FF), - cfbBits(0xFFFF0000), - cfbBits(0x0000FFFF), - cfbBits(0xFF000000), - cfbBits(0x00FFFFFF), - cfbBits(0x00000000), - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x000000FF), - cfbBits(0xFFFFFFFF), - cfbBits(0xFFFFFF00), - cfbBits(0x0000FFFF), - cfbBits(0xFFFF0000), - cfbBits(0x00FFFFFF), - cfbBits(0xFF000000), - cfbBits(0xFFFFFFFF), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbmask[] = - { - cfbBits(0xFFFFFF0000000000), - cfbBits(0x000000FFFFFF0000), - cfbBits(0x000000000000FFFF), - }; -PixelGroup cfbmask2[] = - { - cfbBits(0x0000000000000000), - cfbBits(0x0000000000000000), - cfbBits(0xFF00000000000000), - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x000000FFFFFFFFFF), - cfbBits(0xFFFFFF000000FFFF), - cfbBits(0xFFFFFFFFFFFF0000), - }; -PixelGroup cfbrmask2[] = - { - cfbBits(0x0000000000000000), - cfbBits(0x0000000000000000), - cfbBits(0x00FFFFFFFFFFFFFF), - }; -#endif /* PGSZ */ -#endif /* PSZ == 24 */ - -#if PSZ == 32 -#if PGSZ == 32 -PixelGroup cfbmask[] = - { - cfbBits(0xFFFFFFFF), - }; -PixelGroup cfbrmask[] = - { - cfbBits(0xFFFFFFFF), - }; -#else /* PGSZ == 64 */ -PixelGroup cfbmask[] = - { - cfbBits(0xFFFFFFFF00000000), - cfbBits(0x00000000FFFFFFFF), - }; -PixelGroup cfbrmask[] = - { - cfbBits(0x00000000FFFFFFFF), - cfbBits(0xFFFFFFFF00000000), - }; -#endif /* PGSZ */ -#endif /* PSZ == 32 */ - -/* - * QuartetBitsTable contains PPW+1 masks whose binary values are masks in the - * low order quartet that contain the number of bits specified in the - * index. This table is used by getstipplepixels. - */ -#if PSZ == 4 -PixelGroup QuartetBitsTable[] = { -#if PGSZ == 32 -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 00000000 */ - 0x00000080, /* 1 - 10000000 */ - 0x000000C0, /* 2 - 11000000 */ - 0x000000E0, /* 3 - 11100000 */ - 0x000000F0, /* 4 - 11110000 */ - 0x000000F8, /* 5 - 11111000 */ - 0x000000FC, /* 6 - 11111100 */ - 0x000000FE, /* 7 - 11111110 */ - 0x000000FF /* 8 - 11111111 */ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 00000000 */ - 0x00000001, /* 1 - 00000001 */ - 0x00000003, /* 2 - 00000011 */ - 0x00000007, /* 3 - 00000111 */ - 0x0000000F, /* 4 - 00001111 */ - 0x0000001F, /* 5 - 00011111 */ - 0x0000003F, /* 6 - 00111111 */ - 0x0000007F, /* 7 - 01111111 */ - 0x000000FF /* 8 - 11111111 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#else /* PGSZ == 64 */ -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 0000000000000000 */ - 0x00008000, /* 1 - 1000000000000000 */ - 0x0000C000, /* 2 - 1100000000000000 */ - 0x0000E000, /* 3 - 1110000000000000 */ - 0x0000F000, /* 4 - 1111000000000000 */ - 0x0000F800, /* 5 - 1111100000000000 */ - 0x0000FC00, /* 6 - 1111110000000000 */ - 0x0000FE00, /* 7 - 1111111000000000 */ - 0x0000FF00, /* 8 - 1111111100000000 */ - 0x0000FF80, /* 9 - 1111111110000000 */ - 0x0000FFC0, /* 10- 1111111111000000 */ - 0x0000FFE0, /* 11- 1111111111100000 */ - 0x0000FFF0, /* 12- 1111111111110000 */ - 0x0000FFF8, /* 13- 1111111111111000 */ - 0x0000FFFC, /* 14- 1111111111111100 */ - 0x0000FFFE, /* 15- 1111111111111110 */ - 0x0000FFFF, /* 16- 1111111111111111 */ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 0000000000000000 */ - 0x00000001, /* 1 - 0000000000000001 */ - 0x00000003, /* 2 - 0000000000000011 */ - 0x00000007, /* 3 - 0000000000000111 */ - 0x0000000F, /* 4 - 0000000000001111 */ - 0x0000001F, /* 5 - 0000000000011111 */ - 0x0000003F, /* 6 - 0000000000111111 */ - 0x0000007F, /* 7 - 0000000001111111 */ - 0x000000FF, /* 8 - 0000000011111111 */ - 0x000001FF, /* 9 - 0000000111111111 */ - 0x000003FF, /* 10- 0000001111111111 */ - 0x000007FF, /* 11- 0000011111111111 */ - 0x00000FFF, /* 12- 0000111111111111 */ - 0x00001FFF, /* 13- 0001111111111111 */ - 0x00003FFF, /* 14- 0011111111111111 */ - 0x00007FFF, /* 15- 0111111111111111 */ - 0x0000FFFF, /* 16- 1111111111111111 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#endif /* PGSZ */ -}; -#endif /* PSZ == 4 */ - -#if PSZ == 8 -PixelGroup QuartetBitsTable[] = { -#if PGSZ == 32 -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 0000 */ - 0x00000008, /* 1 - 1000 */ - 0x0000000C, /* 2 - 1100 */ - 0x0000000E, /* 3 - 1110 */ - 0x0000000F /* 4 - 1111 */ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 0000 */ - 0x00000001, /* 1 - 0001 */ - 0x00000003, /* 2 - 0011 */ - 0x00000007, /* 3 - 0111 */ - 0x0000000F /* 4 - 1111 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#else /* PGSZ == 64 */ -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 00000000 */ - 0x00000080, /* 1 - 10000000 */ - 0x000000C0, /* 2 - 11000000 */ - 0x000000E0, /* 3 - 11100000 */ - 0x000000F0, /* 4 - 11110000 */ - 0x000000F8, /* 5 - 11111000 */ - 0x000000FC, /* 6 - 11111100 */ - 0x000000FE, /* 7 - 11111110 */ - 0x000000FF /* 8 - 11111111 */ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 00000000 */ - 0x00000001, /* 1 - 00000001 */ - 0x00000003, /* 2 - 00000011 */ - 0x00000007, /* 3 - 00000111 */ - 0x0000000F, /* 4 - 10000111 */ - 0x0000001F, /* 5 - 00011111 */ - 0x0000003F, /* 6 - 00111111 */ - 0x0000007F, /* 7 - 01111111 */ - 0x000000FF /* 8 - 11111111 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#endif /* PGSZ */ -}; -#endif /* PSZ == 8 */ - -#if PSZ == 16 -PixelGroup QuartetBitsTable[] = { -#if PGSZ == 32 -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 00 */ - 0x00000002, /* 1 - 10 */ - 0x00000003, /* 2 - 11 */ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 00 */ - 0x00000001, /* 1 - 01 */ - 0x00000003, /* 2 - 11 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#else /* PGSZ == 64 */ -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 0000 */ - 0x00000008, /* 1 - 1000 */ - 0x0000000C, /* 2 - 1100 */ - 0x0000000E, /* 3 - 1110 */ - 0x0000000F, /* 4 - 1111 */ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 0000 */ - 0x00000001, /* 1 - 0001 */ - 0x00000003, /* 2 - 0011 */ - 0x00000007, /* 3 - 0111 */ - 0x0000000F, /* 4 - 1111 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#endif /* PGSZ */ -}; -#endif /* PSZ == 16 */ - -#if PSZ == 24 -PixelGroup QuartetBitsTable[] = { -#if PGSZ == 32 -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 0 */ - 0x00000001, /* 1 - 1 */ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 0 */ - 0x00000001, /* 1 - 1 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#else /* PGSZ == 64 */ -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 00 */ - 0x00000002, /* 1 - 10 */ - 0x00000003, /* 2 - 11*/ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 00 */ - 0x00000001, /* 1 - 01 */ - 0x00000003, /* 2 - 11 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#endif /* PGSZ */ -}; -#endif /* PSZ == 24 */ - -#if PSZ == 32 -PixelGroup QuartetBitsTable[] = { -#if PGSZ == 32 -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 0 */ - 0x00000001, /* 1 - 1 */ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 0 */ - 0x00000001, /* 1 - 1 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#else /* PGSZ == 64 */ -#if (BITMAP_BIT_ORDER == MSBFirst) - 0x00000000, /* 0 - 00 */ - 0x00000002, /* 1 - 10 */ - 0x00000003, /* 2 - 11*/ -#else /* (BITMAP_BIT_ORDER == LSBFirst */ - 0x00000000, /* 0 - 00 */ - 0x00000001, /* 1 - 01 */ - 0x00000003, /* 2 - 11 */ -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#endif /* PGSZ */ -}; -#endif /* PSZ == 32 */ - -/* - * QuartetPixelMaskTable is used by getstipplepixels to get a pixel mask - * corresponding to a quartet of bits. Note: the bit/byte order dependency - * is handled by QuartetBitsTable above. - */ -#if PSZ == 4 -#if PGSZ == 32 -PixelGroup QuartetPixelMaskTable[] = { - 0x00000000, - 0x0000000F, - 0x000000F0, - 0x000000FF, - 0x00000F00, - 0x00000F0F, - 0x00000FF0, - 0x00000FFF, - 0x0000F000, - 0x0000F00F, - 0x0000F0F0, - 0x0000F0FF, - 0x0000FF00, - 0x0000FF0F, - 0x0000FFF0, - 0x0000FFFF, - 0x000F0000, - 0x000F000F, - 0x000F00F0, - 0x000F00FF, - 0x000F0F00, - 0x000F0F0F, - 0x000F0FF0, - 0x000F0FFF, - 0x000FF000, - 0x000FF00F, - 0x000FF0F0, - 0x000FF0FF, - 0x000FFF00, - 0x000FFF0F, - 0x000FFFF0, - 0x000FFFFF, - 0x00F00000, - 0x00F0000F, - 0x00F000F0, - 0x00F000FF, - 0x00F00F00, - 0x00F00F0F, - 0x00F00FF0, - 0x00F00FFF, - 0x00F0F000, - 0x00F0F00F, - 0x00F0F0F0, - 0x00F0F0FF, - 0x00F0FF00, - 0x00F0FF0F, - 0x00F0FFF0, - 0x00F0FFFF, - 0x00FF0000, - 0x00FF000F, - 0x00FF00F0, - 0x00FF00FF, - 0x00FF0F00, - 0x00FF0F0F, - 0x00FF0FF0, - 0x00FF0FFF, - 0x00FFF000, - 0x00FFF00F, - 0x00FFF0F0, - 0x00FFF0FF, - 0x00FFFF00, - 0x00FFFF0F, - 0x00FFFFF0, - 0x00FFFFFF, - 0x0F000000, - 0x0F00000F, - 0x0F0000F0, - 0x0F0000FF, - 0x0F000F00, - 0x0F000F0F, - 0x0F000FF0, - 0x0F000FFF, - 0x0F00F000, - 0x0F00F00F, - 0x0F00F0F0, - 0x0F00F0FF, - 0x0F00FF00, - 0x0F00FF0F, - 0x0F00FFF0, - 0x0F00FFFF, - 0x0F0F0000, - 0x0F0F000F, - 0x0F0F00F0, - 0x0F0F00FF, - 0x0F0F0F00, - 0x0F0F0F0F, - 0x0F0F0FF0, - 0x0F0F0FFF, - 0x0F0FF000, - 0x0F0FF00F, - 0x0F0FF0F0, - 0x0F0FF0FF, - 0x0F0FFF00, - 0x0F0FFF0F, - 0x0F0FFFF0, - 0x0F0FFFFF, - 0x0FF00000, - 0x0FF0000F, - 0x0FF000F0, - 0x0FF000FF, - 0x0FF00F00, - 0x0FF00F0F, - 0x0FF00FF0, - 0x0FF00FFF, - 0x0FF0F000, - 0x0FF0F00F, - 0x0FF0F0F0, - 0x0FF0F0FF, - 0x0FF0FF00, - 0x0FF0FF0F, - 0x0FF0FFF0, - 0x0FF0FFFF, - 0x0FFF0000, - 0x0FFF000F, - 0x0FFF00F0, - 0x0FFF00FF, - 0x0FFF0F00, - 0x0FFF0F0F, - 0x0FFF0FF0, - 0x0FFF0FFF, - 0x0FFFF000, - 0x0FFFF00F, - 0x0FFFF0F0, - 0x0FFFF0FF, - 0x0FFFFF00, - 0x0FFFFF0F, - 0x0FFFFFF0, - 0x0FFFFFFF, - 0xF0000000, - 0xF000000F, - 0xF00000F0, - 0xF00000FF, - 0xF0000F00, - 0xF0000F0F, - 0xF0000FF0, - 0xF0000FFF, - 0xF000F000, - 0xF000F00F, - 0xF000F0F0, - 0xF000F0FF, - 0xF000FF00, - 0xF000FF0F, - 0xF000FFF0, - 0xF000FFFF, - 0xF00F0000, - 0xF00F000F, - 0xF00F00F0, - 0xF00F00FF, - 0xF00F0F00, - 0xF00F0F0F, - 0xF00F0FF0, - 0xF00F0FFF, - 0xF00FF000, - 0xF00FF00F, - 0xF00FF0F0, - 0xF00FF0FF, - 0xF00FFF00, - 0xF00FFF0F, - 0xF00FFFF0, - 0xF00FFFFF, - 0xF0F00000, - 0xF0F0000F, - 0xF0F000F0, - 0xF0F000FF, - 0xF0F00F00, - 0xF0F00F0F, - 0xF0F00FF0, - 0xF0F00FFF, - 0xF0F0F000, - 0xF0F0F00F, - 0xF0F0F0F0, - 0xF0F0F0FF, - 0xF0F0FF00, - 0xF0F0FF0F, - 0xF0F0FFF0, - 0xF0F0FFFF, - 0xF0FF0000, - 0xF0FF000F, - 0xF0FF00F0, - 0xF0FF00FF, - 0xF0FF0F00, - 0xF0FF0F0F, - 0xF0FF0FF0, - 0xF0FF0FFF, - 0xF0FFF000, - 0xF0FFF00F, - 0xF0FFF0F0, - 0xF0FFF0FF, - 0xF0FFFF00, - 0xF0FFFF0F, - 0xF0FFFFF0, - 0xF0FFFFFF, - 0xFF000000, - 0xFF00000F, - 0xFF0000F0, - 0xFF0000FF, - 0xFF000F00, - 0xFF000F0F, - 0xFF000FF0, - 0xFF000FFF, - 0xFF00F000, - 0xFF00F00F, - 0xFF00F0F0, - 0xFF00F0FF, - 0xFF00FF00, - 0xFF00FF0F, - 0xFF00FFF0, - 0xFF00FFFF, - 0xFF0F0000, - 0xFF0F000F, - 0xFF0F00F0, - 0xFF0F00FF, - 0xFF0F0F00, - 0xFF0F0F0F, - 0xFF0F0FF0, - 0xFF0F0FFF, - 0xFF0FF000, - 0xFF0FF00F, - 0xFF0FF0F0, - 0xFF0FF0FF, - 0xFF0FFF00, - 0xFF0FFF0F, - 0xFF0FFFF0, - 0xFF0FFFFF, - 0xFFF00000, - 0xFFF0000F, - 0xFFF000F0, - 0xFFF000FF, - 0xFFF00F00, - 0xFFF00F0F, - 0xFFF00FF0, - 0xFFF00FFF, - 0xFFF0F000, - 0xFFF0F00F, - 0xFFF0F0F0, - 0xFFF0F0FF, - 0xFFF0FF00, - 0xFFF0FF0F, - 0xFFF0FFF0, - 0xFFF0FFFF, - 0xFFFF0000, - 0xFFFF000F, - 0xFFFF00F0, - 0xFFFF00FF, - 0xFFFF0F00, - 0xFFFF0F0F, - 0xFFFF0FF0, - 0xFFFF0FFF, - 0xFFFFF000, - 0xFFFFF00F, - 0xFFFFF0F0, - 0xFFFFF0FF, - 0xFFFFFF00, - 0xFFFFFF0F, - 0xFFFFFFF0, - 0xFFFFFFFF, -}; -#else /* PGSZ == 64 */ -No QuartetPixelMaskTable for psz=PSZ -this would be a 64K entry table, a bit much I think. -Try breaking things in two: -mask = table[index&0xff00]<<32 | table[index&0xff] -#endif /* PGSZ */ -#endif /* PSZ == 4 */ - -#if PSZ == 8 -PixelGroup QuartetPixelMaskTable[] = { -#if PGSZ == 32 - 0x00000000, - 0x000000FF, - 0x0000FF00, - 0x0000FFFF, - 0x00FF0000, - 0x00FF00FF, - 0x00FFFF00, - 0x00FFFFFF, - 0xFF000000, - 0xFF0000FF, - 0xFF00FF00, - 0xFF00FFFF, - 0xFFFF0000, - 0xFFFF00FF, - 0xFFFFFF00, - 0xFFFFFFFF -#else /* PGSZ == 64 */ - 0x0000000000000000, 0x00000000000000FF, - 0x000000000000FF00, 0x000000000000FFFF, - 0x0000000000FF0000, 0x0000000000FF00FF, - 0x0000000000FFFF00, 0x0000000000FFFFFF, - 0x00000000FF000000, 0x00000000FF0000FF, - 0x00000000FF00FF00, 0x00000000FF00FFFF, - 0x00000000FFFF0000, 0x00000000FFFF00FF, - 0x00000000FFFFFF00, 0x00000000FFFFFFFF, - 0x000000FF00000000, 0x000000FF000000FF, - 0x000000FF0000FF00, 0x000000FF0000FFFF, - 0x000000FF00FF0000, 0x000000FF00FF00FF, - 0x000000FF00FFFF00, 0x000000FF00FFFFFF, - 0x000000FFFF000000, 0x000000FFFF0000FF, - 0x000000FFFF00FF00, 0x000000FFFF00FFFF, - 0x000000FFFFFF0000, 0x000000FFFFFF00FF, - 0x000000FFFFFFFF00, 0x000000FFFFFFFFFF, - 0x0000FF0000000000, 0x0000FF00000000FF, - 0x0000FF000000FF00, 0x0000FF000000FFFF, - 0x0000FF0000FF0000, 0x0000FF0000FF00FF, - 0x0000FF0000FFFF00, 0x0000FF0000FFFFFF, - 0x0000FF00FF000000, 0x0000FF00FF0000FF, - 0x0000FF00FF00FF00, 0x0000FF00FF00FFFF, - 0x0000FF00FFFF0000, 0x0000FF00FFFF00FF, - 0x0000FF00FFFFFF00, 0x0000FF00FFFFFFFF, - 0x0000FFFF00000000, 0x0000FFFF000000FF, - 0x0000FFFF0000FF00, 0x0000FFFF0000FFFF, - 0x0000FFFF00FF0000, 0x0000FFFF00FF00FF, - 0x0000FFFF00FFFF00, 0x0000FFFF00FFFFFF, - 0x0000FFFFFF000000, 0x0000FFFFFF0000FF, - 0x0000FFFFFF00FF00, 0x0000FFFFFF00FFFF, - 0x0000FFFFFFFF0000, 0x0000FFFFFFFF00FF, - 0x0000FFFFFFFFFF00, 0x0000FFFFFFFFFFFF, - 0x00FF000000000000, 0x00FF0000000000FF, - 0x00FF00000000FF00, 0x00FF00000000FFFF, - 0x00FF000000FF0000, 0x00FF000000FF00FF, - 0x00FF000000FFFF00, 0x00FF000000FFFFFF, - 0x00FF0000FF000000, 0x00FF0000FF0000FF, - 0x00FF0000FF00FF00, 0x00FF0000FF00FFFF, - 0x00FF0000FFFF0000, 0x00FF0000FFFF00FF, - 0x00FF0000FFFFFF00, 0x00FF0000FFFFFFFF, - 0x00FF00FF00000000, 0x00FF00FF000000FF, - 0x00FF00FF0000FF00, 0x00FF00FF0000FFFF, - 0x00FF00FF00FF0000, 0x00FF00FF00FF00FF, - 0x00FF00FF00FFFF00, 0x00FF00FF00FFFFFF, - 0x00FF00FFFF000000, 0x00FF00FFFF0000FF, - 0x00FF00FFFF00FF00, 0x00FF00FFFF00FFFF, - 0x00FF00FFFFFF0000, 0x00FF00FFFFFF00FF, - 0x00FF00FFFFFFFF00, 0x00FF00FFFFFFFFFF, - 0x00FFFF0000000000, 0x00FFFF00000000FF, - 0x00FFFF000000FF00, 0x00FFFF000000FFFF, - 0x00FFFF0000FF0000, 0x00FFFF0000FF00FF, - 0x00FFFF0000FFFF00, 0x00FFFF0000FFFFFF, - 0x00FFFF00FF000000, 0x00FFFF00FF0000FF, - 0x00FFFF00FF00FF00, 0x00FFFF00FF00FFFF, - 0x00FFFF00FFFF0000, 0x00FFFF00FFFF00FF, - 0x00FFFF00FFFFFF00, 0x00FFFF00FFFFFFFF, - 0x00FFFFFF00000000, 0x00FFFFFF000000FF, - 0x00FFFFFF0000FF00, 0x00FFFFFF0000FFFF, - 0x00FFFFFF00FF0000, 0x00FFFFFF00FF00FF, - 0x00FFFFFF00FFFF00, 0x00FFFFFF00FFFFFF, - 0x00FFFFFFFF000000, 0x00FFFFFFFF0000FF, - 0x00FFFFFFFF00FF00, 0x00FFFFFFFF00FFFF, - 0x00FFFFFFFFFF0000, 0x00FFFFFFFFFF00FF, - 0x00FFFFFFFFFFFF00, 0x00FFFFFFFFFFFFFF, - 0xFF00000000000000, 0xFF000000000000FF, - 0xFF0000000000FF00, 0xFF0000000000FFFF, - 0xFF00000000FF0000, 0xFF00000000FF00FF, - 0xFF00000000FFFF00, 0xFF00000000FFFFFF, - 0xFF000000FF000000, 0xFF000000FF0000FF, - 0xFF000000FF00FF00, 0xFF000000FF00FFFF, - 0xFF000000FFFF0000, 0xFF000000FFFF00FF, - 0xFF000000FFFFFF00, 0xFF000000FFFFFFFF, - 0xFF0000FF00000000, 0xFF0000FF000000FF, - 0xFF0000FF0000FF00, 0xFF0000FF0000FFFF, - 0xFF0000FF00FF0000, 0xFF0000FF00FF00FF, - 0xFF0000FF00FFFF00, 0xFF0000FF00FFFFFF, - 0xFF0000FFFF000000, 0xFF0000FFFF0000FF, - 0xFF0000FFFF00FF00, 0xFF0000FFFF00FFFF, - 0xFF0000FFFFFF0000, 0xFF0000FFFFFF00FF, - 0xFF0000FFFFFFFF00, 0xFF0000FFFFFFFFFF, - 0xFF00FF0000000000, 0xFF00FF00000000FF, - 0xFF00FF000000FF00, 0xFF00FF000000FFFF, - 0xFF00FF0000FF0000, 0xFF00FF0000FF00FF, - 0xFF00FF0000FFFF00, 0xFF00FF0000FFFFFF, - 0xFF00FF00FF000000, 0xFF00FF00FF0000FF, - 0xFF00FF00FF00FF00, 0xFF00FF00FF00FFFF, - 0xFF00FF00FFFF0000, 0xFF00FF00FFFF00FF, - 0xFF00FF00FFFFFF00, 0xFF00FF00FFFFFFFF, - 0xFF00FFFF00000000, 0xFF00FFFF000000FF, - 0xFF00FFFF0000FF00, 0xFF00FFFF0000FFFF, - 0xFF00FFFF00FF0000, 0xFF00FFFF00FF00FF, - 0xFF00FFFF00FFFF00, 0xFF00FFFF00FFFFFF, - 0xFF00FFFFFF000000, 0xFF00FFFFFF0000FF, - 0xFF00FFFFFF00FF00, 0xFF00FFFFFF00FFFF, - 0xFF00FFFFFFFF0000, 0xFF00FFFFFFFF00FF, - 0xFF00FFFFFFFFFF00, 0xFF00FFFFFFFFFFFF, - 0xFFFF000000000000, 0xFFFF0000000000FF, - 0xFFFF00000000FF00, 0xFFFF00000000FFFF, - 0xFFFF000000FF0000, 0xFFFF000000FF00FF, - 0xFFFF000000FFFF00, 0xFFFF000000FFFFFF, - 0xFFFF0000FF000000, 0xFFFF0000FF0000FF, - 0xFFFF0000FF00FF00, 0xFFFF0000FF00FFFF, - 0xFFFF0000FFFF0000, 0xFFFF0000FFFF00FF, - 0xFFFF0000FFFFFF00, 0xFFFF0000FFFFFFFF, - 0xFFFF00FF00000000, 0xFFFF00FF000000FF, - 0xFFFF00FF0000FF00, 0xFFFF00FF0000FFFF, - 0xFFFF00FF00FF0000, 0xFFFF00FF00FF00FF, - 0xFFFF00FF00FFFF00, 0xFFFF00FF00FFFFFF, - 0xFFFF00FFFF000000, 0xFFFF00FFFF0000FF, - 0xFFFF00FFFF00FF00, 0xFFFF00FFFF00FFFF, - 0xFFFF00FFFFFF0000, 0xFFFF00FFFFFF00FF, - 0xFFFF00FFFFFFFF00, 0xFFFF00FFFFFFFFFF, - 0xFFFFFF0000000000, 0xFFFFFF00000000FF, - 0xFFFFFF000000FF00, 0xFFFFFF000000FFFF, - 0xFFFFFF0000FF0000, 0xFFFFFF0000FF00FF, - 0xFFFFFF0000FFFF00, 0xFFFFFF0000FFFFFF, - 0xFFFFFF00FF000000, 0xFFFFFF00FF0000FF, - 0xFFFFFF00FF00FF00, 0xFFFFFF00FF00FFFF, - 0xFFFFFF00FFFF0000, 0xFFFFFF00FFFF00FF, - 0xFFFFFF00FFFFFF00, 0xFFFFFF00FFFFFFFF, - 0xFFFFFFFF00000000, 0xFFFFFFFF000000FF, - 0xFFFFFFFF0000FF00, 0xFFFFFFFF0000FFFF, - 0xFFFFFFFF00FF0000, 0xFFFFFFFF00FF00FF, - 0xFFFFFFFF00FFFF00, 0xFFFFFFFF00FFFFFF, - 0xFFFFFFFFFF000000, 0xFFFFFFFFFF0000FF, - 0xFFFFFFFFFF00FF00, 0xFFFFFFFFFF00FFFF, - 0xFFFFFFFFFFFF0000, 0xFFFFFFFFFFFF00FF, - 0xFFFFFFFFFFFFFF00, 0xFFFFFFFFFFFFFFFF, -#endif /* PGSZ */ -}; -#endif /* PSZ == 8 */ - -#if PSZ == 16 -PixelGroup QuartetPixelMaskTable[] = { -#if PGSZ == 32 - 0x00000000, - 0x0000FFFF, - 0xFFFF0000, - 0xFFFFFFFF, -#else /* PGSZ == 64 */ - 0x0000000000000000, 0x000000000000FFFF, - 0x00000000FFFF0000, 0x00000000FFFFFFFF, - 0x0000FFFF00000000, 0x0000FFFF0000FFFF, - 0x0000FFFFFFFF0000, 0x0000FFFFFFFFFFFF, - 0xFFFF000000000000, 0xFFFF00000000FFFF, - 0xFFFF0000FFFF0000, 0xFFFF0000FFFFFFFF, - 0xFFFFFFFF00000000, 0xFFFFFFFF0000FFFF, - 0xFFFFFFFFFFFF0000, 0xFFFFFFFFFFFFFFFF, -#endif /* PGSZ */ -}; -#endif /* PSZ == 16 */ - -#if PSZ == 24 -PixelGroup QuartetPixelMaskTable[] = { -#if PGSZ == 32 -/* Four pixels consist three pixel groups....*/ - 0x00000000, 0x00FFFFFF, /*0x00000000, *//*0*/ -/* 0x00000000, 0x00000000, 0x00000000,*/ /*0*/ -/* 0x00FFFFFF, 0x00000000, 0x00000000,*/ /*1*/ -/* 0xFF000000, 0x0000FFFF, 0x00000000,*/ /*2*/ -/* 0xFFFFFFFF, 0x0000FFFF, 0x00000000,*/ /*3*/ -/* 0x00000000, 0xFFFF0000, 0x000000FF,*/ /*4*/ -/* 0x00FFFFFF, 0xFFFF0000, 0x000000FF,*/ /*5*/ -/* 0xFF000000, 0xFFFFFFFF, 0x000000FF,*/ /*6*/ -/* 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF,*/ /*7*/ -/* 0x00000000, 0x00000000, 0xFFFFFF00,*/ /*8*/ -/* 0x00FFFFFF, 0x00000000, 0xFFFFFF00,*/ /*9*/ -/* 0xFF000000, 0x0000FFFF, 0xFFFFFF00,*/ /*10*/ -/* 0xFFFFFFFF, 0x0000FFFF, 0xFFFFFF00,*/ /*11*/ -/* 0x00000000, 0xFFFF0000, 0xFFFFFFFF,*/ /*12*/ -/* 0x00FFFFFF, 0xFFFF0000, 0xFFFFFFFF,*/ /*13*/ -/* 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF,*/ /*14*/ -/* 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,*/ /*15*/ -#else /* PGSZ == 64 */ - 0x0000000000000000, 0x0000000000FFFFFF, - 0x0000FFFFFF000000, 0xFFFFFFFFFFFFFFFF -#endif /* PGSZ */ -}; -#endif /* PSZ == 24 */ - -#if PSZ == 32 -PixelGroup QuartetPixelMaskTable[] = { -#if PGSZ == 32 - 0x00000000, - 0xFFFFFFFF, -#else /* PGSZ == 64 */ - 0x0000000000000000, - 0x00000000FFFFFFFF, - 0xFFFFFFFF00000000, - 0xFFFFFFFFFFFFFFFF -#endif /* PGSZ */ -}; -#endif /* PSZ == 32 */ - -#if PSZ == 24 -int cfb24Shift[] = -#if (BITMAP_BIT_ORDER == MSBFirst) -{8,0,16,16,8,24,0,0}; -#else /* (BITMAP_BIT_ORDER == LSBFirst) */ -{0,0,24,8,16,16,8,0}; -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ -#endif diff --git a/cfb/cfbmskbits.h b/cfb/cfbmskbits.h deleted file mode 100644 index 5ee9125dd..000000000 --- a/cfb/cfbmskbits.h +++ /dev/null @@ -1,854 +0,0 @@ -/************************************************************ -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - -********************************************************/ - -/* Optimizations for PSZ == 32 added by Kyle Marvin (marvin@vitec.com) */ - -#include -#include -#include "servermd.h" -#include "compiler.h" - -/* - * ========================================================================== - * Converted from mfb to support memory-mapped color framebuffer by smarks@sun, - * April-May 1987. - * - * The way I did the conversion was to consider each longword as an - * array of four bytes instead of an array of 32 one-bit pixels. So - * getbits() and putbits() retain much the same calling sequence, but - * they move bytes around instead of bits. Of course, this entails the - * removal of all of the one-bit-pixel dependencies from the other - * files, but the major bit-hacking stuff should be covered here. - * - * I've created some new macros that make it easier to understand what's - * going on in the pixel calculations, and that make it easier to change the - * pixel size. - * - * name explanation - * ---- ----------- - * PSZ pixel size (in bits) - * PGSZ pixel group size (in bits) - * PGSZB pixel group size (in bytes) - * PGSZBMSK mask with lowest PGSZB bits set to 1 - * PPW pixels per word (pixels per pixel group) - * PPWMSK mask with lowest PPW bits set to 1 - * PLST index of last pixel in a word (should be PPW-1) - * PIM pixel index mask (index within a pixel group) - * PWSH pixel-to-word shift (should be log2(PPW)) - * PMSK mask with lowest PSZ bits set to 1 - * - * - * Here are some sample values. In the notation cfbA,B: A is PSZ, and - * B is PGSZB. All the other values are derived from these - * two. This table does not show all combinations! - * - * name cfb8,4 cfb24,4 cfb32,4 cfb8,8 cfb24,8 cfb32,8 - * ---- ------ ------- ------ ------ ------ ------- - * PSZ 8 24 32 8 24 32 - * PGSZ 32 32 32 64 64 64 - * PGSZB 4 4 4 8 8 8 - * PGSZBMSK 0xF 0xF? 0xF 0xFF 0xFF 0xFF - * PPW 4 1 1 8 2 2 - * PPWMSK 0xF 0x1 0x1 0xFF 0x3? 0x3 - * PLST 3 0 0 7 1 1 - * PIM 0x3 0x0 0x0 0x7 0x1? 0x1 - * PWSH 2 0 0 3 1 1 - * PMSK 0xFF 0xFFFFFF 0xFFFFFFFF 0xFF 0xFFFFFF 0xFFFFFFFF - * - * - * I have also added a new macro, PFILL, that takes one pixel and - * replicates it throughout a word. This macro definition is dependent - * upon pixel and word size; it doesn't use macros like PPW and so - * forth. Examples: for monochrome, PFILL(1) => 0xffffffff, PFILL(0) => - * 0x00000000. For 8-bit color, PFILL(0x5d) => 0x5d5d5d5d. This macro - * is used primarily for replicating a plane mask into a word. - * - * Color framebuffers operations also support the notion of a plane - * mask. This mask determines which planes of the framebuffer can be - * altered; the others are left unchanged. I have added another - * parameter to the putbits and putbitsrop macros that is the plane - * mask. - * ========================================================================== - * - * Keith Packard (keithp@suse.com) - * 64bit code is no longer supported; it requires DIX support - * for repadding images which significantly impacts performance - */ - -/* - * PSZ needs to be defined before we get here. Usually it comes from a - * -DPSZ=foo on the compilation command line. - */ - -#ifndef PSZ -#define PSZ 8 -#endif - -/* - * PixelGroup is the data type used to operate on groups of pixels. - * We typedef it here to CARD32 with the assumption that you - * want to manipulate 32 bits worth of pixels at a time as you can. If CARD32 - * is not appropriate for your server, define it to something else - * before including this file. In this case you will also have to define - * PGSZB to the size in bytes of PixelGroup. - */ -#ifndef PixelGroup -#define PixelGroup CARD32 -#define PGSZB 4 -#endif /* PixelGroup */ - -#ifndef CfbBits -#define CfbBits CARD32 -#endif - -#define PGSZ (PGSZB << 3) -#define PPW (PGSZ/PSZ) -#define PLST (PPW-1) -#define PIM PLST -#define PMSK (((PixelGroup)1 << PSZ) - 1) -#define PPWMSK (((PixelGroup)1 << PPW) - 1) /* instead of BITMSK */ -#define PGSZBMSK (((PixelGroup)1 << PGSZB) - 1) - -/* set PWSH = log2(PPW) using brute force */ - -#if PPW == 1 -#define PWSH 0 -#else -#if PPW == 2 -#define PWSH 1 -#else -#if PPW == 4 -#define PWSH 2 -#else -#if PPW == 8 -#define PWSH 3 -#else -#if PPW == 16 -#define PWSH 4 -#endif /* PPW == 16 */ -#endif /* PPW == 8 */ -#endif /* PPW == 4 */ -#endif /* PPW == 2 */ -#endif /* PPW == 1 */ - -/* Defining PIXEL_ADDR means that individual pixels are addressable by this - * machine (as type PixelType). A possible CFB architecture which supported - * 8-bits-per-pixel on a non byte-addressable machine would not have this - * defined. - * - * Defining FOUR_BIT_CODE means that cfb knows how to stipple on this machine; - * eventually, stippling code for 16 and 32 bit devices should be written - * which would allow them to also use FOUR_BIT_CODE. There isn't that - * much to do in those cases, but it would make them quite a bit faster. - */ - -#if PSZ == 8 -#define PIXEL_ADDR -typedef CARD8 PixelType; -#define FOUR_BIT_CODE -#endif - -#if PSZ == 16 -#define PIXEL_ADDR -typedef CARD16 PixelType; -#endif - -#if PSZ == 24 -#undef PMSK -#define PMSK 0xFFFFFF -/*#undef PIM -#define PIM 3*/ -#define PIXEL_ADDR -typedef CARD32 PixelType; -#endif - -#if PSZ == 32 -#undef PMSK -#define PMSK 0xFFFFFFFF -#define PIXEL_ADDR -typedef CARD32 PixelType; -#endif - - -/* the following notes use the following conventions: -SCREEN LEFT SCREEN RIGHT -in this file and maskbits.c, left and right refer to screen coordinates, -NOT bit numbering in registers. - -cfbstarttab[n] - pixels[0,n-1] = 0's pixels[n,PPW-1] = 1's -cfbendtab[n] = - pixels[0,n-1] = 1's pixels[n,PPW-1] = 0's - -cfbstartpartial[], cfbendpartial[] - these are used as accelerators for doing putbits and masking out -bits that are all contained between longword boudaries. the extra -256 bytes of data seems a small price to pay -- code is smaller, -and narrow things (e.g. window borders) go faster. - -the names may seem misleading; they are derived not from which end -of the word the bits are turned on, but at which end of a scanline -the table tends to be used. - -look at the tables and macros to understand boundary conditions. -(careful readers will note that starttab[n] = ~endtab[n] for n != 0) - ------------------------------------------------------------------------ -these two macros depend on the screen's bit ordering. -in both of them x is a screen position. they are used to -combine bits collected from multiple longwords into a -single destination longword, and to unpack a single -source longword into multiple destinations. - -SCRLEFT(dst, x) - takes dst[x, PPW] and moves them to dst[0, PPW-x] - the contents of the rest of dst are 0 ONLY IF - dst is UNSIGNED. - is cast as an unsigned. - this is a right shift on the VAX, left shift on - Sun and pc-rt. - -SCRRIGHT(dst, x) - takes dst[0,x] and moves them to dst[PPW-x, PPW] - the contents of the rest of dst are 0 ONLY IF - dst is UNSIGNED. - this is a left shift on the VAX, right shift on - Sun and pc-rt. - - -the remaining macros are cpu-independent; all bit order dependencies -are built into the tables and the two macros above. - -maskbits(x, w, startmask, endmask, nlw) - for a span of width w starting at position x, returns -a mask for ragged pixels at start, mask for ragged pixels at end, -and the number of whole longwords between the ends. - -maskpartialbits(x, w, mask) - works like maskbits(), except all the pixels are in the - same longword (i.e. (x&0xPIM + w) <= PPW) - -mask32bits(x, w, startmask, endmask, nlw) - as maskbits, but does not calculate nlw. it is used by - cfbGlyphBlt to put down glyphs <= PPW bits wide. - -getbits(psrc, x, w, dst) - starting at position x in psrc (x < PPW), collect w - pixels and put them in the screen left portion of dst. - psrc is a longword pointer. this may span longword boundaries. - it special-cases fetching all w bits from one longword. - - +--------+--------+ +--------+ - | | m |n| | ==> | m |n| | - +--------+--------+ +--------+ - x x+w 0 w - psrc psrc+1 dst - m = PPW - x - n = w - m - - implementation: - get m pixels, move to screen-left of dst, zeroing rest of dst; - get n pixels from next word, move screen-right by m, zeroing - lower m pixels of word. - OR the two things together. - -putbits(src, x, w, pdst, planemask) - starting at position x in pdst, put down the screen-leftmost - w bits of src. pdst is a longword pointer. this may - span longword boundaries. - it special-cases putting all w bits into the same longword. - - +--------+ +--------+--------+ - | m |n| | ==> | | m |n| | - +--------+ +--------+--------+ - 0 w x x+w - dst pdst pdst+1 - m = PPW - x - n = w - m - - implementation: - get m pixels, shift screen-right by x, zero screen-leftmost x - pixels; zero rightmost m bits of *pdst and OR in stuff - from before the semicolon. - shift src screen-left by m, zero bits n-32; - zero leftmost n pixels of *(pdst+1) and OR in the - stuff from before the semicolon. - -putbitsrop(src, x, w, pdst, planemask, ROP) - like putbits but calls DoRop with the rasterop ROP (see cfb.h for - DoRop) - -getleftbits(psrc, w, dst) - get the leftmost w (w<=PPW) bits from *psrc and put them - in dst. this is used by the cfbGlyphBlt code for glyphs - <=PPW bits wide. -*/ - -#if (BITMAP_BIT_ORDER == MSBFirst) -#define BitRight(lw,n) ((lw) >> (n)) -#define BitLeft(lw,n) ((lw) << (n)) -#else /* (BITMAP_BIT_ORDER == LSBFirst) */ -#define BitRight(lw,n) ((lw) << (n)) -#define BitLeft(lw,n) ((lw) >> (n)) -#endif /* (BITMAP_BIT_ORDER == MSBFirst) */ - -#define SCRLEFT(lw, n) BitLeft (lw, (n) * PSZ) -#define SCRRIGHT(lw, n) BitRight(lw, (n) * PSZ) - -/* - * Note that the shift direction is independent of the byte ordering of the - * machine. The following is portable code. - */ -#if PPW == 16 -#define PFILL(p) ( ((p)&PMSK) | \ - ((p)&PMSK) << PSZ | \ - ((p)&PMSK) << 2*PSZ | \ - ((p)&PMSK) << 3*PSZ | \ - ((p)&PMSK) << 4*PSZ | \ - ((p)&PMSK) << 5*PSZ | \ - ((p)&PMSK) << 6*PSZ | \ - ((p)&PMSK) << 7*PSZ | \ - ((p)&PMSK) << 8*PSZ | \ - ((p)&PMSK) << 9*PSZ | \ - ((p)&PMSK) << 10*PSZ | \ - ((p)&PMSK) << 11*PSZ | \ - ((p)&PMSK) << 12*PSZ | \ - ((p)&PMSK) << 13*PSZ | \ - ((p)&PMSK) << 14*PSZ | \ - ((p)&PMSK) << 15*PSZ ) -#define PFILL2(p, pf) { \ - pf = (p) & PMSK; \ - pf |= (pf << PSZ); \ - pf |= (pf << 2*PSZ); \ - pf |= (pf << 4*PSZ); \ - pf |= (pf << 8*PSZ); \ -} -#endif /* PPW == 16 */ -#if PPW == 8 -#define PFILL(p) ( ((p)&PMSK) | \ - ((p)&PMSK) << PSZ | \ - ((p)&PMSK) << 2*PSZ | \ - ((p)&PMSK) << 3*PSZ | \ - ((p)&PMSK) << 4*PSZ | \ - ((p)&PMSK) << 5*PSZ | \ - ((p)&PMSK) << 6*PSZ | \ - ((p)&PMSK) << 7*PSZ ) -#define PFILL2(p, pf) { \ - pf = (p) & PMSK; \ - pf |= (pf << PSZ); \ - pf |= (pf << 2*PSZ); \ - pf |= (pf << 4*PSZ); \ -} -#endif -#if PPW == 4 -#define PFILL(p) ( ((p)&PMSK) | \ - ((p)&PMSK) << PSZ | \ - ((p)&PMSK) << 2*PSZ | \ - ((p)&PMSK) << 3*PSZ ) -#define PFILL2(p, pf) { \ - pf = (p) & PMSK; \ - pf |= (pf << PSZ); \ - pf |= (pf << 2*PSZ); \ -} -#endif -#if PPW == 2 -#define PFILL(p) ( ((p)&PMSK) | \ - ((p)&PMSK) << PSZ ) -#define PFILL2(p, pf) { \ - pf = (p) & PMSK; \ - pf |= (pf << PSZ); \ -} -#endif -#if PPW == 1 -#define PFILL(p) (p) -#define PFILL2(p,pf) (pf = (p)) -#endif - -/* - * Reduced raster op - using precomputed values, perform the above - * in three instructions - */ - -#define DoRRop(dst, and, xor) (((dst) & (and)) ^ (xor)) - -#define DoMaskRRop(dst, and, xor, mask) \ - (((dst) & ((and) | ~(mask))) ^ (xor & mask)) - -#if PSZ != 32 || PPW != 1 - -# if (PSZ == 24 && PPW == 1) -#define maskbits(x, w, startmask, endmask, nlw) {\ - startmask = cfbstarttab[(x)&3]; \ - endmask = cfbendtab[((x)+(w)) & 3]; \ - nlw = ((((x)+(w))*3)>>2) - (((x)*3 +3)>>2); \ -} - -#define mask32bits(x, w, startmask, endmask) \ - startmask = cfbstarttab[(x)&3]; \ - endmask = cfbendtab[((x)+(w)) & 3]; - -#define maskpartialbits(x, w, mask) \ - mask = cfbstartpartial[(x) & 3] & cfbendpartial[((x)+(w)) & 3]; - -#define maskbits24(x, w, startmask, endmask, nlw) \ - startmask = cfbstarttab24[(x) & 3]; \ - endmask = cfbendtab24[((x)+(w)) & 3]; \ - if (startmask){ \ - nlw = (((w) - (4 - ((x) & 3))) >> 2); \ - } else { \ - nlw = (w) >> 2; \ - } - -#define getbits24(psrc, dst, index) {\ - register int idx; \ - switch(idx = ((index)&3)<<1){ \ - case 0: \ - dst = (*(psrc) &cfbmask[idx]); \ - break; \ - case 6: \ - dst = BitLeft((*(psrc) &cfbmask[idx]), cfb24Shift[idx]); \ - break; \ - default: \ - dst = BitLeft((*(psrc) &cfbmask[idx]), cfb24Shift[idx]) | \ - BitRight(((*((psrc)+1)) &cfbmask[idx+1]), cfb24Shift[idx+1]); \ - }; \ -} - -#define putbits24(src, w, pdst, planemask, index) {\ - register PixelGroup dstpixel; \ - register unsigned int idx; \ - switch(idx = ((index)&3)<<1){ \ - case 0: \ - dstpixel = (*(pdst) &cfbmask[idx]); \ - break; \ - case 6: \ - dstpixel = BitLeft((*(pdst) &cfbmask[idx]), cfb24Shift[idx]); \ - break; \ - default: \ - dstpixel = BitLeft((*(pdst) &cfbmask[idx]), cfb24Shift[idx])| \ - BitRight(((*((pdst)+1)) &cfbmask[idx+1]), cfb24Shift[idx+1]); \ - }; \ - dstpixel &= ~(planemask); \ - dstpixel |= (src & planemask); \ - *(pdst) &= cfbrmask[idx]; \ - switch(idx){ \ - case 0: \ - *(pdst) |= (dstpixel & cfbmask[idx]); \ - break; \ - case 2: \ - case 4: \ - pdst++;idx++; \ - *(pdst) = ((*(pdst)) & cfbrmask[idx]) | \ - (BitLeft(dstpixel, cfb24Shift[idx]) & cfbmask[idx]); \ - pdst--;idx--; \ - case 6: \ - *(pdst) |= (BitRight(dstpixel, cfb24Shift[idx]) & cfbmask[idx]); \ - break; \ - }; \ -} - -#define putbitsrop24(src, x, pdst, planemask, rop) \ -{ \ - register PixelGroup t1, dstpixel; \ - register unsigned int idx; \ - switch(idx = (x)<<1){ \ - case 0: \ - dstpixel = (*(pdst) &cfbmask[idx]); \ - break; \ - case 6: \ - dstpixel = BitLeft((*(pdst) &cfbmask[idx]), cfb24Shift[idx]); \ - break; \ - default: \ - dstpixel = BitLeft((*(pdst) &cfbmask[idx]), cfb24Shift[idx])| \ - BitRight(((*((pdst)+1)) &cfbmask[idx+1]), cfb24Shift[idx+1]); \ - }; \ - DoRop(t1, rop, (src), dstpixel); \ - dstpixel &= ~planemask; \ - dstpixel |= (t1 & planemask); \ - *(pdst) &= cfbrmask[idx]; \ - switch(idx){ \ - case 0: \ - *(pdst) |= (dstpixel & cfbmask[idx]); \ - break; \ - case 2: \ - case 4: \ - *((pdst)+1) = ((*((pdst)+1)) & cfbrmask[idx+1]) | \ - (BitLeft(dstpixel, cfb24Shift[idx+1]) & (cfbmask[idx+1])); \ - case 6: \ - *(pdst) |= (BitRight(dstpixel, cfb24Shift[idx]) & cfbmask[idx]); \ - }; \ -} -# else /* PSZ == 24 && PPW == 1 */ -#define maskbits(x, w, startmask, endmask, nlw) \ - startmask = cfbstarttab[(x)&PIM]; \ - endmask = cfbendtab[((x)+(w)) & PIM]; \ - if (startmask) \ - nlw = (((w) - (PPW - ((x)&PIM))) >> PWSH); \ - else \ - nlw = (w) >> PWSH; - -#define maskpartialbits(x, w, mask) \ - mask = cfbstartpartial[(x) & PIM] & cfbendpartial[((x) + (w)) & PIM]; - -#define mask32bits(x, w, startmask, endmask) \ - startmask = cfbstarttab[(x)&PIM]; \ - endmask = cfbendtab[((x)+(w)) & PIM]; - -/* FIXME */ -#define maskbits24(x, w, startmask, endmask, nlw) \ - abort() -#define getbits24(psrc, dst, index) \ - abort() -#define putbits24(src, w, pdst, planemask, index) \ - abort() -#define putbitsrop24(src, x, pdst, planemask, rop) \ - abort() - -#endif /* PSZ == 24 && PPW == 1 */ - -#define getbits(psrc, x, w, dst) \ -if ( ((x) + (w)) <= PPW) \ -{ \ - dst = SCRLEFT(*(psrc), (x)); \ -} \ -else \ -{ \ - int m; \ - m = PPW-(x); \ - dst = (SCRLEFT(*(psrc), (x)) & cfbendtab[m]) | \ - (SCRRIGHT(*((psrc)+1), m) & cfbstarttab[m]); \ -} - - -#define putbits(src, x, w, pdst, planemask) \ -if ( ((x)+(w)) <= PPW) \ -{ \ - PixelGroup tmpmask; \ - maskpartialbits((x), (w), tmpmask); \ - tmpmask &= PFILL(planemask); \ - *(pdst) = (*(pdst) & ~tmpmask) | (SCRRIGHT(src, x) & tmpmask); \ -} \ -else \ -{ \ - unsigned int m; \ - unsigned int n; \ - PixelGroup pm = PFILL(planemask); \ - m = PPW-(x); \ - n = (w) - m; \ - *(pdst) = (*(pdst) & (cfbendtab[x] | ~pm)) | \ - (SCRRIGHT(src, x) & (cfbstarttab[x] & pm)); \ - *((pdst)+1) = (*((pdst)+1) & (cfbstarttab[n] | ~pm)) | \ - (SCRLEFT(src, m) & (cfbendtab[n] & pm)); \ -} -#if defined(__GNUC__) && defined(mc68020) -#undef getbits -#define FASTGETBITS(psrc, x, w, dst) \ - asm ("bfextu %3{%1:%2},%0" \ - : "=d" (dst) : "di" (x), "di" (w), "o" (*(char *)(psrc))) - -#define getbits(psrc,x,w,dst) \ -{ \ - FASTGETBITS(psrc, (x) * PSZ, (w) * PSZ, dst); \ - dst = SCRLEFT(dst,PPW-(w)); \ -} - -#define FASTPUTBITS(src, x, w, pdst) \ - asm ("bfins %3,%0{%1:%2}" \ - : "=o" (*(char *)(pdst)) \ - : "di" (x), "di" (w), "d" (src), "0" (*(char *) (pdst))) - -#undef putbits -#define putbits(src, x, w, pdst, planemask) \ -{ \ - if (planemask != PMSK) { \ - PixelGroup _m, _pm; \ - FASTGETBITS(pdst, (x) * PSZ , (w) * PSZ, _m); \ - PFILL2(planemask, _pm); \ - _m &= (~_pm); \ - _m |= (SCRRIGHT(src, PPW-(w)) & _pm); \ - FASTPUTBITS(_m, (x) * PSZ, (w) * PSZ, pdst); \ - } else { \ - FASTPUTBITS(SCRRIGHT(src, PPW-(w)), (x) * PSZ, (w) * PSZ, pdst); \ - } \ -} - - -#endif /* mc68020 */ - -#define putbitsrop(src, x, w, pdst, planemask, rop) \ -if ( ((x)+(w)) <= PPW) \ -{ \ - PixelGroup tmpmask; \ - PixelGroup t1, t2; \ - maskpartialbits((x), (w), tmpmask); \ - PFILL2(planemask, t1); \ - tmpmask &= t1; \ - t1 = SCRRIGHT((src), (x)); \ - DoRop(t2, rop, t1, *(pdst)); \ - *(pdst) = (*(pdst) & ~tmpmask) | (t2 & tmpmask); \ -} \ -else \ -{ \ - CfbBits m; \ - CfbBits n; \ - PixelGroup t1, t2; \ - PixelGroup pm; \ - PFILL2(planemask, pm); \ - m = PPW-(x); \ - n = (w) - m; \ - t1 = SCRRIGHT((src), (x)); \ - DoRop(t2, rop, t1, *(pdst)); \ - *(pdst) = (*(pdst) & (cfbendtab[x] | ~pm)) | (t2 & (cfbstarttab[x] & pm));\ - t1 = SCRLEFT((src), m); \ - DoRop(t2, rop, t1, *((pdst) + 1)); \ - *((pdst)+1) = (*((pdst)+1) & (cfbstarttab[n] | ~pm)) | \ - (t2 & (cfbendtab[n] & pm)); \ -} - -#else /* PSZ == 32 && PPW == 1*/ - -/* - * These macros can be optimized for 32-bit pixels since there is no - * need to worry about left/right edge masking. These macros were - * derived from the above using the following reductions: - * - * - x & PIW = 0 [since PIW = 0] - * - all masking tables are only indexed by 0 [ due to above ] - * - cfbstartab[0] and cfbendtab[0] = 0 [ no left/right edge masks] - * - cfbstartpartial[0] and cfbendpartial[0] = ~0 [no partial pixel mask] - * - * Macro reduction based upon constants cannot be performed automatically - * by the compiler since it does not know the contents of the masking - * arrays in cfbmskbits.c. - */ -#define maskbits(x, w, startmask, endmask, nlw) \ - startmask = endmask = 0; \ - nlw = (w); - -#define maskpartialbits(x, w, mask) \ - mask = 0xFFFFFFFF; - -#define mask32bits(x, w, startmask, endmask) \ - startmask = endmask = 0; - -/* - * For 32-bit operations, getbits(), putbits(), and putbitsrop() - * will only be invoked with x = 0 and w = PPW (1). The getbits() - * macro is only called within left/right edge logic, which doesn't - * happen for 32-bit pixels. - */ -#define getbits(psrc, x, w, dst) (dst) = *(psrc) - -#define putbits(src, x, w, pdst, planemask) \ - *(pdst) = (*(pdst) & ~planemask) | (src & planemask); - -#define putbitsrop(src, x, w, pdst, planemask, rop) \ -{ \ - PixelGroup t1; \ - DoRop(t1, rop, (src), *(pdst)); \ - *(pdst) = (*(pdst) & ~planemask) | (t1 & planemask); \ -} - -#endif /* PSZ != 32 */ - -/* - * Use these macros only when you're using the MergeRop stuff - * in ../mfb/mergerop.h - */ - -/* useful only when not spanning destination longwords */ -#if PSZ == 24 -#define putbitsmropshort24(src,x,w,pdst,index) {\ - PixelGroup _tmpmask; \ - PixelGroup _t1; \ - maskpartialbits ((x), (w), _tmpmask); \ - _t1 = SCRRIGHT((src), (x)); \ - DoMaskMergeRop24(_t1, pdst, _tmpmask, index); \ -} -#endif -#define putbitsmropshort(src,x,w,pdst) {\ - PixelGroup _tmpmask; \ - PixelGroup _t1; \ - maskpartialbits ((x), (w), _tmpmask); \ - _t1 = SCRRIGHT((src), (x)); \ - *pdst = DoMaskMergeRop(_t1, *pdst, _tmpmask); \ -} - -/* useful only when spanning destination longwords */ -#define putbitsmroplong(src,x,w,pdst) { \ - PixelGroup _startmask, _endmask; \ - int _m; \ - PixelGroup _t1; \ - _m = PPW - (x); \ - _startmask = cfbstarttab[x]; \ - _endmask = cfbendtab[(w) - _m]; \ - _t1 = SCRRIGHT((src), (x)); \ - pdst[0] = DoMaskMergeRop(_t1,pdst[0],_startmask); \ - _t1 = SCRLEFT ((src),_m); \ - pdst[1] = DoMaskMergeRop(_t1,pdst[1],_endmask); \ -} - -#define putbitsmrop(src,x,w,pdst) \ -if ((x) + (w) <= PPW) {\ - putbitsmropshort(src,x,w,pdst); \ -} else { \ - putbitsmroplong(src,x,w,pdst); \ -} - -#if GETLEFTBITS_ALIGNMENT == 1 -#define getleftbits(psrc, w, dst) dst = *((unsigned int *) psrc) -#define getleftbits24(psrc, w, dst, idx){ \ - regiseter int index; \ - switch(index = ((idx)&3)<<1){ \ - case 0: \ - dst = (*((unsigned int *) psrc))&cfbmask[index]; \ - break; \ - case 2: \ - case 4: \ - dst = BitLeft(((*((unsigned int *) psrc))&cfbmask[index]), cfb24Shift[index]); \ - dst |= BitRight(((*((unsigned int *) psrc)+1)&cfbmask[index]), cfb4Shift[index]); \ - break; \ - case 6: \ - dst = BitLeft((*((unsigned int *) psrc)),cfb24Shift[index]); \ - break; \ - }; \ -} -#endif /* GETLEFTBITS_ALIGNMENT == 1 */ - -#define getglyphbits(psrc, x, w, dst) \ -{ \ - dst = BitLeft((unsigned) *(psrc), (x)); \ - if ( ((x) + (w)) > 32) \ - dst |= (BitRight((unsigned) *((psrc)+1), 32-(x))); \ -} -#if GETLEFTBITS_ALIGNMENT == 2 -#define getleftbits(psrc, w, dst) \ - { \ - if ( ((int)(psrc)) & 0x01 ) \ - getglyphbits( ((unsigned int *)(((char *)(psrc))-1)), 8, (w), (dst) ); \ - else \ - dst = *((unsigned int *) psrc); \ - } -#endif /* GETLEFTBITS_ALIGNMENT == 2 */ - -#if GETLEFTBITS_ALIGNMENT == 4 -#define getleftbits(psrc, w, dst) \ - { \ - int off, off_b; \ - off_b = (off = ( ((int)(psrc)) & 0x03)) << 3; \ - getglyphbits( \ - (unsigned int *)( ((char *)(psrc)) - off), \ - (off_b), (w), (dst) \ - ); \ - } -#endif /* GETLEFTBITS_ALIGNMENT == 4 */ - -/* - * getstipplepixels( psrcstip, x, w, ones, psrcpix, destpix ) - * - * Converts bits to pixels in a reasonable way. Takes w (1 <= w <= PPW) - * bits from *psrcstip, starting at bit x; call this a quartet of bits. - * Then, takes the pixels from *psrcpix corresponding to the one-bits (if - * ones is TRUE) or the zero-bits (if ones is FALSE) of the quartet - * and puts these pixels into destpix. - * - * Example: - * - * getstipplepixels( &(0x08192A3B), 17, 4, 1, &(0x4C5D6E7F), dest ) - * - * 0x08192A3B = 0000 1000 0001 1001 0010 1010 0011 1011 - * - * This will take 4 bits starting at bit 17, so the quartet is 0x5 = 0101. - * It will take pixels from 0x4C5D6E7F corresponding to the one-bits in this - * quartet, so dest = 0x005D007F. - * - * XXX Works with both byte order. - * XXX This works for all values of x and w within a doubleword. - */ -#if (BITMAP_BIT_ORDER == MSBFirst) -#define getstipplepixels( psrcstip, x, w, ones, psrcpix, destpix ) \ -{ \ - PixelGroup q; \ - int m; \ - if ((m = ((x) - ((PPW*PSZ)-PPW))) > 0) { \ - q = (*(psrcstip)) << m; \ - if ( (x)+(w) > (PPW*PSZ) ) \ - q |= *((psrcstip)+1) >> ((PPW*PSZ)-m); \ - } \ - else \ - q = (*(psrcstip)) >> -m; \ - q = QuartetBitsTable[(w)] & ((ones) ? q : ~q); \ - *(destpix) = (*(psrcpix)) & QuartetPixelMaskTable[q]; \ -} -/* I just copied this to get the linker satisfied on PowerPC, - * so this may not be correct at all. - */ -#define getstipplepixels24(psrcstip,xt,ones,psrcpix,destpix,stipindex) \ -{ \ - PixelGroup q; \ - q = *(psrcstip) >> (xt); \ - q = ((ones) ? q : ~q) & 1; \ - *(destpix) = (*(psrcpix)) & QuartetPixelMaskTable[q]; \ -} -#else /* BITMAP_BIT_ORDER == LSB */ - -/* this must load 32 bits worth; for most machines, thats an int */ -#define CfbFetchUnaligned(x) ldl_u(x) - -#define getstipplepixels( psrcstip, xt, w, ones, psrcpix, destpix ) \ -{ \ - PixelGroup q; \ - q = CfbFetchUnaligned(psrcstip) >> (xt); \ - if ( ((xt)+(w)) > (PPW*PSZ) ) \ - q |= (CfbFetchUnaligned((psrcstip)+1)) << ((PPW*PSZ)-(xt)); \ - q = QuartetBitsTable[(w)] & ((ones) ? q : ~q); \ - *(destpix) = (*(psrcpix)) & QuartetPixelMaskTable[q]; \ -} -#if PSZ == 24 -#define getstipplepixels24(psrcstip,xt,ones,psrcpix,destpix,stipindex) \ -{ \ - PixelGroup q; \ - q = *(psrcstip) >> (xt); \ - q = ((ones) ? q : ~q) & 1; \ - *(destpix) = (*(psrcpix)) & QuartetPixelMaskTable[q]; \ -} -#endif /* PSZ == 24 */ -#endif - -extern PixelGroup cfbstarttab[]; -extern PixelGroup cfbendtab[]; -extern PixelGroup cfbstartpartial[]; -extern PixelGroup cfbendpartial[]; -extern PixelGroup cfbrmask[]; -extern PixelGroup cfbmask[]; -extern PixelGroup QuartetBitsTable[]; -extern PixelGroup QuartetPixelMaskTable[]; -#if PSZ == 24 -extern int cfb24Shift[]; -#endif diff --git a/cfb/cfbpixmap.c b/cfb/cfbpixmap.c deleted file mode 100644 index 1166f90b7..000000000 --- a/cfb/cfbpixmap.c +++ /dev/null @@ -1,375 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ -/* pixmap management - written by drewry, september 1986 - - on a monchrome device, a pixmap is a bitmap. -*/ - -#include - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include "servermd.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "mi.h" -#include "cfb.h" -#include "cfbmskbits.h" - -PixmapPtr -cfbCreatePixmap (pScreen, width, height, depth, usage_hint) - ScreenPtr pScreen; - int width; - int height; - int depth; - unsigned usage_hint; -{ - PixmapPtr pPixmap; - size_t datasize; - size_t paddedWidth; - - paddedWidth = PixmapBytePad(width, depth); - - if (paddedWidth / 4 > 32767 || height > 32767) - return NullPixmap; - datasize = height * paddedWidth; - pPixmap = AllocatePixmap(pScreen, datasize); - if (!pPixmap) - return NullPixmap; - pPixmap->drawable.type = DRAWABLE_PIXMAP; - pPixmap->drawable.class = 0; - pPixmap->drawable.pScreen = pScreen; - pPixmap->drawable.depth = depth; - pPixmap->drawable.bitsPerPixel = BitsPerPixel(depth); - pPixmap->drawable.id = 0; - pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER; - pPixmap->drawable.x = 0; - pPixmap->drawable.y = 0; - pPixmap->drawable.width = width; - pPixmap->drawable.height = height; - pPixmap->devKind = paddedWidth; - pPixmap->refcnt = 1; - pPixmap->devPrivate.ptr = datasize ? - (pointer)((char *)pPixmap + pScreen->totalPixmapSize) : NULL; - pPixmap->usage_hint = usage_hint; - return pPixmap; -} - -Bool -cfbDestroyPixmap(pPixmap) - PixmapPtr pPixmap; -{ - if(--pPixmap->refcnt) - return TRUE; - dixFreePrivates(pPixmap->devPrivates); - xfree(pPixmap); - return TRUE; -} - -PixmapPtr -cfbCopyPixmap(pSrc) - register PixmapPtr pSrc; -{ - register PixmapPtr pDst; - int size; - ScreenPtr pScreen; - - size = pSrc->drawable.height * pSrc->devKind; - pScreen = pSrc->drawable.pScreen; - pDst = (*pScreen->CreatePixmap) (pScreen, pSrc->drawable.width, - pSrc->drawable.height, pSrc->drawable.depth, 0); - if (!pDst) - return NullPixmap; - memmove((char *)pDst->devPrivate.ptr, (char *)pSrc->devPrivate.ptr, size); - return pDst; -} - - -/* replicates a pattern to be a full 32 bits wide. - relies on the fact that each scnaline is longword padded. - doesn't do anything if pixmap is not a factor of 32 wide. - changes width field of pixmap if successful, so that the fast - cfbXRotatePixmap code gets used if we rotate the pixmap later. - cfbYRotatePixmap code gets used if we rotate the pixmap later. - - calculate number of times to repeat - for each scanline of pattern - zero out area to be filled with replicate - left shift and or in original as many times as needed -*/ -void -cfbPadPixmap(pPixmap) - PixmapPtr pPixmap; -{ - register int width = (pPixmap->drawable.width) * (pPixmap->drawable.bitsPerPixel); - register int h; - register CfbBits mask; - register CfbBits *p; - register CfbBits bits; /* real pattern bits */ - register int i; - int rep; /* repeat count for pattern */ - - if (width >= PGSZ) - return; - - rep = PGSZ/width; - if (rep*width != PGSZ) - return; - - mask = mfbGetendtab(width); - - p = (CfbBits *)(pPixmap->devPrivate.ptr); - for (h=0; h < pPixmap->drawable.height; h++) - { - *p &= mask; - bits = *p; - for(i=1; i>= width; -#else - bits <<= width; -#endif - *p |= bits; - } - p++; - } - pPixmap->drawable.width = PGSZ/(pPixmap->drawable.bitsPerPixel); -} - - -#ifdef notdef -/* - * cfb debugging routine -- assumes pixmap is 1 byte deep - */ -static cfbdumppixmap(pPix) - PixmapPtr pPix; -{ - unsigned int *pw; - char *psrc, *pdst; - int i, j; - char line[66]; - - ErrorF( "pPixmap: 0x%x\n", pPix); - ErrorF( "%d wide %d high\n", pPix->drawable.width, pPix->drawable.height); - if (pPix->drawable.width > 64) - { - ErrorF( "too wide to see\n"); - return; - } - - pw = (unsigned int *) pPix->devPrivate.ptr; - psrc = (char *) pw; - -/* - for ( i=0; idrawable.height; ++i ) - ErrorF( "0x%x\n", pw[i] ); -*/ - - for ( i = 0; i < pPix->drawable.height; ++i ) { - pdst = line; - for(j = 0; j < pPix->drawable.width; j++) { - *pdst++ = *psrc++ ? 'X' : ' ' ; - } - *pdst++ = '\n'; - *pdst++ = '\0'; - ErrorF( "%s", line); - } -} -#endif /* notdef */ - -/* Rotates pixmap pPix by w pixels to the right on the screen. Assumes that - * words are PGSZ bits wide, and that the least significant bit appears on the - * left. - */ -void -cfbXRotatePixmap(pPix, rw) - PixmapPtr pPix; - register int rw; -{ - register CfbBits *pw, *pwFinal; - register CfbBits t; - int rot; - - if (pPix == NullPixmap) - return; - - switch (((DrawablePtr) pPix)->bitsPerPixel) { - case PSZ: - break; - case 1: - mfbXRotatePixmap(pPix, rw); - return; - default: - ErrorF("cfbXRotatePixmap: unsupported bitsPerPixel %d\n", ((DrawablePtr) pPix)->bitsPerPixel); - return; - } - pw = (CfbBits *)pPix->devPrivate.ptr; - modulus (rw, (int) pPix->drawable.width, rot); - if(pPix->drawable.width == PPW) - { - pwFinal = pw + pPix->drawable.height; - while(pw < pwFinal) - { - t = *pw; - *pw++ = SCRRIGHT(t, rot) | - (SCRLEFT(t, (PPW-rot)) & cfbendtab[rot]); - } - } - else - { - ErrorF("cfb internal error: trying to rotate odd-sized pixmap.\n"); -#ifdef notdef - register CfbBits *pwTmp; - int size, tsize; - - tsize = PixmapBytePad(pPix->drawable.width - rot, pPix->drawable.depth); - pwTmp = (CfbBits *) xalloc(pPix->drawable.height * tsize); - if (!pwTmp) - return; - /* divide pw (the pixmap) in two vertically at (w - rot) and swap */ - tsize >>= 2; - size = pPix->devKind >> SIZE0F(PixelGroup); - cfbQuickBlt((CfbBits *)pw, (CfbBits *)pwTmp, - 0, 0, 0, 0, - (int)pPix->drawable.width - rot, (int)pPix->drawable.height, - size, tsize); - cfbQuickBlt((CfbBits *)pw, (CfbBits *)pw, - (int)pPix->drawable.width - rot, 0, 0, 0, - rot, (int)pPix->drawable.height, - size, size); - cfbQuickBlt((CfbBits *)pwTmp, (CfbBits *)pw, - 0, 0, rot, 0, - (int)pPix->drawable.width - rot, (int)pPix->drawable.height, - tsize, size); - xfree(pwTmp); -#endif - } -} - -/* Rotates pixmap pPix by h lines. Assumes that h is always less than - pPix->drawable.height - works on any width. - */ -void -cfbYRotatePixmap(pPix, rh) - register PixmapPtr pPix; - int rh; -{ - int nbyDown; /* bytes to move down to row 0; also offset of - row rh */ - int nbyUp; /* bytes to move up to line rh; also - offset of first line moved down to 0 */ - char *pbase; - char *ptmp; - int rot; - - if (pPix == NullPixmap) - return; - switch (((DrawablePtr) pPix)->bitsPerPixel) { - case PSZ: - break; - case 1: - mfbYRotatePixmap(pPix, rh); - return; - default: - ErrorF("cfbYRotatePixmap: unsupported bitsPerPixel %d\n", ((DrawablePtr) pPix)->bitsPerPixel); - return; - } - - modulus (rh, (int) pPix->drawable.height, rot); - pbase = (char *)pPix->devPrivate.ptr; - - nbyDown = rot * pPix->devKind; - nbyUp = (pPix->devKind * pPix->drawable.height) - nbyDown; - if(!(ptmp = (char *)xalloc(nbyUp))) - return; - - memmove(ptmp, pbase, nbyUp); /* save the low rows */ - memmove(pbase, pbase+nbyUp, nbyDown); /* slide the top rows down */ - memmove(pbase+nbyDown, ptmp, nbyUp); /* move lower rows up to row rot */ - xfree(ptmp); -} - -void -cfbCopyRotatePixmap(psrcPix, ppdstPix, xrot, yrot) - register PixmapPtr psrcPix, *ppdstPix; - int xrot, yrot; -{ - register PixmapPtr pdstPix; - - if ((pdstPix = *ppdstPix) && - (pdstPix->devKind == psrcPix->devKind) && - (pdstPix->drawable.height == psrcPix->drawable.height)) - { - memmove((char *)pdstPix->devPrivate.ptr, - (char *)psrcPix->devPrivate.ptr, - psrcPix->drawable.height * psrcPix->devKind); - pdstPix->drawable.width = psrcPix->drawable.width; - pdstPix->drawable.depth = psrcPix->drawable.depth; - pdstPix->drawable.bitsPerPixel = psrcPix->drawable.bitsPerPixel; - pdstPix->drawable.serialNumber = NEXT_SERIAL_NUMBER; - } - else - { - if (pdstPix) - /* FIX XBUG 6168 */ - (*pdstPix->drawable.pScreen->DestroyPixmap)(pdstPix); - *ppdstPix = pdstPix = cfbCopyPixmap(psrcPix); - if (!pdstPix) - return; - } - cfbPadPixmap(pdstPix); - if (xrot) - cfbXRotatePixmap(pdstPix, xrot); - if (yrot) - cfbYRotatePixmap(pdstPix, yrot); -} diff --git a/cfb/cfbply1rct.c b/cfb/cfbply1rct.c deleted file mode 100644 index ce0bcb203..000000000 --- a/cfb/cfbply1rct.c +++ /dev/null @@ -1,363 +0,0 @@ -/* - * -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include - -#include "gcstruct.h" -#include "windowstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "scrnintstr.h" -#include "mistruct.h" - -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfbrrop.h" - -void -RROP_NAME(cfbFillPoly1Rect) (pDrawable, pGC, shape, mode, count, ptsIn) - DrawablePtr pDrawable; - GCPtr pGC; - int shape; - int mode; - int count; - DDXPointPtr ptsIn; -{ - cfbPrivGCPtr devPriv; - int nwidth; - CfbBits *addrl, *addr; -#if PSZ == 24 - CfbBits startmask, endmask; - register int pidx; -#else -#if PPW > 1 - CfbBits mask, bits = ~((CfbBits)0); -#endif -#endif - int maxy; - int origin; - register int vertex1, vertex2; - int c = 0; - BoxPtr extents; - int clip; - int y; - int *vertex1p = NULL, *vertex2p; - int *endp; - int x1 = 0, x2 = 0; - int dx1 = 0, dx2 = 0; - int dy1 = 0, dy2 = 0; - int e1 = 0, e2 = 0; - int step1 = 0, step2 = 0; - int sign1 = 0, sign2 = 0; - int h; - int l; -#if PSZ != 24 && PPW > 1 - int r; -#endif - int nmiddle; - RROP_DECLARE - - if (mode == CoordModePrevious) - { - miFillPolygon (pDrawable, pGC, shape, mode, count, ptsIn); - return; - } - - devPriv = cfbGetGCPrivate(pGC); -#ifdef NO_ONE_RECT - if (REGION_NUM_RECTS(pGC->pCompositeClip) != 1) - { - miFillPolygon (pDrawable, pGC, shape, mode, count, ptsIn); - return; - } -#endif - origin = *((int *) &pDrawable->x); - vertex2 = origin - ((origin & 0x8000) << 1); - extents = &pGC->pCompositeClip->extents; - RROP_FETCH_GCPRIV(devPriv); - vertex1 = *((int *) &extents->x1) - vertex2; - vertex2 = *((int *) &extents->x2) - vertex2 - 0x00010001; - clip = 0; - y = 32767; - maxy = 0; - vertex2p = (int *) ptsIn; - endp = vertex2p + count; - if (shape == Convex) - { - while (count--) - { - c = *vertex2p; - clip |= (c - vertex1) | (vertex2 - c); - c = intToY(c); - if (c < y) - { - y = c; - vertex1p = vertex2p; - } - vertex2p++; - if (c > maxy) - maxy = c; - } - } - else - { - int yFlip = 0; - dx1 = 1; - x2 = -1; - x1 = -1; - while (count--) - { - c = *vertex2p; - clip |= (c - vertex1) | (vertex2 - c); - c = intToY(c); - if (c < y) - { - y = c; - vertex1p = vertex2p; - } - vertex2p++; - if (c > maxy) - maxy = c; - if (c == x1) - continue; - if (dx1 > 0) - { - if (x2 < 0) - x2 = c; - else - dx2 = dx1 = (c - x1) >> 31; - } - else - if ((c - x1) >> 31 != dx1) - { - dx1 = ~dx1; - yFlip++; - } - x1 = c; - } - x1 = (x2 - c) >> 31; - if (x1 != dx1) - yFlip++; - if (x1 != dx2) - yFlip++; - if (yFlip != 2) - clip = 0x8000; - } - if (y == maxy) - return; - - if (clip & 0x80008000) - { - miFillPolygon (pDrawable, pGC, shape, mode, vertex2p - (int *) ptsIn, ptsIn); - return; - } - -#define AddrYPlus(a,y) (CfbBits *) (((unsigned char *) (a)) + (y) * nwidth) - - cfbGetTypedWidthAndPointer(pDrawable, nwidth, addrl, unsigned char, CfbBits); - addrl = AddrYPlus(addrl,y + pDrawable->y); - origin = intToX(origin); - vertex2p = vertex1p; - vertex2 = vertex1 = *vertex2p++; - if (vertex2p == endp) - vertex2p = (int *) ptsIn; -#define Setup(c,x,vertex,dx,dy,e,sign,step) {\ - x = intToX(vertex); \ - if ((dy = intToY(c) - y)) { \ - dx = intToX(c) - x; \ - step = 0; \ - if (dx >= 0) \ - { \ - e = 0; \ - sign = 1; \ - if (dx >= dy) {\ - step = dx / dy; \ - dx = dx % dy; \ - } \ - } \ - else \ - { \ - e = 1 - dy; \ - sign = -1; \ - dx = -dx; \ - if (dx >= dy) { \ - step = - (dx / dy); \ - dx = dx % dy; \ - } \ - } \ - } \ - x += origin; \ - vertex = c; \ -} - -#define Step(x,dx,dy,e,sign,step) {\ - x += step; \ - if ((e += dx) > 0) \ - { \ - x += sign; \ - e -= dy; \ - } \ -} - for (;;) - { - if (y == intToY(vertex1)) - { - do - { - if (vertex1p == (int *) ptsIn) - vertex1p = endp; - c = *--vertex1p; - Setup (c,x1,vertex1,dx1,dy1,e1,sign1,step1) - } while (y >= intToY(vertex1)); - h = dy1; - } - else - { - Step(x1,dx1,dy1,e1,sign1,step1) - h = intToY(vertex1) - y; - } - if (y == intToY(vertex2)) - { - do - { - c = *vertex2p++; - if (vertex2p == endp) - vertex2p = (int *) ptsIn; - Setup (c,x2,vertex2,dx2,dy2,e2,sign2,step2) - } while (y >= intToY(vertex2)); - if (dy2 < h) - h = dy2; - } - else - { - Step(x2,dx2,dy2,e2,sign2,step2) - if ((c = (intToY(vertex2) - y)) < h) - h = c; - } - /* fill spans for this segment */ - y += h; - for (;;) - { - l = x1; -#if PSZ != 24 && PPW > 1 - r = x2; -#endif - nmiddle = x2 - x1; - if (nmiddle < 0) - { - nmiddle = -nmiddle; - l = x2; -#if PSZ != 24 && PPW > 1 - r = x1; -#endif - } -#if PPW > 1 - c = l & PIM; - l -= c; -#endif - -#if PGSZ == 32 -#define LWRD_SHIFT 2 -#else /* PGSZ == 64 */ -#define LWRD_SHIFT 3 -#endif /* PGSZ */ - -#if PSZ == 24 - addr = (CfbBits *)((char *)addrl + ((l * 3) & ~0x03)); - if (nmiddle <= 1){ - if (nmiddle) - RROP_SOLID24(addr, l); - } else { - maskbits(l, nmiddle, startmask, endmask, nmiddle); - pidx = l & 3; - if (startmask){ - RROP_SOLID_MASK(addr, startmask, pidx-1); - addr++; - if (pidx == 3) - pidx = 0; - } - while (--nmiddle >= 0){ - RROP_SOLID(addr, pidx); - addr++; - if (++pidx == 3) - pidx = 0; - } - if (endmask) - RROP_SOLID_MASK(addr, endmask, pidx); - } -#else /* PSZ == 24 */ -#if PWSH > LWRD_SHIFT - l = l >> (PWSH - LWRD_SHIFT); -#endif -#if PWSH < LWRD_SHIFT - l = l << (LWRD_SHIFT - PWSH); -#endif - addr = (CfbBits *) (((char *) addrl) + l); -#if PPW > 1 - if (c + nmiddle < PPW) - { - mask = SCRRIGHT (bits,c) ^ SCRRIGHT (bits,c+nmiddle); - RROP_SOLID_MASK(addr,mask); - } - else - { - if (c) - { - mask = SCRRIGHT(bits, c); - RROP_SOLID_MASK(addr,mask); - nmiddle += c - PPW; - addr++; - } -#endif - nmiddle >>= PWSH; - while (--nmiddle >= 0) { - RROP_SOLID(addr); addr++; - } -#if PPW > 1 - if ((mask = ~SCRRIGHT(bits, r & PIM))) - RROP_SOLID_MASK(addr,mask); - } -#endif -#endif /* PSZ == 24 */ - if (!--h) - break; - addrl = AddrYPlus (addrl, 1); - Step(x1,dx1,dy1,e1,sign1,step1) - Step(x2,dx2,dy2,e2,sign2,step2) - } - if (y == maxy) - break; - addrl = AddrYPlus (addrl, 1); - } - RROP_UNDECLARE -} diff --git a/cfb/cfbpolypnt.c b/cfb/cfbpolypnt.c deleted file mode 100644 index 06a768e8d..000000000 --- a/cfb/cfbpolypnt.c +++ /dev/null @@ -1,202 +0,0 @@ -/************************************************************ - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - -********************************************************/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include "gcstruct.h" -#include "windowstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "scrnintstr.h" -#include "cfb.h" -#include "cfbmskbits.h" - -#define isClipped(c,ul,lr) ((((c) - (ul)) | ((lr) - (c))) & ClipMask) - -/* WARNING: pbox contains two shorts. This code assumes they are packed - * and can be referenced together as an INT32. - */ - -#define PointLoop(fill) { \ - for (nbox = REGION_NUM_RECTS(cclip), pbox = REGION_RECTS(cclip); \ - --nbox >= 0; \ - pbox++) \ - { \ - c1 = *((INT32 *) &pbox->x1) - off; \ - c2 = *((INT32 *) &pbox->x2) - off - 0x00010001; \ - for (ppt = (INT32 *) pptInit, i = npt; --i >= 0;) \ - { \ - pt = *ppt++; \ - if (!isClipped(pt,c1,c2)) { \ - fill \ - } \ - } \ - } \ -} - -#if PSZ == 24 -# include "cfbrrop24.h" -#endif - -void -cfbPolyPoint(pDrawable, pGC, mode, npt, pptInit) - DrawablePtr pDrawable; - GCPtr pGC; - int mode; - int npt; - xPoint *pptInit; -{ - register INT32 pt; - register INT32 c1, c2; - register CARD32 ClipMask = 0x80008000; - register CfbBits xor; -#ifdef PIXEL_ADDR - register PixelType *addrp; - register int npwidth; -#if PSZ != 24 - PixelType *addrpt; -#endif -#else - register CfbBits *addrl; - register int nlwidth; - register int xoffset; - CfbBits *addrlt; -#endif -#if PSZ == 24 - RROP_DECLARE - register int xtmp; - register PixelType *p; -#endif - register INT32 *ppt; - RegionPtr cclip; - int nbox; - register int i; - register BoxPtr pbox; - CfbBits and; - int rop = pGC->alu; - int off; - cfbPrivGCPtr devPriv; - xPoint *pptPrev; - - devPriv =cfbGetGCPrivate(pGC); - rop = devPriv->rop; - if (rop == GXnoop) - return; - cclip = pGC->pCompositeClip; - xor = devPriv->xor; - if ((mode == CoordModePrevious) && (npt > 1)) - { - for (pptPrev = pptInit + 1, i = npt - 1; --i >= 0; pptPrev++) - { - pptPrev->x += (pptPrev-1)->x; - pptPrev->y += (pptPrev-1)->y; - } - } - off = *((int *) &pDrawable->x); - off -= (off & 0x8000) << 1; -#ifdef PIXEL_ADDR - cfbGetPixelWidthAndPointer(pDrawable, npwidth, addrp); -#if PSZ == 24 - addrp = addrp + pDrawable->y * npwidth; -#else - addrp = addrp + pDrawable->y * npwidth + pDrawable->x; -#endif - if (rop == GXcopy) - { -#if PSZ == 24 - RROP_COPY_SETUP(xor) -#endif - if (!(npwidth & (npwidth - 1))) - { - npwidth = ffs(npwidth) - 1; -#if PSZ == 24 - PointLoop( - xtmp = pDrawable->x + intToX(pt); - p = addrp + (intToY(pt) << npwidth) + ((xtmp * 3) >>2); - RROP_SOLID24_COPY(p, xtmp)) -#else - PointLoop(*(addrp + (intToY(pt) << npwidth) + intToX(pt)) = xor;) -#endif - } -#ifdef sun - else if (npwidth == 1152) - { - register int y; - PointLoop(y = intToY(pt); *(addrp + (y << 10) + (y << 7) + intToX(pt)) = xor;) - } -#endif - else - { -#if PSZ == 24 - PointLoop( - xtmp = pDrawable->x + intToX(pt); - p = addrp + intToY(pt) * npwidth + ((xtmp * 3) >> 2); - RROP_SOLID24_COPY(p, xtmp)) -#else - PointLoop(*(addrp + intToY(pt) * npwidth + intToX(pt)) = xor;) -#endif - } - } - else - { - and = devPriv->and; -#if PSZ == 24 - RROP_SET_SETUP(xor, and) - PointLoop( - xtmp = pDrawable->x + intToX(pt); - p = addrp + intToY(pt) * npwidth + ((xtmp * 3) >> 2); - RROP_SOLID24_SET(p, xtmp)) -#else - PointLoop( addrpt = addrp + intToY(pt) * npwidth + intToX(pt); - *addrpt = DoRRop (*addrpt, and, xor);) -#endif - } -#else /* !PIXEL_ADDR */ - cfbGetLongWidthAndPointer(pDrawable, nlwidth, addrl); - addrl = addrl + pDrawable->y * nlwidth + (pDrawable->x >> PWSH); - xoffset = pDrawable->x & PIM; - and = devPriv->and; -#if PSZ == 24 - PointLoop( addrlt = addrl + intToY(pt) * nlwidth - + ((intToX(pt) + xoffset) >> PWSH); - *addrlt = DoRRop (*addrlt, - and | ~cfbmask[(intToX(pt) + xoffset) & PIM], - xor & cfbmask[(intToX(pt) + xoffset) & PIM]); - ) -#else - PointLoop( addrlt = addrl + intToY(pt) * nlwidth - + ((intToX(pt) + xoffset) >> PWSH); - *addrlt = DoRRop (*addrlt, - and | ~cfbmask[((intToX(pt) + xoffset) & 3)<<1], - xor & cfbmask[((intToX(pt) + xoffset) & 3)<<1]); - ) -#endif -#endif /* PIXEL_ADDR */ -} diff --git a/cfb/cfbpush8.c b/cfb/cfbpush8.c deleted file mode 100644 index 857ec94a6..000000000 --- a/cfb/cfbpush8.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Push Pixels for 8 bit displays. - */ - - -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. -*/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#if PSZ == 8 - -#include -#include -#include -#include "gcstruct.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" -#define MFB_CONSTS_ONLY -#include "maskbits.h" - -void -cfbPushPixels8 (pGC, pBitmap, pDrawable, dx, dy, xOrg, yOrg) - GCPtr pGC; - PixmapPtr pBitmap; - DrawablePtr pDrawable; - int dx, dy, xOrg, yOrg; -{ - register CfbBits *src, *dst; - register CfbBits pixel; - register CfbBits c, bits; - CfbBits *pdstLine, *psrcLine; - CfbBits *pdstBase; - int srcWidth; - int dstWidth; - int xoff; - int nBitmapLongs, nPixmapLongs; - int nBitmapTmp, nPixmapTmp; - CfbBits rightMask; - BoxRec bbox; - cfbPrivGCPtr devPriv; - - bbox.x1 = xOrg; - bbox.y1 = yOrg; - bbox.x2 = bbox.x1 + dx; - bbox.y2 = bbox.y1 + dy; - devPriv = cfbGetGCPrivate(pGC); - - switch (RECT_IN_REGION(pGC->pScreen, pGC->pCompositeClip, &bbox)) - { - case rgnPART: - mfbPushPixels(pGC, pBitmap, pDrawable, dx, dy, xOrg, yOrg); - case rgnOUT: - return; - } - - cfbGetLongWidthAndPointer (pDrawable, dstWidth, pdstBase) - - psrcLine = (CfbBits *) pBitmap->devPrivate.ptr; - srcWidth = (int) pBitmap->devKind >> PWSH; - - pixel = devPriv->xor; - xoff = xOrg & PIM; - nBitmapLongs = (dx + xoff) >> MFB_PWSH; - nPixmapLongs = (dx + PGSZB + xoff) >> PWSH; - - rightMask = ~cfb8BitLenMasks[((dx + xoff) & MFB_PIM)]; - - pdstLine = pdstBase + (yOrg * dstWidth) + (xOrg >> PWSH); - - while (dy--) - { - c = 0; - nPixmapTmp = nPixmapLongs; - nBitmapTmp = nBitmapLongs; - src = psrcLine; - dst = pdstLine; - while (nBitmapTmp--) - { - bits = *src++; - c |= BitRight (bits, xoff); - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - nPixmapTmp -= 8; - c = 0; - if (xoff) - c = BitLeft (bits, PGSZ - xoff); - } - if (BitLeft (rightMask, xoff)) - c |= BitRight (*src, xoff); - c &= rightMask; - switch (nPixmapTmp) { - case 8: - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - case 7: - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - case 6: - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - case 5: - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - case 4: - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - case 3: - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - case 2: - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - case 1: - WriteBitGroup(dst, pixel, GetBitGroup(c)); - NextBitGroup(c); - dst++; - case 0: - break; - } - pdstLine += dstWidth; - psrcLine += srcWidth; - } -} - -#endif diff --git a/cfb/cfbrctstp8.c b/cfb/cfbrctstp8.c deleted file mode 100644 index 485d40998..000000000 --- a/cfb/cfbrctstp8.c +++ /dev/null @@ -1,593 +0,0 @@ -/* - * Fill 32 bit stippled rectangles for 8 bit frame buffers - */ -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - -Author: Keith Packard, MIT X Consortium - -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#if PSZ == 8 - -#include -#include -#include "servermd.h" -#include "gcstruct.h" -#include "window.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "windowstr.h" - -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" - -#define MFB_CONSTS_ONLY -#include "maskbits.h" - -void -cfb8FillRectOpaqueStippled32 (pDrawable, pGC, nBox, pBox) - DrawablePtr pDrawable; - GCPtr pGC; - int nBox; /* number of boxes to fill */ - register BoxPtr pBox; /* pointer to list of boxes to fill */ -{ - CfbBits *src; - int stippleHeight; - - int nlwDst; /* width in longwords of the dest pixmap */ - int w; /* width of current box */ - register int h; /* height of current box */ - CfbBits startmask; - CfbBits endmask; /* masks for reggedy bits at either end of line */ - int nlwMiddle; /* number of longwords between sides of boxes */ - register int nlw; /* loop version of nlwMiddle */ - CfbBits *dstLine; - register CfbBits *dst; /* pointer to bits we're writing */ - CfbBits *dstTmp; - int y; /* current scan line */ - - CfbBits *pbits;/* pointer to start of pixmap */ - register CfbBits bits; /* bits from stipple */ - int rot; - register CfbBits xor; - PixmapPtr stipple; - int wEnd; - - stipple = pGC->pRotatedPixmap; - - cfb8CheckOpaqueStipple(pGC->alu, pGC->fgPixel, pGC->bgPixel, pGC->planemask); - - stippleHeight = stipple->drawable.height; - src = (CfbBits *)stipple->devPrivate.ptr; - - cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits) - - while (nBox--) - { - w = pBox->x2 - pBox->x1; - h = pBox->y2 - pBox->y1; - y = pBox->y1; - dstLine = pbits + (pBox->y1 * nlwDst) + ((pBox->x1 & ~PIM) >> PWSH); - if (((pBox->x1 & PIM) + w) <= PPW) - { - maskpartialbits(pBox->x1, w, startmask); - nlwMiddle = 0; - endmask = 0; - } - else - { - maskbits (pBox->x1, w, startmask, endmask, nlwMiddle); - } - rot = (pBox->x1 & ((PGSZ-1) & ~PIM)); - pBox++; - y = y % stippleHeight; -#if PPW == 4 - if (cfb8StippleRRop == GXcopy) - { - if (w < PGSZ*2) - { - while (h--) - { - bits = src[y]; - y++; - if (y == stippleHeight) - y = 0; - if (rot) - RotBitsLeft(bits,rot); - dst = dstLine; - dstLine += nlwDst; - if (startmask) - { - *dst = (*dst & ~startmask) | - (GetPixelGroup (bits) & startmask); - dst++; - RotBitsLeft (bits, PGSZB); - } - nlw = nlwMiddle; - while (nlw--) - { - *dst++ = GetPixelGroup(bits); - RotBitsLeft (bits, PGSZB); - } - if (endmask) - { - *dst = (*dst & ~endmask) | - (GetPixelGroup (bits) & endmask); - } - } - } - else - { - wEnd = 7 - (nlwMiddle & 7); - nlwMiddle = (nlwMiddle >> 3) + 1; - while (h--) - { - bits = src[y]; - y++; - if (y == stippleHeight) - y = 0; - if (rot != 0) - RotBitsLeft (bits, rot); - dstTmp = dstLine; - dstLine += nlwDst; - if (startmask) - { - *dstTmp = (*dstTmp & ~startmask) | - (GetPixelGroup (bits) & startmask); - dstTmp++; - RotBitsLeft (bits, PGSZB); - } - w = 7 - wEnd; - while (w--) - { - nlw = nlwMiddle; - dst = dstTmp; - dstTmp++; - xor = GetPixelGroup (bits); - while (nlw--) - { - *dst = xor; - dst += 8; - } - NextBitGroup (bits); - } - nlwMiddle--; - w = wEnd + 1; - if (endmask) - { - dst = dstTmp + (nlwMiddle << 3); - *dst = (*dst & ~endmask) | - (GetPixelGroup(bits) & endmask); - } - while (w--) - { - nlw = nlwMiddle; - dst = dstTmp; - dstTmp++; - xor = GetPixelGroup (bits); - while (nlw--) - { - *dst = xor; - dst += 8; - } - NextBitGroup (bits); - } - nlwMiddle++; - } - } - } - else -#endif /* PPW == 4 */ - { - while (h--) - { - bits = src[y]; - y++; - if (y == stippleHeight) - y = 0; - if (rot) - RotBitsLeft(bits,rot); - dst = dstLine; - dstLine += nlwDst; - if (startmask) - { - xor = GetBitGroup(bits); - *dst = MaskRRopPixels(*dst, xor, startmask); - dst++; - RotBitsLeft (bits, PGSZB); - } - nlw = nlwMiddle; - while (nlw--) - { - RRopBitGroup(dst, GetBitGroup(bits)); - dst++; - RotBitsLeft (bits, PGSZB); - } - if (endmask) - { - xor = GetBitGroup(bits); - *dst = MaskRRopPixels(*dst, xor, endmask); - } - } - } - } -} - -void -cfb8FillRectTransparentStippled32 (pDrawable, pGC, nBox, pBox) - DrawablePtr pDrawable; - GCPtr pGC; - int nBox; /* number of boxes to fill */ - BoxPtr pBox; /* pointer to list of boxes to fill */ -{ - int x, y, w, h; - int nlwMiddle, nlwDst; - CfbBits startmask, endmask; - register CfbBits *dst; - CfbBits *dstLine, *pbits, *dstTmp; - CfbBits *src; - register CfbBits xor; - register CfbBits bits, mask; - int rot; - int wEnd; - cfbPrivGCPtr devPriv; - PixmapPtr stipple; - int stippleHeight; - register int nlw; - - devPriv = cfbGetGCPrivate(pGC); - stipple = pGC->pRotatedPixmap; - src = (CfbBits *)stipple->devPrivate.ptr; - stippleHeight = stipple->drawable.height; - - cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask); - - cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits) - - while (nBox--) - { - x = pBox->x1; - w = pBox->x2 - x; - if (((x & PIM) + w) <= PPW) - { - maskpartialbits(x, w, startmask); - endmask = 0; - nlwMiddle = 0; - } - else - { - maskbits (x, w, startmask, endmask, nlwMiddle); - } - rot = (x & ((PGSZ-1) & ~PIM)); - y = pBox->y1; - dstLine = pbits + (y * nlwDst) + (x >> PWSH); - h = pBox->y2 - y; - pBox++; - y %= stippleHeight; -#if PPW == 4 - if (cfb8StippleRRop == GXcopy) - { - xor = devPriv->xor; - if (w < PGSZ*2) - { - while (h--) - { - bits = src[y]; - y++; - if (y == stippleHeight) - y = 0; - if (rot != 0) - RotBitsLeft (bits, rot); - dst = dstLine; - dstLine += nlwDst; - if (startmask) - { - mask = cfb8PixelMasks[GetBitGroup(bits)]; - *dst = (*dst & ~(mask & startmask)) | - (xor & (mask & startmask)); - dst++; - RotBitsLeft (bits, PGSZB); - } - nlw = nlwMiddle; - while (nlw--) - { - WriteBitGroup (dst,xor,GetBitGroup(bits)) - dst++; - RotBitsLeft (bits, PGSZB); - } - if (endmask) - { - mask = cfb8PixelMasks[GetBitGroup(bits)]; - *dst = (*dst & ~(mask & endmask)) | - (xor & (mask & endmask)); - } - } - } - else - { - wEnd = 7 - (nlwMiddle & 7); - nlwMiddle = (nlwMiddle >> 3) + 1; - while (h--) - { - bits = src[y]; - y++; - if (y == stippleHeight) - y = 0; - if (rot != 0) - RotBitsLeft (bits, rot); - dstTmp = dstLine; - dstLine += nlwDst; - if (startmask) - { - mask = cfb8PixelMasks[GetBitGroup(bits)]; - *dstTmp = (*dstTmp & ~(mask & startmask)) | - (xor & (mask & startmask)); - dstTmp++; - RotBitsLeft (bits, PGSZB); - } - w = 7 - wEnd; - while (w--) - { - nlw = nlwMiddle; - dst = dstTmp; - dstTmp++; -#if defined(__GNUC__) && defined(mc68020) - mask = cfb8PixelMasks[GetBitGroup(bits)]; - xor = xor & mask; - mask = ~mask; - while (nlw--) - { - *dst = (*dst & mask) | xor; - dst += 8; - } - xor = devPriv->xor; -#else -#define SwitchBitsLoop(body) \ - while (nlw--) \ - { \ - body \ - dst += 8; \ - } - SwitchBitGroup(dst, xor, GetBitGroup(bits)); -#undef SwitchBitsLoop -#endif - NextBitGroup (bits); - } - nlwMiddle--; - w = wEnd + 1; - if (endmask) - { - mask = cfb8PixelMasks[GetBitGroup(bits)]; - dst = dstTmp + (nlwMiddle << 3); - *dst = (*dst & ~(mask & endmask)) | - (xor & (mask & endmask)); - } - while (w--) - { - nlw = nlwMiddle; - dst = dstTmp; - dstTmp++; -#if defined(__GNUC__) && defined(mc68020) - mask = cfb8PixelMasks[GetBitGroup(bits)]; - xor = xor & mask; - mask = ~mask; - while (nlw--) - { - *dst = (*dst & mask) | xor; - dst += 8; - } - xor = devPriv->xor; -#else -#define SwitchBitsLoop(body) \ - while (nlw--) \ - { \ - body \ - dst += 8; \ - } - SwitchBitGroup(dst, xor, GetBitGroup(bits)); -#undef SwitchBitsLoop -#endif - NextBitGroup (bits); - } - nlwMiddle++; - } - } - } - else -#endif /* PPW == 4 */ - { - while (h--) - { - bits = src[y]; - y++; - if (y == stippleHeight) - y = 0; - if (rot != 0) - RotBitsLeft (bits, rot); - dst = dstLine; - dstLine += nlwDst; - if (startmask) - { - xor = GetBitGroup(bits); - *dst = MaskRRopPixels(*dst, xor, startmask); - dst++; - RotBitsLeft (bits, PGSZB); - } - nlw = nlwMiddle; - while (nlw--) - { - RRopBitGroup(dst, GetBitGroup(bits)); - dst++; - RotBitsLeft (bits, PGSZB); - } - if (endmask) - { - xor = GetBitGroup(bits); - *dst = MaskRRopPixels(*dst, xor, endmask); - } - } - } - } -} - - -void -cfb8FillRectStippledUnnatural (pDrawable, pGC, nBox, pBox) - DrawablePtr pDrawable; - GCPtr pGC; - int nBox; - register BoxPtr pBox; -{ - CfbBits *pdstBase; /* pointer to start of bitmap */ - CfbBits *pdstLine; /* current destination line */ - int nlwDst; /* width in longwords of bitmap */ - PixmapPtr pStipple; /* pointer to stipple we want to fill with */ - int nlwMiddle; - register int nlw; - int x, y, w, h, xrem, xSrc, ySrc; - int stwidth, stippleWidth; - int stippleHeight; - register CfbBits bits, inputBits; - register int partBitsLeft; - int nextPartBits; - int bitsLeft, bitsWhole; - register CfbBits *pdst; /* pointer to current word in bitmap */ - CfbBits *srcTemp, *srcStart; - CfbBits *psrcBase; - CfbBits startmask, endmask; - - if (pGC->fillStyle == FillStippled) - cfb8CheckStipple (pGC->alu, pGC->fgPixel, pGC->planemask); - else - cfb8CheckOpaqueStipple (pGC->alu, pGC->fgPixel, pGC->bgPixel, pGC->planemask); - - if (cfb8StippleRRop == GXnoop) - return; - - /* - * OK, so what's going on here? We have two Drawables: - * - * The Stipple: - * Depth = 1 - * Width = stippleWidth - * Words per scanline = stwidth - * Pointer to pixels = pStipple->devPrivate.ptr - */ - - pStipple = pGC->stipple; - - stwidth = pStipple->devKind >> PWSH; - stippleWidth = pStipple->drawable.width; - stippleHeight = pStipple->drawable.height; - psrcBase = (CfbBits *) pStipple->devPrivate.ptr; - - /* - * The Target: - * Depth = PSZ - * Width = determined from *pwidth - * Words per scanline = nlwDst - * Pointer to pixels = addrlBase - */ - - xSrc = pDrawable->x; - ySrc = pDrawable->y; - - cfbGetLongWidthAndPointer (pDrawable, nlwDst, pdstBase) - - /* this replaces rotating the stipple. Instead we just adjust the offset - * at which we start grabbing bits from the stipple. - * Ensure that ppt->x - xSrc >= 0 and ppt->y - ySrc >= 0, - * so that iline and xrem always stay within the stipple bounds. - */ - - xSrc += (pGC->patOrg.x % stippleWidth) - stippleWidth; - ySrc += (pGC->patOrg.y % stippleHeight) - stippleHeight; - - bitsWhole = stippleWidth; - - while (nBox--) - { - x = pBox->x1; - y = pBox->y1; - w = pBox->x2 - x; - h = pBox->y2 - y; - pBox++; - pdstLine = pdstBase + y * nlwDst + (x >> PWSH); - y = (y - ySrc) % stippleHeight; - srcStart = psrcBase + y * stwidth; - xrem = ((x & ~PIM) - xSrc) % stippleWidth; - if (((x & PIM) + w) < PPW) - { - maskpartialbits (x, w, startmask); - nlwMiddle = 0; - endmask = 0; - } - else - { - maskbits (x, w, startmask, endmask, nlwMiddle); - } - while (h--) - { - srcTemp = srcStart + (xrem >> MFB_PWSH); - bitsLeft = stippleWidth - (xrem & ~MFB_PIM); - NextUnnaturalStippleWord - NextSomeBits (inputBits, (xrem & MFB_PIM)); - partBitsLeft -= (xrem & MFB_PIM); - NextUnnaturalStippleBits - nlw = nlwMiddle; - pdst = pdstLine; - if (startmask) - { - *pdst = MaskRRopPixels(*pdst,bits,startmask); - pdst++; - NextUnnaturalStippleBits - } - while (nlw--) - { - *pdst = RRopPixels(*pdst,bits); - pdst++; - NextUnnaturalStippleBits - } - if (endmask) - *pdst = MaskRRopPixels(*pdst,bits,endmask); - pdstLine += nlwDst; - y++; - srcStart += stwidth; - if (y == stippleHeight) - { - y = 0; - srcStart = psrcBase; - } - } - } -} - -#endif /* PSZ == 8 */ diff --git a/cfb/cfbrrop.c b/cfb/cfbrrop.c deleted file mode 100644 index ffd813853..000000000 --- a/cfb/cfbrrop.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - -/* cfb reduced rasterop computations */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "cfb.h" -#include "cfbmskbits.h" - -/* A description: - * - * There are four possible operations on each bit in the destination word, - * - * 1 2 3 4 - * - * 0 0 0 1 1 - * 1 0 1 0 1 - * - * On examination of the reduced rop equation (dst = (dst & and) ^ xor), - * these four fall to reduced rops as follows: - * - * and 0 1 1 0 - * xor 0 0 1 1 - * - * or, (if 'and' is expensive) (dst = (dst | or) ^ xor) - * - * or 1 0 0 1 - * xor 1 0 1 0 - * - * The trouble with using this later equation is that trivial - * rasterop reduction is more difficult; some common rasterops - * use complicated expressions of xor/and instead of the simple - * ones while other common rasterops are not made any simpler: - * - * GXcopy: *dst = ~xor instead of *dst = xor - * GXand: *dst = *dst & ~or instead of *dst = *dst & and - * GXor: *dst = *dst | or instead of *dst = *dst | xor - * GXxor: *dst = *dst ^ xor instead of *dst = *dst ^ xor - * - * If you're really set on using this second mechanism, the changes - * are pretty simple. - * - * All that remains is to provide a mechanism for computing and/xor values - * based on the raster op and foreground value. - * - * The 16 rops fall as follows, with the associated reduced - * rop and/xor and or/xor values. The values in parenthesis following the - * reduced values gives an equation using the source value for - * the reduced value, and is one of {0, src, ~src, 1} as appropriate. - * - * clear and andReverse copy - * src 0 1 0 1 0 1 0 1 - * dst 0 0 0 0 0 0 0 0 1 0 0 1 - * 1 0 0 1 0 1 1 0 0 1 0 1 - * - * and 0 0 (0) 0 1 (src) 0 1 (src) 0 0 (0) - * xor 0 0 (0) 0 0 (0) 0 1 (src) 0 1 (src) - * - * or 1 1 (1) 1 0 (~src) 1 0 (~src) 1 1 (1) - * xor 1 1 (1) 1 0 (~src) 1 1 (1) 1 0 (~src) - * - * andInverted noop xor or - * src 0 1 0 1 0 1 0 1 - * dst 0 0 0 0 0 0 0 0 1 0 0 1 - * 1 1 0 1 1 1 1 1 0 1 1 1 - * - * and 1 0 (~src) 1 1 (1) 1 1 (1) 1 0 (~src) - * xor 0 0 (0) 0 0 (0) 0 1 (src) 0 1 (src) - * - * or 0 1 (src) 0 0 (0) 0 0 (0) 0 1 (src) - * xor 0 1 (src) 0 0 (0) 0 1 (src) 0 0 (0) - * - * nor equiv invert orReverse - * src 0 1 0 1 0 1 0 1 - * dst 0 1 0 0 1 0 0 1 1 0 1 1 - * 1 0 0 1 0 1 1 0 0 1 0 1 - * - * and 1 0 (~src) 1 1 (1) 1 1 (1) 1 0 (~src) - * xor 1 0 (~src) 1 0 (~src) 1 1 (1) 1 1 (1) - * - * or 0 1 (src) 0 0 (0) 0 0 (0) 0 1 (src) - * xor 1 1 (1) 1 0 (~src) 1 1 (1) 1 0 (~src) - * - * copyInverted orInverted nand set - * src 0 1 0 1 0 1 0 1 - * dst 0 1 0 0 1 0 0 1 1 0 1 1 - * 1 1 0 1 1 1 1 1 0 1 1 1 - * - * and 0 0 (0) 0 1 (src) 0 1 (src) 0 0 (0) - * xor 1 0 (~src) 1 0 (~src) 1 1 (1) 1 1 (1) - * - * or 1 1 (1) 1 0 (~src) 1 0 (~src) 1 1 (1) - * xor 0 1 (src) 0 0 (0) 0 1 (src) 0 0 (0) - */ - -int -cfbReduceRasterOp (rop, fg, pm, andp, xorp) - int rop; - CfbBits fg, pm; - CfbBits *andp, *xorp; -{ - CfbBits and, xor; - int rrop; - - fg = PFILL (fg); - pm = PFILL (pm); - switch (rop) - { - case GXclear: - and = 0; - xor = 0; - break; - case GXand: - and = fg; - xor = 0; - break; - case GXandReverse: - and = fg; - xor = fg; - break; - case GXcopy: - and = 0; - xor = fg; - break; - case GXandInverted: - and = ~fg; - xor = 0; - break; - case GXnoop: - and = ~0; - xor = 0; - break; - case GXxor: - and = ~0; - xor = fg; - break; - case GXor: - and = ~fg; - xor = fg; - break; - case GXnor: - and = ~fg; - xor = ~fg; - break; - case GXequiv: - and = ~0; - xor = ~fg; - break; - case GXinvert: - and = ~0; - xor = ~0; - break; - case GXorReverse: - and = ~fg; - xor = ~0; - break; - case GXcopyInverted: - and = 0; - xor = ~fg; - break; - case GXorInverted: - and = fg; - xor = ~fg; - break; - case GXnand: - and = fg; - xor = ~0; - break; - case GXset: - and = 0; - xor = ~0; - break; - default: - and = xor = 0; - break; - } - and |= ~pm; - xor &= pm; - *andp = and; - *xorp = xor; - /* check for some special cases to reduce computation */ - if (and == 0) - rrop = GXcopy; - /* nothing checks for GXnoop - else if (and == ~0 && xor == 0) - rrop = GXnoop; - */ - else if (and == ~0) - rrop = GXxor; - else if (xor == 0) - rrop = GXand; - else if ( (and ^ xor) == ~0) /* fix XBUG 6541 */ - rrop = GXor; - else - rrop = GXset; /* rop not reduced */ - return rrop; -} diff --git a/cfb/cfbrrop.h b/cfb/cfbrrop.h deleted file mode 100644 index e9ca881be..000000000 --- a/cfb/cfbrrop.h +++ /dev/null @@ -1,343 +0,0 @@ -/* - * -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#ifndef GXcopy -#include -#endif - -#define RROP_FETCH_GC(gc) \ - RROP_FETCH_GCPRIV((cfbPrivGCPtr)dixLookupPrivate(&(gc)->devPrivates, \ - cfbGCPrivateKey)) - -#ifndef RROP -#define RROP GXset -#endif - -#if RROP == GXcopy -#if PSZ == 24 -#define RROP_DECLARE register CfbBits rrop_xor; \ - CfbBits piQxelXor[3], spiQxelXor[8]; -#define RROP_FETCH_GCPRIV(devPriv) rrop_xor = (devPriv)->xor; \ - spiQxelXor[0] = rrop_xor & 0xFFFFFF; \ - spiQxelXor[2] = rrop_xor << 24; \ - spiQxelXor[3] = (rrop_xor & 0xFFFF00)>> 8; \ - spiQxelXor[4] = rrop_xor << 16; \ - spiQxelXor[5] = (rrop_xor & 0xFF0000)>> 16; \ - spiQxelXor[6] = rrop_xor << 8; \ - spiQxelXor[1] = spiQxelXor[7] = 0; \ - piQxelXor[0] = (rrop_xor & 0xFFFFFF)|(rrop_xor << 24); \ - piQxelXor[1] = (rrop_xor << 16)|((rrop_xor & 0xFFFF00)>> 8); \ - piQxelXor[2] = (rrop_xor << 8)|((rrop_xor & 0xFF0000)>> 16); -#define RROP_SOLID24(dst,index) {\ - register int idx = ((index) & 3)<< 1; \ - *(dst) = (*(dst) & cfbrmask[idx])|spiQxelXor[idx]; \ - if (idx == 2 || idx == 4){ \ - idx++; \ - *((dst)+1) = (*((dst)+1) & cfbrmask[idx])|spiQxelXor[idx]; \ - } \ - } -#define RROP_SOLID(dst, idx) \ - (*(dst) = piQxelXor[(idx)]) -#define RROP_SOLID_MASK(dst,mask,idx) \ - (*(dst) = (*(dst) & ~(mask))|(piQxelXor[(idx)] & (mask))) -#define RROP_UNDECLARE (void)piQxelXor; (void)spiQxelXor; -#else -#define RROP_FETCH_GCPRIV(devPriv) rrop_xor = (devPriv)->xor; -#define RROP_DECLARE register CfbBits rrop_xor; -#define RROP_SOLID(dst) (*(dst) = (rrop_xor)) -#define RROP_SOLID_MASK(dst,mask) (*(dst) = (*(dst) & ~(mask)) | ((rrop_xor) & (mask))) -#define RROP_UNDECLARE -#endif -#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,Copy) -#endif /* GXcopy */ - -#if RROP == GXxor -#if PSZ == 24 -#define RROP_DECLARE register CfbBits rrop_xor; \ - CfbBits piQxelXor[3], spiQxelXor[8]; -#define RROP_FETCH_GCPRIV(devPriv) rrop_xor = (devPriv)->xor; \ - spiQxelXor[0] = rrop_xor & 0xFFFFFF; \ - spiQxelXor[2] = rrop_xor << 24; \ - spiQxelXor[3] = (rrop_xor & 0xFFFF00)>> 8; \ - spiQxelXor[4] = rrop_xor << 16; \ - spiQxelXor[5] = (rrop_xor & 0xFF0000)>> 16; \ - spiQxelXor[6] = rrop_xor << 8; \ - spiQxelXor[1] = spiQxelXor[7] = 0; \ - piQxelXor[0] = (rrop_xor & 0xFFFFFF)|(rrop_xor << 24); \ - piQxelXor[1] = (rrop_xor << 16)|((rrop_xor & 0xFFFF00)>> 8); \ - piQxelXor[2] = (rrop_xor << 8)|((rrop_xor & 0xFF0000)>> 16); -#define RROP_SOLID24(dst,index) {\ - register int idx = ((index) & 3)<< 1; \ - *(dst) ^= spiQxelXor[idx]; \ - if (idx == 2 || idx == 4) \ - *((dst)+1) ^= spiQxelXor[idx+1]; \ - } -#define RROP_SOLID(dst,idx) \ - (*(dst) ^= piQxelXor[(idx)]) -#define RROP_SOLID_MASK(dst,mask,idx) \ - (*(dst) ^= (piQxelXor[(idx)] & (mask))) -#define RROP_UNDECLARE (void)piQxelXor; (void)spiQxelXor; -#else -#define RROP_DECLARE register CfbBits rrop_xor; -#define RROP_FETCH_GCPRIV(devPriv) rrop_xor = (devPriv)->xor; -#define RROP_SOLID(dst) (*(dst) ^= (rrop_xor)) -#define RROP_SOLID_MASK(dst,mask) (*(dst) ^= ((rrop_xor) & (mask))) -#define RROP_UNDECLARE -#endif -#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,Xor) -#endif /* GXxor */ - -#if RROP == GXand -#if PSZ == 24 -#define RROP_DECLARE register CfbBits rrop_and; \ - CfbBits piQxelAnd[3], spiQxelAnd[6]; -#define RROP_FETCH_GCPRIV(devPriv) rrop_and = (devPriv)->and; \ - spiQxelAnd[0] = (rrop_and & 0xFFFFFF) | 0xFF000000; \ - spiQxelAnd[2] = (rrop_and << 24) | 0xFFFFFF; \ - spiQxelAnd[3] = ((rrop_and & 0xFFFF00)>> 8) | 0xFFFF0000; \ - spiQxelAnd[4] = (rrop_and << 16) | 0xFFFF; \ - spiQxelAnd[5] = ((rrop_and & 0xFF0000)>> 16) | 0xFFFFFF00; \ - spiQxelAnd[1] = (rrop_and << 8) | 0xFF; \ - piQxelAnd[0] = (rrop_and & 0xFFFFFF)|(rrop_and << 24); \ - piQxelAnd[1] = (rrop_and << 16)|((rrop_and & 0xFFFF00)>> 8); \ - piQxelAnd[2] = (rrop_and << 8)|((rrop_and & 0xFF0000)>> 16); -#define RROP_SOLID24(dst,index) {\ - switch((index) & 3){ \ - case 0: \ - *(dst) &= spiQxelAnd[0]; \ - break; \ - case 3: \ - *(dst) &= spiQxelAnd[1]; \ - break; \ - case 1: \ - *(dst) &= spiQxelAnd[2]; \ - *((dst)+1) &= spiQxelAnd[3]; \ - break; \ - case 2: \ - *(dst) &= spiQxelAnd[4]; \ - *((dst)+1) &= spiQxelAnd[5]; \ - break; \ - } \ - } -#define RROP_SOLID(dst,idx) \ - (*(dst) &= piQxelAnd[(idx)]) -#define RROP_SOLID_MASK(dst,mask,idx) \ - (*(dst) &= (piQxelAnd[(idx)] | ~(mask))) -#define RROP_UNDECLARE (void)piQxelAnd; (void)spiQxelAnd; -#else -#define RROP_DECLARE register CfbBits rrop_and; -#define RROP_FETCH_GCPRIV(devPriv) rrop_and = (devPriv)->and; -#define RROP_SOLID(dst) (*(dst) &= (rrop_and)) -#define RROP_SOLID_MASK(dst,mask) (*(dst) &= ((rrop_and) | ~(mask))) -#define RROP_UNDECLARE -#endif -#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,And) -#endif /* GXand */ - -#if RROP == GXor -#if PSZ == 24 -#define RROP_DECLARE register CfbBits rrop_or; \ - CfbBits piQxelOr[3], spiQxelOr[6]; -#define RROP_FETCH_GCPRIV(devPriv) rrop_or = (devPriv)->xor; \ - spiQxelOr[0] = rrop_or & 0xFFFFFF; \ - spiQxelOr[1] = rrop_or << 24; \ - spiQxelOr[2] = rrop_or << 16; \ - spiQxelOr[3] = rrop_or << 8; \ - spiQxelOr[4] = (rrop_or & 0xFFFF00)>> 8; \ - spiQxelOr[5] = (rrop_or & 0xFF0000)>> 16; \ - piQxelOr[0] = (rrop_or & 0xFFFFFF)|(rrop_or << 24); \ - piQxelOr[1] = (rrop_or << 16)|((rrop_or & 0xFFFF00)>> 8); \ - piQxelOr[2] = (rrop_or << 8)|((rrop_or & 0xFF0000)>> 16); -#define RROP_SOLID24(dst,index) {\ - switch((index) & 3){ \ - case 0: \ - *(dst) |= spiQxelOr[0]; \ - break; \ - case 3: \ - *(dst) |= spiQxelOr[3]; \ - break; \ - case 1: \ - *(dst) |= spiQxelOr[1]; \ - *((dst)+1) |= spiQxelOr[4]; \ - break; \ - case 2: \ - *(dst) |= spiQxelOr[2]; \ - *((dst)+1) |= spiQxelOr[5]; \ - break; \ - } \ - } -#define RROP_SOLID(dst,idx) \ - (*(dst) |= piQxelOr[(idx)]) -#define RROP_SOLID_MASK(dst,mask,idx) \ - (*(dst) |= (piQxelOr[(idx)] & (mask))) -#define RROP_UNDECLARE (void)piQxelOr; (void)spiQxelOr; -#else -#define RROP_DECLARE register CfbBits rrop_or; -#define RROP_FETCH_GCPRIV(devPriv) rrop_or = (devPriv)->xor; -#define RROP_SOLID(dst) (*(dst) |= (rrop_or)) -#define RROP_SOLID_MASK(dst,mask) (*(dst) |= ((rrop_or) & (mask))) -#define RROP_UNDECLARE -#endif -#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,Or) -#endif /* GXor */ - -#if RROP == GXnoop -#define RROP_DECLARE -#define RROP_FETCH_GCPRIV(devPriv) -#define RROP_SOLID(dst) -#define RROP_SOLID_MASK(dst,mask) -#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,Noop) -#define RROP_UNDECLARE -#endif /* GXnoop */ - -#if RROP == GXset -#if PSZ == 24 -#define RROP_DECLARE register CfbBits rrop_and, rrop_xor; \ - CfbBits piQxelAnd[3], piQxelXor[3], spiQxelAnd[6], spiQxelXor[6]; -#define RROP_FETCH_GCPRIV(devPriv) rrop_and = (devPriv)->and; \ - rrop_xor = (devPriv)->xor; \ - spiQxelXor[0] = rrop_xor & 0xFFFFFF; \ - spiQxelXor[1] = rrop_xor << 24; \ - spiQxelXor[2] = rrop_xor << 16; \ - spiQxelXor[3] = rrop_xor << 8; \ - spiQxelXor[4] = (rrop_xor & 0xFFFF00)>> 8; \ - spiQxelXor[5] = (rrop_xor & 0xFF0000)>> 16; \ - spiQxelAnd[0] = (rrop_and & 0xFFFFFF) | 0xFF000000; \ - spiQxelAnd[1] = (rrop_and << 24) | 0xFFFFFF; \ - spiQxelAnd[2] = (rrop_and << 16) | 0xFFFF; \ - spiQxelAnd[3] = (rrop_and << 8) | 0xFF; \ - spiQxelAnd[4] = ((rrop_and & 0xFFFF00)>> 8) | 0xFFFF0000; \ - spiQxelAnd[5] = ((rrop_and & 0xFF0000)>> 16) | 0xFFFFFF00; \ - piQxelAnd[0] = (rrop_and & 0xFFFFFF)|(rrop_and << 24); \ - piQxelAnd[1] = (rrop_and << 16)|((rrop_and & 0xFFFF00)>> 8); \ - piQxelAnd[2] = (rrop_and << 8)|((rrop_and & 0xFF0000)>> 16); \ - piQxelXor[0] = (rrop_xor & 0xFFFFFF)|(rrop_xor << 24); \ - piQxelXor[1] = (rrop_xor << 16)|((rrop_xor & 0xFFFF00)>> 8); \ - piQxelXor[2] = (rrop_xor << 8)|((rrop_xor & 0xFF0000)>> 16); -#define RROP_SOLID24(dst,index) {\ - switch((index) & 3){ \ - case 0: \ - *(dst) = ((*(dst) & (piQxelAnd[0] |0xFF000000))^(piQxelXor[0] & 0xFFFFFF)); \ - break; \ - case 3: \ - *(dst) = ((*(dst) & (piQxelAnd[2]|0xFF))^(piQxelXor[2] & 0xFFFFFF00)); \ - break; \ - case 1: \ - *(dst) = ((*(dst) & (piQxelAnd[0]|0xFFFFFF))^(piQxelXor[0] & 0xFF000000)); \ - *((dst)+1) = ((*((dst)+1) & (piQxelAnd[1]|0xFFFF0000))^(piQxelXor[1] & 0xFFFF)); \ - break; \ - case 2: \ - *(dst) = ((*(dst) & (piQxelAnd[1]|0xFFFF))^(piQxelXor[1] & 0xFFFF0000)); \ - *((dst)+1) = ((*((dst)+1) & (piQxelAnd[2]|0xFFFFFF00))^(piQxelXor[2] & 0xFF)); \ - break; \ - } \ - } -#define RROP_SOLID(dst,idx) \ - (*(dst) = DoRRop (*(dst), piQxelAnd[(idx)], piQxelXor[(idx)])) -#define RROP_SOLID_MASK(dst,mask,idx) \ - (*(dst) = DoMaskRRop (*(dst), piQxelAnd[(idx)], piQxelXor[(idx)], (mask))) -#define RROP_UNDECLARE (void)piQxelAnd; (void)piQxelXor; \ - (void)spiQxelAnd; (void)spiQxelXor; -#else -#define RROP_DECLARE register CfbBits rrop_and, rrop_xor; -#define RROP_FETCH_GCPRIV(devPriv) rrop_and = (devPriv)->and; \ - rrop_xor = (devPriv)->xor; -#define RROP_SOLID(dst) (*(dst) = DoRRop (*(dst), rrop_and, rrop_xor)) -#define RROP_SOLID_MASK(dst,mask) (*(dst) = DoMaskRRop (*(dst), rrop_and, rrop_xor, (mask))) -#define RROP_UNDECLARE -#endif -#define RROP_NAME(prefix) RROP_NAME_CAT(prefix,General) -#endif /* GXset */ - -#define RROP_UNROLL_CASE1(p,i) case (i): RROP_SOLID((p) - (i)); -#define RROP_UNROLL_CASE2(p,i) RROP_UNROLL_CASE1(p,(i)+1) RROP_UNROLL_CASE1(p,i) -#define RROP_UNROLL_CASE4(p,i) RROP_UNROLL_CASE2(p,(i)+2) RROP_UNROLL_CASE2(p,i) -#define RROP_UNROLL_CASE8(p,i) RROP_UNROLL_CASE4(p,(i)+4) RROP_UNROLL_CASE4(p,i) -#define RROP_UNROLL_CASE16(p,i) RROP_UNROLL_CASE8(p,(i)+8) RROP_UNROLL_CASE8(p,i) -#define RROP_UNROLL_CASE32(p,i) RROP_UNROLL_CASE16(p,(i)+16) RROP_UNROLL_CASE16(p,i) -#define RROP_UNROLL_CASE3(p) RROP_UNROLL_CASE2(p,2) RROP_UNROLL_CASE1(p,1) -#define RROP_UNROLL_CASE7(p) RROP_UNROLL_CASE4(p,4) RROP_UNROLL_CASE3(p) -#define RROP_UNROLL_CASE15(p) RROP_UNROLL_CASE8(p,8) RROP_UNROLL_CASE7(p) -#define RROP_UNROLL_CASE31(p) RROP_UNROLL_CASE16(p,16) RROP_UNROLL_CASE15(p) -#ifdef LONG64 -#define RROP_UNROLL_CASE63(p) RROP_UNROLL_CASE32(p,32) RROP_UNROLL_CASE31(p) -#endif /* LONG64 */ - -#define RROP_UNROLL_LOOP1(p,i) RROP_SOLID((p) + (i)); -#define RROP_UNROLL_LOOP2(p,i) RROP_UNROLL_LOOP1(p,(i)) RROP_UNROLL_LOOP1(p,(i)+1) -#define RROP_UNROLL_LOOP4(p,i) RROP_UNROLL_LOOP2(p,(i)) RROP_UNROLL_LOOP2(p,(i)+2) -#define RROP_UNROLL_LOOP8(p,i) RROP_UNROLL_LOOP4(p,(i)) RROP_UNROLL_LOOP4(p,(i)+4) -#define RROP_UNROLL_LOOP16(p,i) RROP_UNROLL_LOOP8(p,(i)) RROP_UNROLL_LOOP8(p,(i)+8) -#define RROP_UNROLL_LOOP32(p,i) RROP_UNROLL_LOOP16(p,(i)) RROP_UNROLL_LOOP16(p,(i)+16) -#ifdef LONG64 -#define RROP_UNROLL_LOOP64(p,i) RROP_UNROLL_LOOP32(p,(i)) RROP_UNROLL_LOOP32(p,(i)+32) -#endif /* LONG64 */ - -#if defined (FAST_CONSTANT_OFFSET_MODE) && defined (SHARED_IDCACHE) && (RROP == GXcopy) - -#ifdef LONG64 -#define RROP_UNROLL_SHIFT 6 -#define RROP_UNROLL_CASE(p) RROP_UNROLL_CASE63(p) -#define RROP_UNROLL_LOOP(p) RROP_UNROLL_LOOP64(p,-64) -#else /* not LONG64 */ -#define RROP_UNROLL_SHIFT 5 -#define RROP_UNROLL_CASE(p) RROP_UNROLL_CASE31(p) -#define RROP_UNROLL_LOOP(p) RROP_UNROLL_LOOP32(p,-32) -#endif /* LONG64 */ -#define RROP_UNROLL (1<>= RROP_UNROLL_SHIFT; \ - (pdst) += part * (sizeof (CfbBits) / sizeof (*pdst)); \ - switch (part) {\ - RROP_UNROLL_CASE((CfbBits *) (pdst)) \ - } \ - while (--(nmiddle) >= 0) { \ - (pdst) += RROP_UNROLL * (sizeof (CfbBits) / sizeof (*pdst)); \ - RROP_UNROLL_LOOP((CfbBits *) (pdst)) \ - } \ -} -#else -#define RROP_SPAN(pdst,nmiddle) \ - while (--(nmiddle) >= 0) { \ - RROP_SOLID((CfbBits *) (pdst)); \ - (pdst) += sizeof (CfbBits) / sizeof (*pdst); \ - } -#endif - -#if !defined(UNIXCPP) || defined(ANSICPP) -#define RROP_NAME_CAT(prefix,suffix) prefix##suffix -#else -#define RROP_NAME_CAT(prefix,suffix) prefix/**/suffix -#endif diff --git a/cfb/cfbscrinit.c b/cfb/cfbscrinit.c deleted file mode 100644 index 6f9ba2e85..000000000 --- a/cfb/cfbscrinit.c +++ /dev/null @@ -1,223 +0,0 @@ -/************************************************************ -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - -********************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "resource.h" -#include "colormap.h" -#include "colormapst.h" -#include "cfb.h" -#include "mi.h" -#include "mistruct.h" -#include "dix.h" -#include "cfbmskbits.h" -#include "mibstore.h" - -Bool -cfbCloseScreen (index, pScreen) - int index; - ScreenPtr pScreen; -{ - int d; - DepthPtr depths = pScreen->allowedDepths; - - for (d = 0; d < pScreen->numDepths; d++) - xfree (depths[d].vids); - xfree (depths); - xfree (pScreen->visuals); -#ifdef CFB_NEED_SCREEN_PRIVATE - xfree (dixLookupPrivate(&pScreen->devPrivates, cfbScreenPrivateKey)); -#else - xfree (pScreen->devPrivate); -#endif - return TRUE; -} - -static void DestroyColormapNoop( - ColormapPtr pColormap) -{ - /* NOOP */ -} - -static void StoreColorsNoop( - ColormapPtr pColormap, - int ndef, - xColorItem * pdef) -{ - /* NOOP */ -} - -Bool -cfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ -{ - if (!cfbAllocatePrivates(pScreen, NULL)) - return FALSE; - pScreen->defColormap = FakeClientID(0); - /* let CreateDefColormap do whatever it wants for pixels */ - pScreen->blackPixel = pScreen->whitePixel = (Pixel) 0; - pScreen->QueryBestSize = mfbQueryBestSizeWeak(); - /* SaveScreen */ - pScreen->GetImage = cfbGetImage; - pScreen->GetSpans = cfbGetSpans; - pScreen->CreateWindow = cfbCreateWindow; - pScreen->DestroyWindow = cfbDestroyWindow; - pScreen->PositionWindow = cfbPositionWindow; - pScreen->ChangeWindowAttributes = cfbChangeWindowAttributes; - pScreen->RealizeWindow = cfbMapWindow; - pScreen->UnrealizeWindow = cfbUnmapWindow; - pScreen->CopyWindow = cfbCopyWindow; - pScreen->CreatePixmap = cfbCreatePixmap; - pScreen->DestroyPixmap = cfbDestroyPixmap; - pScreen->RealizeFont = mfbRealizeFontWeak(); - pScreen->UnrealizeFont = mfbUnrealizeFontWeak(); - pScreen->CreateGC = cfbCreateGC; - pScreen->CreateColormap = cfbInitializeColormap; - pScreen->DestroyColormap = DestroyColormapNoop; - pScreen->InstallColormap = cfbInstallColormap; - pScreen->UninstallColormap = cfbUninstallColormap; - pScreen->ListInstalledColormaps = cfbListInstalledColormaps; - pScreen->StoreColors = StoreColorsNoop; - pScreen->ResolveColor = cfbResolveColor; - pScreen->BitmapToRegion = mfbPixmapToRegionWeak(); - - mfbRegisterCopyPlaneProc (pScreen, cfbCopyPlane); - return TRUE; -} - -#ifdef CFB_NEED_SCREEN_PRIVATE -Bool -cfbCreateScreenResources(pScreen) - ScreenPtr pScreen; -{ - Bool retval; - - pointer oldDevPrivate = pScreen->devPrivate; - pScreen->devPrivate = dixLookupPrivate(&pScreen->devPrivates, - cfbScreenPrivateKey); - retval = miCreateScreenResources(pScreen); - dixSetPrivate(&pScreen->devPrivates, cfbScreenPrivateKey, - pScreen->devPrivate); - pScreen->devPrivate = oldDevPrivate; - return retval; -} -#endif - -Bool -cfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ -{ -#ifdef CFB_NEED_SCREEN_PRIVATE - pointer oldDevPrivate; -#endif - VisualPtr visuals; - DepthPtr depths; - int nvisuals; - int ndepths; - int rootdepth; - VisualID defaultVisual; - - rootdepth = 0; - if (!cfbInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &rootdepth, - &defaultVisual,((unsigned long)1<<(PSZ-1)), 8)) - return FALSE; -#ifdef CFB_NEED_SCREEN_PRIVATE - oldDevPrivate = pScreen->devPrivate; -#endif - if (! miScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width, - rootdepth, ndepths, depths, - defaultVisual, nvisuals, visuals)) - return FALSE; - /* overwrite miCloseScreen with our own */ - pScreen->CloseScreen = cfbCloseScreen; -#ifdef CFB_NEED_SCREEN_PRIVATE - pScreen->CreateScreenResources = cfbCreateScreenResources; - dixSetPrivate(&pScreen->devPrivates, cfbScreenPrivateKey, - pScreen->devPrivate); - pScreen->devPrivate = oldDevPrivate; -#endif - pScreen->GetScreenPixmap = cfbGetScreenPixmap; - pScreen->SetScreenPixmap = cfbSetScreenPixmap; - return TRUE; -} - -/* dts * (inch/dot) * (25.4 mm / inch) = mm */ -Bool -cfbScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width) - register ScreenPtr pScreen; - pointer pbits; /* pointer to screen bitmap */ - int xsize, ysize; /* in pixels */ - int dpix, dpiy; /* dots per inch */ - int width; /* pixel width of frame buffer */ -{ - if (!cfbSetupScreen(pScreen, pbits, xsize, ysize, dpix, dpiy, width)) - return FALSE; - return cfbFinishScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width); -} - -PixmapPtr -cfbGetScreenPixmap(pScreen) - ScreenPtr pScreen; -{ -#ifdef CFB_NEED_SCREEN_PRIVATE - return (PixmapPtr)dixLookupPrivate(&pScreen->devPrivates, - cfbScreenPrivateKey); -#else - return (PixmapPtr)pScreen->devPrivate; -#endif -} - -void -cfbSetScreenPixmap(pPix) - PixmapPtr pPix; -{ -#ifdef CFB_NEED_SCREEN_PRIVATE - if (pPix) - dixSetPrivate(&pPix->drawable.pScreen->devPrivates, - cfbScreenPrivateKey, pPix); -#else - if (pPix) - pPix->drawable.pScreen->devPrivate = (pointer)pPix; -#endif -} diff --git a/cfb/cfbsetsp.c b/cfb/cfbsetsp.c deleted file mode 100644 index a000fd9e1..000000000 --- a/cfb/cfbsetsp.c +++ /dev/null @@ -1,316 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" - -#include "misc.h" -#include "regionstr.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "pixmapstr.h" -#include "scrnintstr.h" - -#include "cfb.h" -#include "cfbmskbits.h" -#include - -/* cfbSetScanline -- copies the bits from psrc to the drawable starting at - * (xStart, y) and continuing to (xEnd, y). xOrigin tells us where psrc - * starts on the scanline. (I.e., if this scanline passes through multiple - * boxes, we may not want to start grabbing bits at psrc but at some offset - * further on.) - */ -void -cfbSetScanline(y, xOrigin, xStart, xEnd, psrc, alu, pdstBase, widthDst, planemask) - int y; - int xOrigin; /* where this scanline starts */ - int xStart; /* first bit to use from scanline */ - int xEnd; /* last bit to use from scanline + 1 */ - register unsigned int *psrc; - register int alu; /* raster op */ - int *pdstBase; /* start of the drawable */ - int widthDst; /* width of drawable in words */ - unsigned long planemask; -{ - int w; /* width of scanline in bits */ - register int *pdst; /* where to put the bits */ - register int tmpSrc; /* scratch buffer to collect bits in */ - int offSrc; - int nl; -#if PSZ == 24 - register char *psrcb, *pdstb; - register int xIndex; -#else - int dstBit; /* offset in bits from beginning of - * word */ - register int nstart; /* number of bits from first partial */ -#if PSZ != 32 || PPW != 1 - register int nend; /* " " last partial word */ -#endif - int startmask, endmask, nlMiddle; -#endif - DeclareMergeRop() - - InitializeMergeRop(alu,planemask); -#if PSZ == 24 - pdst = pdstBase + (y * widthDst); - xIndex = xStart; - pdstb = (char *)pdst + (xStart * 3); - offSrc = xStart - xOrigin; - psrcb = (char *)psrc + (offSrc * 3); -#else - pdst = pdstBase + (y * widthDst) + (xStart >> PWSH); - psrc += (xStart - xOrigin) >> PWSH; - offSrc = (xStart - xOrigin) & PIM; -#endif - w = xEnd - xStart; - -#if PSZ == 24 - nl = w; - while (nl--){ - psrc = (unsigned int *)((unsigned long)psrcb & ~0x03); - getbits24(psrc, tmpSrc, offSrc); - pdst = (int *)((unsigned long)pdstb & ~0x03); - DoMergeRop24(tmpSrc, pdst, xIndex); - offSrc++; - psrcb += 3; - xIndex++; - pdstb += 3; - } -#else /* PSZ == 24 */ - dstBit = xStart & PIM; - if (dstBit + w <= PPW) - { - maskpartialbits(dstBit, w, startmask); - endmask = 0; - nlMiddle = 0; - } - else - { - maskbits(xStart, w, startmask, endmask, nlMiddle); - } - if (startmask) - nstart = PPW - dstBit; - else - nstart = 0; -#if PSZ != 32 || PPW != 1 - if (endmask) - nend = xEnd & PIM; - else - nend = 0; -#endif - if (startmask) - { - getbits(psrc, offSrc, nstart, tmpSrc); - putbitsmropshort(tmpSrc, dstBit, nstart, pdst); - pdst++; - offSrc += nstart; - if (offSrc > PLST) - { - psrc++; - offSrc -= PPW; - } - } - nl = nlMiddle; - while (nl--) - { - getbits(psrc, offSrc, PPW, tmpSrc); - *pdst = DoMergeRop(tmpSrc, *pdst); - pdst++; - psrc++; - } - if (endmask) - { - getbits(psrc, offSrc, nend, tmpSrc); - putbitsmropshort(tmpSrc, 0, nend, pdst); - } -#endif /* PSZ == 24 */ -} - - - -/* SetSpans -- for each span copy pwidth[i] bits from psrc to pDrawable at - * ppt[i] using the raster op from the GC. If fSorted is TRUE, the scanlines - * are in increasing Y order. - * Source bit lines are server scanline padded so that they always begin - * on a word boundary. - */ -void -cfbSetSpans(pDrawable, pGC, pcharsrc, ppt, pwidth, nspans, fSorted) - DrawablePtr pDrawable; - GCPtr pGC; - char *pcharsrc; - register DDXPointPtr ppt; - int *pwidth; - int nspans; - int fSorted; -{ - unsigned int *psrc = (unsigned int *)pcharsrc; - CfbBits *pdstBase; /* start of dst bitmap */ - int widthDst; /* width of bitmap in words */ - register BoxPtr pbox, pboxLast, pboxTest; - register DDXPointPtr pptLast; - int alu; - RegionPtr prgnDst; - int xStart, xEnd; - int yMax; - - alu = pGC->alu; - prgnDst = cfbGetCompositeClip(pGC); - pptLast = ppt + nspans; - - cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase) - - yMax = (int) pDrawable->y + (int) pDrawable->height; - - pbox = REGION_RECTS(prgnDst); - pboxLast = pbox + REGION_NUM_RECTS(prgnDst); - - if(fSorted) - { - /* scan lines sorted in ascending order. Because they are sorted, we - * don't have to check each scanline against each clip box. We can be - * sure that this scanline only has to be clipped to boxes at or after the - * beginning of this y-band - */ - pboxTest = pbox; - while(ppt < pptLast) - { - pbox = pboxTest; - if(ppt->y >= yMax) - break; - while(pbox < pboxLast) - { - if(pbox->y1 > ppt->y) - { - /* scanline is before clip box */ - break; - } - else if(pbox->y2 <= ppt->y) - { - /* clip box is before scanline */ - pboxTest = ++pbox; - continue; - } - else if(pbox->x1 > ppt->x + *pwidth) - { - /* clip box is to right of scanline */ - break; - } - else if(pbox->x2 <= ppt->x) - { - /* scanline is to right of clip box */ - pbox++; - continue; - } - - /* at least some of the scanline is in the current clip box */ - xStart = max(pbox->x1, ppt->x); - xEnd = min(ppt->x + *pwidth, pbox->x2); - cfbSetScanline(ppt->y, ppt->x, xStart, xEnd, psrc, alu, - (int *)pdstBase, widthDst, pGC->planemask); - if(ppt->x + *pwidth <= pbox->x2) - { - /* End of the line, as it were */ - break; - } - else - pbox++; - } - /* We've tried this line against every box; it must be outside them - * all. move on to the next point */ - ppt++; - psrc += PixmapWidthInPadUnits(*pwidth, pDrawable->depth); - pwidth++; - } - } - else - { - /* scan lines not sorted. We must clip each line against all the boxes */ - while(ppt < pptLast) - { - if(ppt->y >= 0 && ppt->y < yMax) - { - - for(pbox = REGION_RECTS(prgnDst); pbox< pboxLast; pbox++) - { - if(pbox->y1 > ppt->y) - { - /* rest of clip region is above this scanline, - * skip it */ - break; - } - if(pbox->y2 <= ppt->y) - { - /* clip box is below scanline */ - pbox++; - break; - } - if(pbox->x1 <= ppt->x + *pwidth && - pbox->x2 > ppt->x) - { - xStart = max(pbox->x1, ppt->x); - xEnd = min(pbox->x2, ppt->x + *pwidth); - cfbSetScanline(ppt->y, ppt->x, xStart, xEnd, psrc, alu, - (int *)pdstBase, widthDst, pGC->planemask); - } - - } - } - psrc += PixmapWidthInPadUnits(*pwidth, pDrawable->depth); - ppt++; - pwidth++; - } - } -} - diff --git a/cfb/cfbsolid.c b/cfb/cfbsolid.c deleted file mode 100644 index 6b8238dd9..000000000 --- a/cfb/cfbsolid.c +++ /dev/null @@ -1,1365 +0,0 @@ -/* - * -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" -#include "gcstruct.h" -#include "window.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "windowstr.h" - -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfbrrop.h" - -#include "mi.h" -#include "mispans.h" - -#if defined(FAST_CONSTANT_OFFSET_MODE) && (RROP != GXcopy) -# define Expand(left,right,leftAdjust) {\ - int part = nmiddle & 3; \ - int widthStep; \ - widthStep = widthDst - nmiddle - leftAdjust; \ - nmiddle >>= 2; \ - pdst = pdstRect; \ - while (h--) { \ - left \ - pdst += part; \ - switch (part) { \ - RROP_UNROLL_CASE3(pdst) \ - } \ - m = nmiddle; \ - while (m) { \ - pdst += 4; \ - RROP_UNROLL_LOOP4(pdst,-4) \ - m--; \ - } \ - right \ - pdst += widthStep; \ - } \ -} -#else -# ifdef RROP_UNROLL -# define Expand(left,right,leftAdjust) {\ - int part = nmiddle & RROP_UNROLL_MASK; \ - int widthStep; \ - widthStep = widthDst - nmiddle - leftAdjust; \ - nmiddle >>= RROP_UNROLL_SHIFT; \ - pdst = pdstRect; \ - while (h--) { \ - left \ - pdst += part; \ - switch (part) { \ - RROP_UNROLL_CASE(pdst) \ - } \ - m = nmiddle; \ - while (m) { \ - pdst += RROP_UNROLL; \ - RROP_UNROLL_LOOP(pdst) \ - m--; \ - } \ - right \ - pdst += widthStep; \ - } \ -} - -# else -# define Expand(left, right, leftAdjust) { \ - while (h--) { \ - pdst = pdstRect; \ - left \ - m = nmiddle; \ - while (m--) {\ - RROP_SOLID(pdst); \ - pdst++; \ - } \ - right \ - pdstRect += widthDst; \ - } \ -} -# endif -#endif - - -void -RROP_NAME(cfbFillRectSolid) (pDrawable, pGC, nBox, pBox) - DrawablePtr pDrawable; - GCPtr pGC; - int nBox; - BoxPtr pBox; -{ - register int m; - register CfbBits *pdst; - RROP_DECLARE - CfbBits *pdstBase, *pdstRect; - int nmiddle; - int h; - int w; - int widthDst; -#if PSZ == 24 - int leftIndex, rightIndex; -#else - register CfbBits leftMask, rightMask; -#endif - - cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase) - - RROP_FETCH_GC(pGC) - - for (; nBox; nBox--, pBox++) - { - pdstRect = pdstBase + pBox->y1 * widthDst; - h = pBox->y2 - pBox->y1; - w = pBox->x2 - pBox->x1; -#if PSZ == 8 - if (w == 1) - { - register char *pdstb = ((char *) pdstRect) + pBox->x1; - int incr = widthDst * PGSZB; - - while (h--) - { - RROP_SOLID (pdstb); - pdstb += incr; - } - } - else - { -#endif -#if PSZ == 24 - leftIndex = pBox->x1 &3; -/* rightIndex = ((leftIndex+w)<5)?0:pBox->x2 &3;*/ - rightIndex = pBox->x2 &3; - - nmiddle = w - rightIndex; - if(leftIndex){ - nmiddle -= (4 - leftIndex); - } - nmiddle >>= 2; - if(nmiddle < 0) - nmiddle = 0; - - pdstRect += (pBox->x1 * 3) >> 2; - pdst = pdstRect; - switch(leftIndex+w){ - case 4: - switch(leftIndex){ - case 0: - while(h--){ -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst++ = piQxelXor[1]; - *pdst-- = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= piQxelXor[1]; - *pdst-- ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= piQxelAnd[1]; - *pdst-- &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= piQxelOr[1]; - *pdst-- |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst--; -#endif - pdst--; - pdst += widthDst; - } - break; - case 1: - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - pdst++; - *pdst++ = piQxelXor[1]; - *pdst-- = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFF000000); - *pdst++ ^= piQxelXor[1]; - *pdst-- ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF); - *pdst++ &= piQxelAnd[1]; - *pdst-- &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFF000000); - *pdst++ |= piQxelOr[1]; - *pdst-- |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst--; -#endif - pdst--; - pdst += widthDst; - } - break; - case 2: - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - pdst++; - *pdst-- = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[1] & 0xFFFF0000); - *pdst-- ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[1] | 0xFFFF); - *pdst-- &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[1] & 0xFFFF0000); - *pdst-- |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst--; -#endif - pdst += widthDst; - } - break; - case 3: - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00); -#endif -#if RROP == GXxor - *pdst ^= (piQxelXor[2] & 0xFFFFFF00); -#endif -#if RROP == GXand - *pdst &= (piQxelAnd[2] | 0xFF); -#endif -#if RROP == GXor - *pdst |= (piQxelOr[2] & 0xFFFFFF00); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00); -#endif - pdst += widthDst; - } - break; - } - break; - case 3: - switch(leftIndex){ - case 0: - while(h--){ -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst++ = piQxelXor[1]; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= piQxelXor[1]; - *pdst-- ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= piQxelAnd[1]; - *pdst-- &= (piQxeAnd[2] | 0xFFFFFF00); -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= piQxelOr[1]; - *pdst-- |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst--; -#endif - pdst--; - pdst += widthDst; - } - break; - case 1: - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - pdst++; - *pdst++ = piQxelXor[1]; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFF000000); - *pdst++ ^= piQxelXor[1]; - *pdst-- ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF); - *pdst++ &= piQxelAnd[1]; - *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFF000000); - *pdst++ |= piQxelOr[1]; - *pdst-- |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst--; -#endif - pdst--; - pdst += widthDst; - } - break; - case 2: - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - pdst++; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[1] & 0xFFFF0000); - *pdst-- ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[1] | 0xFFFF); - *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[1] & 0xFFFF0000); - *pdst-- |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst--; -#endif - pdst += widthDst; - } - break; - case 3: - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00); -#endif -#if RROP == GXxor - *pdst ^= (piQxelXor[2] & 0xFFFFFF00); -#endif -#if RROP == GXand - *pdst &= (piQxelAnd[2] | 0xFF); -#endif -#if RROP == GXor - *pdst |= (piQxelOr[2] & 0xFFFFFF00); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00); -#endif - pdst += widthDst; - } - break; - } - break; - case 2: /* leftIndex + w = 2*/ - switch(leftIndex){ - case 2: - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - pdst++; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[1] & 0xFFFF0000); - *pdst-- ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[1] | 0xFFFF0000); - *pdst-- &= (piQxelAnd[2] | 0xFF); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[1] & 0xFFFF0000); - *pdst-- |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst--; -#endif - pdst += widthDst; - } - break; - case 1: - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - pdst++; - *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFF000000); - *pdst-- ^= (piQxelXor[1] & 0xFFFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0xFFFFFF); - *pdst-- &= (piQxelAnd[1] | 0xFFFF0000); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFF000000); - *pdst-- |= (piQxelOr[1] & 0xFFFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); - pdst--; -#endif - pdst += widthDst; - } - break; - case 0: /*case 2 leftIndex == 0 */ - while(h--){ -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst-- ^= (piQxelXor[1] & 0xFFFF); -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst-- &= (piQxelAnd[1] | 0xFFFF0000); -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst-- |= (piQxelOr[1] & 0xFFFF); -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); - pdst--; -#endif - pdst += widthDst; - } - break; - } - break; - case 1: /*only if leftIndex = 0 and w = 1*/ - while(h--){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF); -#endif -#if RROP == GXxor - *pdst ^= (piQxelXor[0] & 0xFFFFFF); -#endif -#if RROP == GXand - *pdst &= (piQxelAnd[0] | 0xFF000000); -#endif -#if RROP == GXor - *pdst |= (piQxelOr[0] & 0xFFFFFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF); -#endif - pdst += widthDst; - } - break; - case 0: /*never*/ - break; - default: - { - while(h--){ - pdst = pdstRect; - switch(leftIndex){ - case 0: - break; - case 1: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - pdst++; - *pdst++ = piQxelXor[1]; - *pdst++ = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFF000000); - *pdst++ ^= piQxelXor[1]; - *pdst++ ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0xFFFFFF); - *pdst++ &= piQxelAnd[1]; - *pdst++ &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFF000000); - *pdst++ |= piQxelOr[1]; - *pdst++ |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst++; -#endif - break; - case 2: -#if RROP == GXcopy - *pdst = (((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000)); - pdst++; - *pdst++ = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^=(piQxelXor[1] & 0xFFFF0000); - *pdst++ ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[1] | 0xFFFF); - *pdst++ &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[1] & 0xFFFF0000); - *pdst++ |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst++; -#endif - break; - case 3: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00); - pdst++; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[2] & 0xFFFFFF00); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[2] | 0xFF); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[2] & 0xFFFFFF00); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00); - pdst++; -#endif - break; - } - m = nmiddle; - while(m--){ -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst++ = piQxelXor[1]; - *pdst++ = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= piQxelXor[1]; - *pdst++ ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= piQxelAnd[1]; - *pdst++ &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= piQxelOr[1]; - *pdst++ |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst++; -#endif - } - switch(rightIndex){ - case 0: - break; - case 1: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF); - pdst++; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFFFFFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0xFF); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFFFFFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF); - pdst++; -#endif - break; - case 2: -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - pdst++; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= (piQxelXor[1] & 0xFFFF); -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= (piQxelAnd[1] | 0xFFFF0000); -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= (piQxelOr[1] & 0xFFFF); -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); - pdst++; -#endif - break; - case 3: -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst++ = piQxelXor[1]; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst++; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= piQxelXor[1]; - *pdst++ ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= piQxelAnd[1]; - *pdst++ &= (piQxelAnd[2] | 0xFFFFFF00); -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= piQxelOr[1]; - *pdst++ |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst++; -#endif - break; - } - pdstRect += widthDst; - } - } - } -#else /* PSZ != 24 */ - pdstRect += (pBox->x1 >> PWSH); - if ((pBox->x1 & PIM) + w <= PPW) - { - maskpartialbits(pBox->x1, w, leftMask); - pdst = pdstRect; - while (h--) { - RROP_SOLID_MASK (pdst, leftMask); - pdst += widthDst; - } - } - else - { - maskbits (pBox->x1, w, leftMask, rightMask, nmiddle); - if (leftMask) - { - if (rightMask) /* left mask and right mask */ - { - Expand(RROP_SOLID_MASK (pdst, leftMask); pdst++;, - RROP_SOLID_MASK (pdst, rightMask);, 1) - } - else /* left mask and no right mask */ - { - Expand(RROP_SOLID_MASK (pdst, leftMask); pdst++;, - ;, 1) - } - } - else - { - if (rightMask) /* no left mask and right mask */ - { - Expand(;, - RROP_SOLID_MASK (pdst, rightMask);, 0) - } - else /* no left mask and no right mask */ - { - Expand(;, - ;, 0) - } - } - } -#endif -#if PSZ == 8 - } -#endif - } - RROP_UNDECLARE -} - -void -RROP_NAME(cfbSolidSpans) (pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted) - DrawablePtr pDrawable; - GCPtr pGC; - int nInit; /* number of spans to fill */ - DDXPointPtr pptInit; /* pointer to list of start points */ - int *pwidthInit; /* pointer to list of n widths */ - int fSorted; -{ - CfbBits *pdstBase; - int widthDst; - - RROP_DECLARE - - register CfbBits *pdst; - register int nlmiddle; - register int w; - int x; - - /* next three parameters are post-clip */ - int n; /* number of spans to fill */ - DDXPointPtr ppt; /* pointer to list of start points */ - int *pwidthFree;/* copies of the pointers to free */ - DDXPointPtr pptFree; - int *pwidth; - cfbPrivGCPtr devPriv; -#if PSZ == 24 - int leftIndex, rightIndex; -#else - register CfbBits startmask, endmask; -#endif - - devPriv = cfbGetGCPrivate(pGC); - RROP_FETCH_GCPRIV(devPriv) - n = nInit * miFindMaxBand(pGC->pCompositeClip); - pwidthFree = (int *)xalloc(n * sizeof(int)); - pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec)); - if(!pptFree || !pwidthFree) - { - if (pptFree) xfree(pptFree); - if (pwidthFree) xfree(pwidthFree); - return; - } - pwidth = pwidthFree; - ppt = pptFree; - n = miClipSpans(pGC->pCompositeClip, pptInit, pwidthInit, nInit, - ppt, pwidth, fSorted); - - cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase) - - while (n--) - { - x = ppt->x; - pdst = pdstBase + (ppt->y * widthDst); - ++ppt; - w = *pwidth++; - if (!w) - continue; -#if PSZ == 24 - leftIndex = x &3; -/* rightIndex = ((leftIndex+w)<5)?0:(x+w)&3;*/ - rightIndex = (x+w)&3; - - nlmiddle = w - rightIndex; - if(leftIndex){ - nlmiddle -= (4 - leftIndex); - } -/* nlmiddle += 3;*/ - nlmiddle >>= 2; - if(nlmiddle < 0) - nlmiddle = 0; - - pdst += (x >> 2)*3; - pdst += leftIndex? (leftIndex -1):0; - switch(leftIndex+w){ - case 4: - switch(leftIndex){ - case 0: -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst++ = piQxelXor[1]; - *pdst-- = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= piQxelXor[1]; - *pdst-- ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= piQxelAnd[1]; - *pdst-- &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= piQxelOr[1]; - *pdst-- |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst--; -#endif - pdst--; - break; - case 1: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - pdst++; - *pdst++ = piQxelXor[1]; - *pdst-- = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFF000000); - *pdst++ ^= piQxelXor[1]; - *pdst-- ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF); - *pdst++ &= piQxelAnd[1]; - *pdst-- &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFF000000); - *pdst++ |= piQxelOr[1]; - *pdst-- |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst--; -#endif - pdst--; - break; - case 2: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - pdst++; - *pdst-- = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[1] & 0xFFFF0000); - *pdst-- ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[1] | 0xFFFF); - *pdst-- &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[1] & 0xFFFF0000); - *pdst-- |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst--; -#endif - break; - case 3: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00); -#endif -#if RROP == GXxor - *pdst ^= (piQxelXor[2] & 0xFFFFFF00); -#endif -#if RROP == GXand - *pdst &= (piQxelAnd[2] | 0xFF); -#endif -#if RROP == GXor - *pdst |= (piQxelOr[2] & 0xFFFFFF00); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00); -#endif - break; - } - break; - case 3: - switch(leftIndex){ - case 0: -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst++ = piQxelXor[1]; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= piQxelXor[1]; - *pdst-- ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= piQxelAnd[1]; - *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00); -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= piQxelOr[1]; - - *pdst-- |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst--; -#endif - pdst--; - break; - case 1: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - pdst++; - *pdst++ = piQxelXor[1]; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFF000000); - *pdst++ ^= piQxelXor[1]; - *pdst-- ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0x00FFFFFF); - *pdst++ &= piQxelAnd[1]; - *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFF000000); - *pdst++ |= piQxelOr[1]; - *pdst-- |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst--; -#endif - pdst--; - break; - case 2: -/* pdst++;*/ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000); - pdst++; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[1] & 0xFFFF0000); - *pdst-- ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[1] | 0xFFFF); - *pdst-- &= (piQxelAnd[2] | 0xFFFFFF00); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[1] & 0xFFFF0000); - *pdst-- |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst--; -#endif - break; - } - break; - case 2: /* leftIndex + w = 2*/ - if(leftIndex){ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - pdst++; - *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFF000000); - *pdst-- ^= (piQxelXor[1] & 0xFFFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0xFFFFFF); - *pdst-- &= (piQxelAnd[1] | 0xFFFF0000); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFF000000); - *pdst-- |= (piQxelOr[1] & 0xFFFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); - pdst--; -#endif - } - else{ /*case 2 leftIndex === 0 */ -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - pdst--; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst-- ^= (piQxelXor[1] & 0xFFFF); -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst-- &= (piQxelAnd[1] | 0xFFFF0000); -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst-- |= (piQxelOr[1] & 0xFFFF); -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); - pdst--; -#endif - } - break; - case 1: /*only if leftIndex = 0 and w = 1*/ -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF); -#endif -#if RROP == GXxor - *pdst ^= (piQxelXor[0] & 0xFFFFFF); -#endif -#if RROP == GXand - *pdst &= (piQxelAnd[0] | 0xFF000000); -#endif -#if RROP == GXor - *pdst |= (piQxelOr[0] & 0xFFFFFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF); -#endif - break; - case 0: /*never*/ - break; - default: - { - switch(leftIndex){ - case 0: - break; - case 1: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFFFFFF) | (piQxelXor[0] & 0xFF000000); - pdst++; - *pdst++ = piQxelXor[1]; - *pdst++ = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFF000000); - *pdst++ ^= piQxelXor[1]; - *pdst++ ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0xFFFFFF); - *pdst++ &= piQxelAnd[1]; - *pdst++ &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFF000000); - *pdst++ |= piQxelOr[1]; - *pdst++ |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFF000000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst++; -#endif - break; - case 2: -#if RROP == GXcopy - *pdst = (((*pdst) & 0xFFFF) | (piQxelXor[1] & 0xFFFF0000)); - pdst++; - *pdst++ = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^=(piQxelXor[1] & 0xFFFF0000); - *pdst++ ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[1] | 0xFFFF); - *pdst++ &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[1] & 0xFFFF0000); - *pdst++ |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF0000); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst++; -#endif - break; - case 3: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF) | (piQxelXor[2] & 0xFFFFFF00); - pdst++; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[2] & 0xFFFFFF00); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[2] | 0xFF); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[2] & 0xFFFFFF00); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFFFFFF00); - pdst++; -#endif - break; - } - while(nlmiddle--){ -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst++ = piQxelXor[1]; - *pdst++ = piQxelXor[2]; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= piQxelXor[1]; - *pdst++ ^= piQxelXor[2]; -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= piQxelAnd[1]; - *pdst++ &= piQxelAnd[2]; -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= piQxelOr[1]; - *pdst++ |= piQxelOr[2]; -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[2], piQxelXor[2]); - pdst++; -#endif - } - switch(rightIndex){ - case 0: - break; - case 1: -#if RROP == GXcopy - *pdst = ((*pdst) & 0xFF000000) | (piQxelXor[0] & 0xFFFFFF); - pdst++; -#endif -#if RROP == GXxor - *pdst++ ^= (piQxelXor[0] & 0xFFFFFF); -#endif -#if RROP == GXand - *pdst++ &= (piQxelAnd[0] | 0xFF); -#endif -#if RROP == GXor - *pdst++ |= (piQxelOr[0] & 0xFFFFFF); -#endif -#if RROP == GXset - *pdst = DoMaskRRop((*pdst), piQxelAnd[0], piQxelXor[0], 0xFFFFFF); -#endif - break; - case 2: -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst = ((*pdst) & 0xFFFF0000) | (piQxelXor[1] & 0xFFFF); - pdst++; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= (piQxelXor[1] & 0xFFFF); -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= (piQxelAnd[1] | 0xFFFF0000); -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= (piQxelOr[1] & 0xFFFF); -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[1], piQxelXor[1], 0xFFFF); - pdst++; -#endif - break; - case 3: -#if RROP == GXcopy - *pdst++ = piQxelXor[0]; - *pdst++ = piQxelXor[1]; - *pdst = ((*pdst) & 0xFFFFFF00) | (piQxelXor[2] & 0xFF); - pdst++; -#endif -#if RROP == GXxor - *pdst++ ^= piQxelXor[0]; - *pdst++ ^= piQxelXor[1]; - *pdst++ ^= (piQxelXor[2] & 0xFF); -#endif -#if RROP == GXand - *pdst++ &= piQxelAnd[0]; - *pdst++ &= piQxelAnd[1]; - *pdst++ &= (piQxelAnd[2] | 0xFFFFFF00); -#endif -#if RROP == GXor - *pdst++ |= piQxelOr[0]; - *pdst++ |= piQxelOr[1]; - *pdst++ |= (piQxelOr[2] & 0xFF); -#endif -#if RROP == GXset - *pdst = DoRRop((*pdst), piQxelAnd[0], piQxelXor[0]); - pdst++; - *pdst = DoRRop((*pdst), piQxelAnd[1], piQxelXor[1]); - pdst++; - *pdst = DoMaskRRop((*pdst), piQxelAnd[2], piQxelXor[2], 0xFF); - pdst++; -#endif - break; - } - } -} -#else -#if PSZ == 8 - if (w <= PGSZB) - { - register char *addrb; - - addrb = ((char *) pdst) + x; - while (w--) - { - RROP_SOLID (addrb); - addrb++; - } - } -#else - if ((x & PIM) + w <= PPW) - { - pdst += x >> PWSH; - maskpartialbits (x, w, startmask); - RROP_SOLID_MASK (pdst, startmask); - } -#endif - else - { - pdst += x >> PWSH; - maskbits (x, w, startmask, endmask, nlmiddle); - if (startmask) - { - RROP_SOLID_MASK (pdst, startmask); - ++pdst; - } - - RROP_SPAN(pdst,nlmiddle) - if (endmask) - { - RROP_SOLID_MASK (pdst, endmask); - } - } -#endif - } - xfree(pptFree); - xfree(pwidthFree); - RROP_UNDECLARE -} diff --git a/cfb/cfbteblt8.c b/cfb/cfbteblt8.c deleted file mode 100644 index 9d4ce5708..000000000 --- a/cfb/cfbteblt8.c +++ /dev/null @@ -1,589 +0,0 @@ -/* - * TEGblt - ImageText expanded glyph fonts only. For - * 8 bit displays, in Copy mode with no clipping. - */ - -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#if PSZ == 8 - -#include -#include -#include -#include "cfb.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" - -/* - * this code supports up to 5 characters at a time. The performance - * differences between 4 and 5 is usually small (~7% on PMAX) and - * frequently negative (SPARC and Sun3), so this file is compiled - * only once for now. If you want to use the other options, you'll - * need to hack cfbgc.c as well. - */ - -#ifndef NGLYPHS -#define NGLYPHS 4 -#define DO_COMMON -#endif - -#ifdef DO_COMMON -#define CFBTEGBLT8 cfbTEGlyphBlt8 -#endif - -/* - * On little-endian machines (or where fonts are padded to 32-bit - * boundaries) we can use some magic to avoid the expense of getleftbits - */ - -#if ((BITMAP_BIT_ORDER == LSBFirst && NGLYPHS >= 4) || GLYPHPADBYTES == 4) - -#if GLYPHPADBYTES == 1 -typedef unsigned char *glyphPointer; -#define USE_LEFTBITS -#endif - -#if GLYPHPADBYTES == 2 -typedef unsigned short *glyphPointer; -#define USE_LEFTBITS -#endif - -#if GLYPHPADBYTES == 4 -typedef unsigned int *glyphPointer; -#endif - -#define GetBitsL c = BitLeft (*leftChar++, lshift) -#define NGetBits1S(r) c = BitRight(*char1++ r, xoff1) -#define NGetBits1L(r) GetBitsL | BitRight(*char1++ r, xoff1) -#define NGetBits1U(r) c = *char1++ r -#define NGetBits2S(r) NGetBits1S(| BitRight(*char2++ r, widthGlyph)) -#define NGetBits2L(r) NGetBits1L(| BitRight(*char2++ r, widthGlyph)) -#define NGetBits2U(r) NGetBits1U(| BitRight(*char2++ r, widthGlyph)) -#define NGetBits3S(r) NGetBits2S(| BitRight(*char3++ r, widthGlyph)) -#define NGetBits3L(r) NGetBits2L(| BitRight(*char3++ r, widthGlyph)) -#define NGetBits3U(r) NGetBits2U(| BitRight(*char3++ r, widthGlyph)) -#define NGetBits4S(r) NGetBits3S(| BitRight(*char4++ r, widthGlyph)) -#define NGetBits4L(r) NGetBits3L(| BitRight(*char4++ r, widthGlyph)) -#define NGetBits4U(r) NGetBits3U(| BitRight(*char4++ r, widthGlyph)) -#define NGetBits5S(r) NGetBits4S(| BitRight(*char5++ r, widthGlyph)) -#define NGetBits5L(r) NGetBits4L(| BitRight(*char5++ r, widthGlyph)) -#define NGetBits5U(r) NGetBits4U(| BitRight(*char5++ r, widthGlyph)) -#define GetBits1S c = BitRight(*char1++, xoff1) -#define GetBits1L GetBitsL | BitRight(*char1++, xoff1) -#define GetBits1U c = *char1++ -#define GetBits2S NGetBits1S(| BitRight(*char2++, widthGlyph)) -#define GetBits2L NGetBits1L(| BitRight(*char2++, widthGlyph)) -#define GetBits2U NGetBits1U(| BitRight(*char2++, widthGlyph)) -#define GetBits3S NGetBits2S(| BitRight(*char3++, widthGlyph)) -#define GetBits3L NGetBits2L(| BitRight(*char3++, widthGlyph)) -#define GetBits3U NGetBits2U(| BitRight(*char3++, widthGlyph)) -#define GetBits4S NGetBits3S(| BitRight(*char4++, widthGlyph)) -#define GetBits4L NGetBits3L(| BitRight(*char4++, widthGlyph)) -#define GetBits4U NGetBits3U(| BitRight(*char4++, widthGlyph)) -#define GetBits5S NGetBits4S(| BitRight(*char5++, widthGlyph)) -#define GetBits5L NGetBits4L(| BitRight(*char5++, widthGlyph)) -#define GetBits5U NGetBits4U(| BitRight(*char5++, widthGlyph)) - -#else - -typedef unsigned int *glyphPointer; - -#define USE_LEFTBITS -#define ALL_LEFTBITS - -#define GetBitsL WGetBitsL -#define GetBits1S WGetBits1S -#define GetBits1L WGetBits1L -#define GetBits1U WGetBits1U - -#define GetBits2S GetBits1S Get1Bits (char2, tmpSrc) \ - c |= BitRight(tmpSrc, xoff2); -#define GetBits2L GetBits1L Get1Bits (char2, tmpSrc) \ - c |= BitRight(tmpSrc, xoff2); -#define GetBits2U GetBits1U Get1Bits (char2, tmpSrc) \ - c |= BitRight(tmpSrc, xoff2); - -#define GetBits3S GetBits2S Get1Bits (char3, tmpSrc) \ - c |= BitRight(tmpSrc, xoff3); -#define GetBits3L GetBits2L Get1Bits (char3, tmpSrc) \ - c |= BitRight(tmpSrc, xoff3); -#define GetBits3U GetBits2U Get1Bits (char3, tmpSrc) \ - c |= BitRight(tmpSrc, xoff3); - -#define GetBits4S GetBits3S Get1Bits (char4, tmpSrc) \ - c |= BitRight(tmpSrc, xoff4); -#define GetBits4L GetBits3L Get1Bits (char4, tmpSrc) \ - c |= BitRight(tmpSrc, xoff4); -#define GetBits4U GetBits3U Get1Bits (char4, tmpSrc) \ - c |= BitRight(tmpSrc, xoff4); - -#define GetBits5S GetBits4S Get1Bits (char5, tmpSrc) \ - c |= BitRight(tmpSrc, xoff5); -#define GetBits5L GetBits4L Get1Bits (char5, tmpSrc) \ - c |= BitRight(tmpSrc, xoff5); -#define GetBits5U GetBits4U Get1Bits (char5, tmpSrc) \ - c |= BitRight(tmpSrc, xoff5); - -#endif - -#ifdef USE_LEFTBITS - -#define IncChar(c) (c = (glyphPointer) (((char *) c) + glyphBytes)) - -#define Get1Bits(ch,dst) glyphbits (ch, widthGlyph, glyphMask, dst); \ - IncChar (ch); - -#define glyphbits(bits,width,mask,dst) getleftbits(bits,width,dst); \ - dst &= mask; - -#define WGetBitsL Get1Bits(leftChar,c); \ - c = BitLeft (c, lshift); -#define WGetBits1S Get1Bits (char1, c) \ - c = BitRight (c, xoff1); -#define WGetBits1L WGetBitsL Get1Bits (char1, tmpSrc) \ - c |= BitRight (tmpSrc, xoff1); -#define WGetBits1U Get1Bits (char1, c) - -#else -#define WGetBitsL GetBitsL -#define WGetBits1S GetBits1S -#define WGetBits1L GetBits1L -#define WGetBits1U GetBits1U -#endif - -#if NGLYPHS == 2 -# define GetBitsNS GetBits2S -# define GetBitsNL GetBits2L -# define GetBitsNU GetBits2U -# define LastChar char2 -#ifndef CFBTEGBLT8 -# define CFBTEGBLT8 cfbTEGlyphBlt8x2 -#endif -#endif -#if NGLYPHS == 3 -# define GetBitsNS GetBits3S -# define GetBitsNL GetBits3L -# define GetBitsNU GetBits3U -# define LastChar char3 -#ifndef CFBTEGBLT8 -# define CFBTEGBLT8 cfbTEGlyphBlt8x3 -#endif -#endif -#if NGLYPHS == 4 -# define GetBitsNS GetBits4S -# define GetBitsNL GetBits4L -# define GetBitsNU GetBits4U -# define LastChar char4 -#ifndef CFBTEGBLT8 -# define CFBTEGBLT8 cfbTEGlyphBlt8x4 -#endif -#endif -#if NGLYPHS == 5 -# define GetBitsNS GetBits5S -# define GetBitsNL GetBits5L -# define GetBitsNU GetBits5U -# define LastChar char5 -#ifndef CFBTEGBLT8 -# define CFBTEGBLT8 cfbTEGlyphBlt8x5 -#endif -#endif - -/* another ugly giant macro */ -#define SwitchEm switch (ew) \ - { \ - case 0: \ - break; \ - case 1: \ - while (hTmp--) { \ - GetBits; \ - StoreBits0 \ - Loop \ - } \ - break; \ - case 2: \ - while (hTmp--) { \ - GetBits; \ - StoreBits0 FirstStep StoreBits(1) \ - Loop \ - } \ - break; \ - case 3: \ - while (hTmp--) { \ - GetBits; \ - StoreBits0 FirstStep StoreBits(1) Step StoreBits(2) \ - Loop \ - } \ - break; \ - case 4: \ - while (hTmp--) { \ - GetBits; \ - StoreBits0 FirstStep StoreBits(1) Step \ - StoreBits(2) Step StoreBits(3) \ - Loop \ - } \ - break; \ - case 5: \ - while (hTmp--) { \ - GetBits; \ - StoreBits0 FirstStep StoreBits(1) Step \ - StoreBits(2) Step StoreBits(3) Step \ - StoreBits(4) \ - Loop \ - } \ - break; \ - case 6: \ - while (hTmp--) { \ - GetBits; \ - StoreBits0 FirstStep StoreBits(1) Step \ - StoreBits(2) Step StoreBits(3) Step \ - StoreBits(4) Step StoreBits(5) \ - Loop \ - } \ - break; \ - case 7: \ - while (hTmp--) { \ - GetBits; \ - StoreBits0 FirstStep StoreBits(1) Step \ - StoreBits(2) Step StoreBits(3) Step \ - StoreBits(4) Step StoreBits(5) Step \ - StoreBits(6) \ - Loop \ - } \ - break; \ - case 8: \ - while (hTmp--) { \ - GetBits; \ - StoreBits0 FirstStep StoreBits(1) Step \ - StoreBits(2) Step StoreBits(3) Step \ - StoreBits(4) Step StoreBits(5) Step \ - StoreBits(6) Step StoreBits(7) \ - Loop \ - } \ - break; \ - } - -#ifdef FAST_CONSTANT_OFFSET_MODE -#define StorePixels(o,p) dst[o] = p -#define Loop dst += widthDst; -#else -#define StorePixels(o,p) do { *dst = (p); dst++; } while (0) -#define Loop dst += widthLeft; -#endif - -#define Step NextBitGroup(c); - -#if (BITMAP_BIT_ORDER == MSBFirst) -#define StoreBits(o) StorePixels(o,GetPixelGroup(c)); -#define FirstStep Step -#else -#if PGSZ == 64 -#define StoreBits(o) StorePixels(o,cfb8Pixels[(c) & PGSZBMSK]); -#define FirstStep Step -#else /* PGSZ == 32 */ -#define StoreBits(o) StorePixels(o,*((CfbBits *) (((char *) cfb8Pixels) + (c & 0x3c)))); -#define FirstStep c = BitLeft (c, 2); -#endif /* PGSZ */ -#endif /* BITMAP_BIT_ORDER */ - - -void -CFBTEGBLT8 (pDrawable, pGC, xInit, yInit, nglyph, ppci, pglyphBase) - DrawablePtr pDrawable; - GC *pGC; - int xInit, yInit; - unsigned int nglyph; - CharInfoPtr *ppci; /* array of character info */ - pointer pglyphBase; /* start of array of glyphs */ -{ - register CfbBits c; - register CfbBits *dst; - register CfbBits leftMask, rightMask; - register int hTmp; - register int xoff1; - register glyphPointer char1; - register glyphPointer char2; -#if NGLYPHS >= 3 - register glyphPointer char3; -#endif -#if NGLYPHS >= 4 - register glyphPointer char4; -#endif -#if NGLYPHS >= 5 - register glyphPointer char5; -#endif -#ifdef ALL_LEFTBITS - int xoff2, xoff3, xoff4, xoff5; -#endif - - FontPtr pfont = pGC->font; - CfbBits *dstLine; - glyphPointer oldRightChar; - CfbBits *pdstBase; - glyphPointer leftChar; - int widthDst; -#ifndef FAST_CONSTANT_OFFSET_MODE - int widthLeft; -#endif - int widthGlyph; - int h; - int ew; - int x, y; - BoxRec bbox; /* for clipping */ - int lshift; - int widthGlyphs; -#ifdef USE_LEFTBITS - register CfbBits glyphMask; - register CfbBits tmpSrc; - register int glyphBytes; -#endif - - widthGlyph = FONTMAXBOUNDS(pfont,characterWidth); - h = FONTASCENT(pfont) + FONTDESCENT(pfont); - if (!h) - return; - x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing) + pDrawable->x; - y = yInit - FONTASCENT(pfont) + pDrawable->y; - bbox.x1 = x; - bbox.x2 = x + (widthGlyph * nglyph); - bbox.y1 = y; - bbox.y2 = y + h; - - switch (RECT_IN_REGION(pGC->pScreen, cfbGetCompositeClip(pGC), &bbox)) - { - case rgnPART: - cfbImageGlyphBlt8(pDrawable, pGC, xInit, yInit, nglyph, ppci, pglyphBase); - case rgnOUT: - return; - } - - if (!cfb8CheckPixels (pGC->fgPixel, pGC->bgPixel)) - cfb8SetPixels (pGC->fgPixel, pGC->bgPixel); - - leftChar = 0; - - cfbGetLongWidthAndPointer(pDrawable, widthDst, pdstBase) - -#if NGLYPHS == 2 - widthGlyphs = widthGlyph << 1; -#else -#if NGLYPHS == 4 - widthGlyphs = widthGlyph << 2; -#else - widthGlyphs = widthGlyph * NGLYPHS; -#endif -#endif - -#ifdef USE_LEFTBITS - glyphMask = mfbGetendtab(widthGlyph); - glyphBytes = GLYPHWIDTHBYTESPADDED(*ppci); -#endif - - pdstBase += y * widthDst; -#ifdef DO_COMMON - if (widthGlyphs <= 32) -#endif - while (nglyph >= NGLYPHS) - { - nglyph -= NGLYPHS; - hTmp = h; - dstLine = pdstBase + (x >> PWSH); - xoff1 = x & PIM; - char1 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++); - char2 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++); -#ifdef ALL_LEFTBITS - xoff2 = xoff1 + widthGlyph; -#endif -#if NGLYPHS >= 3 - char3 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++); -#ifdef ALL_LEFTBITS - xoff3 = xoff2 + widthGlyph; -#endif -#endif -#if NGLYPHS >= 4 - char4 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++); -#ifdef ALL_LEFTBITS - xoff4 = xoff3 + widthGlyph; -#endif -#endif -#if NGLYPHS >= 5 - char5 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++); -#ifdef ALL_LEFTBITS - xoff5 = xoff4 + widthGlyph; -#endif -#endif - oldRightChar = LastChar; - dst = dstLine; - if (xoff1) - { - ew = ((widthGlyphs - (PGSZB - xoff1)) >> PWSH) + 1; -#ifndef FAST_CONSTANT_OFFSET_MODE - widthLeft = widthDst - ew; -#endif - if (!leftChar) - { - leftMask = cfbendtab[xoff1]; - rightMask = cfbstarttab[xoff1]; - -#define StoreBits0 StorePixels (0, (dst[0] & leftMask) | \ - (GetPixelGroup(c) & rightMask)); -#define GetBits GetBitsNS - - SwitchEm - -#undef GetBits -#undef StoreBits0 - - } - else - { - lshift = widthGlyph - xoff1; - -#define StoreBits0 StorePixels (0,GetPixelGroup(c)); -#define GetBits GetBitsNL - - SwitchEm - -#undef GetBits -#undef StoreBits0 - - } - } - else - { -#if NGLYPHS == 4 && PGSZ == 32 - ew = widthGlyph; /* widthGlyphs >> 2 */ -#else - ew = widthGlyphs >> PWSH; -#endif -#ifndef FAST_CONSTANT_OFFSET_MODE - widthLeft = widthDst - ew; -#endif - -#define StoreBits0 StorePixels (0,GetPixelGroup(c)); -#define GetBits GetBitsNU - - SwitchEm - -#undef GetBits -#undef StoreBits0 - - } - x += widthGlyphs; - leftChar = oldRightChar; - } - while (nglyph--) - { - xoff1 = x & PIM; - char1 = (glyphPointer) FONTGLYPHBITS(pglyphBase, *ppci++); - hTmp = h; - dstLine = pdstBase + (x >> PWSH); - oldRightChar = char1; - dst = dstLine; - if (xoff1) - { - ew = ((widthGlyph - (PGSZB - xoff1)) >> PWSH) + 1; -#ifndef FAST_CONSTANT_OFFSET_MODE - widthLeft = widthDst - ew; -#endif - if (!leftChar) - { - leftMask = cfbendtab[xoff1]; - rightMask = cfbstarttab[xoff1]; - -#define StoreBits0 StorePixels (0, (dst[0] & leftMask) | \ - (GetPixelGroup(c) & rightMask)); -#define GetBits WGetBits1S - - SwitchEm -#undef GetBits -#undef StoreBits0 - - } - else - { - lshift = widthGlyph - xoff1; - -#define StoreBits0 StorePixels (0,GetPixelGroup(c)); -#define GetBits WGetBits1L - - SwitchEm -#undef GetBits -#undef StoreBits0 - - } - } - else - { - ew = widthGlyph >> PWSH; - -#ifndef FAST_CONSTANT_OFFSET_MODE - widthLeft = widthDst - ew; -#endif - -#define StoreBits0 StorePixels (0,GetPixelGroup(c)); -#define GetBits WGetBits1U - - SwitchEm - -#undef GetBits -#undef StoreBits0 - - } - x += widthGlyph; - leftChar = oldRightChar; - } - /* - * draw the tail of the last character - */ - xoff1 = x & PIM; - if (xoff1) - { - rightMask = cfbstarttab[xoff1]; - leftMask = cfbendtab[xoff1]; - lshift = widthGlyph - xoff1; - dst = pdstBase + (x >> PWSH); - hTmp = h; - while (hTmp--) - { - GetBitsL; - *dst = (*dst & rightMask) | (GetPixelGroup(c) & leftMask); - dst += widthDst; - } - } -} -#endif /* PSZ == 8 */ diff --git a/cfb/cfbtegblt.c b/cfb/cfbtegblt.c deleted file mode 100644 index f04ee3faf..000000000 --- a/cfb/cfbtegblt.c +++ /dev/null @@ -1,218 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include -#include "cfb.h" -#include -#include "dixfontstr.h" -#include "gcstruct.h" -#include "windowstr.h" -#include "scrnintstr.h" -#include "pixmapstr.h" -#include "regionstr.h" -#include "cfbmskbits.h" -#include "mi.h" -#define MFB_CONSTS_ONLY -#include "maskbits.h" - -/* - this works for fonts with glyphs <= 32 bits wide, on an - arbitrarily deep display. Use cfbTEGlyphBlt8 for 8 bit displays. - - This should be called only with a terminal-emulator font; -this means that the FIXED_METRICS flag is set, and that -glyphbounds == charbounds. - - in theory, this goes faster; even if it doesn't, it reduces the -flicker caused by writing a string over itself with image text (since -the background gets repainted per character instead of per string.) -this seems to be important for some converted X10 applications. - - Image text looks at the bits in the glyph and the fg and bg in the -GC. it paints a rectangle, as defined in the protocol dcoument, -and the paints the characters. - -*/ - -void -cfbTEGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase) - DrawablePtr pDrawable; - GC *pGC; - int x, y; - unsigned int nglyph; - CharInfoPtr *ppci; /* array of character info */ - pointer pglyphBase; /* start of array of glyphs */ -{ - FontPtr pfont = pGC->font; - int widthDst; - CfbBits *pdstBase; /* pointer to longword with top row - of current glyph */ - - int w; /* width of glyph and char */ - int h; /* height of glyph and char */ - register int xpos=x; /* current x%32 */ - int ypos=y; /* current y%32 */ - register unsigned char *pglyph; - int widthGlyph; - - register CfbBits *pdst;/* pointer to current longword in dst */ - int hTmp; /* counter for height */ - BoxRec bbox; /* for clipping */ - - register int wtmp,xtemp,width; - CfbBits bgfill,fgfill,*ptemp,tmpDst1,tmpDst2,*pdtmp; -#if PSZ != 24 - int tmpx; -#endif - - xpos += pDrawable->x; - ypos += pDrawable->y; - - cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase) - - wtmp = FONTMAXBOUNDS(pfont,characterWidth); - h = FONTASCENT(pfont) + FONTDESCENT(pfont); - widthGlyph = GLYPHWIDTHBYTESPADDED(*ppci); - - xpos += FONTMAXBOUNDS(pfont,leftSideBearing); - ypos -= FONTASCENT(pfont); - - bbox.x1 = xpos; - bbox.x2 = xpos + (wtmp * nglyph); - bbox.y1 = ypos; - bbox.y2 = ypos + h; - - fgfill = PFILL(pGC->fgPixel); - bgfill = PFILL(pGC->bgPixel); - - switch (RECT_IN_REGION(pGC->pScreen, cfbGetCompositeClip(pGC), &bbox)) - { - case rgnOUT: - break; - case rgnPART: - /* this is the WRONG thing to do, but it works. - calling the non-terminal text is easy, but slow, given - what we know about the font. - - the right thing to do is something like: - for each clip rectangle - compute at which row the glyph starts to be in it, - and at which row the glyph ceases to be in it - compute which is the first glyph inside the left - edge, and the last one inside the right edge - draw a fractional first glyph, using only - the rows we know are in - draw all the whole glyphs, using the appropriate rows - draw any pieces of the last glyph, using the right rows - - this way, the code would take advantage of knowing that - all glyphs are the same height and don't overlap. - - one day... - */ - cfbImageGlyphBlt8(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); - break; - case rgnIN: - - pdtmp = pdstBase + (widthDst * ypos); - while(nglyph--) - { - - pglyph = FONTGLYPHBITS(pglyphBase, *ppci++); - pdst = pdtmp; - hTmp = h; - - while (hTmp--) - { - x = xpos; - width = wtmp; - xtemp = 0; - - while (width > 0) - { -#if PSZ == 24 - w = 1; - ptemp = (CfbBits *)(pglyph + ((xtemp *3)>> 2)); - getstipplepixels24(ptemp,xtemp,0,&bgfill,&tmpDst1, xtemp); - getstipplepixels24(ptemp,xtemp,1,&fgfill,&tmpDst2, xtemp); -#else - tmpx = x & PIM; - w = min(width, PPW - tmpx); - w = min(w, (PGSZ - xtemp)); - ptemp = (CfbBits *)(pglyph + (xtemp >> MFB_PWSH)); - getstipplepixels(ptemp,xtemp,w,0,&bgfill,&tmpDst1); - getstipplepixels(ptemp,xtemp,w,1,&fgfill,&tmpDst2); -#endif - - { - CfbBits tmpDst = tmpDst1 | tmpDst2; -#if PSZ == 24 - CfbBits *pdsttmp = pdst + ((x*3) >> 2); - putbits24(tmpDst,w,pdsttmp,pGC->planemask,x); -#else - CfbBits *pdsttmp = pdst + (x >> PWSH); - putbits(tmpDst,tmpx,w,pdsttmp,pGC->planemask); -#endif - } - x += w; - xtemp += w; - width -= w; - } - pglyph += widthGlyph; - pdst += widthDst; - } - xpos += wtmp; - } - break; - } -} diff --git a/cfb/cfbtile32.c b/cfb/cfbtile32.c deleted file mode 100644 index be016a70a..000000000 --- a/cfb/cfbtile32.c +++ /dev/null @@ -1,517 +0,0 @@ -/* - * Fill 32 bit tiled rectangles. Used by PolyFillRect. - * no depth dependencies. - */ - -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" -#include "gcstruct.h" -#include "window.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "windowstr.h" - -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" - -#include "mergerop.h" - -#include "mi.h" -#include "mispans.h" - -#ifdef sparc -#define SHARED_IDCACHE -#endif - -#if PSZ == 24 -#define STORE(p) (*(p) = MROP_PREBUILT_SOLID(srcpix,*(p))) -/*#define STORE24(p,index) {\ - register int idx = ((index) & 3)<< 1; \ - *(p) = (((MROP_PREBUILT_SOLID(srcpix,*(p))<>cfb24Shift[idx])&cfbmask[idx])| \ - (*(p)&cfbrmask[idx])); \ - (p)--; \ - }*/ -#define STORE24(p,index) MROP_PREBUILT_SOLID24(srcpix, (p), index) - -#define STORE_MASK(p,mask) (*(p) = MROP_PREBUILT_MASK(srcpix,*(p),(mask))) -#define QSTORE(p) ((*(p) = MROP_PREBUILT_SOLID(((srcpix<<24)|srcpix),*(p))), \ - (p)++,(*(p) = MROP_PREBUILT_SOLID(((srcpix<<16)|(srcpix>>8)),*(p))), \ - (p)++,(*(p) = MROP_PREBUILT_SOLID(((srcpix<<8)|(srcpix>>16)),*(p)))) - -#if (MROP == Mcopy) && defined(FAST_CONSTANT_OFFSET_MODE) && defined(SHARED_IDCACHE) -# define Expand(left,right) {\ - int part = nlwMiddle & ((PGSZB*2)-1); \ - nlwMiddle *= 3; \ - nlwMiddle >>= PWSH + 3; \ - while (h--) { \ - srcpix = psrc[srcy]; \ - MROP_PREBUILD(srcpix); \ - ++srcy; \ - if (srcy == tileHeight) \ - srcy = 0; \ - left \ - p += part; \ - switch (part) { \ - case 7: \ - STORE24(p - 7, xtmp - 7); \ - case 6: \ - STORE24(p - 6, xtmp - 6); \ - case 5: \ - STORE24(p - 5, xtmp - 5); \ - case 4: \ - STORE24(p - 4, xtmp - 4); \ - case 3: \ - STORE24(p - 3, xtmp - 3); \ - case 2: \ - STORE24(p - 2, xtmp - 2); \ - case 1: \ - STORE24(p - 1, xtmp - 1); \ - } \ - nlw = nlwMiddle; \ - while (nlw) { \ - STORE24 (p + 0, xtmp + 0); \ - STORE24 (p + 1, xtmp + 1); \ - STORE24 (p + 2, xtmp + 2); \ - STORE24 (p + 3, xtmp + 3); \ - STORE24 (p + 4, xtmp + 4); \ - STORE24 (p + 5, xtmp + 5); \ - STORE24 (p + 6, xtmp + 6); \ - STORE24 (p + 7, xtmp + 7); \ - p += 8; \ - xtmp += 8; \ - nlw--; \ - } \ - right \ - p += nlwExtra; \ - } \ -} -#else -#define Expand(left,right) {\ - while (h--) { \ - srcpix = psrc[srcy]; \ - MROP_PREBUILD(srcpix); \ - ++srcy; \ - if (srcy == tileHeight) \ - srcy = 0; \ - left \ - while (nlw--) \ - { \ - STORE24(p,xtmp); \ - if(xtmp&3) p++; \ - xtmp++; \ - } \ - right \ - p += nlwExtra; \ - } \ -} -#endif -#else /*PSZ != 24*/ -#define STORE(p) (*(p) = MROP_PREBUILT_SOLID(srcpix,*(p))) - -#if (MROP == Mcopy) && defined(FAST_CONSTANT_OFFSET_MODE) && defined(SHARED_IDCACHE) -# define Expand(left,right) {\ - int part = nlwMiddle & ((PGSZB*2)-1); \ - nlwMiddle >>= PWSH + 1; \ - while (h--) { \ - srcpix = psrc[srcy]; \ - MROP_PREBUILD(srcpix); \ - ++srcy; \ - if (srcy == tileHeight) \ - srcy = 0; \ - left \ - p += part; \ - switch (part) { \ - case 7: \ - STORE(p - 7); \ - case 6: \ - STORE(p - 6); \ - case 5: \ - STORE(p - 5); \ - case 4: \ - STORE(p - 4); \ - case 3: \ - STORE(p - 3); \ - case 2: \ - STORE(p - 2); \ - case 1: \ - STORE(p - 1); \ - } \ - nlw = nlwMiddle; \ - while (nlw) { \ - STORE (p + 0); \ - STORE (p + 1); \ - STORE (p + 2); \ - STORE (p + 3); \ - STORE (p + 4); \ - STORE (p + 5); \ - STORE (p + 6); \ - STORE (p + 7); \ - p += 8; \ - nlw--; \ - } \ - right \ - p += nlwExtra; \ - } \ -} -#else -#define Expand(left,right) {\ - while (h--) { \ - srcpix = psrc[srcy]; \ - MROP_PREBUILD(srcpix); \ - ++srcy; \ - if (srcy == tileHeight) \ - srcy = 0; \ - left \ - nlw = nlwMiddle; \ - while (nlw--) \ - { \ - STORE(p); \ - p++; \ - } \ - right \ - p += nlwExtra; \ - } \ -} -#endif -#endif /*PSZ == 24*/ - -void -MROP_NAME(cfbFillRectTile32) (pDrawable, pGC, nBox, pBox) - DrawablePtr pDrawable; - GCPtr pGC; - int nBox; /* number of boxes to fill */ - BoxPtr pBox; /* pointer to list of boxes to fill */ -{ - register CfbBits srcpix; - CfbBits *psrc; /* pointer to bits in tile, if needed */ - int tileHeight; /* height of the tile */ - - int nlwDst; /* width in longwords of the dest pixmap */ - int w; /* width of current box */ - register int h; /* height of current box */ - register CfbBits startmask; - register CfbBits endmask; /* masks for reggedy bits at either end of line */ - int nlwMiddle; /* number of longwords between sides of boxes */ - int nlwExtra; /* to get from right of box to left of next span */ - register int nlw = 0; /* loop version of nlwMiddle */ - register CfbBits *p; /* pointer to bits we're writing */ - int y; /* current scan line */ - int srcy; /* current tile position */ - - CfbBits *pbits;/* pointer to start of pixmap */ - PixmapPtr tile; /* rotated, expanded tile */ -#if MROP == 0 && PSZ == 24 - DeclareMergeRop() -#else - MROP_DECLARE_REG() -#endif - MROP_PREBUILT_DECLARE() -#if PSZ == 24 - CfbBits xtmp; -#endif - - tile = pGC->pRotatedPixmap; - tileHeight = tile->drawable.height; - psrc = (CfbBits *)tile->devPrivate.ptr; - -#if MROP == 0 && PSZ == 24 - InitializeMergeRop(pGC->alu, pGC->planemask); -#else - MROP_INITIALIZE(pGC->alu, pGC->planemask); -#endif - - cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits) - - while (nBox--) - { - w = pBox->x2 - pBox->x1; - h = pBox->y2 - pBox->y1; - y = pBox->y1; -#if PSZ == 24 - xtmp = pBox->x1; - p = pbits + (y * nlwDst) + ((pBox->x1*3) >> 2); -/* p = pbits + (y * nlwDst) + ((pBox->x1>> 2)*3);*/ -#else - p = pbits + (y * nlwDst) + (pBox->x1 >> PWSH); -#endif - srcy = y % tileHeight; - -#if PSZ == 24 - if (w == 1 && ((pBox->x1 & 3) == 0 || (pBox->x1 & 3) == 3)) -#else - if ( ((pBox->x1 & PIM) + w) <= PPW) -#endif - { - maskpartialbits(pBox->x1, w, startmask); - nlwExtra = nlwDst; - while (h--) - { - srcpix = psrc[srcy]; - MROP_PREBUILD(srcpix); - ++srcy; - if (srcy == tileHeight) - srcy = 0; - *p = MROP_PREBUILT_MASK (srcpix, *p, startmask); - p += nlwExtra; - } - } - else - { - maskbits(pBox->x1, w, startmask, endmask, nlwMiddle); - nlwExtra = nlwDst - nlwMiddle; - - if (startmask) - { - nlwExtra -= 1; - if (endmask) - { - Expand(*p = MROP_PREBUILT_MASK(srcpix, *p, startmask); p++;, - *p = MROP_PREBUILT_MASK(srcpix, *p, endmask);) - } - else - { - Expand(*p = MROP_PREBUILT_MASK(srcpix, *p, startmask); p++;, - ;) - } - } - else - { - if (endmask) - { - Expand(;, - *p = MROP_PREBUILT_MASK(srcpix, *p, endmask);) - } - else - { - Expand(;, - ;) - } - } - } - pBox++; - } -} - -void -MROP_NAME(cfbTile32FS)(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted) - DrawablePtr pDrawable; - GCPtr pGC; - int nInit; /* number of spans to fill */ - DDXPointPtr pptInit; /* pointer to list of start points */ - int *pwidthInit; /* pointer to list of n widths */ - int fSorted; -{ - /* next three parameters are post-clip */ - int n; /* number of spans to fill */ - DDXPointPtr ppt; /* pointer to list of start points */ - int *pwidth;/* pointer to list of n widths */ - CfbBits *pbits; /* pointer to start of bitmap */ - int nlwDst; /* width in longwords of bitmap */ - register CfbBits *p; /* pointer to current longword in bitmap */ - register int w; /* current span width */ - register int nlw; - register int x; - register CfbBits startmask; - register CfbBits endmask; - register CfbBits srcpix; - int y; - int *pwidthFree;/* copies of the pointers to free */ - DDXPointPtr pptFree; - PixmapPtr tile; - CfbBits *psrc; /* pointer to bits in tile */ - int tileHeight;/* height of the tile */ -#if MROP == 0 && PSZ == 24 - DeclareMergeRop() -#else - MROP_DECLARE_REG() -#endif - MROP_PREBUILT_DECLARE() -#if PSZ == 24 - CfbBits xtmp; -#endif - - n = nInit * miFindMaxBand( cfbGetCompositeClip(pGC) ); - pwidthFree = (int *)xalloc(n * sizeof(int)); - pptFree = (DDXPointRec *)xalloc(n * sizeof(DDXPointRec)); - if(!pptFree || !pwidthFree) - { - if (pptFree) xfree(pptFree); - if (pwidthFree) xfree(pwidthFree); - return; - } - pwidth = pwidthFree; - ppt = pptFree; - n = miClipSpans( cfbGetCompositeClip(pGC), - pptInit, pwidthInit, nInit, - ppt, pwidth, fSorted); - - tile = pGC->pRotatedPixmap; - tileHeight = tile->drawable.height; - psrc = (CfbBits *)tile->devPrivate.ptr; - -#if MROP == 0 && PSZ == 24 - InitializeMergeRop(pGC->alu, pGC->planemask); -#else - MROP_INITIALIZE(pGC->alu, pGC->planemask); -#endif - - cfbGetLongWidthAndPointer (pDrawable, nlwDst, pbits) - -#if MROP == Mcopy - if (!(tileHeight & (tileHeight-1))) - { - tileHeight--; - while (n--) - { - x = ppt->x; - y = ppt->y; - ++ppt; - w = *pwidth++; -#if PSZ == 24 -/* p = pbits + (y * nlwDst) + ((x*3) >> 2);*/ - xtmp = x; - p = pbits + (y * nlwDst) + ((x >> 2)*3); -#else - p = pbits + (y * nlwDst) + (x >> PWSH); -#endif - srcpix = psrc[y & tileHeight]; - MROP_PREBUILD(srcpix); - -#if PSZ == 24 - if ((x & 3) + w < 5) -#else - if ((x & PIM) + w < PPW) -#endif - { - maskpartialbits(x, w, startmask); - *p = MROP_PREBUILT_MASK (srcpix, *p, startmask); - } - else - { - maskbits(x, w, startmask, endmask, nlw); - if (startmask) - { - *p = MROP_PREBUILT_MASK(srcpix, *p, startmask); -#if PSZ == 24 - if(xtmp&3) p++; - xtmp++; -#else - p++; -#endif - } - while (nlw--) - { -#if PSZ == 24 - STORE24(p,xtmp); - if(xtmp&3) p++; - ++xtmp; -#else - STORE(p); - ++p; -#endif - } - if (endmask) - { - *p = MROP_PREBUILT_MASK(srcpix, *p, endmask); - } - } - } - } - else -#endif - { - while (n--) - { - x = ppt->x; - y = ppt->y; - ++ppt; - w = *pwidth++; -#if PSZ == 24 -/* p = pbits + (y * nlwDst) + ((x *3)>> 2);*/ - p = pbits + (y * nlwDst) + ((x >> 2)*3); - xtmp = x; -#else - p = pbits + (y * nlwDst) + (x >> PWSH); -#endif - srcpix = psrc[y % tileHeight]; - MROP_PREBUILD(srcpix); - -#if PSZ == 24 - if ((x & 3) + w < 5) -#else - if ((x & PIM) + w < PPW) -#endif - { - maskpartialbits(x, w, startmask); - *p = MROP_PREBUILT_MASK (srcpix, *p, startmask); - } - else - { - maskbits(x, w, startmask, endmask, nlw); - if (startmask) - { - *p = MROP_PREBUILT_MASK(srcpix, *p, startmask); -#if PSZ == 24 - if(xtmp&3)p++; - xtmp++; -#else - p++; -#endif - } - while (nlw--) - { -#if PSZ == 24 - STORE24(p,xtmp); - if(xtmp&3)p++; - xtmp++; -#else - STORE(p); - ++p; -#endif - } - if (endmask) - { - *p = MROP_PREBUILT_MASK(srcpix, *p, endmask); - } - } - } - } - xfree(pptFree); - xfree(pwidthFree); -} diff --git a/cfb/cfbtileodd.c b/cfb/cfbtileodd.c deleted file mode 100644 index 86a3fa5b5..000000000 --- a/cfb/cfbtileodd.c +++ /dev/null @@ -1,1245 +0,0 @@ -/* - * Fill odd tiled rectangles and spans. - * no depth dependencies. - */ - -/* - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. -*/ - - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include -#include -#include "servermd.h" -#include "gcstruct.h" -#include "window.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "windowstr.h" - -#include "cfb.h" -#include "cfbmskbits.h" -#include "cfb8bit.h" - -#include "mergerop.h" - -#if PSZ == 24 -#define LEFTSHIFT_AMT (3) -#else /* PSZ != 24 */ -#define LEFTSHIFT_AMT (5 - PWSH) -#endif /* PSZ == 24*/ - -#define LastTileBits {\ - tmp = bits; \ - if (tileEndPart) \ - bits = (*pSrc & tileEndMask) | BitRight (*pSrcLine, tileEndLeftShift); \ - else \ - bits = *pSrc; \ -} - -#if PSZ == 24 -#define ResetTileBits {\ - pSrc = pSrcLine; \ - nlwSrc = widthSrc;\ - if (tileEndPart) { \ - if (4 - xoff + tileEndPart <= 4) {\ - bits = *pSrc++; \ - nlwSrc--; \ - } else \ - bits = BitLeft(tmp, tileEndLeftShift) | \ - BitRight(bits, tileEndRightShift); \ - xoff = (xoff + xoffStep) & 3; \ - leftShift = xoff << LEFTSHIFT_AMT; \ - rightShift = PGSZ - leftShift; \ - }\ -} -#else -#define ResetTileBits {\ - pSrc = pSrcLine; \ - nlwSrc = widthSrc;\ - if (tileEndPart) { \ - if (PPW - xoff + tileEndPart <= PPW) {\ - bits = *pSrc++; \ - nlwSrc--; \ - } else \ - bits = BitLeft(tmp, tileEndLeftShift) | \ - BitRight(bits, tileEndRightShift); \ - xoff = (xoff + xoffStep) & PIM; \ - leftShift = xoff << LEFTSHIFT_AMT; \ - rightShift = PGSZ - leftShift; \ - }\ -} -#endif - -#define NextTileBits {\ - if (nlwSrc == 1) {\ - LastTileBits\ - } else { \ - if (nlwSrc == 0) {\ - ResetTileBits\ - } \ - if (nlwSrc == 1) {\ - LastTileBits\ - } else {\ - tmp = bits; \ - bits = *pSrc++; \ - }\ - }\ - nlwSrc--; \ -} - -void -MROP_NAME(cfbFillBoxTileOdd) (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 */ - CfbBits startmask; - CfbBits 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; - -#if MROP == 0 && PSZ == 24 - DeclareMergeRop24() -#else - MROP_DECLARE_REG() -#endif - - CfbBits *pdstBase; /* pointer to start of dest */ - CfbBits *pDstLine; /* poitner to start of dest box */ - CfbBits *pSrcBase; /* pointer to start of source */ - CfbBits *pSrcLine; /* pointer to start of source line */ - register CfbBits *pDst; - register CfbBits *pSrc; - register CfbBits bits, tmp = 0; - int xoffStart, xoff; - int leftShiftStart, rightShiftStart, nlwSrcStart; - CfbBits tileEndMask; - int tileEndLeftShift, tileEndRightShift; - int xoffStep; - int tileEndPart; - int needFirst; - CfbBits narrow[2]; - CfbBits narrowMask = 0; - int narrowShift = 0; - Bool narrowTile; - -#if MROP == 0 && PSZ == 24 - InitializeMergeRop24 (alu, planemask) -#else - MROP_INITIALIZE (alu, planemask) -#endif - - tileHeight = tile->drawable.height; - tileWidth = tile->drawable.width; - widthSrc = tile->devKind / PGSZB; - narrowTile = FALSE; - if (widthSrc == 1) - { - narrowShift = tileWidth; - narrowMask = cfbendpartial [tileWidth]; - tileWidth *= 2; - widthSrc = 2; - narrowTile = TRUE; - } - pSrcBase = (CfbBits *)tile->devPrivate.ptr; - - cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase) - -#if PSZ == 24 - tileEndPart = (4 - tileWidth) & 3; - tileEndMask = cfbendpartial[tileWidth & 3]; -#else - tileEndPart = tileWidth & PIM; - tileEndMask = cfbendpartial[tileEndPart]; -#endif /* PSZ == 24 */ - tileEndLeftShift = (tileEndPart) << LEFTSHIFT_AMT; - tileEndRightShift = PGSZ - tileEndLeftShift; -#if PSZ == 24 - xoffStep = 4 - tileEndPart; -#else - xoffStep = PPW - tileEndPart; -#endif /* PSZ == 24 */ - /* - * 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); -#if PSZ == 24 - xoffDst = (4 - pBox->x1) & 3; - if (w == 1 && (xoffDst == 0 || xoffDst == 1)) -#else - xoffDst = pBox->x1 & PIM; - if (xoffDst + w < PPW) -#endif - { - maskpartialbits(pBox->x1, w, startmask); - endmask = 0; - nlwMiddle = 0; - } - else - { - maskbits (pBox->x1, w, startmask, endmask, nlwMiddle) - } -#if PSZ == 24 - pDstLine = pdstBase + (pBox->y1 * widthDst) + ((pBox->x1*3) >> 2); -#else - pDstLine = pdstBase + (pBox->y1 * widthDst) + (pBox->x1 >> PWSH); -#endif - pSrcLine = pSrcBase + (srcy * widthSrc); -#if PSZ == 24 - xoffSrc = (4 - srcx) & 3; -#else - xoffSrc = srcx & PIM; -#endif - if (xoffSrc >= xoffDst) - { - xoffStart = xoffSrc - xoffDst; - needFirst = 1; - } - else - { -#if PSZ == 24 - xoffStart = 4 - (xoffDst - xoffSrc); -#else - xoffStart = PPW - (xoffDst - xoffSrc); -#endif - needFirst = 0; - } - leftShiftStart = (xoffStart) << LEFTSHIFT_AMT; - rightShiftStart = PGSZ - leftShiftStart; -#if PSZ == 24 - nlwSrcStart = widthSrc - ((srcx*3) >> 2); -#else - nlwSrcStart = widthSrc - (srcx >> PWSH); -#endif - while (h--) - { - /* XXX only works when narrowShift >= PPW/2 */ - if (narrowTile) - { - tmp = pSrcBase[srcy] & narrowMask; /* source width == 1 */ - narrow[0] = tmp | SCRRIGHT (tmp, narrowShift); -#if PSZ == 24 - narrow[1] = BitLeft (tmp, 8) | - BitRight(tmp, 16); -#else - narrow[1] = SCRLEFT (tmp, PPW - narrowShift) | - SCRRIGHT(tmp, 2 * narrowShift - PPW); -#endif - pSrcLine = narrow; - } - xoff = xoffStart; - leftShift = leftShiftStart; - rightShift = rightShiftStart; - nlwSrc = nlwSrcStart; -#if PSZ == 24 - pSrc = pSrcLine + ((srcx * 3) >> 2); -#else - pSrc = pSrcLine + (srcx >> PWSH); -#endif - pDst = pDstLine; - bits = 0; - if (needFirst) - { - NextTileBits - } - if (startmask) - { - NextTileBits - tmp = BitLeft(tmp, leftShift); - if (rightShift != PGSZ) - tmp |= BitRight(bits,rightShift); - *pDst = MROP_MASK (tmp, *pDst, startmask); - ++pDst; - } - nlw = nlwMiddle; - while (nlw) - { -#if MROP == Mcopy - if (nlwSrc > 1) - { - int nlwPart = nlw; - - if (nlwPart >= nlwSrc) - nlwPart = nlwSrc - 1; - nlw -= nlwPart; - nlwSrc -= nlwPart; - if (rightShift != PGSZ) - { - while (nlwPart--) - { - tmp = bits; - bits = *pSrc++; - *pDst = MROP_SOLID(BitLeft(tmp, leftShift) | - BitRight (bits, rightShift), - *pDst); - ++pDst; - } - } - else - { - if (nlwPart) - { - *pDst = MROP_SOLID (bits, *pDst); - ++pDst; - nlwPart--; - while (nlwPart--) - { - *pDst = MROP_SOLID(*pSrc, *pDst); - ++pDst; ++pSrc; - } - bits = *pSrc++; - } - } - } - else -#endif - { - NextTileBits - if (rightShift != PGSZ) - { - *pDst = MROP_SOLID(BitLeft(tmp, leftShift) | - BitRight(bits, rightShift), - *pDst); - } - else - { - *pDst = MROP_SOLID (tmp, *pDst); - } - ++pDst; - nlw--; - } - } - if (endmask) - { - NextTileBits - if (rightShift == PGSZ) - bits = 0; - *pDst = MROP_MASK (BitLeft(tmp, leftShift) | - BitRight(bits,rightShift), - *pDst, endmask); - } - pDstLine += widthDst; - pSrcLine += widthSrc; - if (++srcy == tileHeight) - { - srcy = 0; - pSrcLine = pSrcBase; - } - } - pBox++; - } -} - -void -MROP_NAME(cfbFillSpanTileOdd) (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 */ - CfbBits startmask; - CfbBits 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; - -#if MROP == 0 && PSZ == 24 - DeclareMergeRop24() -#else - MROP_DECLARE_REG() -#endif - - CfbBits *pdstBase; /* pointer to start of dest */ - CfbBits *pDstLine; /* poitner to start of dest box */ - CfbBits *pSrcBase; /* pointer to start of source */ - CfbBits *pSrcLine; /* pointer to start of source line */ - register CfbBits *pDst; - register CfbBits *pSrc; - register CfbBits bits, tmp = 0; - int xoffStart, xoff; - int leftShiftStart, rightShiftStart, nlwSrcStart; - CfbBits tileEndMask; - int tileEndLeftShift, tileEndRightShift; - int xoffStep; - int tileEndPart; - int needFirst; - CfbBits narrow[2]; - CfbBits narrowMask = 0; - int narrowShift = 0; - Bool narrowTile; - -#if MROP == 0 && PSZ == 24 - InitializeMergeRop24 (alu, planemask) -#else - MROP_INITIALIZE (alu, planemask) -#endif - - tileHeight = tile->drawable.height; - tileWidth = tile->drawable.width; - widthSrc = tile->devKind / PGSZB; - narrowTile = FALSE; - if (widthSrc == 1) - { - narrowShift = tileWidth; - narrowMask = cfbendpartial [tileWidth]; - tileWidth *= 2; - widthSrc = 2; - narrowTile = TRUE; - } - pSrcBase = (CfbBits *)tile->devPrivate.ptr; - - cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase) - -#if PSZ == 24 - tileEndPart = (4 - tileWidth) & 3; - tileEndMask = cfbendpartial[tileWidth & 3]; -#else - tileEndPart = tileWidth & PIM; - tileEndMask = cfbendpartial[tileEndPart]; -#endif - tileEndLeftShift = (tileEndPart) << LEFTSHIFT_AMT; - tileEndRightShift = PGSZ - tileEndLeftShift; -#if PSZ == 24 - xoffStep = 4 - tileEndPart; -#else - xoffStep = PPW - tileEndPart; -#endif - while (n--) - { - w = *pwidth++; - modulus (ppt->x - xrot, tileWidth, srcx); - modulus (ppt->y - yrot, tileHeight, srcy); -#if PSZ == 24 - xoffDst = (4 - ppt->x) & 3; - if (w == 1 && (xoffDst == 0 || xoffDst == 1)) -#else - xoffDst = ppt->x & PIM; - if (xoffDst + w < PPW) -#endif - { - maskpartialbits(ppt->x, w, startmask); - endmask = 0; - nlw = 0; - } - else - { - maskbits (ppt->x, w, startmask, endmask, nlw) - } -#if PSZ == 24 - pDstLine = pdstBase + (ppt->y * widthDst) + ((ppt->x *3)>> 2); -#else - pDstLine = pdstBase + (ppt->y * widthDst) + (ppt->x >> PWSH); -#endif - pSrcLine = pSrcBase + (srcy * widthSrc); -#if PSZ == 24 - xoffSrc = (4 - srcx) & 3; -#else - xoffSrc = srcx & PIM; -#endif - if (xoffSrc >= xoffDst) - { - xoffStart = xoffSrc - xoffDst; - needFirst = 1; - } - else - { -#if PSZ == 24 - xoffStart = 4 - (xoffDst - xoffSrc); -#else - xoffStart = PPW - (xoffDst - xoffSrc); -#endif - needFirst = 0; - } - leftShiftStart = (xoffStart) << LEFTSHIFT_AMT; - rightShiftStart = PGSZ - leftShiftStart; -#if PSZ == 24 - nlwSrcStart = widthSrc - ((srcx*3) >> 2); -#else - nlwSrcStart = widthSrc - (srcx >> PWSH); -#endif - /* XXX only works when narrowShift >= PPW/2 */ - if (narrowTile) - { - tmp = pSrcBase[srcy] & narrowMask; /* source width == 1 */ - narrow[0] = tmp | SCRRIGHT (tmp, narrowShift); -#if PSZ == 24 - narrow[1] = BitLeft (tmp, 8) | - BitRight(tmp, 16); -#else - narrow[1] = SCRLEFT (tmp, PPW - narrowShift) | - SCRRIGHT(tmp, 2 * narrowShift - PPW); -#endif - pSrcLine = narrow; - } - xoff = xoffStart; - leftShift = leftShiftStart; - rightShift = rightShiftStart; - nlwSrc = nlwSrcStart; -#if PSZ == 24 - pSrc = pSrcLine + ((srcx * 3) >> 2); -#else - pSrc = pSrcLine + (srcx >> PWSH); -#endif - pDst = pDstLine; - bits = 0; - if (needFirst) - { - NextTileBits - } - if (startmask) - { - NextTileBits - tmp = BitLeft(tmp, leftShift); - if (rightShift != PGSZ) - tmp |= BitRight(bits,rightShift); - *pDst = MROP_MASK (tmp, *pDst, startmask); - ++pDst; - } - while (nlw) - { -#if MROP == Mcopy - if (nlwSrc > 1) - { - int nlwPart = nlw; - - if (nlwPart >= nlwSrc) - nlwPart = nlwSrc - 1; - nlw -= nlwPart; - nlwSrc -= nlwPart; - if (rightShift != PGSZ) - { - while (nlwPart--) - { - tmp = bits; - bits = *pSrc++; - *pDst = MROP_SOLID(BitLeft(tmp, leftShift) | - BitRight (bits, rightShift), - *pDst); - ++pDst; - } - } - else - { - if (nlwPart) - { - *pDst = MROP_SOLID (bits, *pDst); - ++pDst; - nlwPart--; - while (nlwPart--) - { - *pDst = MROP_SOLID(*pSrc, *pDst); - ++pDst; ++pSrc; - } - bits = *pSrc++; - } - } - } - else -#endif - { - NextTileBits - if (rightShift != PGSZ) - { - *pDst = MROP_SOLID(BitLeft(tmp, leftShift) | - BitRight(bits, rightShift), - *pDst); - ++pDst; - } - else - { - *pDst = MROP_SOLID (tmp, *pDst); - ++pDst; - } - nlw--; - } - } - if (endmask) - { - NextTileBits - if (rightShift == PGSZ) - bits = 0; - *pDst = MROP_MASK (BitLeft(tmp, leftShift) | - BitRight(bits,rightShift), - *pDst, endmask); - } - ppt++; - } -} - -# include "fastblt.h" - -#define IncSrcPtr psrc++; if (!--srcRemaining) { srcRemaining = widthSrc; psrc = psrcStart; } - -void -MROP_NAME(cfbFillBoxTile32s) (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 */ - CfbBits startmask; - CfbBits 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; - -#if MROP == 0 && PSZ == 24 - DeclareMergeRop24() -#else - MROP_DECLARE_REG() -#endif - - CfbBits *pdstBase; /* pointer to start of dest */ - CfbBits *pdstLine; /* poitner to start of dest box */ - CfbBits *psrcBase; /* pointer to start of source */ - CfbBits *psrcLine; /* pointer to fetch point of source */ - CfbBits *psrcStart; /* pointer to start of source line */ - register CfbBits *pdst; - register CfbBits *psrc; - register CfbBits bits, bits1; - register int nlTemp; - -#if MROP == 0 && PSZ == 24 - InitializeMergeRop24 (alu, planemask) -#else - MROP_INITIALIZE (alu, planemask) -#endif - - psrcBase = (CfbBits *)tile->devPrivate.ptr; - tileHeight = tile->drawable.height; - tileWidth = tile->drawable.width; -#if PSZ == 24 - widthSrc = tile->devKind / PGSZB; -#else - widthSrc = tileWidth >> PWSH; -#endif - - cfbGetLongWidthAndPointer (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); -#if PSZ == 24 - xoffSrc = (4 - srcx) & 3; - srcStart = (srcx * 3) >> 2; -#else - xoffSrc = srcx & PIM; - srcStart = (srcx >> PWSH); -#endif - psrcStart = psrcBase + (srcy * widthSrc); - psrcLine = psrcStart + srcStart; - - /* set up dest */ -#if PSZ == 24 - xoffDst = (4 - pBox->x1) & 3; - pdstLine = pdstBase + (pBox->y1 * widthDst) + ((pBox->x1*3) >> 2); -#else - xoffDst = pBox->x1 & PIM; - pdstLine = pdstBase + (pBox->y1 * widthDst) + (pBox->x1 >> PWSH); -#endif - /* set up masks */ -#if PSZ == 24 - if (w == 1 && (xoffDst == 0 || xoffDst == 1)) -#else - if (xoffDst + w < PPW) -#endif - { - maskpartialbits(pBox->x1, w, startmask); - endmask = 0; - nlMiddle = 0; - } - else - { - maskbits (pBox->x1, w, startmask, endmask, nlMiddle) - } - if (xoffSrc == xoffDst) - { - while (h--) - { - psrc = psrcLine; - pdst = pdstLine; - srcRemaining = widthSrc - srcStart; - if (startmask) - { - *pdst = MROP_MASK (*psrc, *pdst, startmask); - pdst++; - IncSrcPtr - } - nlTemp = nlMiddle; - while (nlTemp) - { - nl = nlTemp; - if (nl > srcRemaining) - nl = srcRemaining; - - nlTemp -= nl; - srcRemaining -= nl; - -#if MROP == Mcopy -#ifdef LARGE_INSTRUCTION_CACHE -#ifdef FAST_CONSTANT_OFFSET_MODE - - psrc += nl & (UNROLL-1); - pdst += nl & (UNROLL-1); - -#define BodyOdd(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]); -#define BodyEven(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]); - -#define LoopReset \ -pdst += UNROLL; \ -psrc += UNROLL; - -#else - -#define BodyOdd(n) *pdst = MROP_SOLID (*psrc, *pdst); pdst++; psrc++; -#define BodyEven(n) BodyOdd(n) - -#define LoopReset ; - -#endif - PackedLoop - -#undef BodyOdd -#undef BodyEven -#undef LoopReset - -#else - DuffL(nl, label1, - *pdst = MROP_SOLID (*psrc, *pdst); - pdst++; psrc++;) -#endif -#else - while (nl--) { - *pdst = MROP_SOLID (*psrc, *pdst); - pdst++; psrc++; - } -#endif - if (!srcRemaining) - { - srcRemaining = widthSrc; - psrc = psrcStart; - } - } - if (endmask) - { - *pdst = MROP_MASK (*psrc, *pdst, endmask); - } - pdstLine += widthDst; - psrcLine += widthSrc; - psrcStart += widthSrc; - if (++srcy == tileHeight) - { - psrcStart = psrcBase; - psrcLine = psrcStart + srcStart; - srcy = 0; - } - } - } - else - { - if (xoffSrc > xoffDst) - { - leftShift = (xoffSrc - xoffDst) << LEFTSHIFT_AMT; - rightShift = PGSZ - leftShift; - } - else - { - rightShift = (xoffDst - xoffSrc) << LEFTSHIFT_AMT; - leftShift = PGSZ - rightShift; - } - while (h--) - { - psrc = psrcLine; - pdst = pdstLine; - bits = 0; - srcRemaining = widthSrc - srcStart; - if (xoffSrc > xoffDst) - { - bits = *psrc; - IncSrcPtr - } - if (startmask) - { - bits1 = BitLeft(bits,leftShift); - bits = *psrc; - IncSrcPtr - bits1 |= BitRight(bits,rightShift); - *pdst = MROP_MASK(bits1, *pdst, startmask); - pdst++; - } - nlTemp = nlMiddle; - while (nlTemp) - { - nl = nlTemp; - if (nl > srcRemaining) - nl = srcRemaining; - - nlTemp -= nl; - srcRemaining -= nl; - -#if MROP == Mcopy -#ifdef LARGE_INSTRUCTION_CACHE - bits1 = bits; - -#ifdef FAST_CONSTANT_OFFSET_MODE - - psrc += nl & (UNROLL-1); - pdst += nl & (UNROLL-1); - -#define BodyOdd(n) \ - bits = psrc[-n]; \ - pdst[-n] = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), pdst[-n]); - -#define BodyEven(n) \ - bits1 = psrc[-n]; \ - pdst[-n] = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), pdst[-n]); - -#define LoopReset \ - pdst += UNROLL; \ - psrc += UNROLL; - -#else - -#define BodyOdd(n) \ - bits = *psrc++; \ - *pdst = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), *pdst); \ - pdst++; - -#define BodyEven(n) \ - bits1 = *psrc++; \ - *pdst = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), *pdst); \ - pdst++; - -#define LoopReset ; - -#endif /* !FAST_CONSTANT_OFFSET_MODE */ - - PackedLoop - -#undef BodyOdd -#undef BodyEven -#undef LoopReset - -#else - DuffL (nl,label2, - bits1 = BitLeft(bits, leftShift); - bits = *psrc++; - *pdst = MROP_SOLID (bits1 | BitRight(bits, rightShift), *pdst); - pdst++; - ) -#endif -#else - while (nl--) { - bits1 = BitLeft(bits, leftShift); - bits = *psrc++; - *pdst = MROP_SOLID (bits1 | BitRight(bits, rightShift), *pdst); - pdst++; - } -#endif - if (!srcRemaining) - { - srcRemaining = widthSrc; - psrc = psrcStart; - } - } - - if (endmask) - { - bits1 = BitLeft(bits, leftShift); - if (BitLeft(endmask, rightShift)) - { - bits = *psrc; - bits1 |= BitRight(bits, rightShift); - } - *pdst = MROP_MASK (bits1, *pdst, endmask); - } - pdstLine += widthDst; - psrcLine += widthSrc; - psrcStart += widthSrc; - if (++srcy == tileHeight) - { - psrcStart = psrcBase; - psrcLine = psrcStart + srcStart; - srcy = 0; - } - } - } - pBox++; - } -} - -void -MROP_NAME(cfbFillSpanTile32s) (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 */ - CfbBits startmask; - CfbBits 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; - -#if MROP == 0 && PSZ == 24 - DeclareMergeRop24() -#else - MROP_DECLARE_REG() -#endif - - CfbBits *pdstBase; /* pointer to start of dest */ - CfbBits *pdstLine; /* poitner to start of dest box */ - CfbBits *psrcBase; /* pointer to start of source */ - CfbBits *psrcLine; /* pointer to fetch point of source */ - CfbBits *psrcStart; /* pointer to start of source line */ - register CfbBits *pdst; - register CfbBits *psrc; - register CfbBits bits, bits1; - register int nlTemp; - -#if MROP == 0 && PSZ == 24 - InitializeMergeRop24 (alu, planemask) -#else - MROP_INITIALIZE (alu, planemask) -#endif - - psrcBase = (CfbBits *)tile->devPrivate.ptr; - tileHeight = tile->drawable.height; - tileWidth = tile->drawable.width; -#if PSZ == 24 - widthSrc = tile->devKind / PGSZB; -#else - widthSrc = tileWidth >> PWSH; -#endif - - cfbGetLongWidthAndPointer (pDrawable, widthDst, pdstBase) - - while (n--) - { - w = *pwidth++; - - /* set up source */ - modulus (ppt->x - xrot, tileWidth, srcx); - modulus (ppt->y - yrot, tileHeight, srcy); -#if PSZ == 24 - xoffSrc = (4 - srcx) & 3; - srcStart = (srcx * 3) >> 2; -#else - xoffSrc = srcx & PIM; - srcStart = (srcx >> PWSH); -#endif - psrcStart = psrcBase + (srcy * widthSrc); - psrcLine = psrcStart + srcStart; - - /* set up dest */ -#if PSZ == 24 - xoffDst = (4 - ppt->x) & 3; - pdstLine = pdstBase + (ppt->y * widthDst) + ((ppt->x *3) >> 2); - /* set up masks */ - if (w == 1 && (xoffDst == 0 || xoffDst == 1)) -#else - xoffDst = ppt->x & PIM; - pdstLine = pdstBase + (ppt->y * widthDst) + (ppt->x >> PWSH); - /* set up masks */ - if (xoffDst + w < PPW) -#endif - { - maskpartialbits(ppt->x, w, startmask); - endmask = 0; - nlMiddle = 0; - } - else - { - maskbits (ppt->x, w, startmask, endmask, nlMiddle) - } - - if (xoffSrc == xoffDst) - { - psrc = psrcLine; - pdst = pdstLine; - srcRemaining = widthSrc - srcStart; - if (startmask) - { - *pdst = MROP_MASK (*psrc, *pdst, startmask); - pdst++; - IncSrcPtr - } - nlTemp = nlMiddle; - while (nlTemp) - { - nl = nlTemp; - if (nl > srcRemaining) - nl = srcRemaining; - - nlTemp -= nl; - srcRemaining -= nl; - -#if MROP == Mcopy -#ifdef LARGE_INSTRUCTION_CACHE -#ifdef FAST_CONSTANT_OFFSET_MODE - - psrc += nl & (UNROLL-1); - pdst += nl & (UNROLL-1); - -#define BodyOdd(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]); -#define BodyEven(n) pdst[-n] = MROP_SOLID (psrc[-n], pdst[-n]); - -#define LoopReset \ -pdst += UNROLL; \ -psrc += UNROLL; - -#else - -#define BodyOdd(n) *pdst = MROP_SOLID (*psrc, *pdst); pdst++; psrc++; -#define BodyEven(n) BodyOdd(n) - -#define LoopReset ; - -#endif - PackedLoop - -#undef BodyOdd -#undef BodyEven -#undef LoopReset - -#else - DuffL(nl, label1, - *pdst = MROP_SOLID (*psrc, *pdst); - pdst++; psrc++;) -#endif -#else - while (nl--) { - *pdst = MROP_SOLID (*psrc, *pdst); - pdst++; psrc++; - } -#endif - if (!srcRemaining) - { - srcRemaining = widthSrc; - psrc = psrcStart; - } - } - if (endmask) - { - *pdst = MROP_MASK (*psrc, *pdst, endmask); - } - } - else - { - if (xoffSrc > xoffDst) - { - leftShift = (xoffSrc - xoffDst) << LEFTSHIFT_AMT; - rightShift = PGSZ - leftShift; - } - else - { - rightShift = (xoffDst - xoffSrc) << LEFTSHIFT_AMT; - leftShift = PGSZ - rightShift; - } - psrc = psrcLine; - pdst = pdstLine; - bits = 0; - srcRemaining = widthSrc - srcStart; - if (xoffSrc > xoffDst) - { - bits = *psrc; - IncSrcPtr - } - if (startmask) - { - bits1 = BitLeft(bits,leftShift); - bits = *psrc; - IncSrcPtr - bits1 |= BitRight(bits,rightShift); - *pdst = MROP_MASK(bits1, *pdst, startmask); - pdst++; - } - nlTemp = nlMiddle; - while (nlTemp) - { - nl = nlTemp; - if (nl > srcRemaining) - nl = srcRemaining; - - nlTemp -= nl; - srcRemaining -= nl; - -#if MROP == Mcopy -#ifdef LARGE_INSTRUCTION_CACHE - bits1 = bits; - -#ifdef FAST_CONSTANT_OFFSET_MODE - - psrc += nl & (UNROLL-1); - pdst += nl & (UNROLL-1); - -#define BodyOdd(n) \ -bits = psrc[-n]; \ -pdst[-n] = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), pdst[-n]); - -#define BodyEven(n) \ -bits1 = psrc[-n]; \ -pdst[-n] = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), pdst[-n]); - -#define LoopReset \ -pdst += UNROLL; \ -psrc += UNROLL; - -#else - -#define BodyOdd(n) \ -bits = *psrc++; \ -*pdst = MROP_SOLID(BitLeft(bits1, leftShift) | BitRight(bits, rightShift), *pdst); \ -pdst++; - -#define BodyEven(n) \ -bits1 = *psrc++; \ -*pdst = MROP_SOLID(BitLeft(bits, leftShift) | BitRight(bits1, rightShift), *pdst); \ -pdst++; - -#define LoopReset ; - -#endif /* !FAST_CONSTANT_OFFSET_MODE */ - - PackedLoop - -#undef BodyOdd -#undef BodyEven -#undef LoopReset - -#else - DuffL (nl,label2, - bits1 = BitLeft(bits, leftShift); - bits = *psrc++; - *pdst = MROP_SOLID (bits1 | BitRight(bits, rightShift), *pdst); - pdst++; - ) -#endif -#else - while (nl--) { - bits1 = BitLeft(bits,leftShift); - bits = *psrc++; - *pdst = MROP_SOLID(bits1|BitRight(bits,rightShift), *pdst); - pdst++; - } -#endif - if (!srcRemaining) - { - srcRemaining = widthSrc; - psrc = psrcStart; - } - } - - if (endmask) - { - bits1 = BitLeft(bits, leftShift); - if (BitLeft(endmask, rightShift)) - { - bits = *psrc; - bits1 |= BitRight(bits, rightShift); - } - *pdst = MROP_MASK (bits1, *pdst, endmask); - } - } - ppt++; - } -} diff --git a/cfb/cfbunmap.h b/cfb/cfbunmap.h deleted file mode 100644 index db9889217..000000000 --- a/cfb/cfbunmap.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 1994-1998 The XFree86 Project, Inc. All Rights Reserved. - * - * 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 - * XFREE86 PROJECT 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 XFree86 Project 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 - * XFree86 Project. - */ - -/* - * Unmap names - */ - -#undef CFBNAME -#undef CATNAME - -#undef QuartetBitsTable -#undef QuartetPixelMaskTable -#undef cfb8ClippedLineCopy -#undef cfb8ClippedLineGeneral -#undef cfb8ClippedLineXor -#undef cfb8LineSS1Rect -#undef cfb8LineSS1RectCopy -#undef cfb8LineSS1RectGeneral -#undef cfb8LineSS1RectPreviousCopy -#undef cfb8LineSS1RectXor -#undef cfb8SegmentSS1Rect -#undef cfb8SegmentSS1RectCopy -#undef cfb8SegmentSS1RectGeneral -#undef cfb8SegmentSS1RectShiftCopy -#undef cfb8SegmentSS1RectXor -#undef cfbAllocatePrivates -#undef cfbBSFuncRec -#undef cfbBitBlt -#undef cfbBresD -#undef cfbBresS -#undef cfbChangeWindowAttributes -#undef cfbClearVisualTypes -#undef cfbCloseScreen -#undef cfbCreateDefColormap -#undef cfbCopyArea -#undef cfbCopyImagePlane -#undef cfbCopyPixmap -#undef cfbCopyPlane -#undef cfbCopyPlaneReduce -#undef cfbCopyRotatePixmap -#undef cfbCopyWindow -#undef cfbCreateGC -#undef cfbCreatePixmap -#undef cfbCreateScreenResources -#undef cfbCreateWindow -#undef cfbDestroyPixmap -#undef cfbDestroyWindow -#undef cfbDoBitblt -#undef cfbDoBitbltCopy -#undef cfbDoBitbltGeneral -#undef cfbDoBitbltOr -#undef cfbDoBitbltXor -#undef cfbExpandDirectColors -#undef cfbFillBoxTile32sCopy -#undef cfbFillBoxTile32sGeneral -#undef cfbFillBoxTileOdd -#undef cfbFillBoxTileOddCopy -#undef cfbFillBoxTileOddGeneral -#undef cfbFillPoly1RectCopy -#undef cfbFillPoly1RectGeneral -#undef cfbFillRectSolidCopy -#undef cfbFillRectSolidGeneral -#undef cfbFillRectSolidXor -#undef cfbFillRectTile32Copy -#undef cfbFillRectTile32General -#undef cfbFillRectTileOdd -#undef cfbFillSpanTile32sCopy -#undef cfbFillSpanTile32sGeneral -#undef cfbFillSpanTileOddCopy -#undef cfbFillSpanTileOddGeneral -#undef cfbFinishScreenInit -#undef cfbGCFuncs -#undef cfbGCPrivateKey -#undef cfbGetImage -#undef cfbGetScreenPixmap -#undef cfbGetSpans -#undef cfbHorzS -#undef cfbImageGlyphBlt8 -#undef cfbInitializeColormap -#undef cfbInitVisuals -#undef cfbInstallColormap -#undef cfbLineSD -#undef cfbLineSS -#undef cfbListInstalledColormaps -#undef cfbMapWindow -#undef cfbMatchCommon -#undef cfbNonTEOps -#undef cfbNonTEOps1Rect -#undef cfbPadPixmap -#undef cfbPolyFillArcSolidCopy -#undef cfbPolyFillArcSolidGeneral -#undef cfbPolyFillRect -#undef cfbPolyGlyphBlt8 -#undef cfbPolyGlyphRop8 -#undef cfbPolyPoint -#undef cfbPositionWindow -#undef cfbPutImage -#undef cfbReduceRasterOp -#undef cfbResolveColor -#undef cfbRestoreAreas -#undef cfbSaveAreas -#undef cfbScreenInit -#undef cfbScreenPrivateKey -#undef cfbSegmentSD -#undef cfbSegmentSS -#undef cfbSetScanline -#undef cfbSetScreenPixmap -#undef cfbSetSpans -#undef cfbSetVisualTypes -#undef cfbSetupScreen -#undef cfbSolidSpansCopy -#undef cfbSolidSpansGeneral -#undef cfbSolidSpansXor -#undef cfbStippleStack -#undef cfbStippleStackTE -#undef cfbTEGlyphBlt -#undef cfbTEOps -#undef cfbTEOps1Rect -#undef cfbTile32FSCopy -#undef cfbTile32FSGeneral -#undef cfbUninstallColormap -#undef cfbUnmapWindow -#undef cfbUnnaturalStippleFS -#undef cfbUnnaturalTileFS -#undef cfbValidateGC -#undef cfbVertS -#undef cfbWindowPrivateKey -#undef cfbXRotatePixmap -#undef cfbYRotatePixmap -#undef cfbZeroPolyArcSS8Copy -#undef cfbZeroPolyArcSS8General -#undef cfbZeroPolyArcSS8Xor -#undef cfbendpartial -#undef cfbendtab -#undef cfbmask -#undef cfbrmask -#undef cfbstartpartial -#undef cfbstarttab diff --git a/cfb/cfbwindow.c b/cfb/cfbwindow.c deleted file mode 100644 index 50728764e..000000000 --- a/cfb/cfbwindow.c +++ /dev/null @@ -1,160 +0,0 @@ -/*********************************************************** - -Copyright 1987, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - - -Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. - - All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - -******************************************************************/ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include -#include "scrnintstr.h" -#include "windowstr.h" -#include "cfb.h" -#include "mistruct.h" -#include "regionstr.h" -#include "cfbmskbits.h" - -Bool -cfbCreateWindow(WindowPtr pWin) -{ -#ifdef PIXMAP_PER_WINDOW - /* Setup pointer to Screen pixmap */ - dixSetPrivate(&pWin->devPrivates, frameWindowPrivateKey, - cfbGetScreenPixmap(pWin->drawable.pScreen)); -#endif - - return TRUE; -} - -Bool -cfbDestroyWindow(WindowPtr pWin) -{ - return(TRUE); -} - -/*ARGSUSED*/ -Bool -cfbMapWindow(pWindow) - WindowPtr pWindow; -{ - return(TRUE); -} - -/*ARGSUSED*/ -Bool -cfbPositionWindow(WindowPtr pWin, int x, int y) -{ - return (TRUE); -} - -/*ARGSUSED*/ -Bool -cfbUnmapWindow(pWindow) - WindowPtr pWindow; -{ - return (TRUE); -} - -/* UNCLEAN! - this code calls the bitblt helper code directly. - - cfbCopyWindow copies only the parts of the destination that are -visible in the source. -*/ - - -void -cfbCopyWindow(pWin, ptOldOrg, prgnSrc) - WindowPtr pWin; - DDXPointRec ptOldOrg; - RegionPtr prgnSrc; -{ - DDXPointPtr pptSrc; - register DDXPointPtr ppt; - RegionRec rgnDst; - register BoxPtr pbox; - register int dx, dy; - register int i, nbox; - WindowPtr pwinRoot; - - pwinRoot = WindowTable[pWin->drawable.pScreen->myNum]; - - REGION_NULL(pWin->drawable.pScreen, &rgnDst); - - dx = ptOldOrg.x - pWin->drawable.x; - dy = ptOldOrg.y - pWin->drawable.y; - REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy); - REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, &pWin->borderClip, prgnSrc); - - pbox = REGION_RECTS(&rgnDst); - nbox = REGION_NUM_RECTS(&rgnDst); - if(!nbox || !(pptSrc = (DDXPointPtr )xalloc(nbox * sizeof(DDXPointRec)))) - { - REGION_UNINIT(pWin->drawable.pScreen, &rgnDst); - return; - } - ppt = pptSrc; - - for (i = nbox; --i >= 0; ppt++, pbox++) - { - ppt->x = pbox->x1 + dx; - ppt->y = pbox->y1 + dy; - } - - cfbDoBitbltCopy((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot, - GXcopy, &rgnDst, pptSrc, ~0L); - xfree(pptSrc); - REGION_UNINIT(pWin->drawable.pScreen, &rgnDst); -} - -Bool -cfbChangeWindowAttributes(WindowPtr pWin, unsigned long mask) -{ - return (TRUE); -} - diff --git a/cfb/cfbzerarc.c b/cfb/cfbzerarc.c deleted file mode 100644 index 5b8879ee1..000000000 --- a/cfb/cfbzerarc.c +++ /dev/null @@ -1,322 +0,0 @@ -/************************************************************ - -Copyright 1989, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - -********************************************************/ - - -/* Derived from: - * "Algorithm for drawing ellipses or hyperbolae with a digital plotter" - * by M. L. V. Pitteway - * The Computer Journal, November 1967, Volume 10, Number 3, pp. 282-289 - */ - -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - -#include - -#include -#include -#include "regionstr.h" -#include "gcstruct.h" -#include "pixmapstr.h" -#include "scrnintstr.h" -#include "cfb.h" -#include "cfbmskbits.h" -#include "mizerarc.h" -#include "cfbrrop.h" -#include "mi.h" - -#ifdef PIXEL_ADDR - -static void -RROP_NAME(cfbZeroArcSS8)( - DrawablePtr pDraw, - GCPtr pGC, - xArc *arc) -{ - miZeroArcRec info; - Bool do360; - register int x; - PixelType *addrp; - register PixelType *yorgp, *yorgop; -#if PSZ == 24 - int xorg, xorg3, xorgo, xorgo3; - register int xtmp; -#endif - RROP_DECLARE - register int yoffset; - int npwidth, dyoffset; - register int y, a, b, d, mask; - register int k1, k3, dx, dy; - - cfbGetPixelWidthAndPointer(pDraw,npwidth, addrp) - - RROP_FETCH_GC (pGC); - do360 = miZeroArcSetup(arc, &info, TRUE); - yorgp = addrp + ((info.yorg + pDraw->y) * npwidth); - yorgop = addrp + ((info.yorgo + pDraw->y) * npwidth); - info.xorg += pDraw->x; - info.xorgo += pDraw->x; -#if PSZ == 24 - xorg = info.xorg; - xorg3 = xorg * 3; - info.xorg = (info.xorg * 3) >> 2; - xorgo = info.xorgo; - xorgo3 = xorgo * 3; - info.xorgo = (info.xorgo * 3) >> 2; -#endif - MIARCSETUP(); - yoffset = y ? npwidth : 0; - dyoffset = 0; - mask = info.initialMask; - if (!(arc->width & 1)) - { -#if PSZ == 24 - if (mask & 2) - RROP_SOLID24((yorgp + info.xorgo), xorgo); - if (mask & 8) - RROP_SOLID24((yorgop + info.xorgo), xorgo); -#else - if (mask & 2) - RROP_SOLID((yorgp + info.xorgo)); - if (mask & 8) - RROP_SOLID((yorgop + info.xorgo)); -#endif /* PSZ == 24 */ - } - if (!info.end.x || !info.end.y) - { - mask = info.end.mask; - info.end = info.altend; - } - if (do360 && (arc->width == arc->height) && !(arc->width & 1)) - { - register int xoffset = npwidth; -#if PSZ == 24 - PixelType *yorghb = yorgp + (info.h * npwidth); - register int tmp1, tmp2, tmp1_3, tmp2_3; - - tmp1 = xorg + info.h; - tmp1_3 = tmp1 * 3; - tmp2 = xorg - info.h; - tmp2_3 = tmp2 * 3; - while (1) - { - xtmp = (xorg3 + x * 3) >> 2; - RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x); - RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x); - xtmp = (xorg3 - x * 3) >> 2; - RROP_SOLID24(yorgp + yoffset + xtmp, xorg - x); - RROP_SOLID24(yorgop - yoffset + xtmp, xorg - x); - if (a < 0) - break; - xtmp = (tmp1_3 - y * 3) >> 2; - RROP_SOLID24(yorghb - xoffset + xtmp, tmp1 - y); - RROP_SOLID24(yorghb + xoffset + xtmp, tmp1 - y); - xtmp = (tmp2_3 + y * 3) >> 2; - RROP_SOLID24(yorghb - xoffset + xtmp, tmp2 + y); - RROP_SOLID24(yorghb + xoffset + xtmp, tmp2 + y); - xoffset += npwidth; - MIARCCIRCLESTEP(yoffset += npwidth;); - } -#else - PixelType *yorghb = yorgp + (info.h * npwidth) + info.xorg; - PixelType *yorgohb = yorghb - info.h; - - yorgp += info.xorg; - yorgop += info.xorg; - yorghb += info.h; - while (1) - { - RROP_SOLID(yorgp + yoffset + x); - RROP_SOLID(yorgp + yoffset - x); - RROP_SOLID(yorgop - yoffset - x); - RROP_SOLID(yorgop - yoffset + x); - if (a < 0) - break; - RROP_SOLID(yorghb - xoffset - y); - RROP_SOLID(yorgohb - xoffset + y); - RROP_SOLID(yorgohb + xoffset + y); - RROP_SOLID(yorghb + xoffset - y); - xoffset += npwidth; - MIARCCIRCLESTEP(yoffset += npwidth;); - } - yorgp -= info.xorg; - yorgop -= info.xorg; -#endif /* PSZ == 24 */ - x = info.w; - yoffset = info.h * npwidth; - } - else if (do360) - { - while (y < info.h || x < info.w) - { - MIARCOCTANTSHIFT(dyoffset = npwidth;); -#if PSZ == 24 - xtmp = (xorg3 + x * 3) >> 2; - RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x); - RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x); - xtmp = (xorgo3 - x * 3) >> 2; - RROP_SOLID24(yorgp + yoffset + xtmp, xorgo - x); - RROP_SOLID24(yorgop - yoffset + xtmp, xorgo - x); -#else - RROP_SOLID(yorgp + yoffset + info.xorg + x); - RROP_SOLID(yorgp + yoffset + info.xorgo - x); - RROP_SOLID(yorgop - yoffset + info.xorgo - x); - RROP_SOLID(yorgop - yoffset + info.xorg + x); -#endif - MIARCSTEP(yoffset += dyoffset;, yoffset += npwidth;); - } - } - else - { - while (y < info.h || x < info.w) - { - MIARCOCTANTSHIFT(dyoffset = npwidth;); - if ((x == info.start.x) || (y == info.start.y)) - { - mask = info.start.mask; - info.start = info.altstart; - } -#if PSZ == 24 - if (mask & 1){ - xtmp = (xorg3 + x * 3) >> 2; - RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x); - } - if (mask & 2){ - xtmp = (xorgo3 - x * 3) >> 2; - RROP_SOLID24(yorgp + yoffset + xtmp, xorgo - x); - } - if (mask & 4){ - xtmp = (xorgo3 - x * 3) >> 2; - RROP_SOLID24(yorgop - yoffset + xtmp, xorgo - x); - } - if (mask & 8){ - xtmp = (xorg3 + x * 3) >> 2; - RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x); - } -#else - if (mask & 1) - RROP_SOLID(yorgp + yoffset + info.xorg + x); - if (mask & 2) - RROP_SOLID(yorgp + yoffset + info.xorgo - x); - if (mask & 4) - RROP_SOLID(yorgop - yoffset + info.xorgo - x); - if (mask & 8) - RROP_SOLID(yorgop - yoffset + info.xorg + x); -#endif /* PSZ == 24 */ - if ((x == info.end.x) || (y == info.end.y)) - { - mask = info.end.mask; - info.end = info.altend; - } - MIARCSTEP(yoffset += dyoffset;, yoffset += npwidth;); - } - } - if ((x == info.start.x) || (y == info.start.y)) - mask = info.start.mask; -#if PSZ == 24 - if (mask & 1){ - xtmp = (xorg3 + x * 3) >> 2; - RROP_SOLID24(yorgp + yoffset + xtmp, xorg + x); - } - if (mask & 4){ - xtmp = (xorgo3 - x * 3) >> 2; - RROP_SOLID24(yorgop - yoffset + xtmp, xorgo - x); - } -#else - if (mask & 1) - RROP_SOLID(yorgp + yoffset + info.xorg + x); - if (mask & 4) - RROP_SOLID(yorgop - yoffset + info.xorgo - x); -#endif /* PSZ == 24 */ - if (arc->height & 1) - { -#if PSZ == 24 - if (mask & 2){ - xtmp = (xorgo3 - x * 3) >> 2; - RROP_SOLID24(yorgp + yoffset + xtmp, xorgo - x); - } - if (mask & 8){ - xtmp = (xorg3 + x * 3) >> 2; - RROP_SOLID24(yorgop - yoffset + xtmp, xorg + x); - } -#else - if (mask & 2) - RROP_SOLID(yorgp + yoffset + info.xorgo - x); - if (mask & 8) - RROP_SOLID(yorgop - yoffset + info.xorg + x); -#endif /* PSZ == 24 */ - } - RROP_UNDECLARE -} - -void -RROP_NAME (cfbZeroPolyArcSS8) (pDraw, pGC, narcs, parcs) - register DrawablePtr pDraw; - GCPtr pGC; - int narcs; - xArc *parcs; -{ - register xArc *arc; - register int i; - BoxRec box; - int x2, y2; - RegionPtr cclip; - - cclip = cfbGetCompositeClip(pGC); - for (arc = parcs, i = narcs; --i >= 0; arc++) - { - if (miCanZeroArc(arc)) - { - box.x1 = arc->x + pDraw->x; - box.y1 = arc->y + pDraw->y; - /* - * Because box.x2 and box.y2 get truncated to 16 bits, and the - * RECT_IN_REGION test treats the resulting number as a signed - * integer, the RECT_IN_REGION test alone can go the wrong way. - * This can result in a server crash because the rendering - * routines in this file deal directly with cpu addresses - * of pixels to be stored, and do not clip or otherwise check - * that all such addresses are within their respective pixmaps. - * So we only allow the RECT_IN_REGION test to be used for - * values that can be expressed correctly in a signed short. - */ - x2 = box.x1 + (int)arc->width + 1; - box.x2 = x2; - y2 = box.y1 + (int)arc->height + 1; - box.y2 = y2; - if ( (x2 <= SHRT_MAX) && (y2 <= SHRT_MAX) && - (RECT_IN_REGION(pDraw->pScreen, cclip, &box) == rgnIN) ) - RROP_NAME (cfbZeroArcSS8) (pDraw, pGC, arc); - else - miZeroPolyArc(pDraw, pGC, 1, arc); - } - else - miPolyArc(pDraw, pGC, 1, arc); - } -} - -#endif diff --git a/cfb/stip68kgnu.h b/cfb/stip68kgnu.h deleted file mode 100644 index 2da27b4dd..000000000 --- a/cfb/stip68kgnu.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - -/* - * Stipple stack macro for 68k GCC - */ - -#define STIPPLE(addr,stipple,value,width,count,shift) \ - __asm volatile ( \ - "lea 5f,%/a1\n\ - moveq #28,%/d2\n\ - addl %2,%/d2\n\ - moveq #28,%/d3\n\ - subql #4,%2\n\ - negl %2\n\ -1:\n\ - movel %0,%/a0\n\ - addl %6,%0\n\ - movel %3@+,%/d1\n\ - jeq 3f\n\ - movel %/d1,%/d0\n\ - lsrl %/d2,%/d0\n\ - lsll #5,%/d0\n\ - lsll %2,%/d1\n\ - jmp %/a1@(%/d0:l)\n\ -2:\n\ - addl #4,%/a0\n\ - movel %/d1,%/d0\n\ - lsrl %/d3,%/d0\n\ - lsll #5,%/d0\n\ - lsll #4,%/d1\n\ - jmp %/a1@(%/d0:l)\n\ -5:\n\ - jne 2b ; dbra %1,1b ; jra 4f\n\ - . = 5b + 0x20\n\ - moveb %5,%/a0@(3)\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f\n\ - . = 5b + 0x40\n\ - moveb %5,%/a0@(2)\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f\n\ - . = 5b + 0x60\n\ - movew %5,%/a0@(2)\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f\n\ - . = 5b + 0x80\n\ - moveb %5,%/a0@(1)\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0xa0\n\ - moveb %5,%/a0@(3) ; moveb %5,%/a0@(1)\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0xc0\n\ - movew %5,%/a0@(1)\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0xe0\n\ - movew %5,%/a0@(2) ; moveb %5,%/a0@(1)\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0x100\n\ - moveb %5,%/a0@\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0x120\n\ - moveb %5,%/a0@(3) ; moveb %5,%/a0@\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0x140\n\ - moveb %5,%/a0@(2) ; moveb %5,%/a0@\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0x160\n\ - movew %5,%/a0@(2) ; moveb %5,%/a0@\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0x180\n\ - movew %5,%/a0@\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0x1a0\n\ - moveb %5,%/a0@(3) ; movew %5,%/a0@\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0x1c0\n\ - moveb %5,%/a0@(2) ; movew %5,%/a0@\n\ - andl %/d1,%/d1 ; jne 2b ; dbra %1,1b ; jra 4f ;\n\ - . = 5b + 0x1e0\n\ - movel %5,%/a0@\n\ - andl %/d1,%/d1 ; jne 2b ; \n\ -3: dbra %1,1b ; \n\ -4:\n"\ - : "=a" (addr), /* %0 */ \ - "=d" (count), /* %1 */ \ - "=d" (shift), /* %2 */ \ - "=a" (stipple) /* %3 */ \ - : "0" (addr), /* %4 */ \ - "d" (value), /* %5 */ \ - "a" (width), /* %6 */ \ - "1" (count-1), /* %7 */ \ - "2" (shift), /* %8 */ \ - "3" (stipple) /* %9 */ \ - : /* ctemp */ "d0", \ - /* c */ "d1", \ - /* lshift */ "d2", \ - /* rshift */ "d3", \ - /* atemp */ "a0", \ - /* case */ "a1") diff --git a/cfb/stipmips.s b/cfb/stipmips.s deleted file mode 100644 index c42d9b5ae..000000000 --- a/cfb/stipmips.s +++ /dev/null @@ -1,281 +0,0 @@ -/* - * $Xorg: stipmips.s,v 1.4 2001/02/09 02:04:39 xorgcvs Exp $ - * -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ - -/* - * MIPS assembly code for optimized text rendering. - * - * Other stippling could be done in assembly, but the payoff is - * not nearly as large. Mostly because large areas are heavily - * optimized already. - */ - -#ifdef MIPSEL -# define BitsR sll -# define BitsL srl -# define BO(o) o -# define HO(o) o -# define WO(o) o -# define FourBits(dest,bits) and dest, bits, 0xf -#else -# define BitsR srl -# define BitsL sll -# define BO(o) 3-o -# define HO(o) 2-o -# define WO(o) o -# define FourBits(dest,bits) srl dest, bits, 28 -#endif - -/* reordering instructions would be fatal here */ - .set noreorder - - -/* - * cfbStippleStack(addr, stipple, value, stride, Count, Shift) - * 4 5 6 7 16(sp) 20(sp) - * - * Apply successive 32-bit stipples starting at addr, addr+stride, ... - * - * Used for text rendering, but only when no data could be lost - * when the stipple is shifted left by Shift bits - */ -/* arguments */ -#define addr $4 -#define stipple $5 -#define value $6 -#define stride $7 -#define Count 16($sp) -#define Shift 20($sp) - -/* local variables */ -#define count $14 -#define shift $13 -#define atemp $12 -#define bits $11 -#define lshift $9 -#define sbase $8 -#define stemp $2 - -#define CASE_SIZE 5 /* case blocks are 2^5 bytes each */ -#define CASE_MASK 0x1e0 /* first case mask */ - -#define ForEachLine $200 -#define NextLine $201 -#define NextLine1 $202 -#define CaseBegin $203 -#define ForEachBits $204 -#define ForEachBits1 $205 -#define NextBits $206 - -#ifdef TETEXT -#define cfbStippleStack cfbStippleStackTE -#endif - - .globl cfbStippleStack - .ent cfbStippleStack 2 -cfbStippleStack: - .frame $sp, 0, $31 - lw count, Count /* fetch stack params */ - la sbase,CaseBegin /* load up switch table */ - lw shift, Shift - li lshift, 4 /* compute offset within */ - subu lshift, lshift, shift /* stipple of remaining bits */ -#ifdef MIPSEL - addu shift, shift, CASE_SIZE /* first shift for LSB */ -#else - addu shift, shift, 28-CASE_SIZE /* first shift for MSB */ -#endif - /* do ... while (--count > 0); */ -ForEachLine: - lw bits, 0(stipple) /* get stipple bits */ - move atemp, addr /* set up for this line */ -#ifdef TETEXT - /* Terminal emulator fonts are expanded and have many 0 rows */ - beqz bits, NextLine /* skip out early on 0 */ -#endif - addu addr, addr, stride /* step for the loop */ - BitsR stemp, bits, shift /* get first bits */ - and stemp, stemp, CASE_MASK /* compute first branch */ - addu stemp, stemp, sbase /* ... */ - j stemp /* ... */ - BitsL bits, bits, lshift /* set remaining bits */ - -ForEachBits: - addu atemp, atemp, 4 -ForEachBits1: - FourBits(stemp, bits) /* compute jump for */ - sll stemp, stemp, CASE_SIZE /* next four bits */ - addu stemp, stemp, sbase /* ... */ - j stemp /* ... */ - BitsL bits, bits, 4 /* step for remaining bits */ -CaseBegin: - bnez bits, ForEachBits1 /* 0 */ - addu atemp, atemp, 4 -NextLine: - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - bnez bits, ForEachBits /* 1 */ - sb value, BO(0)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - bnez bits, ForEachBits /* 2 */ - sb value, BO(1)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - bnez bits, ForEachBits /* 3 */ - sh value, HO(0)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - bnez bits, ForEachBits /* 4 */ - sb value, BO(2)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - sb value, BO(0)(atemp) /* 5 */ - bnez bits, ForEachBits - sb value, BO(2)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - - sb value, BO(1)(atemp) /* 6 */ - bnez bits, ForEachBits - sb value, BO(2)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - - bnez bits, ForEachBits /* 7 */ - swl value, BO(2)(atemp) /* untested on MSB */ - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - bnez bits, ForEachBits /* 8 */ - sb value, BO(3)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - sb value, BO(0)(atemp) /* 9 */ - bnez bits, ForEachBits - sb value, BO(3)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - - sb value, BO(1)(atemp) /* a */ - bnez bits, ForEachBits - sb value, BO(3)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - - sh value, HO(0)(atemp) /* b */ - bnez bits, ForEachBits - sb value, BO(3)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - - bnez bits, ForEachBits /* c */ - sh value, HO(2)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - sb value, BO(0)(atemp) /* d */ - bnez bits, ForEachBits - sh value, HO(2)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - - bnez bits, ForEachBits /* e */ - swr value, BO(1)(atemp) /* untested on MSB */ - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - bnez bits, ForEachBits /* f */ - sw value, WO(0)(atemp) - addu count, count, -1 - bnez count, ForEachLine - addu stipple, stipple, 4 - j $31 - nop - nop - - .end cfbStippleStack diff --git a/cfb/stipsparc.s b/cfb/stipsparc.s deleted file mode 100644 index dcd440b19..000000000 --- a/cfb/stipsparc.s +++ /dev/null @@ -1,290 +0,0 @@ -/* - * $Xorg: stipsparc.s,v 1.4 2001/02/09 02:04:39 xorgcvs Exp $ - * $XdotOrg: $ - * -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ -/* $XFree86: xc/programs/Xserver/cfb/stipsparc.s,v 1.4 2001/01/17 22:36:38 dawes Exp $ */ - -/* - * SPARC assembly code for optimized text rendering. - * - * Other stippling could be done in assembly, but the payoff is - * not nearly as large. Mostly because large areas are heavily - * optimized already. - */ - -/* not that I expect to ever see an LSB SPARC, but ... */ -#ifdef LITTLE_ENDIAN -# define BitsR sll -# define BitsL srl -# define BO(o) o -# define HO(o) o -# define WO(o) o -# define FourBits(dest,bits) and bits, 0xf, dest -#else -# define BitsR srl -# define BitsL sll -# define BO(o) 3-o -# define HO(o) 2-o -# define WO(o) o -# define FourBits(dest,bits) srl bits, 28, dest -#endif - -/* - * cfbStippleStack(addr, stipple, value, stride, Count, Shift) - * 4 5 6 7 16(sp) 20(sp) - * - * Apply successive 32-bit stipples starting at addr, addr+stride, ... - * - * Used for text rendering, but only when no data could be lost - * when the stipple is shifted left by Shift bits - */ -/* arguments */ -#define addr %i0 -#define stipple %i1 -#define value %i2 -#define stride %i3 -#define count %i4 -#define shift %i5 - -/* local variables */ -#define atemp %l0 -#define bits %l1 -#define lshift %l2 -#define sbase %l3 -#define stemp %l4 - -#define CASE_SIZE 5 /* case blocks are 2^5 bytes each */ -#define CASE_MASK 0x1e0 /* first case mask */ - -#define ForEachLine LY1 -#define NextLine LY2 -#define CaseBegin LY3 -#define ForEachBits LY4 -#define NextBits LY5 - -#if defined(SVR4) || defined(__ELF__) -#ifdef TETEXT -#define _cfbStippleStack cfbStippleStackTE -#else -#define _cfbStippleStack cfbStippleStack -#endif -#else -#ifdef TETEXT -#define _cfbStippleStack _cfbStippleStackTE -#endif -#endif - .seg "text" - .proc 16 - .globl _cfbStippleStack -_cfbStippleStack: - save %sp,-64,%sp -#ifdef SHAREDCODE -1: - call 2f - nop -2: - mov %o7,sbase /* sbase = 1b(1:) */ - add sbase, CaseBegin-1b, sbase -#else /* !SHAREDCODE */ - sethi %hi(CaseBegin),sbase /* load up switch table */ - or sbase,%lo(CaseBegin),sbase -#endif /* SHAREDCODE */ - mov 4,lshift /* compute offset within */ - sub lshift, shift, lshift /* stipple of remaining bits */ -#ifdef LITTLE_ENDIAN - inc CASE_SIZE, shift /* first shift for LSB */ -#else - inc 28-CASE_SIZE, shift /* first shift for MSB */ -#endif - /* do ... while (--count > 0); */ -ForEachLine: - ld [stipple],bits /* get stipple bits */ - mov addr,atemp /* set up for this line */ -#ifdef TETEXT - /* Terminal emulator fonts are expanded and have many 0 rows */ - tst bits - bz NextLine /* skip out early on 0 */ -#endif - add addr, stride, addr /* step for the loop */ - BitsR bits, shift, stemp /* get first bits */ - and stemp, CASE_MASK, stemp /* compute first jump */ - BitsL bits, lshift, bits /* set remaining bits */ - jmp sbase+stemp /* ... */ - tst bits - -ForEachBits: - inc 4, atemp -ForEachBits1: - FourBits(stemp, bits) /* compute jump for */ - sll stemp, CASE_SIZE, stemp /* these four bits */ - BitsL bits, 4, bits /* step for remaining bits */ - jmp sbase+stemp /* jump */ - tst bits -CaseBegin: - bnz,a ForEachBits1 /* 0 */ - inc 4, atemp -NextLine: - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - bnz ForEachBits /* 1 */ - stb value, [atemp+BO(0)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - bnz ForEachBits /* 2 */ - stb value, [atemp+BO(1)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - bnz ForEachBits /* 3 */ - sth value, [atemp+HO(0)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - bnz ForEachBits /* 4 */ - stb value, [atemp+BO(2)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - stb value, [atemp+BO(0)] /* 5 */ - bnz ForEachBits - stb value, [atemp+BO(2)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - stb value, [atemp+BO(1)] /* 6 */ - bnz ForEachBits - stb value, [atemp+BO(2)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - sth value, [atemp+HO(0)] /* 7 */ - bnz ForEachBits - stb value, [atemp+BO(2)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - bnz ForEachBits /* 8 */ - stb value, [atemp+BO(3)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - stb value, [atemp+BO(0)] /* 9 */ - bnz ForEachBits - stb value, [atemp+BO(3)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - stb value, [atemp+BO(1)] /* a */ - bnz ForEachBits - stb value, [atemp+BO(3)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - sth value, [atemp+HO(0)] /* b */ - bnz ForEachBits - stb value, [atemp+BO(3)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - bnz ForEachBits /* c */ - sth value, [atemp+HO(2)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - stb value, [atemp+BO(0)] /* d */ - bnz ForEachBits - sth value, [atemp+HO(2)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - stb value, [atemp+BO(1)] /* e */ - bnz ForEachBits - sth value, [atemp+HO(2)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - bnz ForEachBits /* f */ - st value, [atemp+WO(0)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore diff --git a/cfb/stipsprc32.s b/cfb/stipsprc32.s deleted file mode 100644 index 89b031f5a..000000000 --- a/cfb/stipsprc32.s +++ /dev/null @@ -1,291 +0,0 @@ -/* - * $Xorg: stipsprc32.s,v 1.4 2001/02/09 02:04:39 xorgcvs Exp $ - * $XdotOrg: $ - * -Copyright 1990, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -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 -OPEN GROUP 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 Open Group 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 Open Group. - * - * Author: Keith Packard, MIT X Consortium - */ -/* $XFree86: xc/programs/Xserver/cfb/stipsprc32.s,v 1.4 2001/01/17 22:36:38 dawes Exp $ */ - -/* - * SPARC assembly code for optimized text rendering. - * - * Other stippling could be done in assembly, but the payoff is - * not nearly as large. Mostly because large areas are heavily - * optimized already. - */ - -/* not that I expect to ever see an LSB SPARC, but ... */ -#ifdef LITTLE_ENDIAN -# define BitsR sll -# define BitsL srl -# define WO(o) 3-o -# define FourBits(dest,bits) and bits, 0xf, dest -#else -# define BitsR srl -# define BitsL sll -# define WO(o) o -# define FourBits(dest,bits) srl bits, 28, dest -#endif - -/* - * cfb32StippleStack(addr, stipple, value, stride, Count, Shift) - * 4 5 6 7 16(sp) 20(sp) - * - * Apply successive 32-bit stipples starting at addr, addr+stride, ... - * - * Used for text rendering, but only when no data could be lost - * when the stipple is shifted left by Shift bits - */ -/* arguments */ -#define addr %i0 -#define stipple %i1 -#define value %i2 -#define stride %i3 -#define count %i4 -#define shift %i5 - -/* local variables */ -#define atemp %l0 -#define bits %l1 -#define lshift %l2 -#define sbase %l3 -#define stemp %l4 - -#define CASE_SIZE 5 /* case blocks are 2^5 bytes each */ -#define CASE_MASK 0x1e0 /* first case mask */ - -#define ForEachLine LY1 -#define NextLine LY2 -#define CaseBegin LY3 -#define ForEachBits LY4 -#define NextBits LY5 - -#if defined(SVR4) || defined(__ELF__) -#ifdef TETEXT -#define _cfb32StippleStack cfb32StippleStackTE -#else -#define _cfb32StippleStack cfb32StippleStack -#endif -#else -#ifdef TETEXT -#define _cfb32StippleStack _cfb32StippleStackTE -#endif -#endif - - .seg "text" - .proc 16 - .globl _cfb32StippleStack -_cfb32StippleStack: - save %sp,-64,%sp -#ifdef SHAREDCODE -1: - call 2f - nop -2: - mov %o7,sbase /* sbase = 1b(1:) */ - add sbase, CaseBegin-1b, sbase -#else /* !SHAREDCODE */ - sethi %hi(CaseBegin),sbase /* load up switch table */ - or sbase,%lo(CaseBegin),sbase -#endif /* !SHAREDCODE */ - mov 4,lshift /* compute offset within */ - sub lshift, shift, lshift /* stipple of remaining bits */ -#ifdef LITTLE_ENDIAN - inc CASE_SIZE, shift /* first shift for LSB */ -#else - inc 28-CASE_SIZE, shift /* first shift for MSB */ -#endif - /* do ... while (--count > 0); */ -ForEachLine: - ld [stipple],bits /* get stipple bits */ - mov addr,atemp /* set up for this line */ -#ifdef TETEXT - /* Terminal emulator fonts are expanded and have many 0 rows */ - tst bits - bz NextLine /* skip out early on 0 */ -#endif - add addr, stride, addr /* step for the loop */ - BitsR bits, shift, stemp /* get first bits */ - and stemp, CASE_MASK, stemp /* compute first jump */ - BitsL bits, lshift, bits /* set remaining bits */ - jmp sbase+stemp /* ... */ - tst bits - -ForEachBits: - inc 16, atemp -ForEachBits1: - FourBits(stemp, bits) /* compute jump for */ - sll stemp, CASE_SIZE, stemp /* these four bits */ - BitsL bits, 4, bits /* step for remaining bits */ - jmp sbase+stemp /* jump */ - tst bits -CaseBegin: - bnz,a ForEachBits1 /* 0 */ - inc 16, atemp -NextLine: - deccc 1, count -NextLine1: - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - bnz ForEachBits /* 1 */ - st value, [atemp+WO(12)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - bnz ForEachBits /* 2 */ - st value, [atemp+WO(8)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - st value, [atemp+WO(8)] /* 3 */ - bnz ForEachBits - st value, [atemp+WO(12)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - bnz ForEachBits /* 4 */ - st value, [atemp+WO(4)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - st value, [atemp+WO(4)] /* 5 */ - bnz ForEachBits - st value, [atemp+WO(12)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - st value, [atemp+WO(4)] /* 6 */ - bnz ForEachBits - st value, [atemp+WO(8)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - st value, [atemp+WO(4)] /* 7 */ - st value, [atemp+WO(8)] - bnz ForEachBits - st value, [atemp+WO(12)] - b NextLine1 - deccc 1, count - nop - nop - - bnz ForEachBits /* 8 */ - st value, [atemp+WO(0)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - nop - - st value, [atemp+WO(0)] /* 9 */ - bnz ForEachBits - st value, [atemp+WO(12)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - st value, [atemp+WO(0)] /* a */ - bnz ForEachBits - st value, [atemp+WO(8)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - st value, [atemp+WO(0)] /* b */ - st value, [atemp+WO(8)] - bnz ForEachBits - st value, [atemp+WO(12)] - b NextLine1 - deccc 1, count - nop - nop - - st value, [atemp+WO(0)] /* c */ - bnz ForEachBits - st value, [atemp+WO(4)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore - - st value, [atemp+WO(0)] /* d */ - st value, [atemp+WO(4)] - bnz ForEachBits - st value, [atemp+WO(12)] - b NextLine1 - deccc 1, count - nop - nop - - st value, [atemp+WO(0)] /* e */ - st value, [atemp+WO(4)] - bnz ForEachBits - st value, [atemp+WO(8)] - b NextLine1 - deccc 1, count - nop - nop - - st value, [atemp+WO(0)] /* f */ - st value, [atemp+WO(4)] - st value, [atemp+WO(8)] - bnz ForEachBits - st value, [atemp+WO(12)] - deccc 1, count - bnz,a ForEachLine - inc 4, stipple - ret - restore -- cgit v1.2.3