neo_2090.c revision 3f6d0e1d
1692f60a7Smrg/**********************************************************************
2692f60a7SmrgCopyright 1998, 1999 by Precision Insight, Inc., Cedar Park, Texas.
3692f60a7Smrg
4692f60a7Smrg                        All Rights Reserved
5692f60a7Smrg
6692f60a7SmrgPermission to use, copy, modify, distribute, and sell this software and
7692f60a7Smrgits documentation for any purpose is hereby granted without fee,
8692f60a7Smrgprovided that the above copyright notice appear in all copies and that
9692f60a7Smrgboth that copyright notice and this permission notice appear in
10692f60a7Smrgsupporting documentation, and that the name of Precision Insight not be
11692f60a7Smrgused in advertising or publicity pertaining to distribution of the
12692f60a7Smrgsoftware without specific, written prior permission.  Precision Insight
13692f60a7Smrgand its suppliers make no representations about the suitability of this
14692f60a7Smrgsoftware for any purpose.  It is provided "as is" without express or
15692f60a7Smrgimplied warranty.
16692f60a7Smrg
17692f60a7SmrgPRECISION INSIGHT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
18692f60a7SmrgINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
19692f60a7SmrgEVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY
20692f60a7SmrgSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
21692f60a7SmrgRESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
22692f60a7SmrgCONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
23692f60a7SmrgCONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24692f60a7Smrg**********************************************************************/
25692f60a7Smrg
26692f60a7Smrg/*
27692f60a7Smrg * The original Precision Insight driver for
28692f60a7Smrg * XFree86 v.3.3 has been sponsored by Red Hat.
29692f60a7Smrg *
30692f60a7Smrg * Authors:
31692f60a7Smrg *   Jens Owen (jens@tungstengraphics.com)
32692f60a7Smrg *   Kevin E. Martin (kevin@precisioninsight.com)
33692f60a7Smrg *
34692f60a7Smrg * Port to Xfree86 v.4.0
35692f60a7Smrg *   1998, 1999 by Egbert Eich (Egbert.Eich@Physik.TU-Darmstadt.DE)
36692f60a7Smrg */
37692f60a7Smrg
38692f60a7Smrg#ifdef HAVE_CONFIG_H
39692f60a7Smrg#include "config.h"
40692f60a7Smrg#endif
41692f60a7Smrg
42692f60a7Smrg#include "xf86.h"
43692f60a7Smrg#include "xf86_OSproc.h"
44692f60a7Smrg#include "compiler.h"
45692f60a7Smrg#include "xf86PciInfo.h"
46692f60a7Smrg
47692f60a7Smrg/* Drivers that use XAA need this */
48692f60a7Smrg#include "xf86fbman.h"
49692f60a7Smrg
50692f60a7Smrg#include "miline.h"
51692f60a7Smrg
52692f60a7Smrg#include "neo.h"
53692f60a7Smrg#include "neo_reg.h"
54692f60a7Smrg#include "neo_macros.h"
55692f60a7Smrg
563f6d0e1dSmrg#ifdef HAVE_XAA_H
57692f60a7Smrgstatic unsigned int neo2090Rop[16] = {
58692f60a7Smrg    0x000000,    /* 0x0000 - GXclear         */
59692f60a7Smrg    0x080000,    /* 0x1000 - GXand           */
60692f60a7Smrg    0x040000,    /* 0x0100 - GXandReverse    */
61692f60a7Smrg    0x0c0000,    /* 0x1100 - GXcopy          */
62692f60a7Smrg    0x020000,    /* 0x0010 - GXandInvert     */
63692f60a7Smrg    0x0a0000,    /* 0x1010 - GXnoop          */
64692f60a7Smrg    0x060000,    /* 0x0110 - GXxor           */
65692f60a7Smrg    0x0e0000,    /* 0x1110 - GXor            */
66692f60a7Smrg    0x010000,    /* 0x0001 - GXnor           */
67692f60a7Smrg    0x090000,    /* 0x1001 - GXequiv         */
68692f60a7Smrg    0x050000,    /* 0x0101 - GXinvert        */
69692f60a7Smrg    0x0d0000,    /* 0x1101 - GXorReverse     */
70692f60a7Smrg    0x030000,    /* 0x0011 - GXcopyInvert    */
71692f60a7Smrg    0x0b0000,    /* 0x1011 - GXorInverted    */
72692f60a7Smrg    0x070000,    /* 0x0111 - GXnand          */
73692f60a7Smrg    0x0f0000     /* 0x1111 - GXset           */
74692f60a7Smrg};
75692f60a7Smrg
76692f60a7Smrgstatic void Neo2090Sync(ScrnInfoPtr pScrn);
77692f60a7Smrgstatic void Neo2090SetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir,
78692f60a7Smrg					      int ydir, int rop,
79692f60a7Smrg					      unsigned int planemask,
80692f60a7Smrg					      int trans_color);
81692f60a7Smrgstatic void Neo2090SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int srcX,
82692f60a7Smrg						int srcY, int dstX, int dstY,
83692f60a7Smrg						int w, int h);
84692f60a7Smrgstatic void Neo2090SetupForSolidFillRect(ScrnInfoPtr pScrn, int color, int rop,
85692f60a7Smrg				  unsigned int planemask);
86692f60a7Smrgstatic void Neo2090SubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y,
87692f60a7Smrg					   int w, int h);
88692f60a7Smrgstatic void Neo2093SetupForScanlineCPUToScreenColorExpandFill(
89692f60a7Smrg                                                      ScrnInfoPtr pScrn,
90692f60a7Smrg						      int fg, int bg,
91692f60a7Smrg						      int rop,
92692f60a7Smrg						unsigned int planemask);
93692f60a7Smrgstatic void Neo2093SubsequentScanlineCPUToScreenColorExpandFill(
94692f60a7Smrg                                                      ScrnInfoPtr pScrn,
95692f60a7Smrg							int x, int y,
96692f60a7Smrg							int w, int h,
97692f60a7Smrg							int skipleft);
98692f60a7Smrgstatic void Neo2093SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno);
993f6d0e1dSmrg#endif
100692f60a7SmrgBool
101692f60a7SmrgNeo2090AccelInit(ScreenPtr pScreen)
102692f60a7Smrg{
1033f6d0e1dSmrg#ifdef HAVE_XAA_H
104692f60a7Smrg    XAAInfoRecPtr infoPtr;
1053f6d0e1dSmrg    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
106692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
107692f60a7Smrg    NEOACLPtr nAcl = NEOACLPTR(pScrn);
108692f60a7Smrg
109692f60a7Smrg    nPtr->AccelInfoRec = infoPtr = XAACreateInfoRec();
110692f60a7Smrg    if(!infoPtr) return FALSE;
111692f60a7Smrg
112692f60a7Smrg    /*
113692f60a7Smrg     * Set up the main acceleration flags.
114692f60a7Smrg     */
115692f60a7Smrg    infoPtr->Flags = LINEAR_FRAMEBUFFER | OFFSCREEN_PIXMAPS;
116692f60a7Smrg    if(nAcl->cacheEnd > nAcl->cacheStart) infoPtr->Flags |= PIXMAP_CACHE;
117692f60a7Smrg#if 0
118692f60a7Smrg    infoPtr->PixmapCacheFlags |= DO_NOT_BLIT_STIPPLES;
119692f60a7Smrg#endif
120692f60a7Smrg    /* sync */
121692f60a7Smrg    infoPtr->Sync = Neo2090Sync;
122692f60a7Smrg
123692f60a7Smrg    /* screen to screen copy */
124692f60a7Smrg    infoPtr->ScreenToScreenCopyFlags = (NO_TRANSPARENCY | NO_PLANEMASK);
125692f60a7Smrg    infoPtr->SetupForScreenToScreenCopy =
126692f60a7Smrg	Neo2090SetupForScreenToScreenCopy;
127692f60a7Smrg    infoPtr->SubsequentScreenToScreenCopy =
128692f60a7Smrg	Neo2090SubsequentScreenToScreenCopy;
129692f60a7Smrg
130692f60a7Smrg    /* solid filled rectangles */
131692f60a7Smrg    infoPtr->SolidFillFlags = NO_PLANEMASK;
132692f60a7Smrg    infoPtr->SetupForSolidFill =
133692f60a7Smrg	Neo2090SetupForSolidFillRect;
134692f60a7Smrg    infoPtr->SubsequentSolidFillRect =
135692f60a7Smrg	Neo2090SubsequentSolidFillRect;
136692f60a7Smrg
137692f60a7Smrg    if (nPtr->NeoChipset == PCI_CHIP_NM2093 && !nPtr->strangeLockups) {
138692f60a7Smrg	/*
139692f60a7Smrg	 * We do CPUToScreenColorExpand (ab)using the Scanline functions:
140692f60a7Smrg	 * the neo chipsets need byte padding however we can only do dword
141692f60a7Smrg	 * padding. Fortunately the graphics engine doesn't choke if we
142692f60a7Smrg	 * transfer up to 3 bytes more than it wants.
143692f60a7Smrg	 */
144692f60a7Smrg
145692f60a7Smrg	/* cpu to screen color expansion */
146692f60a7Smrg	infoPtr->ScanlineColorExpandBuffers =
147692f60a7Smrg	    (unsigned char **)xnfalloc(sizeof(char*));
148692f60a7Smrg	infoPtr->ScanlineColorExpandBuffers[0] =
149692f60a7Smrg	    (unsigned char *)(nPtr->NeoMMIOBase + 0x100000);
150692f60a7Smrg	infoPtr->NumScanlineColorExpandBuffers = 1;
151692f60a7Smrg	infoPtr->ScanlineCPUToScreenColorExpandFillFlags = ( NO_PLANEMASK |
152692f60a7Smrg						     SCANLINE_PAD_DWORD |
153692f60a7Smrg						     CPU_TRANSFER_PAD_DWORD |
154692f60a7Smrg						BIT_ORDER_IN_BYTE_MSBFIRST );
155692f60a7Smrg
156692f60a7Smrg	infoPtr->SetupForScanlineCPUToScreenColorExpandFill =
157692f60a7Smrg	    Neo2093SetupForScanlineCPUToScreenColorExpandFill;
158692f60a7Smrg	infoPtr->SubsequentScanlineCPUToScreenColorExpandFill =
159692f60a7Smrg	    Neo2093SubsequentScanlineCPUToScreenColorExpandFill;
160692f60a7Smrg	infoPtr->SubsequentColorExpandScanline =
161692f60a7Smrg	    Neo2093SubsequentColorExpandScanline;
162692f60a7Smrg    }
163692f60a7Smrg
164692f60a7Smrg    /*
165692f60a7Smrg     * Setup some global variables
166692f60a7Smrg     */
167692f60a7Smrg    nAcl->ColorShiftAmt = 0;
168692f60a7Smrg
169692f60a7Smrg    /* Initialize for 8bpp or 15/16bpp support accellerated */
170692f60a7Smrg    switch (pScrn->bitsPerPixel) {
171692f60a7Smrg    case 8:
172692f60a7Smrg	nAcl->BltCntlFlags = NEO_BC1_DEPTH8;
173692f60a7Smrg	nAcl->ColorShiftAmt = 8;
174692f60a7Smrg	break;
175692f60a7Smrg    case 15:
176692f60a7Smrg    case 16:
177692f60a7Smrg	nAcl->BltCntlFlags = NEO_BC1_DEPTH16;
178692f60a7Smrg	nAcl->ColorShiftAmt = 0;
179692f60a7Smrg	break;
180692f60a7Smrg    case 24:
181692f60a7Smrg    default:
182692f60a7Smrg	return FALSE;
183692f60a7Smrg    }
184692f60a7Smrg
185692f60a7Smrg    /* Initialize for widths */
186692f60a7Smrg    switch (pScrn->displayWidth) {
187692f60a7Smrg    case 640:
188692f60a7Smrg	nAcl->BltCntlFlags |= NEO_BC1_X_640;
189692f60a7Smrg	break;
190692f60a7Smrg    case 800:
191692f60a7Smrg	nAcl->BltCntlFlags |= NEO_BC1_X_800;
192692f60a7Smrg	break;
193692f60a7Smrg    case 1024:
194692f60a7Smrg	nAcl->BltCntlFlags |= NEO_BC1_X_1024;
195692f60a7Smrg	break;
196692f60a7Smrg    default:
197692f60a7Smrg	return FALSE;
198692f60a7Smrg    }
199692f60a7Smrg
200692f60a7Smrg    nAcl->BltCntlFlags |= NEO_BC3_FIFO_EN;
201692f60a7Smrg
202692f60a7Smrg    return(XAAInit(pScreen, infoPtr));
2033f6d0e1dSmrg#else
2043f6d0e1dSmrg    return FALSE;
2053f6d0e1dSmrg#endif
206692f60a7Smrg}
207692f60a7Smrg
2083f6d0e1dSmrg#ifdef HAVE_XAA_H
209692f60a7Smrgstatic void
210692f60a7SmrgNeo2090Sync(ScrnInfoPtr pScrn)
211692f60a7Smrg{
212692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
213692f60a7Smrg
214692f60a7Smrg    WAIT_ENGINE_IDLE();
215692f60a7Smrg}
216692f60a7Smrg
217692f60a7Smrgstatic void
218692f60a7SmrgNeo2090SetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir, int ydir,
219692f60a7Smrg				  int rop,
220692f60a7Smrg				  unsigned int planemask,
221692f60a7Smrg				  int trans_color)
222692f60a7Smrg{
223692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
224692f60a7Smrg    NEOACLPtr nAcl = NEOACLPTR(pScrn);
225692f60a7Smrg
226692f60a7Smrg    nAcl->tmpBltCntlFlags = (nAcl->BltCntlFlags  |
227692f60a7Smrg		              NEO_BC3_SKIP_MAPPING |
228692f60a7Smrg		              NEO_BC3_DST_XY_ADDR  |
229692f60a7Smrg		              NEO_BC3_SRC_XY_ADDR  | neo2090Rop[rop]);
230692f60a7Smrg
231692f60a7Smrg    /* set blt control */
232692f60a7Smrg    WAIT_FIFO(2);
233692f60a7Smrg    OUTREG(NEOREG_BLTCNTL, nAcl->tmpBltCntlFlags);
234692f60a7Smrg}
235692f60a7Smrg
236692f60a7Smrgstatic void
237692f60a7SmrgNeo2090SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
238692f60a7Smrg				    int srcX, int srcY,
239692f60a7Smrg				    int dstX, int dstY,
240692f60a7Smrg				    int w, int h)
241692f60a7Smrg{
242692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
243692f60a7Smrg    NEOACLPtr nAcl = NEOACLPTR(pScrn);
244692f60a7Smrg
245692f60a7Smrg    if ((dstY < srcY) || ((dstY == srcY) && (dstX < srcX))) {
246692f60a7Smrg	/* start with upper left corner */
247692f60a7Smrg	WAIT_FIFO(4);
248692f60a7Smrg	OUTREG(NEOREG_BLTCNTL, nAcl->tmpBltCntlFlags);
249692f60a7Smrg	OUTREG(NEOREG_SRCSTARTOFF, (srcY<<16) | (srcX & 0xffff));
250692f60a7Smrg	OUTREG(NEOREG_DSTSTARTOFF, (dstY<<16) | (dstX & 0xffff));
251692f60a7Smrg	OUTREG(NEOREG_XYEXT, (h<<16) | (w & 0xffff));
252692f60a7Smrg    }
253692f60a7Smrg    else {
254692f60a7Smrg	/* start with lower right corner */
255692f60a7Smrg	WAIT_FIFO(4);
256692f60a7Smrg	OUTREG(NEOREG_BLTCNTL, (nAcl->tmpBltCntlFlags | NEO_BC0_X_DEC
257692f60a7Smrg                                                       | NEO_BC0_DST_Y_DEC
258692f60a7Smrg                                                       | NEO_BC0_SRC_Y_DEC));
259692f60a7Smrg	OUTREG(NEOREG_SRCSTARTOFF, ((srcY+h-1)<<16) | ((srcX+w-1) & 0xffff));
260692f60a7Smrg	OUTREG(NEOREG_DSTSTARTOFF, ((dstY+h-1)<<16) | ((dstX+w-1) & 0xffff));
261692f60a7Smrg	OUTREG(NEOREG_XYEXT, (h<<16) | (w & 0xffff));
262692f60a7Smrg    }
263692f60a7Smrg}
264692f60a7Smrg
265692f60a7Smrg
266692f60a7Smrgstatic void
267692f60a7SmrgNeo2090SetupForSolidFillRect(ScrnInfoPtr pScrn, int color, int rop,
268692f60a7Smrg			     unsigned int planemask)
269692f60a7Smrg{
270692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
271692f60a7Smrg    NEOACLPtr nAcl = NEOACLPTR(pScrn);
272692f60a7Smrg
273692f60a7Smrg    WAIT_FIFO(2);
274692f60a7Smrg
275692f60a7Smrg    /* set blt control */
276692f60a7Smrg    OUTREG(NEOREG_BLTCNTL, nAcl->BltCntlFlags  |
277692f60a7Smrg                           NEO_BC0_SRC_IS_FG    |
278692f60a7Smrg                           NEO_BC3_SKIP_MAPPING |
279692f60a7Smrg                           NEO_BC3_DST_XY_ADDR  |
280692f60a7Smrg                           NEO_BC3_SRC_XY_ADDR  | neo2090Rop[rop]);
281692f60a7Smrg
282692f60a7Smrg    /* set foreground color */
283692f60a7Smrg    OUTREG(NEOREG_FGCOLOR, color |= (color << nAcl->ColorShiftAmt));
284692f60a7Smrg}
285692f60a7Smrg
286692f60a7Smrg
287692f60a7Smrgstatic void
288692f60a7SmrgNeo2090SubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y, int w, int h)
289692f60a7Smrg{
290692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
291692f60a7Smrg
292692f60a7Smrg    WAIT_FIFO(2);
293692f60a7Smrg    OUTREG(NEOREG_DSTSTARTOFF, (y<<16) | (x & 0xffff));
294692f60a7Smrg    OUTREG(NEOREG_XYEXT, (h<<16) | (w & 0xffff));
295692f60a7Smrg
296692f60a7Smrg}
297692f60a7Smrg
298692f60a7Smrgstatic void
299692f60a7SmrgNeo2093SetupForScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
300692f60a7Smrg				      int fg, int bg,
301692f60a7Smrg				      int rop,
302692f60a7Smrg				      unsigned int planemask)
303692f60a7Smrg{
304692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
305692f60a7Smrg    NEOACLPtr nAcl = NEOACLPTR(pScrn);
306692f60a7Smrg
307692f60a7Smrg    if (bg == -1) {
308692f60a7Smrg	/* transparent setup */
309692f60a7Smrg	WAIT_FIFO(2);
310692f60a7Smrg	OUTREG(NEOREG_BLTCNTL, nAcl->BltCntlFlags  |
311692f60a7Smrg			       NEO_BC0_SYS_TO_VID   |
312692f60a7Smrg			       NEO_BC0_SRC_MONO     |
313692f60a7Smrg			       NEO_BC0_SRC_TRANS    |
314692f60a7Smrg			       NEO_BC3_SKIP_MAPPING |
315692f60a7Smrg			       NEO_BC3_DST_XY_ADDR  | neo2090Rop[rop]);
316692f60a7Smrg
317692f60a7Smrg	OUTREG(NEOREG_FGCOLOR, fg |= (fg << nAcl->ColorShiftAmt));
318692f60a7Smrg    }
319692f60a7Smrg    else {
320692f60a7Smrg	/* opaque setup */
321692f60a7Smrg	WAIT_FIFO(3);
322692f60a7Smrg	OUTREG(NEOREG_BLTCNTL, nAcl->BltCntlFlags  |
323692f60a7Smrg			       NEO_BC0_SYS_TO_VID   |
324692f60a7Smrg			       NEO_BC0_SRC_MONO     |
325692f60a7Smrg			       NEO_BC3_SKIP_MAPPING |
326692f60a7Smrg			       NEO_BC3_DST_XY_ADDR  | neo2090Rop[rop]);
327692f60a7Smrg
328692f60a7Smrg	OUTREG(NEOREG_FGCOLOR, fg |= (fg << nAcl->ColorShiftAmt));
329692f60a7Smrg	OUTREG(NEOREG_BGCOLOR, bg |= (bg << nAcl->ColorShiftAmt));
330692f60a7Smrg    }
331692f60a7Smrg}
332692f60a7Smrg
333692f60a7Smrgstatic void
334692f60a7SmrgNeo2093SubsequentScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
335692f60a7Smrg					int x, int y,
336692f60a7Smrg					int w, int h,
337692f60a7Smrg					int skipleft)
338692f60a7Smrg{
339692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
340692f60a7Smrg    NEOACLPtr nAcl = NEOACLPTR(pScrn);
341692f60a7Smrg
342692f60a7Smrg    nAcl->CPUToScreenColorExpandFill_x = x;
343692f60a7Smrg    nAcl->CPUToScreenColorExpandFill_y = y;
344692f60a7Smrg    nAcl->CPUToScreenColorExpandFill_w = w;
345692f60a7Smrg    nAcl->CPUToScreenColorExpandFill_h = h;
346692f60a7Smrg    nAcl->CPUToScreenColorExpandFill_skipleft = skipleft;
347692f60a7Smrg
348692f60a7Smrg    WAIT_FIFO(4);
349692f60a7Smrg    OUTREG(NEOREG_SRCBITOFF, skipleft);
350692f60a7Smrg    OUTREG(NEOREG_SRCSTARTOFF, 0);
351692f60a7Smrg    OUTREG(NEOREG_DSTSTARTOFF, (y<<16) | (x & 0xffff));
352692f60a7Smrg    OUTREG(NEOREG_XYEXT, (1<<16) | (w & 0xffff));
353692f60a7Smrg}
354692f60a7Smrg
355692f60a7Smrgstatic void
356692f60a7SmrgNeo2093SubsequentColorExpandScanline(ScrnInfoPtr pScrn,	int bufno)
357692f60a7Smrg{
358692f60a7Smrg    NEOPtr nPtr = NEOPTR(pScrn);
359692f60a7Smrg    NEOACLPtr nAcl = NEOACLPTR(pScrn);
360692f60a7Smrg
361692f60a7Smrg    if (!(--nAcl->CPUToScreenColorExpandFill_h))
362692f60a7Smrg	return;
363692f60a7Smrg
364692f60a7Smrg    WAIT_FIFO(4);
365692f60a7Smrg    OUTREG(NEOREG_SRCBITOFF, nAcl->CPUToScreenColorExpandFill_skipleft);
366692f60a7Smrg    OUTREG(NEOREG_SRCSTARTOFF, 0);
367692f60a7Smrg    OUTREG(NEOREG_DSTSTARTOFF, ((++nAcl->CPUToScreenColorExpandFill_y)<<16)
368692f60a7Smrg	   | (nAcl->CPUToScreenColorExpandFill_x & 0xffff));
369692f60a7Smrg    OUTREG(NEOREG_XYEXT, (1<<16)
370692f60a7Smrg	   | (nAcl->CPUToScreenColorExpandFill_w & 0xffff));
371692f60a7Smrg}
3723f6d0e1dSmrg#endif
373