source: trunk/src/opengl/glide/sst1/incsrc/sst.h

Last change on this file was 2885, checked in by sandervl, 26 years ago

Created new Voodoo 1 Glide dir

File size: 45.4 KB
Line 
1/*
2 * THIS SOFTWARE IS SUBJECT TO COPYRIGHT PROTECTION AND IS OFFERED ONLY
3 * PURSUANT TO THE 3DFX GLIDE GENERAL PUBLIC LICENSE. THERE IS NO RIGHT
4 * TO USE THE GLIDE TRADEMARK WITHOUT PRIOR WRITTEN PERMISSION OF 3DFX
5 * INTERACTIVE, INC. A COPY OF THIS LICENSE MAY BE OBTAINED FROM THE
6 * DISTRIBUTOR OR BY CONTACTING 3DFX INTERACTIVE INC(info@3dfx.com).
7 * THIS PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
8 * EXPRESSED OR IMPLIED. SEE THE 3DFX GLIDE GENERAL PUBLIC LICENSE FOR A
9 * FULL TEXT OF THE NON-WARRANTY PROVISIONS.
10 *
11 * USE, DUPLICATION OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT TO
12 * RESTRICTIONS AS SET FORTH IN SUBDIVISION (C)(1)(II) OF THE RIGHTS IN
13 * TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013,
14 * AND/OR IN SIMILAR OR SUCCESSOR CLAUSES IN THE FAR, DOD OR NASA FAR
15 * SUPPLEMENT. UNPUBLISHED RIGHTS RESERVED UNDER THE COPYRIGHT LAWS OF
16 * THE UNITED STATES.
17 *
18 * COPYRIGHT 3DFX INTERACTIVE, INC. 1999, ALL RIGHTS RESERVED
19 */
20
21#ifndef __SST_H__
22#define __SST_H__
23
24/*
25** $Revision: 1.1 $
26** $Date: 2000-02-25 00:31:25 $
27*/
28
29#include <ncc.h>
30#include "fx64.h"
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
36// this crazy macro fixes the binary point within a floating point
37// number so that it has 'fracbits' to the right of the binary point
38// it also adds a '1' bit to the MSB so that slightly negative numbers
39// end up looking like twos complement numbers (they carry out from the '1')
40#define FLOAT_FIX(f,fracbits) ((f)+(float)(3<<(22-(fracbits))))
41
42#define SST_FLOAT(f,scale,shift) (unsigned long)((f)*((scale)*(float)(1<<shift)))
43#define SST_TLOD_MINMAX(lodmin,lodmax) \
44 (((lodmin) << (SST_LODMIN_SHIFT)) | \
45 ((lodmax) << (SST_LODMAX_SHIFT)))
46#define SST_TLOD_MINMAX_INT(lodmin,lodmax) \
47 (((lodmin) << (SST_LOD_FRACBITS+SST_LODMIN_SHIFT)) | \
48 ((lodmax) << (SST_LOD_FRACBITS+SST_LODMAX_SHIFT)))
49
50// this crazy macro tests the sign bit of a float by loading it into
51// an integer register and then testing the sign bit of the integer
52#define FLOAT_ISNEG(f) ((*(int *)(&(f))) < 0)
53
54// these crazy macros returns the sign of a number (1 if >= 0; -1 if < 0)
55#define ISIGN(x) (((x) | 0x40000000) >> 30)
56#define FSIGN(f) ISIGN(*(long *)&f)
57
58typedef struct vertex_Rec {
59 unsigned long x; // 12.4 format
60 unsigned long y; // 12.4
61} vtxRec;
62
63// 256 color palette tables
64typedef struct {
65 unsigned long argb[256];
66} Pal256;
67
68#define BIT(n) (1<<(n))
69#define SST_MASK(n) (0xFFFFFFFF >> (32-(n)))
70#define SST_MASK64(n) FX_MASK64(n)
71
72
73//----------------- SST binary point locations ---------------
74#define SST_LOD_SIZE 6
75#define SST_LOD_FRACBITS 2
76#define SST_XY_SIZE 16
77#define SST_XY_INTBITS 12
78#define SST_XY_FRACBITS 4
79#define SST_RGBA_SIZE 24
80#define SST_RGBA_INTBITS 8
81#define SST_RGBA_FRACBITS 12
82#define SST_Z_SIZE 32
83#define SST_Z_INTBITS 16
84#define SST_Z_FRACBITS 12
85// NOTE: below are ONLY for the fixed point registers
86#define SST_ST_SIZE 32
87#define SST_ST_INTBITS 14
88#define SST_ST_FRACBITS 18
89#define SST_W_SIZE 32
90#define SST_W_INTBITS 2
91#define SST_W_FRACBITS 30
92
93//----------------- SST lfbMode bits -----------------------
94#define SST_LFB_FORMAT_SHIFT 0
95#define SST_LFB_FORMAT (0xF<<SST_LFB_FORMAT_SHIFT)
96# define SST_LFB_565 (0<<SST_LFB_FORMAT_SHIFT)
97# define SST_LFB_555 (1<<SST_LFB_FORMAT_SHIFT)
98# define SST_LFB_1555 (2<<SST_LFB_FORMAT_SHIFT)
99# define SST_LFB_u1 (3<<SST_LFB_FORMAT_SHIFT)
100# define SST_LFB_888 (4<<SST_LFB_FORMAT_SHIFT)
101# define SST_LFB_8888 (5<<SST_LFB_FORMAT_SHIFT)
102# define SST_LFB_u2 (6<<SST_LFB_FORMAT_SHIFT)
103# define SST_LFB_u3 (7<<SST_LFB_FORMAT_SHIFT)
104# define SST_LFB_Z565 (12<<SST_LFB_FORMAT_SHIFT)
105# define SST_LFB_Z555 (13<<SST_LFB_FORMAT_SHIFT)
106# define SST_LFB_Z1555 (14<<SST_LFB_FORMAT_SHIFT)
107# define SST_LFB_ZZ (15<<SST_LFB_FORMAT_SHIFT)
108#define SST_LFB_WRITEBUFSELECT_SHIFT 4
109#define SST_LFB_WRITEBUFSELECT (0x3<<SST_LFB_WRITEBUFSELECT_SHIFT)
110# define SST_LFB_WRITEFRONTBUFFER (0<<SST_LFB_WRITEBUFSELECT_SHIFT)
111# define SST_LFB_WRITEBACKBUFFER (1<<SST_LFB_WRITEBUFSELECT_SHIFT)
112# define SST_LFB_WRITEAUXBUFFER (2<<SST_LFB_WRITEBUFSELECT_SHIFT)
113#define SST_LFB_READBUFSELECT_SHIFT 6
114#define SST_LFB_READBUFSELECT (0x3<<SST_LFB_READBUFSELECT_SHIFT)
115# define SST_LFB_READFRONTBUFFER (0<<SST_LFB_READBUFSELECT_SHIFT)
116# define SST_LFB_READBACKBUFFER (1<<SST_LFB_READBUFSELECT_SHIFT)
117# define SST_LFB_READDEPTHABUFFER (2<<SST_LFB_READBUFSELECT_SHIFT)
118# define SST_LFB_READAUXBUFFER SST_LFB_READDEPTHABUFFER
119#define SST_LFB_ENPIXPIPE BIT(8)
120#define SST_LFB_RGBALANES_SHIFT 9
121#define SST_LFB_RGBALANES (0x3<<SST_LFB_RGBALANES_SHIFT)
122# define SST_LFB_RGBALANES_ARGB (0<<SST_LFB_RGBALANES_SHIFT)
123# define SST_LFB_RGBALANES_ABGR (1<<SST_LFB_RGBALANES_SHIFT)
124# define SST_LFB_RGBALANES_RGBA (2<<SST_LFB_RGBALANES_SHIFT)
125# define SST_LFB_RGBALANES_BGRA (3<<SST_LFB_RGBALANES_SHIFT)
126#define SST_LFB_WRITE_SWAP16 BIT(11)
127#define SST_LFB_WRITE_BYTESWAP BIT(12)
128#define SST_LFB_YORIGIN BIT(13)
129#define SST_LFB_WSELECT BIT(14)
130#define SST_LFB_READ_SWAP16 BIT(15)
131#define SST_LFB_READ_BYTESWAP BIT(16)
132
133
134//----------------- SST videoFilterRgbThreshold
135#define SST_VIDEOFILTER_BLUE_SHIFT 0
136#define SST_VIDEOFILTER_BLUE (0xff << SST_VIDEOFILTER_BLUE_SHIFT)
137#define SST_VIDEOFILTER_GREEN_SHIFT 8
138#define SST_VIDEOFILTER_GREEN (0xff << SST_VIDEOFILTER_GREEN_SHIFT)
139#define SST_VIDEOFILTER_RED_SHIFT 16
140#define SST_VIDEOFILTER_RED (0xff << SST_VIDEOFILTER_RED_SHIFT)
141
142//----------------- SST textureMode bits -----------------------
143#define SST_TPERSP_ST BIT(0)
144#define SST_TMINFILTER BIT(1)
145#define SST_TMAGFILTER BIT(2)
146#define SST_TCLAMPW BIT(3)
147#define SST_TLODDITHER BIT(4)
148#define SST_TNCCSELECT BIT(5) // selects which table
149#define SST_TCLAMPS BIT(6)
150#define SST_TCLAMPT BIT(7)
151#define SST_T8BIT(mode) ((mode&SST_TFORMAT)<SST_ARGB8332)
152#define SST_TFORMAT_SHIFT 8
153#define SST_TFORMAT (0xF<<SST_TFORMAT_SHIFT)
154# define SST_RGB332 (0<<SST_TFORMAT_SHIFT)
155# define SST_YIQ422 (1<<SST_TFORMAT_SHIFT)
156# define SST_A8 (2<<SST_TFORMAT_SHIFT)
157# define SST_I8 (3<<SST_TFORMAT_SHIFT)
158# define SST_AI44 (4<<SST_TFORMAT_SHIFT)
159# define SST_P8 (5<<SST_TFORMAT_SHIFT)
160# define SST_P8_RGBA6666 (6<<SST_TFORMAT_SHIFT)
161# define SST_ARGB8332 (8<<SST_TFORMAT_SHIFT)
162# define SST_AYIQ8422 (9<<SST_TFORMAT_SHIFT)
163# define SST_RGB565 (10<<SST_TFORMAT_SHIFT)
164# define SST_ARGB1555 (11<<SST_TFORMAT_SHIFT)
165# define SST_ARGB4444 (12<<SST_TFORMAT_SHIFT)
166# define SST_AI88 (13<<SST_TFORMAT_SHIFT)
167# define SST_AP88 (14<<SST_TFORMAT_SHIFT)
168#define SST_TC_ZERO_OTHER BIT(12)
169#define SST_TC_SUB_CLOCAL BIT(13)
170#define SST_TC_MSELECT_SHIFT 14
171#define SST_TC_MSELECT (0x7<<SST_TC_MSELECT_SHIFT)
172# define SST_TC_MONE (0<<SST_TC_MSELECT_SHIFT)
173# define SST_TC_MCLOCAL (1<<SST_TC_MSELECT_SHIFT)
174# define SST_TC_MAOTHER (2<<SST_TC_MSELECT_SHIFT)
175# define SST_TC_MALOCAL (3<<SST_TC_MSELECT_SHIFT)
176# define SST_TC_MLOD (4<<SST_TC_MSELECT_SHIFT)
177# define SST_TC_MLODFRAC (5<<SST_TC_MSELECT_SHIFT)
178#define SST_TC_REVERSE_BLEND BIT(17)
179#define SST_TC_ADD_CLOCAL BIT(18)
180#define SST_TC_ADD_ALOCAL BIT(19)
181#define SST_TC_INVERT_OUTPUT BIT(20)
182#define SST_TCA_ZERO_OTHER BIT(21)
183#define SST_TCA_SUB_CLOCAL BIT(22)
184#define SST_TCA_MSELECT_SHIFT 23
185#define SST_TCA_MSELECT (0x7<<SST_TCA_MSELECT_SHIFT)
186# define SST_TCA_MONE (0<<SST_TCA_MSELECT_SHIFT)
187# define SST_TCA_MCLOCAL (1<<SST_TCA_MSELECT_SHIFT)
188# define SST_TCA_MAOTHER (2<<SST_TCA_MSELECT_SHIFT)
189# define SST_TCA_MALOCAL (3<<SST_TCA_MSELECT_SHIFT)
190# define SST_TCA_MLOD (4<<SST_TCA_MSELECT_SHIFT)
191# define SST_TCA_MLODFRAC (5<<SST_TCA_MSELECT_SHIFT)
192#define SST_TCA_REVERSE_BLEND BIT(26)
193#define SST_TCA_ADD_CLOCAL BIT(27)
194#define SST_TCA_ADD_ALOCAL BIT(28)
195#define SST_TCA_INVERT_OUTPUT BIT(29)
196#define SST_TRILINEAR BIT(30)
197#define SST_SEQ_8_DOWNLD BIT(31)
198
199
200// here are some abstract constants that most people will be using
201// TC stands for Texture Combine (RGB channels)
202// TCA stands for Texture Combine Alpha (just the Alpha channel)
203// BLEND_ATT blends on the Alpha channel of the color passed from TMU to TMU
204// BLEND_ALOCAL blends on the Alpha channel of the local texture color
205// NOTE: and of the BLEND modes can be modified using SST_TC_REVERSE_BLEND
206// and/or SST_TCA_REVERSE_BLEND, these modifiers reverse the "polarity"
207// of the blend
208#define SST_TC_MZERO (SST_TC_MONE | SST_TC_REVERSE_BLEND)
209#define SST_TCA_MZERO (SST_TCA_MONE | SST_TCA_REVERSE_BLEND)
210
211#define SST_TCOMBINE_SHIFT 12 // RGB COMBINE MODES
212#define SST_TCOMBINE (0x1FF<<SST_TCOMBINE_SHIFT)
213# define SST_TC_REPLACE (SST_TC_ZERO_OTHER | SST_TC_ADD_CLOCAL)
214# define SST_TC_PASS (SST_TC_MONE)
215# define SST_TC_ADD (SST_TC_MONE | SST_TC_ADD_CLOCAL)
216# define SST_TC_SUB (SST_TC_SUB_CLOCAL | SST_TC_MONE)
217# define SST_TC_MULT (SST_TC_MCLOCAL | SST_TC_REVERSE_BLEND)
218# define SST_TC_ZERO (SST_TC_MZERO)
219# define SST_TC_ONE (SST_TC_MZERO | SST_TC_INVERT_OUTPUT)
220# define SST_TC_BLEND (SST_TC_SUB_CLOCAL | SST_TC_ADD_CLOCAL)
221# define SST_TC_BLEND_LOD (SST_TC_BLEND | SST_TC_MLOD)
222# define SST_TC_BLEND_LODFRAC (SST_TC_BLEND | SST_TC_MLODFRAC)
223# define SST_TC_BLEND_ATT (SST_TC_BLEND | SST_TC_MAOTHER)
224# define SST_TC_BLEND_ALOCAL (SST_TC_BLEND | SST_TC_MALOCAL)
225#define SST_TACOMBINE_SHIFT 21 // ALPHA COMBINE MODES
226#define SST_TACOMBINE (0x1FF<<SST_TACOMBINE_SHIFT)
227# define SST_TCA_REPLACE (SST_TCA_ZERO_OTHER | SST_TCA_ADD_CLOCAL)
228# define SST_TCA_PASS (SST_TCA_MONE)
229# define SST_TCA_ADD (SST_TCA_MONE | SST_TCA_ADD_CLOCAL)
230# define SST_TCA_SUB (SST_TCA_SUB_CLOCAL | SST_TCA_MONE)
231# define SST_TCA_MULT (SST_TCA_MCLOCAL | SST_TCA_REVERSE_BLEND)
232# define SST_TCA_ONE (SST_TCA_MZERO | SST_TCA_INVERT_OUTPUT)
233# define SST_TCA_ZERO (SST_TCA_MZERO)
234# define SST_TCA_BLEND (SST_TCA_SUB_CLOCAL | SST_TCA_ADD_CLOCAL)
235# define SST_TCA_BLEND_LOD (SST_TCA_BLEND | SST_TCA_MLOD)
236# define SST_TCA_BLEND_LODFRAC (SST_TCA_BLEND | SST_TCA_MLODFRAC)
237# define SST_TCA_BLEND_ATT (SST_TCA_BLEND | SST_TCA_MAOTHER)
238# define SST_TCA_BLEND_ALOCAL (SST_TCA_BLEND | SST_TCA_MALOCAL)
239#define SST_TMU_ACTIVE(texMode) \
240 ((texMode & (SST_TCOMBINE|SST_TACOMBINE)) != (SST_TC_PASS|SST_TCA_PASS))
241#define SST_TREX_ACTIVE(texMode) SST_TMU_ACTIVE(texMode)
242
243//----------------- SST tLOD bits -----------------------
244#define SST_LODMIN_SHIFT 0 // 4.2 format
245#define SST_LODMIN (0x3F<<SST_LODMIN_SHIFT)
246#define SST_LODMAX_SHIFT 6
247#define SST_LODMAX (0x3F<<SST_LODMAX_SHIFT)
248#define SST_LODBIAS_SHIFT 12
249#define SST_LODBIAS (0x3F<<SST_LODBIAS_SHIFT)
250#define SST_LOD_ODD BIT(18)
251#define SST_LOD_TSPLIT BIT(19)
252#define SST_LOD_S_IS_WIDER BIT(20)
253#define SST_LOD_ASPECT_SHIFT 21
254#define SST_LOD_ASPECT (0x3<<SST_LOD_ASPECT_SHIFT)
255#define SST_LOD_ZEROFRAC BIT(23)
256#define SST_TMULTIBASEADDR BIT(24)
257#define SST_TDATA_SWIZZLE BIT(25)
258#define SST_TDATA_SWAP BIT(26)
259#define SST_TDIRECT_WRITE BIT(27)
260
261//----------------- SST tDetail bits -----------------------
262#define SST_DETAIL_MAX_SHIFT 0 // 8.0 format
263#define SST_DETAIL_MAX (0xFF<<SST_DETAIL_MAX_SHIFT)
264#define SST_DETAIL_BIAS_SHIFT 8 // 6.0 format signed
265#define SST_DETAIL_BIAS (0x3F<<SST_DETAIL_BIAS_SHIFT)
266#define SST_DETAIL_SCALE_SHIFT 14 // 3.0 format
267#define SST_DETAIL_SCALE (0x7<<SST_DETAIL_SCALE_SHIFT)
268
269
270//----------------- SST fbzMode bits -----------------------
271#define SST_ENRECTCLIP BIT(0)
272#define SST_ENCHROMAKEY BIT(1)
273#define SST_ENSTIPPLE BIT(2)
274#define SST_WBUFFER BIT(3)
275#define SST_ENDEPTHBUFFER BIT(4)
276# define SST_ZFUNC_LT BIT(5)
277# define SST_ZFUNC_EQ BIT(6)
278# define SST_ZFUNC_GT BIT(7)
279# define SST_ZFUNC_SHIFT 5
280# define SST_ZFUNC ( 0x7 << SST_ZFUNC_SHIFT )
281#define SST_ENDITHER BIT(8)
282#define SST_RGBWRMASK BIT(9)
283#define SST_ZAWRMASK BIT(10)
284#define SST_DITHER2x2 BIT(11)
285#define SST_ENSTIPPLEPATTERN BIT(12)
286#define SST_ENALPHAMASK BIT(13)
287#define SST_DRAWBUFFER_SHIFT 14
288#define SST_DRAWBUFFER (0x3<<SST_DRAWBUFFER_SHIFT)
289#define SST_DRAWBUFFER_FRONT (0<<SST_DRAWBUFFER_SHIFT)
290#define SST_DRAWBUFFER_BACK (1<<SST_DRAWBUFFER_SHIFT)
291#define SST_ENZBIAS BIT(16)
292#define SST_YORIGIN BIT(17)
293#define SST_ENALPHABUFFER BIT(18)
294#define SST_ENDITHERSUBTRACT BIT(19)
295#define SST_ABLEND_DITHER_SUB_EN SST_ENDITHERSUBTRACT
296#define SST_ENDITHERSUBTRACT BIT(19)
297#define SST_ZCOMPARE_TO_ZACOLOR BIT(20)
298
299//----------------- SST fbzColorPath bits -----------------------
300#define SST_RGBSELECT_SHIFT 0
301#define SST_RGBSELECT (0x3<<SST_RGBSELECT_SHIFT)
302# define SST_RGBSEL_RGBA (0<<SST_RGBSELECT_SHIFT)
303# define SST_RGBSEL_TMUOUT (1<<SST_RGBSELECT_SHIFT)
304# define SST_RGBSEL_TREXOUT SST_RGBSEL_TMUOUT
305# define SST_RGBSEL_C1 (2<<SST_RGBSELECT_SHIFT)
306# define SST_RGBSEL_LFB (3<<SST_RGBSELECT_SHIFT)
307#define SST_ASELECT_SHIFT 2
308#define SST_ASELECT (0x3<<SST_ASELECT_SHIFT)
309# define SST_ASEL_RGBA (0<<SST_ASELECT_SHIFT)
310# define SST_ASEL_TMUOUT (1<<SST_ASELECT_SHIFT)
311# define SST_ASEL_TREXOUT SST_ASEL_TMUOUT
312# define SST_ASEL_C1 (2<<SST_ASELECT_SHIFT)
313# define SST_ASEL_LFB (3<<SST_ASELECT_SHIFT)
314#define SST_LOCALSELECT_SHIFT 4
315#define SST_LOCALSELECT BIT(4)
316#define SST_ALOCALSELECT_SHIFT 5
317#define SST_ALOCALSELECT (0x3<<SST_ALOCALSELECT_SHIFT)
318#define SST_ALOCAL_ITERATOR (0<<SST_ALOCALSELECT_SHIFT)
319#define SST_ALOCAL_C0 (1<<SST_ALOCALSELECT_SHIFT)
320#define SST_ALOCAL_Z (2<<SST_ALOCALSELECT_SHIFT)
321#define SST_LOCALSELECT_OVERRIDE_WITH_ATEX BIT(7)
322#define SST_CC_ZERO_OTHER BIT(8)
323#define SST_CC_SUB_CLOCAL BIT(9)
324#define SST_CC_MSELECT_SHIFT 10
325#define SST_CC_MSELECT (0x7<<SST_CC_MSELECT_SHIFT)
326# define SST_CC_MONE (0<<SST_CC_MSELECT_SHIFT)
327# define SST_CC_MCLOCAL (1<<SST_CC_MSELECT_SHIFT)
328# define SST_CC_MAOTHER (2<<SST_CC_MSELECT_SHIFT)
329# define SST_CC_MALOCAL (3<<SST_CC_MSELECT_SHIFT)
330# define SST_CC_MATMU (4<<SST_CC_MSELECT_SHIFT)
331# define SST_CC_MATREX SST_CC_MATMU
332#define SST_CC_REVERSE_BLEND BIT(13)
333#define SST_CC_ADD_CLOCAL BIT(14)
334#define SST_CC_ADD_ALOCAL BIT(15)
335#define SST_CC_INVERT_OUTPUT BIT(16)
336#define SST_CCA_ZERO_OTHER BIT(17)
337#define SST_CCA_SUB_CLOCAL BIT(18)
338#define SST_CCA_MSELECT_SHIFT 19
339#define SST_CCA_MSELECT (0x7<<SST_CCA_MSELECT_SHIFT)
340# define SST_CCA_MONE (0<<SST_CCA_MSELECT_SHIFT)
341# define SST_CCA_MCLOCAL (1<<SST_CCA_MSELECT_SHIFT)
342# define SST_CCA_MAOTHER (2<<SST_CCA_MSELECT_SHIFT)
343# define SST_CCA_MALOCAL (3<<SST_CCA_MSELECT_SHIFT)
344# define SST_CCA_MATMU (4<<SST_CCA_MSELECT_SHIFT)
345# define SST_CCA_MATREX SST_CCA_MATMU
346#define SST_CCA_REVERSE_BLEND BIT(22)
347#define SST_CCA_ADD_CLOCAL BIT(23)
348#define SST_CCA_ADD_ALOCAL BIT(24)
349#define SST_CCA_INVERT_OUTPUT BIT(25)
350#define SST_PARMADJUST BIT(26)
351#define SST_ENTEXTUREMAP BIT(27)
352
353
354// here are some abstract constants that most people will be using
355// CC stands for Color Combine (RGB channels)
356// CCA stands for Color Combine Alpha (just the Alpha channel)
357// BLEND_ATT blends on the Alpha channel of the color passed from TMU to TMU
358// BLEND_ALOCAL blends on the Alpha channel of the local texture color
359// NOTE: and of the BLEND modes can be modified using SST_CC_REVERSE_BLEND
360// and/or SST_CCA_REVERSE_BLEND, these modifiers reverse the "polarity"
361// of the blend
362#define SST_CC_MZERO (SST_CC_MONE | SST_CC_REVERSE_BLEND)
363#define SST_CCA_MZERO (SST_CCA_MONE | SST_CCA_REVERSE_BLEND)
364
365#define SST_CCOMBINE_SHIFT 8 // RGB COMBINE MODES
366#define SST_CCOMBINE (0x1FF<<SST_CCOMBINE_SHIFT)
367# define SST_CC_REPLACE (SST_CC_ZERO_OTHER | SST_CC_ADD_CLOCAL)
368# define SST_CC_PASS (SST_CC_MONE)
369# define SST_CC_ADD (SST_CC_MONE | SST_CC_ADD_CLOCAL)
370# define SST_CC_SUB (SST_CC_SUB_CLOCAL | SST_CC_MONE)
371# define SST_CC_MULT (SST_CC_MCLOCAL | SST_CC_REVERSE_BLEND)
372# define SST_CC_ZERO (SST_CC_MZERO)
373# define SST_CC_ONE (SST_CC_MZERO | SST_CC_INVERT_OUTPUT)
374# define SST_CC_BLEND (SST_CC_SUB_CLOCAL | SST_CC_ADD_CLOCAL)
375# define SST_CC_BLEND_ATT (SST_CC_BLEND | SST_CC_MAOTHER)
376# define SST_CC_BLEND_ATEX (SST_CC_BLEND | SST_CC_MATMU)
377# define SST_CC_BLEND_ATEX_REV (SST_CC_BLEND | SST_CC_MATMU | SST_CC_REVERSE_BLEND)
378# define SST_CC_BLEND_ATT_REV (SST_CC_BLEND | SST_CC_MAOTHER | SST_CC_REVERSE_BLEND)
379# define SST_CC_BLEND_ALOCAL (SST_CC_BLEND | SST_CC_MALOCAL)
380#define SST_CACOMBINE_SHIFT 17 // ALPHA COMBINE MODES
381#define SST_CACOMBINE (0x1FF<<SST_CACOMBINE_SHIFT)
382# define SST_CCA_REPLACE (SST_CCA_ZERO_OTHER | SST_CCA_ADD_CLOCAL)
383# define SST_CCA_PASS (SST_CCA_MONE)
384# define SST_CCA_ADD (SST_CCA_MONE | SST_CCA_ADD_CLOCAL)
385# define SST_CCA_SUB (SST_CCA_SUB_CLOCAL | SST_CCA_MONE)
386# define SST_CCA_MULT (SST_CCA_MCLOCAL | SST_CCA_REVERSE_BLEND)
387# define SST_CCA_ONE (SST_CCA_MZERO | SST_CCA_INVERT_OUTPUT)
388# define SST_CCA_ZERO (SST_CCA_MZERO)
389# define SST_CCA_BLEND (SST_CCA_SUB_CLOCAL | SST_CCA_ADD_CLOCAL)
390# define SST_CCA_BLEND_ATT (SST_CCA_BLEND | SST_CCA_MAOTHER)
391# define SST_CCA_BLEND_ATEX (SST_CCA_BLEND | SST_CCA_MATMU)
392# define SST_CCA_BLEND_ATEX_REV (SST_CCA_BLEND | SST_CCA_MATMU | SST_CCA_REVERSE_BLEN)
393# define SST_CCA_BLEND_ATT_REV (SST_CCA_BLEND | SST_CCA_MAOTHER | SST_CCA_REVERSE_BLEND)
394# define SST_CCA_BLEND_ALOCAL (SST_CCA_BLEND | SST_CCA_MALOCAL)
395
396
397//----------------- SSTfogMode bits -----------------------
398#define SST_ENFOGGING BIT(0) // Afog*Cfog + (1-Afog)*Color
399#define SST_FOGADD BIT(1) // generates (1-Afog)*Color
400#define SST_FOGMULT BIT(2) // generates Afog*Cfog
401#define SST_FOG_ALPHA BIT(3) // use Alpha iterator to control fog
402#define SST_FOG_Z BIT(4) // use Z iterator to control fog
403#define SST_FOG_CONSTANT BIT(5) // simply add Cfog to color and clamp
404
405//----------------- SST alphaMode bits -----------------------
406#define SST_ENALPHAFUNC BIT(0)
407#define SST_ALPHAFNC_SHIFT 1
408#define SST_ALPHAFUNC_SHIFT 1
409# define SST_ALPHAFUNC_LT BIT(1)
410# define SST_ALPHAFUNC_EQ BIT(2)
411# define SST_ALPHAFUNC_GT BIT(3)
412# define SST_ALPHAFNC ( 0x7 << SST_ALPHAFNC_SHIFT )
413# define SST_ALPHAFUNC ( 0x7 << SST_ALPHAFUNC_SHIFT )
414#define SST_ENALPHABLEND BIT(4)
415#define SST_ENANTIALIAS BIT(5)
416#define SST_RGBSRCFACT_SHIFT 8 // RGB source factor
417#define SST_RGBSRCFACT (0xF<<SST_RGBSRCFACT_SHIFT)
418# define SST_A_ZERO 0
419# define SST_A_SRCALPHA 1
420# define SST_A_COLOR 2
421# define SST_A_DSTALPHA 3
422# define SST_A_ONE 4
423# define SST_AOM_SRCALPHA 5
424# define SST_AOM_COLOR 6
425# define SST_AOM_DSTALPHA 7
426# define SST_A_SATURATE 0xF // for SRC factor only
427# define SST_A_COLORBEFOREFOG 0xF // for DST factor only
428#define SST_RGBDSTFACT_SHIFT 12 // RGB destination factor
429#define SST_RGBDSTFACT (0xF<<SST_RGBDSTFACT_SHIFT)
430#define SST_ASRCFACT_SHIFT 16 // A source factor
431#define SST_ASRCFACT (0xF<<SST_ASRCFACT_SHIFT)
432#define SST_ADSTFACT_SHIFT 20 // A destination factor
433#define SST_ADSTFACT (0xF<<SST_ADSTFACT_SHIFT)
434#define SST_ALPHAREF_SHIFT 24
435#define SST_ALPHAREF (0xFF<<SST_ALPHAREF_SHIFT)
436
437//---------------- SST zaColor bits ----------------------
438#define SST_ZACOLOR_DEPTH_SHIFT 0
439#define SST_ZACOLOR_DEPTH ( 0xFFFF << SST_ZACOLOR_DEPTH_SHIFT )
440#define SST_ZACOLOR_ALPHA_SHIFT 24
441#define SST_ZACOLOR_ALPHA ( 0xFF << SST_ZACOLOR_ALPHA_SHIFT )
442
443//----------------- SST clip bits ------------------------
444//clipLeftRight
445#define SST_CLIPLEFT_SHIFT 16
446#define SST_CLIPRIGHT_SHIFT 0
447//clipBottomTop
448#define SST_CLIPBOTTOM_SHIFT 16
449#define SST_CLIPTOP_SHIFT 0
450
451//----------------- SST status bits -----------------------
452#define SST_FIFOLEVEL 0x3F
453#define SST_VRETRACE BIT(6)
454#define SST_FBI_BUSY BIT(7)
455#define SST_TMU_BUSY BIT(8)
456#define SST_TREX_BUSY SST_TMU_BUSY
457#define SST_BUSY BIT(9)
458#define SST_DISPLAYED_BUFFER_SHIFT 10
459#define SST_DISPLAYED_BUFFER (0x3<<SST_DISPLAYED_BUFFER_SHIFT)
460#define SST_MEMFIFOLEVEL_SHIFT 12
461#define SST_MEMFIFOLEVEL (0xFFFF<<SST_MEMFIFOLEVEL_SHIFT)
462#define SST_SWAPBUFPENDING_SHIFT 28
463#define SST_SWAPBUFPENDING (0x7<<SST_SWAPBUFPENDING_SHIFT)
464#define SST_PCIINTERRUPTED BIT(31)
465//----------------- SST fbiInit* -----------------------
466// fbiInit0
467#define SST_EN_VGA_PASSTHRU BIT(0)
468#define SST_PCI_FIFO_LWM_SHIFT 6
469#define SST_PCI_FIFO_LWM (0x1F<<SST_PCI_FIFO_LWM_SHIFT)
470#define SST_EN_LFB_MEMFIFO BIT(11)
471#define SST_EN_TEX_MEMFIFO BIT(12)
472#define SST_MEM_FIFO_EN BIT(13)
473#define SST_MEM_FIFO_HWM_SHIFT 14
474#define SST_MEM_FIFO_HWM (0x7FF<<SST_MEM_FIFO_HWM_SHIFT)
475#define SST_MEM_FIFO_BURST_HWM_SHIFT 25
476#define SST_MEM_FIFO_BURST_HWM (0x3F<<SST_MEM_FIFO_BURST_HWM_SHIFT)
477// fbiInit1
478#define SST_PCI_WRWS_0 0x0
479#define SST_PCI_WRWS_1 BIT(1)
480#define SST_LFB_READ_EN BIT(3)
481#define SST_VIDEO_TILES_IN_X_SHIFT 4
482#define SST_VIDEO_TILES_IN_X (0xF<<SST_VIDEO_TILES_IN_X_SHIFT)
483# define SST_VIDEO_TILES_IN_X_448 (7<<SST_VIDEO_TILES_IN_X_SHIFT)
484# define SST_VIDEO_TILES_IN_X_512 (8<<SST_VIDEO_TILES_IN_X_SHIFT)
485# define SST_VIDEO_TILES_IN_X_640 (10<<SST_VIDEO_TILES_IN_X_SHIFT)
486# define SST_VIDEO_TILES_IN_X_832 (13<<SST_VIDEO_TILES_IN_X_SHIFT)
487# define SST_VIDEO_TILES_IN_X_800 SST_VIDEO_TILES_IN_X_832
488#define SST_VIDEO_RESET BIT(8)
489#define SST_VIDEO_RUN 0
490#define SST_VIDEO_STOP BIT(8)
491#define SST_HVSYNC_OVERRIDE BIT(9)
492#define SST_HSYNC_OVERRIDE_VAL BIT(10)
493#define SST_VSYNC_OVERRIDE_VAL BIT(11)
494#define SST_VIDEO_BLANK_EN BIT(12)
495#define SST_VIDEO_DATA_OE_EN BIT(13)
496#define SST_VIDEO_BLANK_OE_EN BIT(14)
497#define SST_VIDEO_HVSYNC_OE_EN BIT(15)
498#define SST_VIDEO_DCLK_OE_EN BIT(16)
499#define SST_VIDEO_VID_CLK_SEL BIT(17)
500#define SST_VIDEO_VID_CLK_2X 0x0
501#define SST_VIDEO_VID_CLK_SLAVE BIT(17)
502#define SST_VIDEO_VCLK_2X_INPUT_DEL_SHIFT 18
503#define SST_VIDEO_VCLK_2X_INPUT_DEL (0x3<<SST_VIDEO_VCLK_2X_INPUT_DEL_SHIFT)
504#define SST_VIDEO_VCLK_SEL_SHIFT 20
505# define SST_VIDEO_VCLK_SEL (0x3<<SST_VIDEO_VCLK_SEL_SHIFT)
506# define SST_VIDEO_VCLK_DIV2 (0x1<<SST_VIDEO_VCLK_SEL_SHIFT)
507#define SST_VIDEO_24BPP_EN BIT(22)
508#define SST_EN_SCANLINE_INTERLEAVE BIT(23)
509#define SST_VIDEO_FILTER_EN BIT(25)
510#define SST_VIDEO_INVERT_VID_CLK_2X BIT(26)
511#define SST_VIDEO_VCLK_2X_OUTPUT_DEL_SHIFT 27
512# define SST_VIDEO_VCLK_2X_OUTPUT_DEL (0x3<<SST_VIDEO_VCLK_2X_OUTPUT_DEL_SHIFT)
513#define SST_VIDEO_VCLK_DEL_SHIFT 29
514# define SST_VIDEO_VCLK_DEL (0x3<<SST_VIDEO_VCLK_DEL_SHIFT)
515#define SST_DISEN_RD_AHEAD_WR_RD BIT(31)
516#define SST_VIDEO_MASK 0x7e7ffe00
517// fbiInit2
518#define SST_VIDEO_DITHER_SUB_EN BIT(0)
519#define SST_DRAM_BANKING_CONFIG BIT(1)
520#define SST_EN_TRIPLE_BUFFERING BIT(4)
521#define SST_EN_FAST_RAS_READ BIT(5)
522#define SST_EN_OE_GEN BIT(6)
523#define SST_EN_FAST_RD_AHEAD_WR BIT(7)
524#define SST_EN_DITHER_PASSTHRU BIT(8)
525#define SST_SWAP_ALGORITHM_SHIFT 9
526#define SST_SWAP_ALGORITHM (0x3<<SST_SWAP_ALGORITHM_SHIFT)
527# define SST_SWAP_VSYNC (0<<SST_SWAP_ALGORITHM_SHIFT)
528# define SST_SWAP_DACDATA0 (1<<SST_SWAP_ALGORITHM_SHIFT)
529# define SST_SWAP_FIFOSTALL (2<<SST_SWAP_ALGORITHM_SHIFT)
530#define SST_VIDEO_BUFFER_OFFSET_SHIFT 11
531#define SST_VIDEO_BUFFER_OFFSET (0x1FF<<SST_VIDEO_BUFFER_OFFSET_SHIFT)
532# define SST_VIDEO_BUFFER_OFFSET_448 (77<<SST_VIDEO_BUFFER_OFFSET_SHIFT)
533# define SST_VIDEO_BUFFER_OFFSET_512 (96<<SST_VIDEO_BUFFER_OFFSET_SHIFT)
534# define SST_VIDEO_BUFFER_OFFSET_640 (150<<SST_VIDEO_BUFFER_OFFSET_SHIFT)
535# define SST_VIDEO_BUFFER_OFFSET_832 (247<<SST_VIDEO_BUFFER_OFFSET_SHIFT)
536#define SST_VIDEO_BUFFER_OFFSET_800 SST_VIDEO_BUFFER_OFFSET_832
537#define SST_EN_DRAM_BANKED BIT(20)
538#define SST_EN_DRAM_RD_AHEAD_FIFO BIT(21)
539#define SST_EN_DRAM_REFRESH BIT(22)
540#define SST_DRAM_REFRESH_CNTR_SHIFT 23
541# define SST_DRAM_REFRESH_CNTR (0x1FF<<SST_DRAM_REFRESH_CNTR_SHIFT)
542// fbiInit3
543#define SST_ALT_REGMAPPING BIT(0)
544#define SST_VIDEO_FIFO_THRESH_SHIFT 1
545# define SST_VIDEO_FIFO_THRESH (0x1F<<SST_VIDEO_FIFO_THRESH_SHIFT)
546#define SST_YORIGIN_TOP_SHIFT 22
547# define SST_YORIGIN_TOP (0x3FF<<SST_YORIGIN_TOP_SHIFT)
548#define SST_YORIGIN_SUBVAL_SHIFT SST_YORIGIN_TOP_SHIFT
549#define SST_YORIGIN_SUBVAL (0x3FF<<SST_YORIGIN_SUBVAL_SHIFT)
550
551//----------------- SST dacData bits -----------------------
552#define SST_DACDATA_DATA (0xFF)
553#define SST_DACDATA_ADDR_SHIFT 8
554#define SST_DACDATA_ADDR (0x7<<SST_DACDATA_ADDR_SHIFT)
555#define SST_DACDATA_RD BIT(11)
556#define SST_DACDATA_WR 0x0
557
558//----------------- swapBufferCMD bits ---------------------
559#define SST_SWAP_EN_WAIT_ON_VSYNC BIT(0)
560#define SST_SWAP_BUFFER_INTERVAL_SHIFT 1
561#define SST_SWAP_BUFFER_INTERVAL (0xff << SST_SWAP_BUFFER_INTERVAL_SHIFT)
562
563//----------------- SST Configuration Registers ---------------
564#define SST_MEMBASE_ADDR 0x10
565#define SST_INIT_ENABLE 0x40
566#define SST_BUS_SNOOP0 0x44
567#define SST_BUS_SNOOP1 0x48
568#define SST_CFG_STATUS 0x4c
569
570//----------------- SST Remapped Registers --------------------
571#define SST_DAC_RD_DATA 0x00000218
572#define SST_VIDEO_CHECKSUM 0x0000021c
573
574//----------------- SST initEnable (Config register) bits ---
575#define SST_INITWR_EN BIT(0)
576#define SST_PCI_FIFOWR_EN BIT(1)
577#define SST_FBIINIT23_REMAP BIT(2)
578#define SST_SNOOP0_EN BIT(4)
579#define SST_SNOOP0_IO BIT(5)
580#define SST_SNOOP0_RD BIT(6)
581#define SST_SNOOP1_EN BIT(7)
582#define SST_SNOOP1_IO BIT(8)
583#define SST_SNOOP1_RD BIT(9)
584#define SST_SCANLINE_SLV_OWNPCI BIT(10)
585#define SST_SCANLINE_SLI_SLV BIT(11)
586
587//----------------- Other---------------------------------------
588#define SST_LFB_ADDR BIT(22)
589#define SST_TEX_ADDR BIT(23)
590
591//----------------- SST vRetrace bits ---------------------
592#define SST_VRETRACE_VSYNC_OFF 0xff
593
594//----------------- SST hSync bits ------------------------
595#define SST_HSYNC_ON 0xff
596#define SST_HSYNC_OFF_SHIFT 16
597#define SST_HSYNC_OFF (0x3ff << SST_HSYNCOFF_SHIFT)
598
599//----------------- SST vSync bits ------------------------
600#define SST_VSYNC_ON 0xff
601#define SST_VSYNC_OFF_SHIFT 16
602#define SST_VSYNC_OFF (0xfff << SST_VSYNC_OFF_SHIFT)
603
604//----------------- SST backPorch bits
605#define SST_HBACKPORCH 0xff
606#define SST_VBACKPORCH_SHIFT 16
607#define SST_VBACKPORCH (0xff << SST_VBACKPORCH_SHIFT)
608
609//----------------- SST videoDimensionS Register
610#define SST_VIDEODIMENSIONS_X 0x3ff
611#define SST_VIDEODIMENSIONS_Y_SHIFT 16
612#define SST_VIDEODIMENSIONS_Y 0x3ff
613
614
615//----------------- SST chip layout -----------------------
616// registers are in groups of 8 for easy decode
617typedef struct sstregs { // THE CHIP
618#ifndef SST96
619 // EXTERNAL registers
620 unsigned long status; // chip status, Read Only
621 unsigned long reserved0;
622 vtxRec vA; // Vertex A,B,C
623 vtxRec vB;
624 vtxRec vC;
625
626 long r; // 12.12 Parameters
627 long g; // 12.12
628 long b; // 12.12
629 long z; // 20.12
630 long a; // 12.12
631 long s; // 14.18
632 long t; // 14.18
633 long w; // 2.30
634
635 long drdx; // X Gradients
636 long dgdx;
637 long dbdx;
638 long dzdx;
639 long dadx;
640 long dsdx;
641 long dtdx;
642 long dwdx;
643
644 long drdy; // Y Gradients
645 long dgdy;
646 long dbdy;
647 long dzdy;
648 long dady;
649 long dsdy;
650 long dtdy;
651 long dwdy;
652
653 unsigned long triangleCMD; // execute a triangle command (float)
654 unsigned long reserved1;
655 vtxRec FvA; // floating point version
656 vtxRec FvB;
657 vtxRec FvC;
658
659 long Fr; // floating point version
660 long Fg;
661 long Fb;
662 long Fz;
663 long Fa;
664 long Fs;
665 long Ft;
666 long Fw;
667
668 long Fdrdx;
669 long Fdgdx;
670 long Fdbdx;
671 long Fdzdx;
672 long Fdadx;
673 long Fdsdx;
674 long Fdtdx;
675 long Fdwdx;
676
677 long Fdrdy;
678 long Fdgdy;
679 long Fdbdy;
680 long Fdzdy;
681 long Fdady;
682 long Fdsdy;
683 long Fdtdy;
684 long Fdwdy;
685
686 unsigned long FtriangleCMD; // execute a triangle command
687 unsigned long fbzColorPath; // color select and combine
688 unsigned long fogMode; // fog Mode
689 unsigned long alphaMode; // alpha Mode
690 unsigned long fbzMode; // framebuffer and Z mode
691 unsigned long lfbMode; // linear framebuffer Mode
692 unsigned long clipLeftRight; // (6)10(6)10
693 unsigned long clipBottomTop; // (6)10(6)10
694
695 unsigned long nopCMD; // execute a nop command
696 unsigned long fastfillCMD; // execute a fast fill command
697 unsigned long swapbufferCMD;// execute a swapbuffer command
698 unsigned long fogColor; // (8)888
699 unsigned long zaColor; // 8(8)16
700 unsigned long chromaKey; // (8)888
701 unsigned long reserved2;
702 unsigned long reserved3;
703
704 unsigned long stipple; // 32 bits, MSB masks pixels
705 unsigned long c0; // 8.8.8.8 (ARGB)
706 unsigned long c1; // 8.8.8.8 (ARGB)
707 struct { // statistic gathering variables
708 unsigned int fbiPixelsIn;
709 unsigned int fbiChromaFail;
710 unsigned int fbiZfuncFail;
711 unsigned int fbiAfuncFail;
712 unsigned int fbiPixelsOut;
713 } stats;
714
715 unsigned long fogTable[32]; // 64 entries, 2 per word, 2 bytes each
716
717 unsigned long reserved8[8];
718
719 unsigned long fbiInit4;
720 unsigned long vRetrace;
721 unsigned long backPorch;
722 unsigned long videoDimensions;
723 unsigned long fbiInit0;
724 unsigned long fbiInit1;
725 unsigned long fbiInit2;
726 unsigned long fbiInit3;
727
728 unsigned long hSync;
729 unsigned long vSync;
730 unsigned long clutData;
731 unsigned long dacData;
732 unsigned long videoFilterRgbThreshold;
733 unsigned long reserved35[35]; // reserved51 became reserved35,
734 // Grabbed remaining 16 for sst-96
735
736
737//========================================================================
738// Please treat as the SST-96 area.
739// These belong in the SST_CHROMARANGE register
740#define SST_CHROMARANGE_BLUE_EX BIT(24) // Blue value in exclusive mode
741#define SST_CHROMARANGE_GREEN_EX BIT(25) // Green value in exclusive mode
742#define SST_CHROMARANGE_RED_EX BIT(26) // Red value in exclusive mode
743#define SST_CHROMARANGE_BLOCK_OR BIT(27) // Union of all colors.
744#define SST_ENCHROMARANGE BIT(28)
745
746// These belong in the clipLeftRight and clipTopBottom Registers.
747#define SST_ENRECTCLIP01 BIT(31) //
748#define SST_RECTCLIP_EX BIT(31) //
749
750// Just to unconfuse myself:
751//
752// CHIP FBI-REV TMU-REV DEV-ID
753// SST1-0.6u 1 0 1
754// SST1-0.5u 2 1 1
755// SST-96 1 (1) 2
756//
757// SST96h2 == H2
758// SST97 == H3
759#define SST_DEVICE_ID_SST1 1
760#define SST_DEVICE_ID_SST96 2
761#define SST_DEVICE_ID_SST96h2 3
762#define SST_DEVICE_ID_SST97 4
763
764
765 unsigned long chromaRange; // SST-96 specific
766 unsigned long clipLeftRight1; // SST-96 specific
767 unsigned long clipBottomTop1; // SST-96 specific
768 unsigned long colBufferSetup; // SST-96 specific
769 unsigned long auxBufferSetup; // SST-96 specific
770 unsigned long texChipSel; // SST-96 specific
771 unsigned long swapPendCmd; // SST-96 specific
772 unsigned long reservedSST96[9]; // SST-96 specific
773
774// End SST-96 area
775//========================================================================
776
777 unsigned long textureMode; // texture Mode
778 unsigned long tLOD; // texture LOD settings
779 unsigned long tDetail; // texture detail settings
780 unsigned long texBaseAddr; // current texture base address
781 unsigned long texBaseAddr1;
782 unsigned long texBaseAddr2;
783 unsigned long texBaseAddr38;
784 unsigned long trexInit0; // hardware init bits
785 unsigned long trexInit1; // hardware init bits
786
787 unsigned long nccTable0[12]; // NCC decode tables, bits are packed
788 unsigned long nccTable1[12]; // 4 words Y, 4 words I, 4 words Q
789
790#else
791 /* EXTERNAL registers */
792 unsigned long status; /* chip status, Read Only */
793 unsigned long reserved001; /* reserved001 */
794
795 /* Fixed point version */
796 vtxRec vA; /* Vertex A,B,C */
797 vtxRec vB;
798 vtxRec vC;
799
800 /* Parameters, X gradients, Y gradients */
801 long r; /* 12.12 */
802 long drdx; /* 12.12 */
803 long drdy;
804 long g;
805 long dgdx;
806 long dgdy;
807 long b;
808 long dbdx;
809
810 long dbdy;
811 long z; /* 20.12 */
812 long dzdx; /* 20.12 */
813 long dzdy; /* ??? 12.12 */
814 long a; /* 12.12 */
815 long dadx; /* 12.12 */
816 long dady;
817 long s; /* 14.18 */
818
819 long dsdx; /* 14.18 */
820 long dsdy;
821 long t;
822 long dtdx;
823 long dtdy;
824 long w; /* 2.30 */
825 long dwdx; /* 2.30 */
826 long dwdy;
827
828 unsigned long triangleCMD; /* execute a triangle command (fixed) */
829 unsigned long reserved021;
830
831 /* Floating point version */
832 vtxRec FvA;
833 vtxRec FvB;
834 vtxRec FvC;
835
836 /* Parameters, X gradients, Y gradients */
837 float Fr;
838 float Fdrdx;
839 float Fdrdy;
840 float Fg;
841 float Fdgdx;
842 float Fdgdy;
843 float Fb;
844 float Fdbdx;
845
846 float Fdbdy;
847 float Fz;
848 float Fdzdx;
849 float Fdzdy;
850 float Fa;
851 float Fdadx;
852 float Fdady;
853 float Fs;
854
855 float Fdsdx;
856 float Fdsdy;
857 float Ft;
858 float Fdtdx;
859 float Fdtdy;
860 float Fw;
861 float Fdwdx;
862 float Fdwdy;
863
864 /* commands except for triangleCMD */
865 unsigned long FtriangleCMD; /* execute a triangle command (float) */
866 unsigned long reserved041; /* required cmd spacer for SST-96 */
867 unsigned long nopCMD; /* execute a nop command */
868 unsigned long reserved043; /* required cmd spacer for SST-96 */
869 unsigned long fastfillCMD; /* execute a fast fill command */
870 unsigned long reserved045; /* required cmd spacer for SST-96 */
871 unsigned long swapbufferCMD; /* execute a swapbuffer command */
872 unsigned long reserved047; /* required cmd spacer for SST-96 */
873
874 unsigned long swappendCMD; /* increment swap pending count */
875 unsigned long reserved049; /* required cmd spacer for SST-96 */
876 unsigned long reserved04A[6]; /* 0x04A to 0x04F */
877
878 /* state registers */
879 unsigned long fbzColorPath; /* color select and combine */
880 unsigned long fogMode; /* fog Mode */
881 unsigned long alphaMode; /* alpha Mode */
882 unsigned long reserved053;
883 unsigned long fbzMode; /* color and auxiliary buffer control */
884 unsigned long stipple; /* 32 bits, MSB masks pixels */
885 unsigned long c0; /* 8.8.8.8 (ARGB) */
886 unsigned long c1; /* 8.8.8.8 (ARGB) */
887
888 unsigned long fogColor; /* (8)888 */
889 unsigned long zaColor; /* 8(8)16 */
890 unsigned long chromaKey; /* (8)888 */
891 unsigned long chromaRange; /* Chroma Range compare Values, Modes & Enable */
892 unsigned long reserved05C[4]; /* 0x05C to 0x05F */
893
894 unsigned long colBufferSetup; /* color buffer base address, stride, and mode */
895 unsigned long auxBufferSetup; /* auxiliary buffer base address, stride */
896 unsigned long clipLeftRight; /* (6)10(6)10 */
897 unsigned long clipBottomTop; /* (6)10(6)10 */
898 unsigned long clipLeftRight1; /* (6)10(6)10 */
899 unsigned long clipBottomTop1; /* (6)10(6)10 */
900 unsigned long reserved066[10]; /* 0x066 to 0x06F */
901
902 unsigned long fogTable[32]; /* 64 entries, 2 per word, 2 bytes each */
903
904 unsigned long fbijrInit0; /* FBIjr Hardware Init 0 - General */
905 unsigned long fbijrInit1; /* FBIjr Hardware Init 1 - PUMA */
906 unsigned long fbijrInit2; /* FBIjr Hardware Init 2 - MEM FIFO Setup */
907 unsigned long fbijrInit3; /* FBIjr Hardware Init 3 - CMD FIFO Setup */
908 unsigned long fbijrInit4; /* FBIjr Hardware Init 4 - CMD FIFO Entry Count */
909 unsigned long fbijrInit5; /* FBIjr Hardware Init 5 - CMD FIFO Read Pointer */
910 unsigned long reserved096[10]; /* 0x096 to 0x09F */
911
912 unsigned long fbijrVersion; /* FBIjr Version (company, device, & board */
913 struct { /* statistic gathering variables */
914 unsigned int fbiPixelsIn; /* Pixel counter (number pixels processed) */
915 unsigned int fbiChromaFail; /* Pixel counter (number pixels failed Chroma test) */
916 unsigned int fbiZfuncFail; /* Pixel counter (number pixels failed Z test) */
917 unsigned int fbiAfuncFail; /* Pixel counter (number pixels failed Alpha test) */
918 unsigned int fbiPixelsOut; /* Pixel counter (number pixels drawn) */
919 } stats;
920 unsigned long reserved0A6[10]; /* 0x0A6 to 0x0AF */
921
922 unsigned long reserved0B0[15]; /* 0x0B0 to 0x0BE */
923 unsigned long texChipSel; /* Texture Write Chip select */
924
925 /* TMU registers */
926 unsigned long textureMode; /* texture Mode */
927 unsigned long tLOD; /* texture LOD settings */
928 unsigned long tDetail; /* texture detail settings */
929 unsigned long texBaseAddr; /* current texture base address */
930 unsigned long texBaseAddr1;
931 unsigned long texBaseAddr2;
932 unsigned long texBaseAddr38;
933 unsigned long trexInit0; /* hardware init bits */
934 unsigned long trexInit1; /* hardware init bits */
935 unsigned long nccTable0[12]; /* NCC decode tables, bits are packed */
936 unsigned long nccTable1[12]; /* 4 words Y, 4 words I, 4 words Q */
937
938 unsigned long reserved0E1[31]; /* 0x0E1 to 0x0FF */
939#endif
940} Sstregs;
941
942#ifndef SST96
943// Here are the defines for the alternate register mappings
944#define r_ALT r
945#define drdx_ALT g
946#define drdy_ALT b
947#define g_ALT z
948#define dgdx_ALT a
949#define dgdy_ALT s
950#define b_ALT t
951#define dbdx_ALT w
952
953#define dbdy_ALT drdx
954#define z_ALT dgdx
955#define dzdx_ALT dbdx
956#define dzdy_ALT dzdx
957#define a_ALT dadx
958#define dadx_ALT dsdx
959#define dady_ALT dtdx
960#define s_ALT dwdx
961
962#define dsdx_ALT drdy
963#define dsdy_ALT dgdy
964#define t_ALT dbdy
965#define dtdx_ALT dzdy
966#define dtdy_ALT dady
967#define w_ALT dsdy
968#define dwdx_ALT dtdy
969#define dwdy_ALT dwdy
970
971#define Fr_ALT Fr
972#define Fdrdx_ALT Fg
973#define Fdrdy_ALT Fb
974#define Fg_ALT Fz
975#define Fdgdx_ALT Fa
976#define Fdgdy_ALT Fs
977#define Fb_ALT Ft
978#define Fdbdx_ALT Fw
979
980#define Fdbdy_ALT Fdrdx
981#define Fz_ALT Fdgdx
982#define Fdzdx_ALT Fdbdx
983#define Fdzdy_ALT Fdzdx
984#define Fa_ALT Fdadx
985#define Fdadx_ALT Fdsdx
986#define Fdady_ALT Fdtdx
987#define Fs_ALT Fdwdx
988
989#define Fdsdx_ALT Fdrdy
990#define Fdsdy_ALT Fdgdy
991#define Ft_ALT Fdbdy
992#define Fdtdx_ALT Fdzdy
993#define Fdtdy_ALT Fdady
994#define Fw_ALT Fdsdy
995#define Fdwdx_ALT Fdtdy
996#define Fdwdy_ALT Fdwdy
997#else
998// Here are the defines for the alternate register mappings
999#define r_ALT r
1000#define drdx_ALT drdx
1001#define drdy_ALT drdy
1002#define g_ALT c
1003#define dgdx_ALT dgdx
1004#define dgdy_ALT dgdy
1005#define b_ALT b
1006#define dbdx_ALT dbdx
1007
1008#define dbdy_ALT dbdy
1009#define z_ALT zgdx
1010#define dzdx_ALT dzdx
1011#define dzdy_ALT dzdy
1012#define a_ALT a
1013#define dadx_ALT dadx
1014#define dady_ALT dady
1015#define s_ALT s
1016
1017#define dsdx_ALT dsdx
1018#define dsdy_ALT dsdy
1019#define t_ALT t
1020#define dtdx_ALT dtdx
1021#define dtdy_ALT dtdy
1022#define w_ALT w
1023#define dwdx_ALT dwdx
1024#define dwdy_ALT dwdy
1025
1026#define Fr_ALT Fr
1027#define Fdrdx_ALT Fdrdx
1028#define Fdrdy_ALT Fdrdy
1029#define Fg_ALT Fg
1030#define Fdgdx_ALT Fdgdx
1031#define Fdgdy_ALT Fdgdy
1032#define Fb_ALT Fb
1033#define Fdbdx_ALT Fdbdx
1034
1035#define Fdbdy_ALT Fdbdy
1036#define Fz_ALT Fz
1037#define Fdzdx_ALT Fdzdx
1038#define Fdzdy_ALT Fdzdy
1039#define Fa_ALT Fa
1040#define Fdadx_ALT Fdadx
1041#define Fdady_ALT Fdady
1042#define Fs_ALT Fs
1043
1044#define Fdsdx_ALT Fdsdx
1045#define Fdsdy_ALT Fdsdy
1046#define Ft_ALT Ft
1047#define Fdtdx_ALT Fdtdx
1048#define Fdtdy_ALT Fdtdy
1049#define Fw_ALT Fw
1050#define Fdwdx_ALT Fdwdx
1051#define Fdwdy_ALT Fdwdy
1052#endif
1053
1054// Here are the defines for the hardware
1055#define GET(s) s
1056#define GET16(s) s
1057#define SET(d,s) d = s
1058#define SET16(d,s) d = s
1059#define SETF(d,s) (*(float *)&(d)) = s
1060
1061// SET macros for FBI
1062#define SET_FBI(d,s) SET (*(&(d)+0x100),s)
1063#define SET_FBIF(d,s) SETF(*(&(d)+0x100),s)
1064
1065// SET macros for TMU0
1066#define SET_0(d,s) SET (*(&(d)+0x200),s)
1067#define SET_0F(d,s) SETF(*(&(d)+0x200),s)
1068
1069// SET macros for FBI+TMU0
1070#define SET_FBI_0(d,s) SET (*(&(d)+0x300),s)
1071#define SET_FBI_0F(d,s) SETF(*(&(d)+0x300),s)
1072
1073// SET macros for TMU1
1074#define SET_1(d,s) SET (*(&(d)+0x400),s)
1075#define SET_1F(d,s) SETF(*(&(d)+0x400),s)
1076
1077// SET macros for FBI+TMU1
1078#define SET_FBI_1(d,s) SET (*(&(d)+0x500),s)
1079#define SET_FBI_1F(d,s) SETF(*(&(d)+0x500),s)
1080
1081// SET macros for TMU2
1082#define SET_2(d,s) SET (*(&(d)+0x800),s)
1083#define SET_2F(d,s) SETF(*(&(d)+0x800),s)
1084
1085#ifndef SST96
1086#define SST_WRAP(sst,n) ((Sstregs *)((n)*0x4000+(long)(sst)))
1087#define SST_CHIP(sst,n) ((Sstregs *)((n)*0x400+(long)(sst)))
1088#define SST_TMU(sst,n) ((Sstregs *)((0x800<<(n))+(long)(sst)))
1089#define SST_TREX(sst,n) SST_TMU(sst,n)
1090#define SST_LFB_ADDRESS(sst) (0x400000+(long)(sst))
1091#define SST_TEX_ADDRESS(sst) (0x800000+(long)(sst))
1092#else
1093#define SST_WRAP(sst,n) ((Sstregs *)(((n) << 12) + ((FxU32) (sst))))
1094#define SST_CHIP(sst,n) ((Sstregs *)(((n) << 16) + ((FxU32) (sst))))
1095#define SST_TMU(sst,n) ((Sstregs *)(((n) << 17) + ((FxU32) (sst))))
1096#define SST_TREX(sst,n) SST_TMU(sst,n)
1097#define SST_LFB_ADDRESS(sst) (0x000000+(FxU32)(sst))
1098#define SST_TEX_ADDRESS(sst) (0x600000+(FxU32)(sst))
1099#endif
1100
1101extern unsigned long sstMipMapSize[4][16];
1102extern unsigned long sstMipMapOffset[4][16];
1103extern unsigned long sstMipMapOffset_Tsplit[4][16];
1104
1105
1106extern void sstMemoryConfig(int fbiMem, int trex0Mem,int trex1Mem,int trex2Mem);
1107extern Sstregs *sstGinit (char *, int);
1108extern void sstTrexChips(int);
1109
1110#ifdef __cplusplus
1111}
1112#endif
1113
1114#endif /* !__SST_H__ */
Note: See TracBrowser for help on using the repository browser.