summaryrefslogtreecommitdiff
path: root/src/ffb_circle.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ffb_circle.c')
-rw-r--r--src/ffb_circle.c213
1 files changed, 0 insertions, 213 deletions
diff --git a/src/ffb_circle.c b/src/ffb_circle.c
deleted file mode 100644
index ee71ad5..0000000
--- a/src/ffb_circle.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Acceleration for the Creator and Creator3D framebuffer - Circle rops.
- *
- * Copyright (C) 1999 David S. Miller (davem@redhat.com)
- * Copyright (C) 1999 Jakub Jelinek (jakub@redhat.com)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * JAKUB JELINEK OR DAVID MILLER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sunffb/ffb_circle.c,v 1.1 2000/05/18 23:21:36 dawes Exp $ */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ffb.h"
-#include "ffb_regs.h"
-#include "ffb_rcache.h"
-#include "ffb_fifo.h"
-#include "ffb_stip.h"
-
-#include "pixmapstr.h"
-#include "scrnintstr.h"
-
-#define PSZ 8
-#include "cfb.h"
-#undef PSZ
-#include "cfb32.h"
-
-#include "mi.h"
-#include "mifillarc.h"
-
-/* Wheee, circles... */
-static void
-CreatorFillEllipseSolid(DrawablePtr pDrawable, GCPtr pGC, xArc *arc)
-{
- WindowPtr pWin = (WindowPtr) pDrawable;
- FFBPtr pFfb = GET_FFB_FROM_SCREEN(pDrawable->pScreen);
- CreatorPrivGCPtr gcPriv = CreatorGetGCPrivate (pGC);
- ffb_fbcPtr ffb = pFfb->regs;
- miFillArcRec info;
- int x, y, e, yk, xk, ym, xm, dx, dy, xorg, yorg, slw;
-
- /* Get the RP ready. */
- if(gcPriv->stipple == NULL) {
- FFB_ATTR_GC(pFfb, pGC, pWin,
- FFB_PPC_APE_DISABLE | FFB_PPC_CS_CONST,
- FFB_DRAWOP_RECTANGLE);
- } else {
- unsigned int fbc;
-
- FFBSetStipple(pFfb, ffb, gcPriv->stipple,
- FFB_PPC_CS_CONST, FFB_PPC_CS_MASK);
- FFB_WRITE_PMASK(pFfb, ffb, pGC->planemask);
- FFB_WRITE_DRAWOP(pFfb, ffb, FFB_DRAWOP_RECTANGLE);
- fbc = FFB_FBC_WIN(pWin);
- fbc = (fbc & ~FFB_FBC_XE_MASK) | FFB_FBC_XE_OFF;
- FFB_WRITE_FBC(pFfb, ffb, fbc);
- }
-
- /* Start computing the rects. */
- miFillArcSetup(arc, &info);
- MIFILLARCSETUP();
- if(pGC->miTranslate) {
- xorg += pDrawable->x;
- yorg += pDrawable->y;
- }
- while(y > 0) {
- MIFILLARCSTEP(slw);
- if(slw > 0) {
- /* Render. */
- FFBFifo(pFfb, 4);
- FFB_WRITE64(&ffb->by, yorg - y, xorg - x);
- FFB_WRITE64_2(&ffb->bh, 1, slw);
- if(miFillArcLower(slw)) {
- FFBFifo(pFfb, 4);
- FFB_WRITE64(&ffb->by, yorg + y + dy, xorg - x);
- FFB_WRITE64_2(&ffb->bh, 1, slw);
- }
- }
- }
- pFfb->rp_active = 1;
- FFBSync(pFfb, ffb);
-}
-
-#define ADDSPAN(l,r) \
- if (r >= l) { \
- FFBFifo(pFfb, 4); \
- FFB_WRITE64(&ffb->by, ya, l); \
- FFB_WRITE64_2(&ffb->bh, 1, r - l + 1); \
- }
-
-#define ADDSLICESPANS(flip) \
- if (!flip) \
- { \
- ADDSPAN(xl, xr); \
- } \
- else \
- { \
- xc = xorg - x; \
- ADDSPAN(xc, xr); \
- xc += slw - 1; \
- ADDSPAN(xl, xc); \
- }
-
-static void
-CreatorFillArcSliceSolid(DrawablePtr pDrawable, GCPtr pGC, xArc *arc)
-{
- WindowPtr pWin = (WindowPtr) pDrawable;
- FFBPtr pFfb = GET_FFB_FROM_SCREEN(pDrawable->pScreen);
- CreatorPrivGCPtr gcPriv = CreatorGetGCPrivate (pGC);
- ffb_fbcPtr ffb = pFfb->regs;
- miFillArcRec info;
- miArcSliceRec slice;
- int x, y, e, yk, xk, ym, xm, dx, dy, xorg, yorg, slw;
- int ya, xl, xr, xc;
-
- /* Get the RP ready. */
- if(gcPriv->stipple == NULL) {
- FFB_ATTR_GC(pFfb, pGC, pWin,
- FFB_PPC_APE_DISABLE | FFB_PPC_CS_CONST,
- FFB_DRAWOP_RECTANGLE);
- } else {
- unsigned int fbc;
-
- FFBSetStipple(pFfb, ffb, gcPriv->stipple,
- FFB_PPC_CS_CONST, FFB_PPC_CS_MASK);
- FFB_WRITE_PMASK(pFfb, ffb, pGC->planemask);
- FFB_WRITE_DRAWOP(pFfb, ffb, FFB_DRAWOP_RECTANGLE);
- fbc = FFB_FBC_WIN(pWin);
- fbc = (fbc & ~FFB_FBC_XE_MASK) | FFB_FBC_XE_OFF;
- FFB_WRITE_FBC(pFfb, ffb, fbc);
- FFB_WRITE_FBC(pFfb, ffb, FFB_FBC_WIN(pWin));
- }
- miFillArcSetup(arc, &info);
- miFillArcSliceSetup(arc, &slice, pGC);
- MIFILLARCSETUP();
- slw = arc->height;
- if (slice.flip_top || slice.flip_bot)
- slw += (arc->height >> 1) + 1;
- if (pGC->miTranslate) {
- xorg += pDrawable->x;
- yorg += pDrawable->y;
- slice.edge1.x += pDrawable->x;
- slice.edge2.x += pDrawable->x;
- }
- while (y > 0) {
- MIFILLARCSTEP(slw);
- MIARCSLICESTEP(slice.edge1);
- MIARCSLICESTEP(slice.edge2);
- if (miFillSliceUpper(slice)) {
- ya = yorg - y;
- MIARCSLICEUPPER(xl, xr, slice, slw);
- ADDSLICESPANS(slice.flip_top);
- }
- if (miFillSliceLower(slice)) {
- ya = yorg + y + dy;
- MIARCSLICELOWER(xl, xr, slice, slw);
- ADDSLICESPANS(slice.flip_bot);
- }
- }
- pFfb->rp_active = 1;
- FFBSync(pFfb, ffb);
-}
-
-void
-CreatorPolyFillArcSolid (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)
-{
- RegionPtr cclip;
- xArc *arc;
- BoxRec box;
- int i, x2, y2;
-
- FFBLOG(("CreatorPolyFillArcSolid: narcs(%d)\n", narcs));
- cclip = cfbGetCompositeClip(pGC);
- for(arc = parcs, i = narcs; --i >= 0; arc++) {
- if(miFillArcEmpty(arc))
- continue;
- if(miCanFillArc(arc)) {
- box.x1 = arc->x + pDrawable->x;
- box.y1 = arc->y + pDrawable->y;
- box.x2 = x2 = box.x1 + (int)arc->width + 1;
- box.y2 = y2 = box.y1 + (int)arc->height + 1;
- if((x2 & ~0x7ff) == 0 &&
- (y2 & ~0x7ff) == 0 &&
- (RECT_IN_REGION(pDrawable->pScreen, cclip, &box) == rgnIN)) {
- if(arc->angle2 >= FULLCIRCLE ||
- arc->angle2 <= -FULLCIRCLE)
- CreatorFillEllipseSolid(pDrawable, pGC, arc);
- else
- CreatorFillArcSliceSolid(pDrawable, pGC, arc);
- continue;
- }
- }
- /* Use slow mi code if we can't handle it simply. */
- miPolyFillArc(pDrawable, pGC, 1, arc);
- }
-}