[PATCH xf86-video-trident 3/3] Rename blade_accel.c to blade_xaa.c
Kevin Brace
kevinbrace at gmx.com
Thu Feb 21 19:55:50 UTC 2019
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
---
src/Makefile.am | 2 +-
src/blade_accel.c | 863 ------------------------------------------------------
src/blade_xaa.c | 863 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 864 insertions(+), 864 deletions(-)
delete mode 100644 src/blade_accel.c
create mode 100644 src/blade_xaa.c
diff --git a/src/Makefile.am b/src/Makefile.am
index f2dc14c..d04dce8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -30,8 +30,8 @@ trident_drv_la_LIBADD = -lm
trident_drv_ladir = @moduledir@/drivers
trident_drv_la_SOURCES = \
- blade_accel.c \
blade_accel_exa.c \
+ blade_xaa.c \
compat-api.h \
image_xaa.c \
tgui_xaa.c \
diff --git a/src/blade_accel.c b/src/blade_accel.c
deleted file mode 100644
index 128913f..0000000
--- a/src/blade_accel.c
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Copyright 1997-2003 by Alan Hourihane, North Wales, UK.
- *
- * 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, and that the name of Alan
- * Hourihane not be used in advertising or publicity pertaining to
- * distribution of the software without specific, written prior
- * permission. Alan Hourihane makes no representations about the
- * suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL ALAN HOURIHANE 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.
- *
- * Authors: Alan Hourihane, <alanh at fairlite.demon.co.uk>
- *
- * Trident Blade3D accelerated options.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "xf86.h"
-#include "xf86_OSproc.h"
-
-#include "xf86Pci.h"
-
-#include "miline.h"
-
-#include "trident.h"
-#include "trident_regs.h"
-
-#ifdef HAVE_XAA_H
-#include "xaarop.h"
-#include "xaalocal.h"
-
-static void BladeSync(ScrnInfoPtr pScrn);
-#if 0
-static void BladeSetupForSolidLine(ScrnInfoPtr pScrn,
- int color,
- int rop,
- unsigned int planemask);
-static void BladeSubsequentSolidBresenhamLine(ScrnInfoPtr pScrn,
- int x, int y,
- int dmaj, int dmin,
- int e, int len,
- int octant);
-static void BladeSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2,
- int flags);
-static void BladeSetupForDashedLine(ScrnInfoPtr pScrn,
- int fg, int bg,
- int rop,
- unsigned int planemask,
- int length,
- unsigned char *pattern);
-static void BladeSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2,
- int flags, int phase);
-#endif
-static void BladeSetupForFillRectSolid(ScrnInfoPtr pScrn,
- int color,
- int rop,
- unsigned int planemask);
-static void BladeSubsequentFillRectSolid(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h);
-static void BladeSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2,
- int w, int h);
-static void BladeSetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
- int xdir, int ydir,
- int rop,
- unsigned int planemask,
- int transparency_color);
-#if 0
-static void BladeSetupForScreenToScreenColorExpand(ScrnInfoPtr pScrn,
- int fg, int bg,
- int rop,
- unsigned int planemask);
-static void BladeSubsequentScreenToScreenColorExpand(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int srcx, int srcy,
- int offset);
-#endif
-static void BladeSetupForCPUToScreenColorExpand(ScrnInfoPtr pScrn,
- int fg, int bg,
- int rop,
- unsigned int planemask);
-static void BladeSubsequentCPUToScreenColorExpand(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int skipleft);
-static void BladeSetClippingRectangle(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2);
-static void BladeDisableClipping(ScrnInfoPtr pScrn);
-static void BladeSetupForMono8x8PatternFill(ScrnInfoPtr pScrn,
- int patternx,
- int patterny,
- int fg, int bg,
- int rop,
- unsigned int planemask);
-static void BladeSubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn,
- int patternx,
- int patterny,
- int x, int y,
- int w, int h);
-#if 0
-static void BladeSetupForColor8x8PatternFill(ScrnInfoPtr pScrn,
- int patternx,
- int patterny,
- int rop,
- unsigned int planemask,
- int trans_col);
-static void BladeSubsequentColor8x8PatternFillRect(ScrnInfoPtr pScrn,
- int patternx,
- int patterny,
- int x, int y,
- int w, int h);
-#endif
-static void BladeSetupForImageWrite(ScrnInfoPtr pScrn,
- int rop,
- unsigned int planemask,
- int transparency_color,
- int bpp, int depth);
-static void BladeSubsequentImageWriteRect(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int skipleft);
-
-static void
-BladeInitializeAccelerator(ScrnInfoPtr pScrn)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
- CARD32 stride;
-
- stride = (pScrn->displayWidth >> 3) << 20;
-
- BLADE_OUT(0x21C8, stride);
- BLADE_OUT(0x21CC, stride);
- BLADE_OUT(0x21D0, stride);
- BLADE_OUT(0x21D4, stride);
- switch (pScrn->depth) {
- case 8:
- stride |= (0 << 29);
- break;
- case 15:
- stride |= (5 << 29);
- break;
- case 16:
- stride |= (1 << 29);
- break;
- case 24:
- stride |= (2 << 29);
- break;
- }
-
- BLADE_OUT(0x21B8, 0);
- BLADE_OUT(0x21B8, stride);
- BLADE_OUT(0x21BC, stride);
- BLADE_OUT(0x21C0, stride);
- BLADE_OUT(0x21C4, stride);
-#if 0
- /* It appears that the driver sometimes misdetects the RAM type, so we
- * don't force this for now */
- if (pTrident->HasSGRAM)
- BLADE_OUT(0x2168, 1 << 26); /* Enables Block Write if available (SGRAM) */
- else
- BLADE_OUT(0x2168, 0);
-#endif
- BLADE_OUT(0x216C, 0);
-}
-#endif
-
-Bool BladeXaaInit(ScreenPtr pScreen) {
-#ifdef HAVE_XAA_H
- XAAInfoRecPtr infoPtr;
- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- if (pTrident->NoAccel)
- return FALSE;
-
- pTrident->AccelInfoRec = infoPtr = XAACreateInfoRec();
- if (!infoPtr) return FALSE;
-
- pTrident->InitializeAccelerator = BladeInitializeAccelerator;
- BladeInitializeAccelerator(pScrn);
-
- infoPtr->Flags = PIXMAP_CACHE |
- LINEAR_FRAMEBUFFER |
- OFFSCREEN_PIXMAPS;
-
- infoPtr->Sync = BladeSync;
-
- infoPtr->SetClippingRectangle = BladeSetClippingRectangle;
- infoPtr->DisableClipping = BladeDisableClipping;
-
-#if 0
- infoPtr->SolidLineFlags = 0;
- infoPtr->SetupForSolidLine = BladeSetupForSolidLine;
- infoPtr->SubsequentSolidTwoPointLine =
- BladeSubsequentSolidTwoPointLine;
- infoPtr->SetupForDashedLine = BladeSetupForDashedLine;
- infoPtr->SubsequentDashedTwoPointLine =
- BladeSubsequentDashedTwoPointLine;
- infoPtr->DashPatternMaxLength = 16;
- infoPtr->DashedLineFlags = LINE_PATTERN_LSBFIRST_LSBJUSTIFIED |
- LINE_PATTERN_POWER_OF_2_ONLY;
-#endif
-
- infoPtr->SolidFillFlags = NO_PLANEMASK;
- infoPtr->SetupForSolidFill = BladeSetupForFillRectSolid;
- infoPtr->SubsequentSolidFillRect = BladeSubsequentFillRectSolid;
-
- infoPtr->ScreenToScreenCopyFlags = ONLY_TWO_BITBLT_DIRECTIONS |
- NO_PLANEMASK |
- NO_TRANSPARENCY;
-
- infoPtr->SetupForScreenToScreenCopy =
- BladeSetupForScreenToScreenCopy;
- infoPtr->SubsequentScreenToScreenCopy =
- BladeSubsequentScreenToScreenCopy;
-
- infoPtr->Mono8x8PatternFillFlags = NO_PLANEMASK |
- NO_TRANSPARENCY |
- BIT_ORDER_IN_BYTE_MSBFIRST |
- HARDWARE_PATTERN_SCREEN_ORIGIN |
- HARDWARE_PATTERN_PROGRAMMED_BITS;
-
- infoPtr->SetupForMono8x8PatternFill =
- BladeSetupForMono8x8PatternFill;
- infoPtr->SubsequentMono8x8PatternFillRect =
- BladeSubsequentMono8x8PatternFillRect;
-
-#if 0
- infoPtr->Color8x8PatternFillFlags =
- HARDWARE_PATTERN_SCREEN_ORIGIN |
- BIT_ORDER_IN_BYTE_MSBFIRST;
-
- infoPtr->SetupForColor8x8PatternFill =
- TridentSetupForColor8x8PatternFill;
- infoPtr->SubsequentColor8x8PatternFillRect =
- TridentSubsequentColor8x8PatternFillRect;
-
- infoPtr->ScreenToScreenColorExpandFillFlags = 0;
-
- infoPtr->SetupForScreenToScreenColorExpandFill =
- BladeSetupForScreenToScreenColorExpand;
- infoPtr->SubsequentScreenToScreenColorExpandFill =
- BladeSubsequentScreenToScreenColorExpand;
-#endif
-
- infoPtr->CPUToScreenColorExpandFillFlags =
- CPU_TRANSFER_PAD_DWORD |
- LEFT_EDGE_CLIPPING |
- SYNC_AFTER_COLOR_EXPAND |
- NO_PLANEMASK |
- BIT_ORDER_IN_BYTE_MSBFIRST |
- SCANLINE_PAD_DWORD;
- infoPtr->ColorExpandRange = 0x10000;
- infoPtr->ColorExpandBase = pTrident->IOBase + 0x10000;
- infoPtr->SetupForCPUToScreenColorExpandFill =
- BladeSetupForCPUToScreenColorExpand;
- infoPtr->SubsequentCPUToScreenColorExpandFill =
- BladeSubsequentCPUToScreenColorExpand;
-
- infoPtr->SetupForImageWrite = BladeSetupForImageWrite;
- infoPtr->SubsequentImageWriteRect =
- BladeSubsequentImageWriteRect;
- infoPtr->ImageWriteFlags = NO_PLANEMASK |
- LEFT_EDGE_CLIPPING |
- CPU_TRANSFER_PAD_DWORD |
- SYNC_AFTER_IMAGE_WRITE;
- infoPtr->ImageWriteBase = pTrident->IOBase + 0x10000;
- infoPtr->ImageWriteRange = 0x10000;
-
- return(XAAInit(pScreen, infoPtr));
-#else
- return FALSE;
-#endif
-}
-
-#ifdef HAVE_XAA_H
-static void
-BladeSync(ScrnInfoPtr pScrn)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
- int busy;
- int cnt = 10000000;
-
- if (pTrident->Clipping) BladeDisableClipping(pScrn);
- BLADE_OUT(0x216C, 0);
-
- BLADEBUSY(busy);
- while (busy != 0) {
- if (--cnt < 0) {
- ErrorF("GE timeout\n");
- BLADE_OUT(0x2124, 1 << 7);
- BLADE_OUT(0x2124, 0);
- break;
- }
-
- BLADEBUSY(busy);
- }
-}
-
-static void
-BladeSetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
- int xdir, int ydir,
- int rop,
- unsigned int planemask,
- int transparency_color)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- pTrident->BltScanDirection = 0;
- if ((xdir < 0) || (ydir < 0))
- pTrident->BltScanDirection |= (1 << 1);
-
-#if 0
- if (transparency_color != -1) {
- BLADE_OUT(0x2168, transparency_color & 0xffffff);
- pTrident->BltScanDirection |= (1 << 6);
- }
-
- REPLICATE(planemask);
- if (planemask != (unsigned int)-1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-
-#endif
- BLADE_OUT(0x2148, XAAGetCopyROP(rop));
-}
-
-static void
-BladeSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2,
- int w, int h)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
- int clip = 0;
-
- if (pTrident->Clipping) clip = 1;
-
- BLADE_OUT(0x2144, 0xE0000000 |
- (1 << 19) | (1 << 4) | (1 << 2) |
- pTrident->BltScanDirection | clip);
-
- if (pTrident->BltScanDirection) {
- BLADE_OUT(0x2100, ((y1 + h - 1) << 16) | (x1 + w - 1));
- BLADE_OUT(0x2104, (y1 << 16) | x1);
- BLADE_OUT(0x2108, ((y2 + h - 1) << 16) | (x2 + w - 1));
- BLADE_OUT(0x210C, ((y2 & 0xfff) << 16) | (x2 & 0xfff));
- } else {
- BLADE_OUT(0x2100, (y1 << 16) | x1);
- BLADE_OUT(0x2104, ((y1 + h - 1) << 16) | (x1 + w - 1));
- BLADE_OUT(0x2108, (y2 << 16) | x2);
- BLADE_OUT(0x210C, (((y2 + h - 1) & 0xfff) << 16) |
- ((x2 + w - 1) & 0xfff));
- }
-}
-
-static void
-BladeSetClippingRectangle(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- BLADE_OUT(0x2154, ((y1 & 0x0fff) << 16) | (x1 & 0x0fff));
- BLADE_OUT(0x2158, ((y2 & 0x0fff) << 16) | (x2 & 0x0fff));
- pTrident->Clipping = TRUE;
-}
-
-static void
-BladeDisableClipping(ScrnInfoPtr pScrn)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
- pTrident->Clipping = FALSE;
-}
-
-#if 0
-static void
-BladeSetupForSolidLine(ScrnInfoPtr pScrn,
- int color,
- int rop,
- unsigned int planemask)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- REPLICATE(color);
- BLADE_OUT(0x2160, color);
- BLADE_OUT(0x2148, XAAGetCopyROP(rop));
- pTrident->BltScanDirection = 0;
- REPLICATE(planemask);
- if (planemask != -1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-}
-
-static void
-BladeSubsequentSolidBresenhamLine(ScrnInfoPtr pScrn,
- int x, int y,
- int dmaj, int dmin,
- int e, int len,
- int octant)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
- int tmp;
- int D = 0, E = 0, ymajor = 0;
-
- BLADE_OUT(0x2144, 0x20000000 |
- (3 << 19) | (1 << 4) | (2 << 2) |
- (pTrident->Clipping ? 1 : 0));
-
- if (!(octant & YMAJOR)) {
- if ((!(octant & XDECREASING)) && (!(octant & YDECREASING))) {
- E = 1; D = 0;
- }
-
- if ((!(octant & XDECREASING)) && ( (octant & YDECREASING))) {
- E = 1; D = 1;
- }
-
- if (( (octant & XDECREASING)) && (!(octant & YDECREASING))) {
- E = 1; D = 2;
- }
-
- if (( (octant & XDECREASING)) && ( (octant & YDECREASING))) {
- E = 1; D = 3;
- }
-
- ymajor = 0;
- } else {
- if ((!(octant & XDECREASING)) && (!(octant & YDECREASING))) {
- E = 0; D = 0;
- }
-
- if ((!(octant & XDECREASING)) && ( (octant & YDECREASING))) {
- E = 0; D = 2;
- }
-
- if (( (octant & XDECREASING)) && (!(octant & YDECREASING))) {
- E = 0; D = 1;
- }
-
- if (( (octant & XDECREASING)) && ( (octant & YDECREASING))) {
- E = 0; D = 3;
- }
-
- ymajor = 1 << 21;
- }
-
- if (E) {
- tmp = x; x = y; y = tmp;
- }
-
- BLADE_OUT(0x2130, 0x00000001);
- if (D & 0x02) {
- BLADE_OUT(0x213C, 0x10000000 |
- (1 << 25) | (1 << 19) | (1 << 17) |
- ymajor | ((x + len - 1) << 4));
- } else {
- BLADE_OUT(0x213C, 0x10000000 |
- (1 << 25) | (1 << 19) | (1 << 17) |
- ymajor | ((y + len - 1) << 4));
- }
-
- BLADE_OUT(0x2140, (E << 30) |
- ((y & 0xfff) << 20) | ((x & 0xfff) << 4));
- BLADE_OUT(0x2144, (D << 30) |
- (((dmaj - dmin) & 0xfff) << 16) |
- (-dmin & 0xfff));
- BLADE_OUT(0x2148, ((-(dmin + e) & 0xfff) << 16));
-}
-
-static void
-BladeSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2,
- int flags)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
-#if 0
- if (flags & OMIT_LAST)
- BladeSetClippingRectangle(pScrn, x1, y1, x2 - 1, y2 - 1);
-#endif
-
- BLADE_OUT(0x2144, 0x20000000 |
- pTrident->BltScanDirection |
- (1 << 19) | (1 << 4) | (2 << 2));
- BLADE_OUT(0x2130, 0x3);
- BLADE_OUT(0x2108, (y1 << 16) | x1);
- BLADE_OUT(0x210C, ((y2 & 0xfff) << 16) | (x2 & 0xfff));
-
-#if 0
- if (flags & OMIT_LAST)
- BladeDisableClipping(pScrn);
-#endif
-}
-
-static void
-BladeSetupForDashedLine(ScrnInfoPtr pScrn,
- int fg, int bg,
- int rop,
- unsigned int planemask,
- int length,
- unsigned char *pattern)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- pTrident->LinePattern = *((CARD16 *)pattern) & ((1 << length) - 1);
- switch (length) {
- case 2:
- pTrident->LinePattern = pTrident->LinePattern |
- (pTrident->LinePattern << 2);
- case 4:
- pTrident->LinePattern = pTrident->LinePattern |
- (pTrident->LinePattern << 4);
- case 8:
- pTrident->LinePattern = pTrident->LinePattern |
- (pTrident->LinePattern << 8);
- }
-
- REPLICATE(fg);
- REPLICATE(bg);
- BLADE_OUT(0x2160, fg);
- BLADE_OUT(0x2164, bg);
- BLADE_OUT(0x2148, XAAGetCopyROP(rop));
- pTrident->BltScanDirection = 0;
- REPLICATE(planemask);
- if (planemask != -1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-}
-
-static void
-BladeSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2,
- int flags, int phase)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- if (flags & OMIT_LAST)
- BladeSetClippingRectangle(pScrn, x1, y1, x2 - 1, y2 - 1);
-
- BLADE_OUT(0x216C, (pTrident->LinePattern >> phase) |
- (pTrident->LinePattern << (16 - phase)));
- BLADE_OUT(0x2144, 0x20000000 |
- pTrident->BltScanDirection |
- (1 << 27) | (1 << 19) | (1 << 4) | (2 << 2));
- BLADE_OUT(0x2108, (y1 << 16) | x1);
- BLADE_OUT(0x210C, ((y2 & 0xfff) << 16) | (x2 & 0xfff));
-
- if (flags & OMIT_LAST)
- BladeDisableClipping(pScrn);
-}
-#endif
-
-static void
-BladeSetupForFillRectSolid(ScrnInfoPtr pScrn,
- int color,
- int rop,
- unsigned int planemask)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- REPLICATE(color);
- BLADE_OUT(0x2160, color);
- BLADE_OUT(0x2148, XAAGetCopyROP(rop));
- pTrident->BltScanDirection = 0;
-#if 0
- REPLICATE(planemask);
- if (planemask != -1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-#endif
-}
-
-static void
-BladeSubsequentFillRectSolid(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- BLADE_OUT(0x2144, 0x20000000 |
- pTrident->BltScanDirection |
- (1 << 19) | (1 << 4) | (2 << 2) |
- (pTrident->Clipping ? 1 : 0));
- BLADE_OUT(0x2108, (y << 16) | x);
- BLADE_OUT(0x210C, (((y + h - 1) & 0xfff) << 16) |
- ((x + w - 1) & 0xfff));
-}
-
-#if 0
-static void
-BladeSetupForScreenToScreenColorExpand(ScrnInfoPtr pScrn,
- int fg, int bg,
- int rop,
- unsigned int planemask)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- pTrident->ROP = rop;
-
- REPLICATE(bg);
- REPLICATE(fg);
- IMAGE_OUT(0x44, fg);
- IMAGE_OUT(0x48, bg);
- IMAGE_OUT(0x20, 0x90000000 | XAAGetCopyROP(rop));
- pTrident->BltScanDirection = 0;
- REPLICATE(planemask);
- if (planemask != -1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-}
-
-static void
-BladeSubsequentScreenToScreenColorExpand(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int srcx, int srcy,
- int offset)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- IMAGE_OUT(0x00, (srcy << 16) | srcx);
- IMAGE_OUT(0x04, ((srcy + h - 1) << 16) | (srcx + w - 1));
- IMAGE_OUT(0x08, (y << 16) | x);
- IMAGE_OUT(0x0C, ((y + h - 1) << 16) | (x + w - 1));
-
- IMAGE_OUT(0x24, 0x80000000 |
- (3 << 22) | (1 << 7) |
- pTrident->BltScanDirection |
- (pTrident->ROP == GXcopy ? 0 : (1 << 10)) |
- (offset << 25));
-}
-#endif
-
-static void
-BladeSetupForCPUToScreenColorExpand(ScrnInfoPtr pScrn,
- int fg, int bg,
- int rop,
- unsigned int planemask)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- pTrident->BltScanDirection = 0;
- BLADE_OUT(0x2148, XAAGetCopyROP(rop));
- if (bg == -1) {
- pTrident->BltScanDirection |= (2 << 19);
- REPLICATE(fg);
- BLADE_OUT(0x2160, fg);
- BLADE_OUT(0x2164, ~fg);
- } else {
- pTrident->BltScanDirection |= (3 << 19);
- REPLICATE(fg);
- REPLICATE(bg);
- BLADE_OUT(0x2160, fg);
- BLADE_OUT(0x2164, bg);
- }
-
-#if 0
- REPLICATE(planemask);
- if (planemask != -1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-#endif
-}
-
-static void
-BladeSubsequentCPUToScreenColorExpand(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int skipleft)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- if (skipleft)
- BladeSetClippingRectangle(pScrn,
- x + skipleft, y,
- (x + w - 1), (y + h - 1));
- BLADE_OUT(0x2144, 0xE0000000 |
- pTrident->BltScanDirection |
- (1 << 4) |
- (skipleft ? 1 : 0));
- BLADE_OUT(0x2108, ((y & 0xfff) << 16) | (x & 0xfff));
- BLADE_OUT(0x210C, (((y + h - 1) & 0xfff) << 16) |
- ((x + w - 1) & 0xfff));
-}
-
-static void
-BladeSetupForMono8x8PatternFill(ScrnInfoPtr pScrn,
- int patternx, int patterny,
- int fg, int bg,
- int rop,
- unsigned int planemask)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- BladeSync(pScrn);
- BLADE_OUT(0x2148, XAAGetPatternROP(rop));
-
- if (bg == -1) {
- REPLICATE(fg);
- BLADE_OUT(0x216C, 0x80000000 | (1 << 30));
- BLADE_OUT(0x216C, 0x80000000 | (1 << 28) | (1 << 30));
- BLADE_OUT(0x2170, patternx);
- BLADE_OUT(0x2170, patterny);
- BLADE_OUT(0x2174, fg);
-#if 0
- BLADE_OUT(0x2178, ~fg);
-#endif
- } else {
- REPLICATE(fg);
- REPLICATE(bg);
- BLADE_OUT(0x216C, 0x80000000);
- BLADE_OUT(0x216C, 0x80000000 | (1 << 28));
- BLADE_OUT(0x2170, patternx);
- BLADE_OUT(0x2170, patterny);
- BLADE_OUT(0x2174, fg);
- BLADE_OUT(0x2178, bg);
- }
-
- pTrident->BltScanDirection = 0;
-#if 0
- REPLICATE(planemask);
- if (planemask != -1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-#endif
-}
-
-static void
-BladeSubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn,
- int patternx, int patterny,
- int x, int y,
- int w, int h)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
- int clip = 0;
-
- if (pTrident->Clipping) clip = 1;
- BLADE_OUT(0x2144, 0x20000000 |
- pTrident->BltScanDirection |
- (7 << 12) | (1 << 4) |
- (1 << 19) | (2 << 2) | clip);
- BLADE_OUT(0x2108, (y << 16) | x);
- BLADE_OUT(0x210C, (((y + h - 1) & 0xfff) << 16) |
- ((x + w - 1) & 0xfff));
-}
-
-#if 0
-static void
-BladeSetupForColor8x8PatternFill(ScrnInfoPtr pScrn,
- int patternx, int patterny,
- int rop,
- unsigned int planemask,
- int transparency_color)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- TGUI_PATLOC(((patterny *
- pScrn->displayWidth *
- (pScrn->bitsPerPixel / 8)) +
- (patternx *
- (pScrn->bitsPerPixel / 8))) >> 6);
- pTrident->BltScanDirection = 0;
- if (transparency_color != -1) {
- BLADE_OUT(0x2168, transparency_color & 0xffffff);
- pTrident->BltScanDirection |= (1 << 6);
- }
- TGUI_FMIX(XAAGetPatternROP(rop));
- REPLICATE(planemask);
- if (planemask != -1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-}
-
-static void
-BladeSubsequentColor8x8PatternFillRect(ScrnInfoPtr pScrn,
- int patternx, int patterny,
- int x, int y,
- int w, int h)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- TGUI_DEST_XY(x, y);
- TGUI_DIM_XY(w, h);
- TGUI_COMMAND(GE_BLT);
- CHECKCLIPPING;
-}
-#endif
-
-static void
-BladeSetupForImageWrite(ScrnInfoPtr pScrn,
- int rop,
- unsigned int planemask,
- int transparency_color,
- int bpp, int depth)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- BLADE_OUT(0x2148, XAAGetCopyROP(rop));
- pTrident->BltScanDirection = 0;
-#if 0
- REPLICATE(planemask);
- if (planemask != -1) {
- BLADE_OUT(0x2184, ~planemask);
- pTrident->BltScanDirection |= (1 << 5);
- }
-#endif
-}
-
-static void
-BladeSubsequentImageWriteRect(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int skipleft)
-{
- TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
-
- if (skipleft)
- BladeSetClippingRectangle(pScrn,
- x + skipleft, y,
- (x + w - 1), (y + h - 1));
- BLADE_OUT(0x2144, 0xE0000000 |
- (1 << 19) | (1 << 4) |
- pTrident->BltScanDirection |
- (skipleft ? 1 : 0));
- BLADE_OUT(0x2108, (y << 16) | (x & 0xfff));
- BLADE_OUT(0x210C, (((y + h - 1) & 0xfff) << 16) |
- ((x + w - 1) & 0xfff));
-}
-#endif
diff --git a/src/blade_xaa.c b/src/blade_xaa.c
new file mode 100644
index 0000000..128913f
--- /dev/null
+++ b/src/blade_xaa.c
@@ -0,0 +1,863 @@
+/*
+ * Copyright 1997-2003 by Alan Hourihane, North Wales, UK.
+ *
+ * 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, and that the name of Alan
+ * Hourihane not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. Alan Hourihane makes no representations about the
+ * suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL ALAN HOURIHANE 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.
+ *
+ * Authors: Alan Hourihane, <alanh at fairlite.demon.co.uk>
+ *
+ * Trident Blade3D accelerated options.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xf86.h"
+#include "xf86_OSproc.h"
+
+#include "xf86Pci.h"
+
+#include "miline.h"
+
+#include "trident.h"
+#include "trident_regs.h"
+
+#ifdef HAVE_XAA_H
+#include "xaarop.h"
+#include "xaalocal.h"
+
+static void BladeSync(ScrnInfoPtr pScrn);
+#if 0
+static void BladeSetupForSolidLine(ScrnInfoPtr pScrn,
+ int color,
+ int rop,
+ unsigned int planemask);
+static void BladeSubsequentSolidBresenhamLine(ScrnInfoPtr pScrn,
+ int x, int y,
+ int dmaj, int dmin,
+ int e, int len,
+ int octant);
+static void BladeSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn,
+ int x1, int y1,
+ int x2, int y2,
+ int flags);
+static void BladeSetupForDashedLine(ScrnInfoPtr pScrn,
+ int fg, int bg,
+ int rop,
+ unsigned int planemask,
+ int length,
+ unsigned char *pattern);
+static void BladeSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn,
+ int x1, int y1,
+ int x2, int y2,
+ int flags, int phase);
+#endif
+static void BladeSetupForFillRectSolid(ScrnInfoPtr pScrn,
+ int color,
+ int rop,
+ unsigned int planemask);
+static void BladeSubsequentFillRectSolid(ScrnInfoPtr pScrn,
+ int x, int y,
+ int w, int h);
+static void BladeSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
+ int x1, int y1,
+ int x2, int y2,
+ int w, int h);
+static void BladeSetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
+ int xdir, int ydir,
+ int rop,
+ unsigned int planemask,
+ int transparency_color);
+#if 0
+static void BladeSetupForScreenToScreenColorExpand(ScrnInfoPtr pScrn,
+ int fg, int bg,
+ int rop,
+ unsigned int planemask);
+static void BladeSubsequentScreenToScreenColorExpand(ScrnInfoPtr pScrn,
+ int x, int y,
+ int w, int h,
+ int srcx, int srcy,
+ int offset);
+#endif
+static void BladeSetupForCPUToScreenColorExpand(ScrnInfoPtr pScrn,
+ int fg, int bg,
+ int rop,
+ unsigned int planemask);
+static void BladeSubsequentCPUToScreenColorExpand(ScrnInfoPtr pScrn,
+ int x, int y,
+ int w, int h,
+ int skipleft);
+static void BladeSetClippingRectangle(ScrnInfoPtr pScrn,
+ int x1, int y1,
+ int x2, int y2);
+static void BladeDisableClipping(ScrnInfoPtr pScrn);
+static void BladeSetupForMono8x8PatternFill(ScrnInfoPtr pScrn,
+ int patternx,
+ int patterny,
+ int fg, int bg,
+ int rop,
+ unsigned int planemask);
+static void BladeSubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn,
+ int patternx,
+ int patterny,
+ int x, int y,
+ int w, int h);
+#if 0
+static void BladeSetupForColor8x8PatternFill(ScrnInfoPtr pScrn,
+ int patternx,
+ int patterny,
+ int rop,
+ unsigned int planemask,
+ int trans_col);
+static void BladeSubsequentColor8x8PatternFillRect(ScrnInfoPtr pScrn,
+ int patternx,
+ int patterny,
+ int x, int y,
+ int w, int h);
+#endif
+static void BladeSetupForImageWrite(ScrnInfoPtr pScrn,
+ int rop,
+ unsigned int planemask,
+ int transparency_color,
+ int bpp, int depth);
+static void BladeSubsequentImageWriteRect(ScrnInfoPtr pScrn,
+ int x, int y,
+ int w, int h,
+ int skipleft);
+
+static void
+BladeInitializeAccelerator(ScrnInfoPtr pScrn)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+ CARD32 stride;
+
+ stride = (pScrn->displayWidth >> 3) << 20;
+
+ BLADE_OUT(0x21C8, stride);
+ BLADE_OUT(0x21CC, stride);
+ BLADE_OUT(0x21D0, stride);
+ BLADE_OUT(0x21D4, stride);
+ switch (pScrn->depth) {
+ case 8:
+ stride |= (0 << 29);
+ break;
+ case 15:
+ stride |= (5 << 29);
+ break;
+ case 16:
+ stride |= (1 << 29);
+ break;
+ case 24:
+ stride |= (2 << 29);
+ break;
+ }
+
+ BLADE_OUT(0x21B8, 0);
+ BLADE_OUT(0x21B8, stride);
+ BLADE_OUT(0x21BC, stride);
+ BLADE_OUT(0x21C0, stride);
+ BLADE_OUT(0x21C4, stride);
+#if 0
+ /* It appears that the driver sometimes misdetects the RAM type, so we
+ * don't force this for now */
+ if (pTrident->HasSGRAM)
+ BLADE_OUT(0x2168, 1 << 26); /* Enables Block Write if available (SGRAM) */
+ else
+ BLADE_OUT(0x2168, 0);
+#endif
+ BLADE_OUT(0x216C, 0);
+}
+#endif
+
+Bool BladeXaaInit(ScreenPtr pScreen) {
+#ifdef HAVE_XAA_H
+ XAAInfoRecPtr infoPtr;
+ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ if (pTrident->NoAccel)
+ return FALSE;
+
+ pTrident->AccelInfoRec = infoPtr = XAACreateInfoRec();
+ if (!infoPtr) return FALSE;
+
+ pTrident->InitializeAccelerator = BladeInitializeAccelerator;
+ BladeInitializeAccelerator(pScrn);
+
+ infoPtr->Flags = PIXMAP_CACHE |
+ LINEAR_FRAMEBUFFER |
+ OFFSCREEN_PIXMAPS;
+
+ infoPtr->Sync = BladeSync;
+
+ infoPtr->SetClippingRectangle = BladeSetClippingRectangle;
+ infoPtr->DisableClipping = BladeDisableClipping;
+
+#if 0
+ infoPtr->SolidLineFlags = 0;
+ infoPtr->SetupForSolidLine = BladeSetupForSolidLine;
+ infoPtr->SubsequentSolidTwoPointLine =
+ BladeSubsequentSolidTwoPointLine;
+ infoPtr->SetupForDashedLine = BladeSetupForDashedLine;
+ infoPtr->SubsequentDashedTwoPointLine =
+ BladeSubsequentDashedTwoPointLine;
+ infoPtr->DashPatternMaxLength = 16;
+ infoPtr->DashedLineFlags = LINE_PATTERN_LSBFIRST_LSBJUSTIFIED |
+ LINE_PATTERN_POWER_OF_2_ONLY;
+#endif
+
+ infoPtr->SolidFillFlags = NO_PLANEMASK;
+ infoPtr->SetupForSolidFill = BladeSetupForFillRectSolid;
+ infoPtr->SubsequentSolidFillRect = BladeSubsequentFillRectSolid;
+
+ infoPtr->ScreenToScreenCopyFlags = ONLY_TWO_BITBLT_DIRECTIONS |
+ NO_PLANEMASK |
+ NO_TRANSPARENCY;
+
+ infoPtr->SetupForScreenToScreenCopy =
+ BladeSetupForScreenToScreenCopy;
+ infoPtr->SubsequentScreenToScreenCopy =
+ BladeSubsequentScreenToScreenCopy;
+
+ infoPtr->Mono8x8PatternFillFlags = NO_PLANEMASK |
+ NO_TRANSPARENCY |
+ BIT_ORDER_IN_BYTE_MSBFIRST |
+ HARDWARE_PATTERN_SCREEN_ORIGIN |
+ HARDWARE_PATTERN_PROGRAMMED_BITS;
+
+ infoPtr->SetupForMono8x8PatternFill =
+ BladeSetupForMono8x8PatternFill;
+ infoPtr->SubsequentMono8x8PatternFillRect =
+ BladeSubsequentMono8x8PatternFillRect;
+
+#if 0
+ infoPtr->Color8x8PatternFillFlags =
+ HARDWARE_PATTERN_SCREEN_ORIGIN |
+ BIT_ORDER_IN_BYTE_MSBFIRST;
+
+ infoPtr->SetupForColor8x8PatternFill =
+ TridentSetupForColor8x8PatternFill;
+ infoPtr->SubsequentColor8x8PatternFillRect =
+ TridentSubsequentColor8x8PatternFillRect;
+
+ infoPtr->ScreenToScreenColorExpandFillFlags = 0;
+
+ infoPtr->SetupForScreenToScreenColorExpandFill =
+ BladeSetupForScreenToScreenColorExpand;
+ infoPtr->SubsequentScreenToScreenColorExpandFill =
+ BladeSubsequentScreenToScreenColorExpand;
+#endif
+
+ infoPtr->CPUToScreenColorExpandFillFlags =
+ CPU_TRANSFER_PAD_DWORD |
+ LEFT_EDGE_CLIPPING |
+ SYNC_AFTER_COLOR_EXPAND |
+ NO_PLANEMASK |
+ BIT_ORDER_IN_BYTE_MSBFIRST |
+ SCANLINE_PAD_DWORD;
+ infoPtr->ColorExpandRange = 0x10000;
+ infoPtr->ColorExpandBase = pTrident->IOBase + 0x10000;
+ infoPtr->SetupForCPUToScreenColorExpandFill =
+ BladeSetupForCPUToScreenColorExpand;
+ infoPtr->SubsequentCPUToScreenColorExpandFill =
+ BladeSubsequentCPUToScreenColorExpand;
+
+ infoPtr->SetupForImageWrite = BladeSetupForImageWrite;
+ infoPtr->SubsequentImageWriteRect =
+ BladeSubsequentImageWriteRect;
+ infoPtr->ImageWriteFlags = NO_PLANEMASK |
+ LEFT_EDGE_CLIPPING |
+ CPU_TRANSFER_PAD_DWORD |
+ SYNC_AFTER_IMAGE_WRITE;
+ infoPtr->ImageWriteBase = pTrident->IOBase + 0x10000;
+ infoPtr->ImageWriteRange = 0x10000;
+
+ return(XAAInit(pScreen, infoPtr));
+#else
+ return FALSE;
+#endif
+}
+
+#ifdef HAVE_XAA_H
+static void
+BladeSync(ScrnInfoPtr pScrn)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+ int busy;
+ int cnt = 10000000;
+
+ if (pTrident->Clipping) BladeDisableClipping(pScrn);
+ BLADE_OUT(0x216C, 0);
+
+ BLADEBUSY(busy);
+ while (busy != 0) {
+ if (--cnt < 0) {
+ ErrorF("GE timeout\n");
+ BLADE_OUT(0x2124, 1 << 7);
+ BLADE_OUT(0x2124, 0);
+ break;
+ }
+
+ BLADEBUSY(busy);
+ }
+}
+
+static void
+BladeSetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
+ int xdir, int ydir,
+ int rop,
+ unsigned int planemask,
+ int transparency_color)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ pTrident->BltScanDirection = 0;
+ if ((xdir < 0) || (ydir < 0))
+ pTrident->BltScanDirection |= (1 << 1);
+
+#if 0
+ if (transparency_color != -1) {
+ BLADE_OUT(0x2168, transparency_color & 0xffffff);
+ pTrident->BltScanDirection |= (1 << 6);
+ }
+
+ REPLICATE(planemask);
+ if (planemask != (unsigned int)-1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+
+#endif
+ BLADE_OUT(0x2148, XAAGetCopyROP(rop));
+}
+
+static void
+BladeSubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
+ int x1, int y1,
+ int x2, int y2,
+ int w, int h)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+ int clip = 0;
+
+ if (pTrident->Clipping) clip = 1;
+
+ BLADE_OUT(0x2144, 0xE0000000 |
+ (1 << 19) | (1 << 4) | (1 << 2) |
+ pTrident->BltScanDirection | clip);
+
+ if (pTrident->BltScanDirection) {
+ BLADE_OUT(0x2100, ((y1 + h - 1) << 16) | (x1 + w - 1));
+ BLADE_OUT(0x2104, (y1 << 16) | x1);
+ BLADE_OUT(0x2108, ((y2 + h - 1) << 16) | (x2 + w - 1));
+ BLADE_OUT(0x210C, ((y2 & 0xfff) << 16) | (x2 & 0xfff));
+ } else {
+ BLADE_OUT(0x2100, (y1 << 16) | x1);
+ BLADE_OUT(0x2104, ((y1 + h - 1) << 16) | (x1 + w - 1));
+ BLADE_OUT(0x2108, (y2 << 16) | x2);
+ BLADE_OUT(0x210C, (((y2 + h - 1) & 0xfff) << 16) |
+ ((x2 + w - 1) & 0xfff));
+ }
+}
+
+static void
+BladeSetClippingRectangle(ScrnInfoPtr pScrn,
+ int x1, int y1,
+ int x2, int y2)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ BLADE_OUT(0x2154, ((y1 & 0x0fff) << 16) | (x1 & 0x0fff));
+ BLADE_OUT(0x2158, ((y2 & 0x0fff) << 16) | (x2 & 0x0fff));
+ pTrident->Clipping = TRUE;
+}
+
+static void
+BladeDisableClipping(ScrnInfoPtr pScrn)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+ pTrident->Clipping = FALSE;
+}
+
+#if 0
+static void
+BladeSetupForSolidLine(ScrnInfoPtr pScrn,
+ int color,
+ int rop,
+ unsigned int planemask)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ REPLICATE(color);
+ BLADE_OUT(0x2160, color);
+ BLADE_OUT(0x2148, XAAGetCopyROP(rop));
+ pTrident->BltScanDirection = 0;
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+}
+
+static void
+BladeSubsequentSolidBresenhamLine(ScrnInfoPtr pScrn,
+ int x, int y,
+ int dmaj, int dmin,
+ int e, int len,
+ int octant)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+ int tmp;
+ int D = 0, E = 0, ymajor = 0;
+
+ BLADE_OUT(0x2144, 0x20000000 |
+ (3 << 19) | (1 << 4) | (2 << 2) |
+ (pTrident->Clipping ? 1 : 0));
+
+ if (!(octant & YMAJOR)) {
+ if ((!(octant & XDECREASING)) && (!(octant & YDECREASING))) {
+ E = 1; D = 0;
+ }
+
+ if ((!(octant & XDECREASING)) && ( (octant & YDECREASING))) {
+ E = 1; D = 1;
+ }
+
+ if (( (octant & XDECREASING)) && (!(octant & YDECREASING))) {
+ E = 1; D = 2;
+ }
+
+ if (( (octant & XDECREASING)) && ( (octant & YDECREASING))) {
+ E = 1; D = 3;
+ }
+
+ ymajor = 0;
+ } else {
+ if ((!(octant & XDECREASING)) && (!(octant & YDECREASING))) {
+ E = 0; D = 0;
+ }
+
+ if ((!(octant & XDECREASING)) && ( (octant & YDECREASING))) {
+ E = 0; D = 2;
+ }
+
+ if (( (octant & XDECREASING)) && (!(octant & YDECREASING))) {
+ E = 0; D = 1;
+ }
+
+ if (( (octant & XDECREASING)) && ( (octant & YDECREASING))) {
+ E = 0; D = 3;
+ }
+
+ ymajor = 1 << 21;
+ }
+
+ if (E) {
+ tmp = x; x = y; y = tmp;
+ }
+
+ BLADE_OUT(0x2130, 0x00000001);
+ if (D & 0x02) {
+ BLADE_OUT(0x213C, 0x10000000 |
+ (1 << 25) | (1 << 19) | (1 << 17) |
+ ymajor | ((x + len - 1) << 4));
+ } else {
+ BLADE_OUT(0x213C, 0x10000000 |
+ (1 << 25) | (1 << 19) | (1 << 17) |
+ ymajor | ((y + len - 1) << 4));
+ }
+
+ BLADE_OUT(0x2140, (E << 30) |
+ ((y & 0xfff) << 20) | ((x & 0xfff) << 4));
+ BLADE_OUT(0x2144, (D << 30) |
+ (((dmaj - dmin) & 0xfff) << 16) |
+ (-dmin & 0xfff));
+ BLADE_OUT(0x2148, ((-(dmin + e) & 0xfff) << 16));
+}
+
+static void
+BladeSubsequentSolidTwoPointLine(ScrnInfoPtr pScrn,
+ int x1, int y1,
+ int x2, int y2,
+ int flags)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+#if 0
+ if (flags & OMIT_LAST)
+ BladeSetClippingRectangle(pScrn, x1, y1, x2 - 1, y2 - 1);
+#endif
+
+ BLADE_OUT(0x2144, 0x20000000 |
+ pTrident->BltScanDirection |
+ (1 << 19) | (1 << 4) | (2 << 2));
+ BLADE_OUT(0x2130, 0x3);
+ BLADE_OUT(0x2108, (y1 << 16) | x1);
+ BLADE_OUT(0x210C, ((y2 & 0xfff) << 16) | (x2 & 0xfff));
+
+#if 0
+ if (flags & OMIT_LAST)
+ BladeDisableClipping(pScrn);
+#endif
+}
+
+static void
+BladeSetupForDashedLine(ScrnInfoPtr pScrn,
+ int fg, int bg,
+ int rop,
+ unsigned int planemask,
+ int length,
+ unsigned char *pattern)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ pTrident->LinePattern = *((CARD16 *)pattern) & ((1 << length) - 1);
+ switch (length) {
+ case 2:
+ pTrident->LinePattern = pTrident->LinePattern |
+ (pTrident->LinePattern << 2);
+ case 4:
+ pTrident->LinePattern = pTrident->LinePattern |
+ (pTrident->LinePattern << 4);
+ case 8:
+ pTrident->LinePattern = pTrident->LinePattern |
+ (pTrident->LinePattern << 8);
+ }
+
+ REPLICATE(fg);
+ REPLICATE(bg);
+ BLADE_OUT(0x2160, fg);
+ BLADE_OUT(0x2164, bg);
+ BLADE_OUT(0x2148, XAAGetCopyROP(rop));
+ pTrident->BltScanDirection = 0;
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+}
+
+static void
+BladeSubsequentDashedTwoPointLine(ScrnInfoPtr pScrn,
+ int x1, int y1,
+ int x2, int y2,
+ int flags, int phase)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ if (flags & OMIT_LAST)
+ BladeSetClippingRectangle(pScrn, x1, y1, x2 - 1, y2 - 1);
+
+ BLADE_OUT(0x216C, (pTrident->LinePattern >> phase) |
+ (pTrident->LinePattern << (16 - phase)));
+ BLADE_OUT(0x2144, 0x20000000 |
+ pTrident->BltScanDirection |
+ (1 << 27) | (1 << 19) | (1 << 4) | (2 << 2));
+ BLADE_OUT(0x2108, (y1 << 16) | x1);
+ BLADE_OUT(0x210C, ((y2 & 0xfff) << 16) | (x2 & 0xfff));
+
+ if (flags & OMIT_LAST)
+ BladeDisableClipping(pScrn);
+}
+#endif
+
+static void
+BladeSetupForFillRectSolid(ScrnInfoPtr pScrn,
+ int color,
+ int rop,
+ unsigned int planemask)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ REPLICATE(color);
+ BLADE_OUT(0x2160, color);
+ BLADE_OUT(0x2148, XAAGetCopyROP(rop));
+ pTrident->BltScanDirection = 0;
+#if 0
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+#endif
+}
+
+static void
+BladeSubsequentFillRectSolid(ScrnInfoPtr pScrn,
+ int x, int y,
+ int w, int h)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ BLADE_OUT(0x2144, 0x20000000 |
+ pTrident->BltScanDirection |
+ (1 << 19) | (1 << 4) | (2 << 2) |
+ (pTrident->Clipping ? 1 : 0));
+ BLADE_OUT(0x2108, (y << 16) | x);
+ BLADE_OUT(0x210C, (((y + h - 1) & 0xfff) << 16) |
+ ((x + w - 1) & 0xfff));
+}
+
+#if 0
+static void
+BladeSetupForScreenToScreenColorExpand(ScrnInfoPtr pScrn,
+ int fg, int bg,
+ int rop,
+ unsigned int planemask)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ pTrident->ROP = rop;
+
+ REPLICATE(bg);
+ REPLICATE(fg);
+ IMAGE_OUT(0x44, fg);
+ IMAGE_OUT(0x48, bg);
+ IMAGE_OUT(0x20, 0x90000000 | XAAGetCopyROP(rop));
+ pTrident->BltScanDirection = 0;
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+}
+
+static void
+BladeSubsequentScreenToScreenColorExpand(ScrnInfoPtr pScrn,
+ int x, int y,
+ int w, int h,
+ int srcx, int srcy,
+ int offset)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ IMAGE_OUT(0x00, (srcy << 16) | srcx);
+ IMAGE_OUT(0x04, ((srcy + h - 1) << 16) | (srcx + w - 1));
+ IMAGE_OUT(0x08, (y << 16) | x);
+ IMAGE_OUT(0x0C, ((y + h - 1) << 16) | (x + w - 1));
+
+ IMAGE_OUT(0x24, 0x80000000 |
+ (3 << 22) | (1 << 7) |
+ pTrident->BltScanDirection |
+ (pTrident->ROP == GXcopy ? 0 : (1 << 10)) |
+ (offset << 25));
+}
+#endif
+
+static void
+BladeSetupForCPUToScreenColorExpand(ScrnInfoPtr pScrn,
+ int fg, int bg,
+ int rop,
+ unsigned int planemask)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ pTrident->BltScanDirection = 0;
+ BLADE_OUT(0x2148, XAAGetCopyROP(rop));
+ if (bg == -1) {
+ pTrident->BltScanDirection |= (2 << 19);
+ REPLICATE(fg);
+ BLADE_OUT(0x2160, fg);
+ BLADE_OUT(0x2164, ~fg);
+ } else {
+ pTrident->BltScanDirection |= (3 << 19);
+ REPLICATE(fg);
+ REPLICATE(bg);
+ BLADE_OUT(0x2160, fg);
+ BLADE_OUT(0x2164, bg);
+ }
+
+#if 0
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+#endif
+}
+
+static void
+BladeSubsequentCPUToScreenColorExpand(ScrnInfoPtr pScrn,
+ int x, int y,
+ int w, int h,
+ int skipleft)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ if (skipleft)
+ BladeSetClippingRectangle(pScrn,
+ x + skipleft, y,
+ (x + w - 1), (y + h - 1));
+ BLADE_OUT(0x2144, 0xE0000000 |
+ pTrident->BltScanDirection |
+ (1 << 4) |
+ (skipleft ? 1 : 0));
+ BLADE_OUT(0x2108, ((y & 0xfff) << 16) | (x & 0xfff));
+ BLADE_OUT(0x210C, (((y + h - 1) & 0xfff) << 16) |
+ ((x + w - 1) & 0xfff));
+}
+
+static void
+BladeSetupForMono8x8PatternFill(ScrnInfoPtr pScrn,
+ int patternx, int patterny,
+ int fg, int bg,
+ int rop,
+ unsigned int planemask)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ BladeSync(pScrn);
+ BLADE_OUT(0x2148, XAAGetPatternROP(rop));
+
+ if (bg == -1) {
+ REPLICATE(fg);
+ BLADE_OUT(0x216C, 0x80000000 | (1 << 30));
+ BLADE_OUT(0x216C, 0x80000000 | (1 << 28) | (1 << 30));
+ BLADE_OUT(0x2170, patternx);
+ BLADE_OUT(0x2170, patterny);
+ BLADE_OUT(0x2174, fg);
+#if 0
+ BLADE_OUT(0x2178, ~fg);
+#endif
+ } else {
+ REPLICATE(fg);
+ REPLICATE(bg);
+ BLADE_OUT(0x216C, 0x80000000);
+ BLADE_OUT(0x216C, 0x80000000 | (1 << 28));
+ BLADE_OUT(0x2170, patternx);
+ BLADE_OUT(0x2170, patterny);
+ BLADE_OUT(0x2174, fg);
+ BLADE_OUT(0x2178, bg);
+ }
+
+ pTrident->BltScanDirection = 0;
+#if 0
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+#endif
+}
+
+static void
+BladeSubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn,
+ int patternx, int patterny,
+ int x, int y,
+ int w, int h)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+ int clip = 0;
+
+ if (pTrident->Clipping) clip = 1;
+ BLADE_OUT(0x2144, 0x20000000 |
+ pTrident->BltScanDirection |
+ (7 << 12) | (1 << 4) |
+ (1 << 19) | (2 << 2) | clip);
+ BLADE_OUT(0x2108, (y << 16) | x);
+ BLADE_OUT(0x210C, (((y + h - 1) & 0xfff) << 16) |
+ ((x + w - 1) & 0xfff));
+}
+
+#if 0
+static void
+BladeSetupForColor8x8PatternFill(ScrnInfoPtr pScrn,
+ int patternx, int patterny,
+ int rop,
+ unsigned int planemask,
+ int transparency_color)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ TGUI_PATLOC(((patterny *
+ pScrn->displayWidth *
+ (pScrn->bitsPerPixel / 8)) +
+ (patternx *
+ (pScrn->bitsPerPixel / 8))) >> 6);
+ pTrident->BltScanDirection = 0;
+ if (transparency_color != -1) {
+ BLADE_OUT(0x2168, transparency_color & 0xffffff);
+ pTrident->BltScanDirection |= (1 << 6);
+ }
+ TGUI_FMIX(XAAGetPatternROP(rop));
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+}
+
+static void
+BladeSubsequentColor8x8PatternFillRect(ScrnInfoPtr pScrn,
+ int patternx, int patterny,
+ int x, int y,
+ int w, int h)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ TGUI_DEST_XY(x, y);
+ TGUI_DIM_XY(w, h);
+ TGUI_COMMAND(GE_BLT);
+ CHECKCLIPPING;
+}
+#endif
+
+static void
+BladeSetupForImageWrite(ScrnInfoPtr pScrn,
+ int rop,
+ unsigned int planemask,
+ int transparency_color,
+ int bpp, int depth)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ BLADE_OUT(0x2148, XAAGetCopyROP(rop));
+ pTrident->BltScanDirection = 0;
+#if 0
+ REPLICATE(planemask);
+ if (planemask != -1) {
+ BLADE_OUT(0x2184, ~planemask);
+ pTrident->BltScanDirection |= (1 << 5);
+ }
+#endif
+}
+
+static void
+BladeSubsequentImageWriteRect(ScrnInfoPtr pScrn,
+ int x, int y,
+ int w, int h,
+ int skipleft)
+{
+ TRIDENTPtr pTrident = TRIDENTPTR(pScrn);
+
+ if (skipleft)
+ BladeSetClippingRectangle(pScrn,
+ x + skipleft, y,
+ (x + w - 1), (y + h - 1));
+ BLADE_OUT(0x2144, 0xE0000000 |
+ (1 << 19) | (1 << 4) |
+ pTrident->BltScanDirection |
+ (skipleft ? 1 : 0));
+ BLADE_OUT(0x2108, (y << 16) | (x & 0xfff));
+ BLADE_OUT(0x210C, (((y + h - 1) & 0xfff) << 16) |
+ ((x + w - 1) & 0xfff));
+}
+#endif
--
2.7.4
More information about the xorg-devel
mailing list