xf86-video-voodoo/0013-Remove-XAA-support.patch

819 lines
23 KiB
Diff
Raw Normal View History

From 38537b4dffdcba1dfde99f3e7106a5c23c9859b3 Mon Sep 17 00:00:00 2001
From: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Wed, 22 May 2024 19:02:40 -0700
Subject: [PATCH 13/15] Remove XAA support
Mostly done via unifdef -UHAVE_XAA_H, followed by minor manual editing
Since recent commits require xserver-1.18.0 or later to build against,
there's no reason leaving behind big chunks of code that can only build
against the XAA support removed in xserver-1.13.0 (released in 2012).
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/driver/xf86-video-voodoo/-/merge_requests/8>
---
configure.ac | 18 --
src/voodoo.h | 10 -
src/voodoo_dga.c | 3 -
src/voodoo_driver.c | 19 +-
src/voodoo_hardware.c | 629 ------------------------------------------
5 files changed, 4 insertions(+), 675 deletions(-)
diff --git a/configure.ac b/configure.ac
index c1e826f..827d293 100644
--- a/configure.ac
+++ b/configure.ac
@@ -84,24 +84,6 @@ fi
AM_CONDITIONAL(XSERVER_LIBPCIACCESS, test "x$XSERVER_LIBPCIACCESS" = xyes)
-AC_ARG_ENABLE(xaa,
- AS_HELP_STRING([--enable-xaa],
- [Enable legacy X Acceleration Architecture (XAA) [default=auto]]),
- [XAA="$enableval"],
- [XAA=auto])
-if test "x$XAA" != xno; then
- save_CFLAGS=$CFLAGS
- save_CPPFLAGS=$CPPFLAGS
- CFLAGS=$XORG_CFLAGS
- CPPFLAGS="$XORG_CFLAGS"
- AC_CHECK_HEADERS([xaa.h], XAA=yes, XAA=no)
- CFLAGS=$save_CFLAGS
- CPPFLAGS=$save_CPPFLAGS
-fi
-AC_MSG_CHECKING([whether to include XAA support])
-AM_CONDITIONAL(XAA, test "x$XAA" = xyes)
-AC_MSG_RESULT([$XAA])
-
AC_SUBST([moduledir])
DRIVER_NAME=voodoo
diff --git a/src/voodoo.h b/src/voodoo.h
index 846ce66..772b3b6 100644
--- a/src/voodoo.h
+++ b/src/voodoo.h
@@ -13,9 +13,6 @@ typedef struct {
CARD8 * ShadowPtr; /* Shadow buffer */
CARD32 ShadowPitch;
CloseScreenProcPtr CloseScreen; /* Wrapped Close */
-#ifdef HAVE_XAA_H
- XAAInfoRecPtr AccelInfoRec; /* Cached Accel rec for close */
-#endif
Bool Blanked;
Bool PassThrough; /* Set to restore pass through on exit */
EntityInfoPtr pEnt;
@@ -33,9 +30,6 @@ typedef struct {
CARD32 FullHeight; /* Height including pixmap cache */
CARD32 Tiles; /* 32 tile count */
- int BlitDirX; /* Cache blitter direction */
- int BlitDirY; /* Cache blitter direction */
-
CARD32 lfbMode; /* Cached lfbMode value */
CARD32 alpha; /* Cached alpha reg for sw blit */
@@ -71,9 +65,6 @@ typedef struct {
PLLClock vClock;
PLLClock gClock;
-
- unsigned char LineBuffer[1028]; /* Draw buffer */
- unsigned char *LinePtr; /* To keep XAA amused */
} VoodooRec, *VoodooPtr;
#define TRUE 1
@@ -105,7 +96,6 @@ extern int VoodooHardwareInit(VoodooPtr pVoo);
extern int VoodooMode(ScrnInfoPtr pScrn, DisplayModePtr mode);
extern void VoodooBlank(VoodooPtr pVoo);
extern int VoodooMemorySize(VoodooPtr pVoo);
-extern void Voodoo2XAAInit(ScreenPtr pScreen);
extern void VoodooSync(ScrnInfoPtr pScrn);
extern void VoodooReadBank(ScreenPtr pScreen, int bank);
extern void VoodooWriteBank(ScreenPtr pScreen, int bank);
diff --git a/src/voodoo_dga.c b/src/voodoo_dga.c
index a13c9e7..b0865dc 100644
--- a/src/voodoo_dga.c
+++ b/src/voodoo_dga.c
@@ -47,9 +47,6 @@
#include "vgaHW.h"
#include "compiler.h"
#include "dgaproc.h"
-#ifdef HAVE_XAA_H
-#include "xaa.h"
-#endif
#include "voodoo.h"
#define _XF86DGA_SERVER_
diff --git a/src/voodoo_driver.c b/src/voodoo_driver.c
index 01c2710..88de297 100644
--- a/src/voodoo_driver.c
+++ b/src/voodoo_driver.c
@@ -54,9 +54,6 @@
#include "xf86cmap.h"
#include "shadowfb.h"
#include "compiler.h"
-#ifdef HAVE_XAA_H
-#include "xaa.h"
-#endif
#include "voodoo.h"
#define _XF86DGA_SERVER_
@@ -555,11 +552,10 @@ VoodooPreInit(ScrnInfoPtr pScrn, int flags)
return FALSE;
}
- if (!xf86LoadSubModule(pScrn, "xaa")) {
- xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Falling back to shadowfb\n");
- pVoo->Accel = 0;
- pVoo->ShadowFB = 1;
- }
+ /* No acceleration support since XAA was removed */
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Falling back to shadowfb\n");
+ pVoo->Accel = 0;
+ pVoo->ShadowFB = 1;
if(pVoo->ShadowFB)
{
@@ -672,9 +668,6 @@ VoodooScreenInit(SCREEN_INIT_ARGS_DECL)
VoodooDGAInit(pScrn, pScreen);
/* Activate accelerations */
- if(pVoo->Accel)
- Voodoo2XAAInit(pScreen);
-
xf86SetBackingStore(pScreen);
@@ -764,10 +757,6 @@ VoodooCloseScreen(CLOSE_SCREEN_ARGS_DECL)
VoodooRestore(pScrn, TRUE);
if(pVoo->ShadowPtr)
free(pVoo->ShadowPtr);
-#ifdef HAVE_XAA_H
- if(pVoo->AccelInfoRec)
- free(pVoo->AccelInfoRec);
-#endif
if (pVoo->pDGAMode) {
free(pVoo->pDGAMode);
pVoo->pDGAMode = NULL;
diff --git a/src/voodoo_hardware.c b/src/voodoo_hardware.c
index d1463e7..be33dd8 100644
--- a/src/voodoo_hardware.c
+++ b/src/voodoo_hardware.c
@@ -48,10 +48,6 @@
#include "vgaHW.h"
#include "compiler.h"
-#ifdef HAVE_XAA_H
-#include "xaa.h"
-#endif
-
#include "voodoo.h"
#include <X11/extensions/xf86dgaproto.h>
@@ -69,23 +65,6 @@
#include <unistd.h>
-#ifdef HAVE_XAA_H
-#if 0
-static void VoodooReadWriteBank(ScreenPtr pScreen, int bank);
-#endif
-static Bool VoodooSetupForCPUToScreenAlphaTexture(ScrnInfoPtr pScrn, int op,
- CARD16 red, CARD16 green, CARD16 blue, CARD16 alpha, int alphaType,
- CARD8 *alphaPtr, int alphaPitch, int width, int height, int flags);
-static void VoodooSubsequentCPUToScreenAlphaTexture(ScrnInfoPtr pScrn,
- int dstx, int dsty, int srcx, int srcy, int width, int height);
-static Bool VoodooSetupForCPUToScreenTexture(ScrnInfoPtr pScrn, int op,
- int texType, CARD8 *texPtr, int texPitch, int width, int height,
- int flags);
-static void VoodooSubsequentCPUToScreenTexture(ScrnInfoPtr pScrn,
- int dstx, int dsty, int srcx, int srcy, int width, int height);
-
-static int debug = 0;
-#endif
/*
* Big endian might need to byteswap these ?
@@ -865,56 +844,6 @@ static void VoodooReadWriteBank(ScreenPtr pScreen, int bank)
mmio32_w(pVoo, 0x114, pVoo->lfbMode);
}
#endif
-
-#ifdef HAVE_XAA_H
-/*
- * We normally want to load all four rop variants at once so
- * the table is the 16bits for the lot equal.
- */
-
-static CARD16 ropxlate[16] = {
- 0x0000, /* GXclear */
- 0x8888, /* GXand */
- 0x4444, /* GXandReverse */
- 0xCCCC, /* GXcopy */
- 0x2222, /* GXandInverted */
- 0xAAAA, /* GXnop */
- 0x6666, /* GXxor */
- 0xEEEE, /* GXor */
- 0x1111, /* GXnor */
- 0x9999, /* GXequiv */
- 0x5555, /* GXinvert */
- 0xDDDD, /* GXorReverse */
- 0x3333, /* GXcopyInverted */
- 0xBBBB, /* GXorInverted */
- 0x7777, /* GXnand */
- 0xFFFF /* GXset */
-};
-
-/*
- * Transparent mask rops
- */
-
-static CARD16 tropxlate[16] = {
- 0xAA00, /* GXclear */
- 0xAA88, /* GXand */
- 0xAA44, /* GXandReverse */
- 0xAACC, /* GXcopy */
- 0xAA22, /* GXandInverted */
- 0xAAAA, /* GXnop */
- 0xAA66, /* GXxor */
- 0xAAEE, /* GXor */
- 0xAA11, /* GXnor */
- 0xAA99, /* GXequiv */
- 0xAA55, /* GXinvert */
- 0xAADD, /* GXorReverse */
- 0xAA33, /* GXcopyInverted */
- 0xAABB, /* GXorInverted */
- 0xAA77, /* GXnand */
- 0xAAFF /* GXset */
-};
-#endif
-
void VoodooSync(ScrnInfoPtr pScrn)
{
@@ -923,561 +852,3 @@ void VoodooSync(ScrnInfoPtr pScrn)
wait_idle(pVoo);
mmio32_w(pVoo, 0x10C, 0); /* Maybe flag this */
}
-
-#ifdef HAVE_XAA_H
-static void Voodoo2Setup2D(VoodooPtr pVoo)
-{
- wait_idle(pVoo);
-}
-
-static void Voodoo2SetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
- int xdir, int ydir, int rop,
- unsigned int planemask,
- int trans_color)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- Voodoo2Setup2D(pVoo);
- pVoo->BlitDirX = xdir;
- pVoo->BlitDirY = ydir;
-
- if(trans_color == -1)
- {
- mmio32_w_chuck(pVoo, 0x2EC, ropxlate[rop]); /* Set the rop */
- mmio32_w_chuck(pVoo, 0x2F8, 0 | (1<<14) | (1<<15) | (1<<16)); /* 16bpp no color compare */
- }
- else
- {
- mmio32_w_chuck(pVoo, 0x2EC, tropxlate[rop]); /* Transparent src rop */
- mmio32_w_chuck(pVoo, 0x2CC, (trans_color << 16) | trans_color); /* Match transparent colour */
- mmio32_w_chuck(pVoo, 0x2F8, 0 | (1<<10) | (1<<14) | (1<<15) | (1<<16)); /* 16bpp color compare */
- }
-}
-
-static void Voodoo2SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
- int x1, int y1,
- int x2, int y2,
- int width, int height)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- wait_idle(pVoo);
- /* Adjust coordinates for backward blits */
- height --; /* Adjust for fenceposting in the hardware */
- width --;
- if(pVoo->BlitDirY < 0)
- {
- y1 += height;
- y2 += height;
- height = -height;
- }
- if(pVoo->BlitDirY < 0)
- {
- x1 += width;
- x2 += width;
- width = -width;
- }
- mmio32_w_chuck(pVoo, 0x2E0, (y1 << 16) | x1); /* Src x/y */
- mmio32_w_chuck(pVoo, 0x2E4, (y2 << 16) | x2); /* Dst x/y */
- /* Set size and fire */
- height &= 0xFFF;
- width &= 0xFFF;
- mmio32_w_chuck(pVoo, 0x2E8, (height << 16) | width | (1<<31));
-}
-
-static void Voodoo2SetupForSolidFill(ScrnInfoPtr pScrn, int color,
- int rop, unsigned int planemask)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- if (debug)
- ErrorF("Setup for solid fill colour %04X, rop %d, Mask %04X.\n",
- color, rop, planemask);
- Voodoo2Setup2D(pVoo);
- mmio32_w_chuck(pVoo, 0x2EC, ropxlate[rop]); /* rop */
- mmio32_w_chuck(pVoo, 0x2F0, color); /* fg color */
- mmio32_w_chuck(pVoo, 0x2F8, 2 | (1<<14) | (1<<15) | (0/*1*/<<16)); /* Solid fill 16bpp front */
-}
-
-static void Voodoo2SubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y,
- int w, int h)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- if (debug)
- ErrorF("Fill (%d, %d) for (%d, %d)\n", x, y, w, h);
- wait_idle(pVoo);
- mmio32_w_chuck(pVoo, 0x2E4, (y<<16) | x); /* Dst x,y */
- /* Set size and fire */
- mmio32_w_chuck(pVoo, 0x2E8, ((h-1) << 16) | (w-1) | (1<<31));
-}
-
-
-/*
- * Colour expand fills are standard hardware goodies
- */
-
-static void Voodoo2SetupForScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
- int fg, int bg,
- int rop,
- unsigned int planemask)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- Voodoo2Setup2D(pVoo);
- mmio32_w_chuck(pVoo, 0x2EC, ropxlate[rop]); /* Pattern op */
- mmio32_w_chuck(pVoo, 0x2F0, fg | (bg << 16)); /* colors */
- if(bg != -1) /* Set transparent if needed */
- mmio32_w_chuck(pVoo, 0x2F8, 1 | (1<<14) | (1<<15) | (1<<16));
- else
- mmio32_w_chuck(pVoo, 0x2F8, 1 | (1<<14) | (1<<15) | (1<<16) | (1<<17));
-}
-
-static void Voodoo2SubsequentScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
- int x, int y, int w, int h,
- int skipleft)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- wait_idle(pVoo);
- mmio32_w_chuck(pVoo, 0x2E4, x | (y<<16)); /* destination */
- mmio32_w_chuck(pVoo, 0x2E8, (w-1) | ((h-1)<<16) | (1<<31)); /* fire */
- pVoo->texW = w;
-}
-
-static void Voodoo2SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- CARD32 *data = (CARD32 *)pVoo->LineBuffer;
- int w = pVoo->texW;
- int i;
-
- wait_idle(pVoo);
- for(i = 0; i < w; i += 32) /* Each dword is 32 pixels mask */
- mmio32_w(pVoo, 0x2FC, *data++);
-}
-
-static void Voodoo2SetupForMono8x8PatternFill(ScrnInfoPtr pScrn, int patx, int paty,
- int fg, int bg, int rop, unsigned int planemask)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- Voodoo2Setup2D(pVoo);
- mmio32_w_chuck(pVoo, 0x2EC, ropxlate[rop]);
- mmio32_w_chuck(pVoo, 0x2F0, fg | (bg << 16));
- if(bg != -1)
- mmio32_w_chuck(pVoo, 0x2F8, 1 | (1<<14) | (1<<15) | (1<<16));
- else
- mmio32_w_chuck(pVoo, 0x2F8, 1 | (1<<14) | (1<<15) | (1<<16) | (1<<17));
-}
-
-/*
- * We don't have pattern fill hardware but for any operation that
- * references dst it is going to be faster to use the hardware
- * and simply upload the pattern a lot as we avoid reading
- * video memory. GXcopy ought to be the same either way.
- */
-
-static __inline__ CARD32 spread(CARD32 v)
-{
- return v * 16843009;
-}
-
-static void Voodoo2SubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn, int patx, int paty,
- int x, int y, int w, int h)
-{
- int ln = 0;
- CARD32 l[8];
- VoodooPtr pVoo = VoodooPTR(pScrn);
-
- wait_idle(pVoo);
-
- if( w <3)
- return;
-
- mmio32_w_chuck(pVoo, 0x2E4, x | (y<<16));
- mmio32_w_chuck(pVoo, 0x2E8, (w - 1) | ((h - 1)<<16) | (1<<31));
-
- /* Turn the pattern into 32x8 for the expansion engine */
- l[0] = spread((patx >> 24) & 0xFF);
- l[1] = spread((patx >> 16) & 0xFF);
- l[2] = spread((patx >> 8) & 0xFF);
- l[3] = spread(patx & 0xFF);
-
- l[4] = spread((paty >> 24) & 0xFF);
- l[5] = spread((paty >> 16) & 0xFF);
- l[6] = spread((paty >> 8) & 0xFF);
- l[7] = spread(paty & 0xFF);
-
- while(h > 0)
- {
- int i;
- for(i = 0; i < w; i += 32) /* DWORD pad */
- mmio32_w_chuck(pVoo, 0x2FC, l[ln]);
- wait_idle(pVoo);
- ln = (ln + 1) & 7;
- h--;
- }
-}
-
-/*
- * The XAA layer uses video memory as the basis for colour pattern
- * fill, so we can't usefully perform it.
- */
-
-static void Voodoo2SetupForSolidLine(ScrnInfoPtr pScrn, int color, int rop,
- unsigned int planemask)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- Voodoo2Setup2D(pVoo);
- mmio32_w_chuck(pVoo, 0x2CC, color);
- mmio32_w_chuck(pVoo, 0x2EC, ropxlate[rop]);
- mmio32_w_chuck(pVoo, 0x2F8, 2 | (1<<14) | (1<<15) | (1<<16)); /* Solid fill 16 bpp front */
-}
-
-static void Voodoo2SubsequentSolidHorVertLine(ScrnInfoPtr pScrn, int x, int y, int len, int dir)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- wait_idle(pVoo);
- mmio32_w_chuck(pVoo, 0x2E4, (y<<16) | x); /* Dst x,y */
- if(dir == DEGREES_0)
- mmio32_w_chuck(pVoo, 0x2E8, (len - 1) | (1<<31));
- else
- mmio32_w_chuck(pVoo, 0x2E8, ((len - 1) << 16) | (1<<31));
-}
-
-static void Voodoo2SetupForScanlineImageWrite(ScrnInfoPtr pScrn, int rop,
- unsigned int planemask, int trans_color,
- int bpp, int depth)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- Voodoo2Setup2D(pVoo);
- if(trans_color != -1)
- {
- mmio32_w_chuck(pVoo, 0x2CC, (trans_color << 16) | trans_color);
- mmio32_w_chuck(pVoo, 0x2EC, tropxlate[rop]);
- mmio32_w_chuck(pVoo, 0x2F8, 1 | (2<<3) | (1<<10) | (1<<14) | (1<<15) | (1<<16));
- }
- else
- {
- mmio32_w_chuck(pVoo, 0x2EC, ropxlate[rop]);
- mmio32_w_chuck(pVoo, 0x2F8, 1 | (2<<3) | (1<<14) | (1<<15) | (1<<16));
- }
- if(debug)
- ErrorF("Setup for image write rop %d col %d bpp %d depth %d\n",
- rop, trans_color, bpp, depth);
-}
-
-static void Voodoo2SubsequentImageWriteRect(ScrnInfoPtr pScrn,
- int x, int y,
- int w, int h,
- int skipleft)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- wait_idle(pVoo);
- mmio32_w_chuck(pVoo, 0x2E4, x | (y<<16));
- mmio32_w_chuck(pVoo, 0x2E8, (w - 1) | ((h - 1)<<16) | (1<<31));
- if(debug)
- ErrorF("Image Write (%d,%d) [%d,%d]\n", x,y,w,h);
- pVoo->texW = w;
-}
-
-static void Voodoo2SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- CARD32 *data = (CARD32 *)pVoo->LineBuffer;
- int w = pVoo->texW;
- int i;
-
- wait_idle(pVoo);
- for(i = 0; i < w; i += 2)
- mmio32_w(pVoo, 0x2FC, *data++);
-}
-
-static void Voodoo2SetClippingRectangle(ScrnInfoPtr pScrn,
- int left, int top, int right, int bottom)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- if(debug)
- ErrorF("Clip to (%d,%d)-(%d,%d)\n", left,top,right,bottom);
- mmio32_w_chuck(pVoo, 0x2D4, (left << 16) | right);
- mmio32_w_chuck(pVoo, 0x2D8, (top << 16 ) | bottom);
-}
-
-static void Voodoo2DisableClipping(ScrnInfoPtr pScrn)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- /* FIXME: pVoo->FullHeight for the cache ! */
- if(debug)
- ErrorF("Clip to (0,0)-(%d,%d)\n", (int)pVoo->Width, (int)pVoo->Height);
- mmio32_w_chuck(pVoo, 0x2D4, pVoo->Width);
- mmio32_w_chuck(pVoo, 0x2D8, pVoo->FullHeight);
-}
-
-/*
- * TODO: Implement 2D line acceleration using the 3D engines
- */
-
-#ifdef RENDER
-
-/*
- * Render acceleration. All Voodoo chips support cpu driver alpha
- * composite to the frame buffer. This is presumably meant for software
- * fallbacks on rendering 3D but happens to be very useful to avoid
- * some render operations reading from the frame buffer as much
- *
- * Possibly we could the 3D engine for this once we get it working.
- * We can't however use the 2D engine much as it lacks Alpha
- */
-
-
-static Bool VoodooSetupForCPUToScreenAlphaTexture(ScrnInfoPtr pScrn, int op,
- CARD16 red, CARD16 green, CARD16 blue, CARD16 alpha, int alphaType,
- CARD8 *alphaPtr, int alphaPitch, int width, int height, int flags)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
-
- pVoo->alphaType = alphaType;
- pVoo->alphaPitch = alphaPitch;
- pVoo->alphaPtr = alphaPtr;
- pVoo->alphaW = width;
- pVoo->alphaH = height;
- pVoo->alphaC = (red & 0xFF00) << 8 | (green & 0xFF00) | blue >> 8;
-
- if(op != PictOpOver && op != PictOpSrc)
- return FALSE;
-
- if(debug)
- ErrorF("Supported CPU To Screen Alpha Texture (%d) -> %d,%d\n", op, width, height);
- wait_idle(pVoo);
- if(op == PictOpSrc)
- pVoo->alpha = 0;
- else /* dst = src * srcalpha + (1-a) * dst */
- pVoo->alpha = (1<<4) | (1<<8) | (5<<12);
-
- return TRUE;
-}
-
-static void VoodooSubsequentCPUToScreenAlphaTexture(ScrnInfoPtr pScrn,
- int dstx, int dsty, int srcx, int srcy, int width, int height)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- /* 32bit LFB write mode */
- CARD32 *fb = (CARD32 *)(pVoo->FBBase + 4096 * dsty + 4 * dstx);
- CARD8 *db = pVoo->alphaPtr + pVoo->alphaW * srcy + srcx;
- int x, y;
- CARD32 *fdb;
- CARD8 *cdb;
- CARD32 colour = pVoo->alphaC;
- int dw, dh;
- int w, h;
-
- mmio32_w(pVoo, 0x10C, pVoo->alpha);
- mmio32_w(pVoo, 0x110, 1 | (1<<9));
- mmio32_w(pVoo, 0x114, (1<<8) | 5); /* ARGB888 */
-
- dh = srcy;
- w = pVoo->alphaW;
- h = pVoo->alphaH;
-
- for(y = 0; y < height; y++)
- {
- cdb = db;
- fdb = fb;
-
- dw = srcx;
- for(x = 0; x < width; x++)
- {
- *fdb++ = (*cdb++<< 24) | colour;
- if(++dw == w)
- {
- dw = 0;
- cdb -= pVoo->alphaW;
- }
- }
- db += pVoo->alphaW;
- fb += 1024;
- if(++dh == h)
- {
- db = pVoo->alphaPtr + srcx;
- dh = 0;
- }
- }
- mmio32_w(pVoo, 0x114, pVoo->lfbMode);
- mmio32_w(pVoo, 0x10C, 0);
-}
-
-static Bool VoodooSetupForCPUToScreenTexture(ScrnInfoPtr pScrn, int op,
- int texType, CARD8 *texPtr, int texPitch, int width, int height,
- int flags)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
-
- if(op != PictOpOver && op != PictOpSrc)
- return FALSE; /* For now */
-
- if(debug)
- ErrorF("Supported CPU TO Screen Texture (%d) -> %d,%d\n", op, width, height);
- pVoo->texType = texType;
- pVoo->texPitch = texPitch;
- pVoo->texPtr = texPtr;
- pVoo->texW = width;
- pVoo->texH = height;
-
- wait_idle(pVoo);
- if(op == PictOpSrc || texType == PICT_x8r8g8b8)
- pVoo->alpha = 0;
- else
- pVoo->alpha = (1<<4) | (1<<8) | (5<<12);
-
- return TRUE;
-}
-
-static void VoodooSubsequentCPUToScreenTexture(ScrnInfoPtr pScrn,
- int dstx, int dsty, int srcx, int srcy, int width, int height)
-{
- VoodooPtr pVoo = VoodooPTR(pScrn);
- /* 32bit LFB write mode */
- CARD32 *fb = (CARD32 *)(pVoo->FBBase + 4096 * dsty + 4 * dstx);
- CARD32 *db = ((CARD32 *)(pVoo->texPtr)) + pVoo->texW * srcy + srcx;
- int x, y;
- CARD32 *cdb, *fdb;
- int dw, dh;
- int w, h;
-
- mmio32_w(pVoo, 0x10C, pVoo->alpha);
- mmio32_w(pVoo, 0x110, 1 | (1<<9));
-
- if(pVoo->texType == PICT_a8r8g8b8)
- mmio32_w(pVoo, 0x114, (1<<8) | 5); /* ARGB888 */
- else if(pVoo->texType == PICT_x8r8g8b8)
- mmio32_w(pVoo, 0x114, (1<<8) | 4); /* xRGB888 */
- else ErrorF("BOGOFORMAT\n");
-
- dh = srcy;
- w = pVoo->texW;
- h = pVoo->texH;
-
- if(debug)
- ErrorF("CPUToScreenTexture (%d,%d)->(%d,%d)[%d,%d]\n",
- srcx,srcy,dstx,dsty,width,height);
- /*
- * Tiled software render letting hardware do the read merge
- * that we don't want the CPU to do.
- */
-
- for(y = 0; y < height; y++)
- {
- cdb = db;
- fdb = fb;
- dw = srcx;
- for(x = 0; x < width; x++)
- {
- *fdb++ = *cdb++;
-
- if(++dw == w)
- {
- dw = 0;
- cdb -= pVoo->texW;
- }
- }
- db += pVoo->texW;
- fb += 1024;
- dh ++;
- if(dh == h)
- {
- db = ((CARD32 *)pVoo->texPtr) + srcx;
- dh = 0;
- }
- }
- mmio32_w(pVoo, 0x114, pVoo->lfbMode);
- mmio32_w(pVoo, 0x10C, 0);
-}
-
-CARD32 VoodooAlphaTextureFormats[2] = {PICT_a8, 0};
-CARD32 VoodooTextureFormats[3] = {PICT_a8r8g8b8, PICT_x8r8g8b8, 0};
-
-#endif
-#endif
-
-void Voodoo2XAAInit(ScreenPtr pScreen)
-{
-#ifdef HAVE_XAA_H
- ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
- VoodooPtr pVoo = VoodooPTR(pScrn);
- XAAInfoRecPtr pAccel = XAACreateInfoRec();
- BoxRec cacheArea;
-
- pAccel->Flags = OFFSCREEN_PIXMAPS|LINEAR_FRAMEBUFFER;
- pAccel->Sync = VoodooSync;
-
- pAccel->ScreenToScreenCopyFlags = NO_PLANEMASK;
- pAccel->SetupForScreenToScreenCopy = Voodoo2SetupForScreenToScreenCopy;
- pAccel->SubsequentScreenToScreenCopy = Voodoo2SubsequentScreenToScreenCopy;
-
- pAccel->SolidFillFlags = NO_PLANEMASK;
- pAccel->SetupForSolidFill = Voodoo2SetupForSolidFill;
- pAccel->SubsequentSolidFillRect = Voodoo2SubsequentSolidFillRect;
-
- pAccel->ScanlineCPUToScreenColorExpandFillFlags =
- BIT_ORDER_IN_BYTE_MSBFIRST | NO_PLANEMASK |
- SCANLINE_PAD_DWORD | CPU_TRANSFER_BASE_FIXED;
- pAccel->SetupForScanlineCPUToScreenColorExpandFill =
- Voodoo2SetupForScanlineCPUToScreenColorExpandFill;
- pAccel->SubsequentScanlineCPUToScreenColorExpandFill =
- Voodoo2SubsequentScanlineCPUToScreenColorExpandFill;
- pAccel->SubsequentColorExpandScanline =
- Voodoo2SubsequentColorExpandScanline;
-
- pAccel->NumScanlineColorExpandBuffers = 1;
- pVoo->LinePtr = pVoo->LineBuffer;
- pAccel->ScanlineColorExpandBuffers = &pVoo->LinePtr;
-
- pAccel->SetupForSolidLine = Voodoo2SetupForSolidLine;
- pAccel->SubsequentSolidHorVertLine = Voodoo2SubsequentSolidHorVertLine;
- pAccel->SolidLineFlags = NO_PLANEMASK;
-
- pAccel->Mono8x8PatternFillFlags = HARDWARE_PATTERN_PROGRAMMED_BITS;
- pAccel->SetupForMono8x8PatternFill = Voodoo2SetupForMono8x8PatternFill;
- pAccel->SubsequentMono8x8PatternFillRect = Voodoo2SubsequentMono8x8PatternFillRect;
-
- pAccel->ScanlineImageWriteFlags = NO_PLANEMASK;
- pAccel->SetupForScanlineImageWrite = Voodoo2SetupForScanlineImageWrite;
- pAccel->SubsequentImageWriteRect = Voodoo2SubsequentImageWriteRect;
- pAccel->SubsequentImageWriteScanline = Voodoo2SubsequentImageWriteScanline;
-
- pAccel->ClippingFlags =
- HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND |
- HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY |
- HARDWARE_CLIP_MONO_8x8_FILL |
- HARDWARE_CLIP_SOLID_FILL;
-
- pAccel->SetClippingRectangle = Voodoo2SetClippingRectangle;
- pAccel->DisableClipping = Voodoo2DisableClipping;
-
-#ifdef RENDER
- pAccel->CPUToScreenAlphaTextureFlags = 0;
- pAccel->SetupForCPUToScreenAlphaTexture = VoodooSetupForCPUToScreenAlphaTexture;
- pAccel->SubsequentCPUToScreenAlphaTexture = VoodooSubsequentCPUToScreenAlphaTexture;
-
- pAccel->CPUToScreenTextureFlags = 0;
- pAccel->SetupForCPUToScreenTexture = VoodooSetupForCPUToScreenTexture;
- pAccel->SubsequentCPUToScreenTexture = VoodooSubsequentCPUToScreenTexture;
-
- pAccel->CPUToScreenTextureFormats = VoodooTextureFormats;
- pAccel->CPUToScreenAlphaTextureFormats = VoodooAlphaTextureFormats;
-#endif
-
- cacheArea.x1 = 0;
- cacheArea.x2 = pScrn->displayWidth;
- cacheArea.y1 = pVoo->Height;
- cacheArea.y2 = (pScrn->videoRam * 1024) / (pVoo->Tiles * 64);
- if(cacheArea.y2 > 2047)
- cacheArea.y2 = 2047;
-
- if(cacheArea.y2 > cacheArea.y1)
- {
- xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, "Using %d lines of pixmap cache.\n", cacheArea.y2-cacheArea.y1);
- pAccel->Flags |= PIXMAP_CACHE;
- pVoo->FullHeight = cacheArea.y2;
- xf86InitFBManager(pScreen, &cacheArea);
- }
- if( XAAInit(pScreen, pAccel) == FALSE)
- ErrorF("Unable to set up acceleration.\n");
-
- Voodoo2DisableClipping(pScrn);
-#endif
-}
--
2.43.0