]> icculus.org git repositories - taylor/freespace2.git/blob - include/glide.h
Initial revision
[taylor/freespace2.git] / include / glide.h
1 /*
2 ** Copyright (c) 1995, 3Dfx Interactive, Inc.
3 ** All Rights Reserved.
4 **
5 ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;
6 ** the contents of this file may not be disclosed to third parties, copied or
7 ** duplicated in any form, in whole or in part, without the prior written
8 ** permission of 3Dfx Interactive, Inc.
9 **
10 ** RESTRICTED RIGHTS LEGEND:
11 ** Use, duplication or disclosure by the Government is subject to restrictions
12 ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
13 ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
14 ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
15 ** rights reserved under the Copyright Laws of the United States.
16 */
17
18 /*
19 ** GLIDE.H
20 **
21 ** The following #defines are relevant when using Glide:
22 **
23 ** One of the following "platform constants" must be defined during
24 ** compilation:
25 **
26 **            __DOS__           Defined for 32-bit DOS applications
27 **            __WIN32__         Defined for 32-bit Windows applications
28 **            __sparc__         Defined for Sun Solaris/SunOS
29 **            __linux__         Defined for Linux applications
30 **            __IRIX__          Defined for SGI Irix applications
31 **
32 */
33 #ifndef __GLIDE_H__
34 #define __GLIDE_H__
35
36 #define __MSC__
37 #define FX_GLIDE_NO_FUNC_PROTO
38
39 #include "3dfx.h"
40 #include "sst1vid.h"
41 #include "glidesys.h"
42
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46
47 /*
48 ** -----------------------------------------------------------------------
49 ** TYPE DEFINITIONS
50 ** -----------------------------------------------------------------------
51 */
52 typedef FxU32 GrColor_t;
53 typedef FxU8  GrAlpha_t;
54 typedef FxU32 GrMipMapId_t;
55 typedef FxU8  GrFog_t;
56
57 /*
58 ** -----------------------------------------------------------------------
59 ** CONSTANTS AND TYPES
60 ** -----------------------------------------------------------------------
61 */
62 #define MAX_NUM_SST            4
63 #define MAX_MIPMAPS_PER_SST    1024
64 #define GR_FOG_TABLE_SIZE      64
65 #define GR_NULL_MIPMAP_HANDLE  ((GrMipMapId_t) -1)
66 #define GR_ZDEPTHVALUE_NEAREST  0xFFFF
67 #define GR_ZDEPTHVALUE_FARTHEST 0x0000
68 #define GR_WDEPTHVALUE_NEAREST  0x0000
69 #define GR_WDEPTHVALUE_FARTHEST 0xFFFF
70
71 #define GR_MIPMAPLEVELMASK_EVEN  FXBIT(0)
72 #define GR_MIPMAPLEVELMASK_ODD  FXBIT(1)
73 #define GR_MIPMAPLEVELMASK_BOTH (GR_MIPMAPLEVELMASK_EVEN | GR_MIPMAPLEVELMASK_ODD )
74
75 #define GR_LODBIAS_BILINEAR     0.5
76 #define GR_LODBIAS_TRILINEAR    0.0
77
78 typedef FxI32 GrChipID_t;
79 #define GR_TMU0         0x0
80 #define GR_TMU1         0x1
81 #define GR_TMU2         0x2
82 #define GR_FBI          0x3
83
84 typedef FxI32 GrCombineFunction_t;
85 #define GR_COMBINE_FUNCTION_ZERO        0x0
86 #define GR_COMBINE_FUNCTION_NONE        GR_COMBINE_FUNCTION_ZERO
87 #define GR_COMBINE_FUNCTION_LOCAL       0x1
88 #define GR_COMBINE_FUNCTION_LOCAL_ALPHA 0x2
89 #define GR_COMBINE_FUNCTION_SCALE_OTHER 0x3
90 #define GR_COMBINE_FUNCTION_BLEND_OTHER GR_COMBINE_FUNCTION_SCALE_OTHER
91 #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL 0x4
92 #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA 0x5 
93 #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL 0x6
94 #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL 0x7
95 #define GR_COMBINE_FUNCTION_BLEND GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL
96 #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x8
97 #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL 0x9
98 #define GR_COMBINE_FUNCTION_BLEND_LOCAL GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL
99 #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x10
100
101 typedef FxI32 GrCombineFactor_t;
102 #define GR_COMBINE_FACTOR_ZERO          0x0
103 #define GR_COMBINE_FACTOR_NONE          GR_COMBINE_FACTOR_ZERO
104 #define GR_COMBINE_FACTOR_LOCAL         0x1
105 #define GR_COMBINE_FACTOR_OTHER_ALPHA   0x2
106 #define GR_COMBINE_FACTOR_LOCAL_ALPHA   0x3
107 #define GR_COMBINE_FACTOR_TEXTURE_ALPHA 0x4
108 #define GR_COMBINE_FACTOR_DETAIL_FACTOR GR_COMBINE_FACTOR_TEXTURE_ALPHA
109 #define GR_COMBINE_FACTOR_LOD_FRACTION  0x5
110 #define GR_COMBINE_FACTOR_ONE           0x8
111 #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL 0x9
112 #define GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA 0xa
113 #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA 0xb
114 #define GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA 0xc
115 #define GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA
116 #define GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION 0xd
117
118
119 typedef FxI32 GrCombineLocal_t;
120 #define GR_COMBINE_LOCAL_ITERATED 0x0
121 #define GR_COMBINE_LOCAL_CONSTANT 0x1
122 #define GR_COMBINE_LOCAL_NONE GR_COMBINE_LOCAL_CONSTANT
123 #define GR_COMBINE_LOCAL_DEPTH  0x2
124
125 typedef FxI32 GrCombineOther_t;
126 #define GR_COMBINE_OTHER_ITERATED 0x0
127 #define GR_COMBINE_OTHER_TEXTURE 0x1
128 #define GR_COMBINE_OTHER_CONSTANT 0x2
129 #define GR_COMBINE_OTHER_NONE GR_COMBINE_OTHER_CONSTANT
130
131
132 typedef FxI32 GrAlphaSource_t;
133 #define GR_ALPHASOURCE_CC_ALPHA 0x0
134 #define GR_ALPHASOURCE_ITERATED_ALPHA 0x1
135 #define GR_ALPHASOURCE_TEXTURE_ALPHA 0x2
136 #define GR_ALPHASOURCE_TEXTURE_ALPHA_TIMES_ITERATED_ALPHA 0x3
137
138
139 typedef FxI32 GrColorCombineFnc_t;
140 #define GR_COLORCOMBINE_ZERO 0x0
141 #define GR_COLORCOMBINE_CCRGB 0x1
142 #define GR_COLORCOMBINE_ITRGB 0x2
143 #define GR_COLORCOMBINE_ITRGB_DELTA0 0x3
144 #define GR_COLORCOMBINE_DECAL_TEXTURE 0x4
145 #define GR_COLORCOMBINE_TEXTURE_TIMES_CCRGB 0x5
146 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB 0x6
147 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_DELTA0 0x7
148 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_ADD_ALPHA 0x8
149 #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA 0x9
150 #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA_ADD_ITRGB 0xa
151 #define GR_COLORCOMBINE_TEXTURE_ADD_ITRGB 0xb
152 #define GR_COLORCOMBINE_TEXTURE_SUB_ITRGB 0xc
153 #define GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA 0xd
154 #define GR_COLORCOMBINE_DIFF_SPEC_A 0xe
155 #define GR_COLORCOMBINE_DIFF_SPEC_B 0xf
156 #define GR_COLORCOMBINE_ONE 0x10
157
158 typedef FxI32 GrAlphaBlendFnc_t;
159 #define GR_BLEND_ZERO 0x0
160 #define GR_BLEND_SRC_ALPHA 0x1
161 #define GR_BLEND_SRC_COLOR 0x2
162 #define GR_BLEND_DST_COLOR GR_BLEND_SRC_COLOR
163 #define GR_BLEND_DST_ALPHA 0x3 
164 #define GR_BLEND_ONE 0x4
165 #define GR_BLEND_ONE_MINUS_SRC_ALPHA 0x5
166 #define GR_BLEND_ONE_MINUS_SRC_COLOR 0x6
167 #define GR_BLEND_ONE_MINUS_DST_COLOR GR_BLEND_ONE_MINUS_SRC_COLOR 
168 #define GR_BLEND_ONE_MINUS_DST_ALPHA 0x7
169 #define GR_BLEND_RESERVED_8 0x8
170 #define GR_BLEND_RESERVED_9 0x9
171 #define GR_BLEND_RESERVED_A 0xa
172 #define GR_BLEND_RESERVED_B 0xb
173 #define GR_BLEND_RESERVED_C 0xc
174 #define GR_BLEND_RESERVED_D 0xd
175 #define GR_BLEND_RESERVED_E 0xe
176 #define GR_BLEND_ALPHA_SATURATE 0xf
177 #define GR_BLEND_PREFOG_COLOR GR_BLEND_ALPHA_SATURATE
178
179 typedef FxI32 GrAspectRatio_t;
180 #define GR_ASPECT_8x1 0x0       /* 8W x 1H */
181 #define GR_ASPECT_4x1 0x1       /* 4W x 1H */
182 #define GR_ASPECT_2x1 0x2       /* 2W x 1H */
183 #define GR_ASPECT_1x1 0x3       /* 1W x 1H */
184 #define GR_ASPECT_1x2 0x4       /* 1W x 2H */
185 #define GR_ASPECT_1x4 0x5       /* 1W x 4H */
186 #define GR_ASPECT_1x8 0x6       /* 1W x 8H */
187
188 typedef FxI32 GrBuffer_t;
189 #define GR_BUFFER_FRONTBUFFER   0x0
190 #define GR_BUFFER_BACKBUFFER    0x1
191 #define GR_BUFFER_AUXBUFFER     0x2
192 #define GR_BUFFER_DEPTHBUFFER   0x3
193 #define GR_BUFFER_ALPHABUFFER   0x4
194 #define GR_BUFFER_TRIPLEBUFFER  0x5
195
196 typedef FxI32 GrChromakeyMode_t;
197 #define GR_CHROMAKEY_DISABLE    0x0
198 #define GR_CHROMAKEY_ENABLE     0x1
199
200 typedef FxI32 GrCmpFnc_t;
201 #define GR_CMP_NEVER    0x0
202 #define GR_CMP_LESS     0x1
203 #define GR_CMP_EQUAL    0x2
204 #define GR_CMP_LEQUAL   0x3
205 #define GR_CMP_GREATER  0x4
206 #define GR_CMP_NOTEQUAL 0x5
207 #define GR_CMP_GEQUAL   0x6
208 #define GR_CMP_ALWAYS   0x7
209
210 typedef FxI32 GrColorFormat_t;
211 #define GR_COLORFORMAT_ARGB     0x0
212 #define GR_COLORFORMAT_ABGR     0x1
213
214 #define GR_COLORFORMAT_RGBA     0x2
215 #define GR_COLORFORMAT_BGRA     0x3
216
217 typedef FxI32 GrCullMode_t;
218 #define GR_CULL_DISABLE         0x0
219 #define GR_CULL_NEGATIVE        0x1
220 #define GR_CULL_POSITIVE        0x2
221
222 typedef FxI32 GrDepthBufferMode_t;
223 #define GR_DEPTHBUFFER_DISABLE                  0x0
224 #define GR_DEPTHBUFFER_ZBUFFER                  0x1
225 #define GR_DEPTHBUFFER_WBUFFER                  0x2
226 #define GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS  0x3
227 #define GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS  0x4
228
229 typedef FxI32 GrDitherMode_t;
230 #define GR_DITHER_DISABLE       0x0
231 #define GR_DITHER_2x2           0x1
232 #define GR_DITHER_4x4           0x2
233
234 typedef FxI32 GrFogMode_t;
235 #define GR_FOG_DISABLE             0x0
236 #define GR_FOG_WITH_ITERATED_ALPHA 0x1
237 #define GR_FOG_WITH_TABLE          0x2
238 #define GR_FOG_WITH_ITERATED_Z     0x3          /* Bug 735 */
239 #define GR_FOG_MULT2               0x100
240 #define GR_FOG_ADD2                0x200
241
242 typedef FxU32 GrLock_t;
243 #define GR_LFB_READ_ONLY  0x00
244 #define GR_LFB_WRITE_ONLY 0x01
245 #define GR_LFB_IDLE       0x00
246 #define GR_LFB_NOIDLE     0x10
247
248 typedef FxI32 GrLfbBypassMode_t;
249 #define GR_LFBBYPASS_DISABLE    0x0
250 #define GR_LFBBYPASS_ENABLE     0x1
251
252 typedef FxI32 GrLfbWriteMode_t;
253 #define GR_LFBWRITEMODE_565        0x0 /* RGB:RGB */
254 #define GR_LFBWRITEMODE_555        0x1 /* RGB:RGB */
255 #define GR_LFBWRITEMODE_1555       0x2 /* ARGB:ARGB */
256 #define GR_LFBWRITEMODE_RESERVED1  0x3
257 #define GR_LFBWRITEMODE_888        0x4 /* RGB */
258 #define GR_LFBWRITEMODE_8888       0x5 /* ARGB */
259 #define GR_LFBWRITEMODE_RESERVED2  0x6
260 #define GR_LFBWRITEMODE_RESERVED3  0x7
261 #define GR_LFBWRITEMODE_RESERVED4  0x8
262 #define GR_LFBWRITEMODE_RESERVED5  0x9
263 #define GR_LFBWRITEMODE_RESERVED6  0xa
264 #define GR_LFBWRITEMODE_RESERVED7  0xb
265 #define GR_LFBWRITEMODE_565_DEPTH  0xc /* RGB:DEPTH */
266 #define GR_LFBWRITEMODE_555_DEPTH  0xd /* RGB:DEPTH */
267 #define GR_LFBWRITEMODE_1555_DEPTH 0xe /* ARGB:DEPTH */
268 #define GR_LFBWRITEMODE_ZA16       0xf /* DEPTH:DEPTH */
269 #define GR_LFBWRITEMODE_ANY        0xFF
270
271
272 typedef FxI32 GrOriginLocation_t;
273 #define GR_ORIGIN_UPPER_LEFT    0x0
274 #define GR_ORIGIN_LOWER_LEFT    0x1
275 #define GR_ORIGIN_ANY           0xFF
276
277 typedef struct {
278     int                size;
279     void               *lfbPtr;
280     FxU32              strideInBytes;        
281     GrLfbWriteMode_t   writeMode;
282     GrOriginLocation_t origin;
283 } GrLfbInfo_t;
284
285 typedef FxI32 GrLOD_t;
286 #define GR_LOD_256              0x0
287 #define GR_LOD_128              0x1
288 #define GR_LOD_64               0x2
289 #define GR_LOD_32               0x3
290 #define GR_LOD_16               0x4
291 #define GR_LOD_8                0x5
292 #define GR_LOD_4                0x6
293 #define GR_LOD_2                0x7
294 #define GR_LOD_1                0x8
295
296 typedef FxI32 GrMipMapMode_t;
297 #define GR_MIPMAP_DISABLE               0x0 /* no mip mapping  */
298 #define GR_MIPMAP_NEAREST               0x1 /* use nearest mipmap */
299 #define GR_MIPMAP_NEAREST_DITHER        0x2 /* GR_MIPMAP_NEAREST + LOD dith */
300
301
302 typedef FxI32 GrSmoothingMode_t;
303 #define GR_SMOOTHING_DISABLE    0x0
304 #define GR_SMOOTHING_ENABLE     0x1
305
306 typedef FxI32 GrTextureClampMode_t;
307 #define GR_TEXTURECLAMP_WRAP    0x0
308 #define GR_TEXTURECLAMP_CLAMP   0x1
309
310 typedef FxI32 GrTextureCombineFnc_t;
311 #define GR_TEXTURECOMBINE_ZERO          0x0 /* texout = 0 */
312 #define GR_TEXTURECOMBINE_DECAL         0x1 /* texout = texthis */
313 #define GR_TEXTURECOMBINE_OTHER         0x2 /* this TMU in passthru mode */
314 #define GR_TEXTURECOMBINE_ADD           0x3 /* tout = tthis + t(this+1) */
315 #define GR_TEXTURECOMBINE_MULTIPLY      0x4 /* texout = tthis * t(this+1) */
316 #define GR_TEXTURECOMBINE_SUBTRACT      0x5 /* Sutract from upstream TMU */
317 #define GR_TEXTURECOMBINE_DETAIL        0x6 /* detail--detail on tthis */
318 #define GR_TEXTURECOMBINE_DETAIL_OTHER  0x7 /* detail--detail on tthis+1 */
319 #define GR_TEXTURECOMBINE_TRILINEAR_ODD 0x8 /* trilinear--odd levels tthis*/
320 #define GR_TEXTURECOMBINE_TRILINEAR_EVEN 0x9 /*trilinear--even levels tthis*/
321 #define GR_TEXTURECOMBINE_ONE           0xa /* texout = 0xFFFFFFFF */
322
323 typedef FxI32 GrTextureFilterMode_t;
324 #define GR_TEXTUREFILTER_POINT_SAMPLED  0x0
325 #define GR_TEXTUREFILTER_BILINEAR       0x1
326
327 typedef FxI32 GrTextureFormat_t;
328 #define GR_TEXFMT_8BIT                  0x0
329 #define GR_TEXFMT_RGB_332 GR_TEXFMT_8BIT
330 #define GR_TEXFMT_YIQ_422               0x1
331 #define GR_TEXFMT_ALPHA_8               0x2 /* (0..0xFF) alpha     */
332 #define GR_TEXFMT_INTENSITY_8           0x3 /* (0..0xFF) intensity */
333 #define GR_TEXFMT_ALPHA_INTENSITY_44    0x4
334 #define GR_TEXFMT_P_8                   0x5 /* 8-bit palette */
335 #define GR_TEXFMT_RSVD0                 0x6
336 #define GR_TEXFMT_RSVD1                 0x7
337 #define GR_TEXFMT_16BIT                 0x8
338 #define GR_TEXFMT_ARGB_8332 GR_TEXFMT_16BIT
339 #define GR_TEXFMT_AYIQ_8422             0x9
340 #define GR_TEXFMT_RGB_565               0xa
341 #define GR_TEXFMT_ARGB_1555             0xb
342 #define GR_TEXFMT_ARGB_4444             0xc
343 #define GR_TEXFMT_ALPHA_INTENSITY_88    0xd
344 #define GR_TEXFMT_AP_88                 0xe /* 8-bit alpha 8-bit palette */
345 #define GR_TEXFMT_RSVD2                 0xf
346
347 typedef FxU32 GrTexTable_t;
348 #define GR_TEXTABLE_NCC0    0x0
349 #define GR_TEXTABLE_NCC1    0x1
350 #define GR_TEXTABLE_PALETTE 0x2
351
352 typedef FxU32 GrNCCTable_t;
353 #define GR_NCCTABLE_NCC0    0x0
354 #define GR_NCCTABLE_NCC1    0x1
355
356 typedef FxU32 GrTexBaseRange_t;
357 #define GR_TEXBASE_256      0x0
358 #define GR_TEXBASE_128      0x1
359 #define GR_TEXBASE_64       0x2
360 #define GR_TEXBASE_32_TO_1  0x3
361
362 #define GLIDE_STATE_PAD_SIZE 312
363 #ifdef GLIDE_LIB
364 typedef struct _GrState_s GrState;
365 #else
366 typedef struct _GrState_s {
367   char pad[GLIDE_STATE_PAD_SIZE];
368 } GrState;
369 #endif
370
371 /*
372 ** -----------------------------------------------------------------------
373 ** STRUCTURES
374 ** -----------------------------------------------------------------------
375 */
376 /*
377 ** 3DF texture file structs
378 */
379 typedef struct
380 {
381   FxU32               width, height;
382   int                 small_lod, large_lod;
383   GrAspectRatio_t     aspect_ratio;
384   GrTextureFormat_t   format;
385 } Gu3dfHeader;
386
387 typedef struct
388 {
389   FxU8  yRGB[16];
390   FxI16 iRGB[4][3];
391   FxI16 qRGB[4][3];
392   FxU32 packed_data[12];
393 } GuNccTable;
394
395 typedef struct {
396     FxU32 data[256];
397 } GuTexPalette;
398
399 typedef union {
400     GuNccTable   nccTable;
401     GuTexPalette palette;
402 } GuTexTable;
403
404 typedef struct
405 {
406   Gu3dfHeader  header;
407   GuTexTable   table;
408   void        *data;
409   FxU32        mem_required;    /* memory required for mip map in bytes. */
410 } Gu3dfInfo;
411
412 typedef struct {
413     GrLOD_t           smallLod;
414     GrLOD_t           largeLod;
415     GrAspectRatio_t   aspectRatio;
416     GrTextureFormat_t format;
417     void              *data;
418 } GrTexInfo;
419
420 typedef struct
421 {
422   int           sst;                    /* SST where this texture map was stored  */
423   FxBool        valid;                  /* set when this table entry is allocated*/
424   int           width, height;
425   GrAspectRatio_t aspect_ratio;         /* aspect ratio of the mip map.  */
426   void          *data;                  /* actual texture data  */
427
428   GrTextureFormat_t  format;                    /* format of the texture table */
429   GrMipMapMode_t     mipmap_mode;               /* mip map mode for this texture */
430   GrTextureFilterMode_t   magfilter_mode;       /* filtering to be used when magnified */
431   GrTextureFilterMode_t   minfilter_mode;       /* filtering to be used with minified  */
432   GrTextureClampMode_t    s_clamp_mode;         /* how this texture should be clamped in s */
433   GrTextureClampMode_t    t_clamp_mode;         /* how this texture should be clamped in t */
434   FxU32         tLOD;                   /* Register value for tLOD register */ 
435   FxU32         tTextureMode;           /* Register value for tTextureMode register
436                                            not including non-texture specific bits */
437   FxU32         lod_bias;               /* LOD bias of the mip map in preshifted 4.2*/
438   GrLOD_t       lod_min, lod_max;       /* largest and smallest levels of detail  */
439   int           tmu;                    /* tmu on which this texture resides */
440   FxU32         odd_even_mask;          /* mask specifying levels on this tmu  */
441   FxU32         tmu_base_address;       /* base addr (in TMU mem) of this texture */
442   FxBool        trilinear;              /* should we blend by lod? */
443
444   GuNccTable    ncc_table;              /* NCC compression table (optional) */
445 } GrMipMapInfo;
446
447 typedef int GrSstType;
448 #define GR_SSTTYPE_VOODOO    0
449 #define GR_SSTTYPE_SST96     1
450 #define GR_SSTTYPE_AT3D      2
451 #define GR_SSTTYPE_Voodoo2   3
452
453 typedef struct GrTMUConfig_St {
454   int    tmuRev;                /* Rev of Texelfx chip */
455   int    tmuRam;                /* 1, 2, or 4 MB */
456 } GrTMUConfig_t;
457
458 typedef struct GrVoodooConfig_St {
459   int    fbRam;                         /* 1, 2, or 4 MB */
460   int    fbiRev;                        /* Rev of Pixelfx chip */
461   int    nTexelfx;                      /* How many texelFX chips are there? */
462   FxBool sliDetect;                     /* Is it a scan-line interleaved board? */
463   GrTMUConfig_t tmuConfig[GLIDE_NUM_TMU];   /* Configuration of the Texelfx chips */
464 } GrVoodooConfig_t;
465
466 typedef struct GrSst96Config_St {
467   int   fbRam;                  /* How much? */
468   int   nTexelfx;
469   GrTMUConfig_t tmuConfig;
470 } GrSst96Config_t;
471
472 typedef GrVoodooConfig_t GrVoodoo2Config_t;
473
474 typedef struct GrAT3DConfig_St {
475   int   rev;
476 } GrAT3DConfig_t;
477
478 typedef struct {
479   int num_sst;                  /* # of HW units in the system */
480   struct {
481     GrSstType type;             /* Which hardware is it? */
482     union SstBoard_u {
483       GrVoodooConfig_t  VoodooConfig;
484       GrSst96Config_t   SST96Config;
485       GrAT3DConfig_t    AT3DConfig;
486       GrVoodoo2Config_t Voodoo2Config;
487     } sstBoard;
488   } SSTs[MAX_NUM_SST];          /* configuration for each board */
489 } GrHwConfiguration;
490
491 typedef struct GrSstPerfStats_s {
492   FxU32  pixelsIn;              /* # pixels processed (minus buffer clears) */
493   FxU32  chromaFail;            /* # pixels not drawn due to chroma key */ 
494   FxU32  zFuncFail;             /* # pixels not drawn due to Z comparison */
495   FxU32  aFuncFail;             /* # pixels not drawn due to alpha comparison */
496   FxU32  pixelsOut;             /* # pixels drawn (including buffer clears) */
497 } GrSstPerfStats_t;
498
499
500 typedef struct {
501   float  sow;                   /* s texture ordinate (s over w) */
502   float  tow;                   /* t texture ordinate (t over w) */  
503   float  oow;                   /* 1/w (used mipmapping - really 0xfff/w) */
504 }  GrTmuVertex;
505
506 /*
507 ** GrVertex
508 ** If these are changed the C & assembly language trisetup routines MUST
509 ** be changed, for they will no longer work.
510 */
511 typedef struct
512 {
513   float x, y, z;                /* X, Y, and Z of scrn space -- Z is ignored */
514   float r, g, b;                /* R, G, B, ([0..255.0]) */
515   float ooz;                    /* 65535/Z (used for Z-buffering) */
516   float a;                      /* Alpha [0..255.0] */
517   float oow;                    /* 1/W (used for W-buffering, texturing) */
518   GrTmuVertex  tmuvtx[GLIDE_NUM_TMU];
519 } GrVertex;
520
521 /* For indexing GrVertex as a float *.
522    CHANGE THESE IF THE VERTEX STRUCTURE CHANGES!
523    */
524 #define GR_VERTEX_X_OFFSET              0
525 #define GR_VERTEX_Y_OFFSET              1
526 #define GR_VERTEX_Z_OFFSET              2
527 #define GR_VERTEX_R_OFFSET              3
528 #define GR_VERTEX_G_OFFSET              4
529 #define GR_VERTEX_B_OFFSET              5
530 #define GR_VERTEX_OOZ_OFFSET            6
531 #define GR_VERTEX_A_OFFSET              7
532 #define GR_VERTEX_OOW_OFFSET            8
533 #define GR_VERTEX_SOW_TMU0_OFFSET       9
534 #define GR_VERTEX_TOW_TMU0_OFFSET       10
535 #define GR_VERTEX_OOW_TMU0_OFFSET       11
536 #define GR_VERTEX_SOW_TMU1_OFFSET       12
537 #define GR_VERTEX_TOW_TMU1_OFFSET       13
538 #define GR_VERTEX_OOW_TMU1_OFFSET       14
539 #if (GLIDE_NUM_TMU > 2)
540 #define GR_VERTEX_SOW_TMU2_OFFSET       15
541 #define GR_VERTEX_TOW_TMU2_OFFSET       16
542 #define GR_VERTEX_OOW_TMU2_OFFSET       17
543 #endif
544
545 typedef FxU32 GrLfbSrcFmt_t;
546 #define GR_LFB_SRC_FMT_565          0x00
547 #define GR_LFB_SRC_FMT_555          0x01
548 #define GR_LFB_SRC_FMT_1555         0x02
549 #define GR_LFB_SRC_FMT_888          0x04
550 #define GR_LFB_SRC_FMT_8888         0x05
551 #define GR_LFB_SRC_FMT_565_DEPTH    0x0c
552 #define GR_LFB_SRC_FMT_555_DEPTH    0x0d
553 #define GR_LFB_SRC_FMT_1555_DEPTH   0x0e
554 #define GR_LFB_SRC_FMT_ZA16         0x0f
555 #define GR_LFB_SRC_FMT_RLE16        0x80
556
557 typedef FxI32 GrPassthruMode_t;
558 #define GR_PASSTHRU_SHOW_VGA    0x0
559 #define GR_PASSTHRU_SHOW_SST1   0x1
560
561 typedef FxU32 GrHint_t;
562 #define GR_HINTTYPE_MIN                 0
563 #define GR_HINT_STWHINT                 0
564 #define GR_HINT_FIFOCHECKHINT           1
565 #define GR_HINT_FPUPRECISION            2
566 #define GR_HINT_ALLOW_MIPMAP_DITHER     3
567 #define GR_HINTTYPE_MAX                 3
568
569 typedef FxU32 GrSTWHint_t;
570 #define GR_STWHINT_W_DIFF_FBI   FXBIT(0)
571 #define GR_STWHINT_W_DIFF_TMU0  FXBIT(1)
572 #define GR_STWHINT_ST_DIFF_TMU0 FXBIT(2)
573 #define GR_STWHINT_W_DIFF_TMU1  FXBIT(3)
574 #define GR_STWHINT_ST_DIFF_TMU1 FXBIT(4)
575 #define GR_STWHINT_W_DIFF_TMU2  FXBIT(5)
576 #define GR_STWHINT_ST_DIFF_TMU2 FXBIT(6)
577
578 typedef FxU32 GrControl_t;
579 #define GR_CONTROL_ACTIVATE   0x1
580 #define GR_CONTROL_DEACTIVATE 0x2
581 #define GR_CONTROL_RESIZE     0x3
582 #define GR_CONTROL_MOVE       0x4
583
584 #define GR_GENERATE_FIFOCHECK_HINT_MASK(swHWM, swLWM) \
585   (((swHWM & 0xffff) << 16) | (swLWM & 0xffff))
586
587 /*
588 ** -----------------------------------------------------------------------
589 ** FUNCTION PROTOTYPES
590 ** -----------------------------------------------------------------------
591 */
592 #ifndef FX_GLIDE_NO_FUNC_PROTO
593 /*
594 ** rendering functions
595 */
596 FX_ENTRY void FX_CALL
597 grDrawLine( const GrVertex *v1, const GrVertex *v2 );
598
599 FX_ENTRY void FX_CALL
600 grDrawPlanarPolygon( int nverts, const int ilist[], const GrVertex vlist[] );
601
602 FX_ENTRY void FX_CALL
603 grDrawPlanarPolygonVertexList( int nverts, const GrVertex vlist[] );
604
605 FX_ENTRY void FX_CALL
606 grDrawPoint( const GrVertex *pt );
607
608 FX_ENTRY void FX_CALL
609 grDrawPolygon( int nverts, const int ilist[], const GrVertex vlist[] );
610
611 FX_ENTRY void FX_CALL
612 grDrawPolygonVertexList( int nverts, const GrVertex vlist[] );
613
614 FX_ENTRY void FX_CALL
615 grDrawTriangle( const GrVertex *a, const GrVertex *b, const GrVertex *c );
616
617 FX_ENTRY void FX_CALL
618 guDrawTriangleWithClip( const GrVertex *a, const GrVertex *b, const GrVertex *c );
619
620 /*
621 ** buffer management
622 */
623 FX_ENTRY void FX_CALL
624 grBufferClear( GrColor_t color, GrAlpha_t alpha, FxU16 depth );
625
626 FX_ENTRY int FX_CALL
627 grBufferNumPending( void );
628
629 FX_ENTRY void FX_CALL
630 grBufferSwap( int swap_interval );
631
632 FX_ENTRY void FX_CALL
633 grRenderBuffer( GrBuffer_t buffer );
634
635 /*
636 ** error management
637 */
638 typedef void (*GrErrorCallbackFnc_t)( const char *string, FxBool fatal );
639
640 FX_ENTRY void FX_CALL 
641 grErrorSetCallback( GrErrorCallbackFnc_t fnc );
642
643 /*
644 ** SST routines
645 */
646 FX_ENTRY void FX_CALL 
647 grSstIdle(void);
648
649 FX_ENTRY FxU32 FX_CALL 
650 grSstVideoLine( void );
651
652 FX_ENTRY FxBool FX_CALL 
653 grSstVRetraceOn( void );
654
655 FX_ENTRY FxBool FX_CALL 
656 grSstIsBusy( void );
657
658 FX_ENTRY FxBool FX_CALL 
659 grSstWinOpen(
660           FxU32                hWnd,
661           GrScreenResolution_t screen_resolution,
662           GrScreenRefresh_t    refresh_rate,
663           GrColorFormat_t      color_format,
664           GrOriginLocation_t   origin_location,
665           int                  nColBuffers,
666           int                  nAuxBuffers);
667
668 FX_ENTRY void FX_CALL
669 grSstWinClose( void );
670
671 FX_ENTRY FxBool FX_CALL
672 grSstControl( FxU32 code );
673
674 FX_ENTRY FxBool FX_CALL 
675 grSstQueryHardware( GrHwConfiguration *hwconfig );
676
677 FX_ENTRY FxBool FX_CALL 
678 grSstQueryBoards( GrHwConfiguration *hwconfig );
679
680 FX_ENTRY void FX_CALL
681 grSstOrigin(GrOriginLocation_t  origin);
682
683 FX_ENTRY void FX_CALL 
684 grSstSelect( int which_sst );
685
686 FX_ENTRY FxU32 FX_CALL 
687 grSstScreenHeight( void );
688
689 FX_ENTRY FxU32 FX_CALL 
690 grSstScreenWidth( void );
691
692 FX_ENTRY FxU32 FX_CALL 
693 grSstStatus( void );
694
695 /*
696 **  Drawing Statistics
697 */
698 FX_ENTRY void FX_CALL
699 grSstPerfStats(GrSstPerfStats_t *pStats);
700
701 FX_ENTRY void FX_CALL
702 grSstResetPerfStats(void);
703
704 FX_ENTRY void FX_CALL
705 grResetTriStats();
706
707 FX_ENTRY void FX_CALL
708 grTriStats(FxU32 *trisProcessed, FxU32 *trisDrawn);
709
710 /*
711 ** Glide configuration and special effect maintenance functions
712 */
713 FX_ENTRY void FX_CALL
714 grAlphaBlendFunction(
715                      GrAlphaBlendFnc_t rgb_sf,   GrAlphaBlendFnc_t rgb_df,
716                      GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df
717                      );
718
719 FX_ENTRY void FX_CALL
720 grAlphaCombine(
721                GrCombineFunction_t function, GrCombineFactor_t factor,
722                GrCombineLocal_t local, GrCombineOther_t other,
723                FxBool invert
724                );
725
726 FX_ENTRY void FX_CALL
727 grAlphaControlsITRGBLighting( FxBool enable );
728
729 FX_ENTRY void FX_CALL
730 grAlphaTestFunction( GrCmpFnc_t function );
731
732 FX_ENTRY void FX_CALL
733 grAlphaTestReferenceValue( GrAlpha_t value );
734
735 FX_ENTRY void FX_CALL 
736 grChromakeyMode( GrChromakeyMode_t mode );
737
738 FX_ENTRY void FX_CALL 
739 grChromakeyValue( GrColor_t value );
740
741 FX_ENTRY void FX_CALL 
742 grClipWindow( FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy );
743
744 FX_ENTRY void FX_CALL 
745 grColorCombine(
746                GrCombineFunction_t function, GrCombineFactor_t factor,
747                GrCombineLocal_t local, GrCombineOther_t other,
748                FxBool invert );
749
750 FX_ENTRY void FX_CALL
751 grColorMask( FxBool rgb, FxBool a );
752
753 FX_ENTRY void FX_CALL 
754 grCullMode( GrCullMode_t mode );
755
756 FX_ENTRY void FX_CALL 
757 grConstantColorValue( GrColor_t value );
758
759 FX_ENTRY void FX_CALL 
760 grConstantColorValue4( float a, float r, float g, float b );
761
762 FX_ENTRY void FX_CALL 
763 grDepthBiasLevel( FxI16 level );
764
765 FX_ENTRY void FX_CALL 
766 grDepthBufferFunction( GrCmpFnc_t function );
767
768 FX_ENTRY void FX_CALL 
769 grDepthBufferMode( GrDepthBufferMode_t mode );
770
771 FX_ENTRY void FX_CALL 
772 grDepthMask( FxBool mask );
773
774 FX_ENTRY void FX_CALL 
775 grDisableAllEffects( void );
776
777 FX_ENTRY void FX_CALL 
778 grDitherMode( GrDitherMode_t mode );
779
780 FX_ENTRY void FX_CALL 
781 grFogColorValue( GrColor_t fogcolor );
782
783 FX_ENTRY void FX_CALL 
784 grFogMode( GrFogMode_t mode );
785
786 FX_ENTRY void FX_CALL 
787 grFogTable( const GrFog_t ft[GR_FOG_TABLE_SIZE] );
788
789 FX_ENTRY void FX_CALL 
790 grGammaCorrectionValue( float value );
791
792 FX_ENTRY void FX_CALL
793 grSplash(float x, float y, float width, float height, FxU32 frame);
794
795 /*
796 ** texture mapping control functions
797 */
798 FX_ENTRY FxU32 FX_CALL 
799 grTexCalcMemRequired(
800                      GrLOD_t lodmin, GrLOD_t lodmax,
801                      GrAspectRatio_t aspect, GrTextureFormat_t fmt);
802
803 FX_ENTRY FxU32 FX_CALL 
804 grTexTextureMemRequired( FxU32     evenOdd,
805                                  GrTexInfo *info   );
806
807 FX_ENTRY FxU32 FX_CALL 
808 grTexMinAddress( GrChipID_t tmu );
809
810
811 FX_ENTRY FxU32 FX_CALL 
812 grTexMaxAddress( GrChipID_t tmu );
813
814
815 FX_ENTRY void FX_CALL 
816 grTexNCCTable( GrChipID_t tmu, GrNCCTable_t table );
817
818 FX_ENTRY void FX_CALL 
819 grTexSource( GrChipID_t tmu,
820              FxU32      startAddress,
821              FxU32      evenOdd,
822              GrTexInfo  *info );
823
824 FX_ENTRY void FX_CALL 
825 grTexClampMode(
826                GrChipID_t tmu,
827                GrTextureClampMode_t s_clampmode,
828                GrTextureClampMode_t t_clampmode
829                );
830
831 FX_ENTRY void FX_CALL 
832 grTexCombine(
833              GrChipID_t tmu,
834              GrCombineFunction_t rgb_function,
835              GrCombineFactor_t rgb_factor, 
836              GrCombineFunction_t alpha_function,
837              GrCombineFactor_t alpha_factor,
838              FxBool rgb_invert,
839              FxBool alpha_invert
840              );
841
842 FX_ENTRY void FX_CALL 
843 grTexCombineFunction(
844                      GrChipID_t tmu,
845                      GrTextureCombineFnc_t fnc
846                      );
847
848 FX_ENTRY void FX_CALL 
849 grTexDetailControl(
850                    GrChipID_t tmu,
851                    int lod_bias,
852                    FxU8 detail_scale,
853                    float detail_max
854                    );
855
856 FX_ENTRY void FX_CALL 
857 grTexFilterMode(
858                 GrChipID_t tmu,
859                 GrTextureFilterMode_t minfilter_mode,
860                 GrTextureFilterMode_t magfilter_mode
861                 );
862
863
864 FX_ENTRY void FX_CALL 
865 grTexLodBiasValue(GrChipID_t tmu, float bias );
866
867 FX_ENTRY void FX_CALL 
868 grTexDownloadMipMap( GrChipID_t tmu,
869                      FxU32      startAddress,
870                      FxU32      evenOdd,
871                      GrTexInfo  *info );
872
873 FX_ENTRY void FX_CALL 
874 grTexDownloadMipMapLevel( GrChipID_t        tmu,
875                           FxU32             startAddress,
876                           GrLOD_t           thisLod,
877                           GrLOD_t           largeLod,
878                           GrAspectRatio_t   aspectRatio,
879                           GrTextureFormat_t format,
880                           FxU32             evenOdd,
881                           void              *data );
882
883 FX_ENTRY void FX_CALL 
884 grTexDownloadMipMapLevelPartial( GrChipID_t        tmu,
885                                  FxU32             startAddress,
886                                  GrLOD_t           thisLod,
887                                  GrLOD_t           largeLod,
888                                  GrAspectRatio_t   aspectRatio,
889                                  GrTextureFormat_t format,
890                                  FxU32             evenOdd,
891                                  void              *data,
892                                  int               start,
893                                  int               end );
894
895
896 FX_ENTRY void FX_CALL 
897 ConvertAndDownloadRle( GrChipID_t        tmu,
898                         FxU32             startAddress,
899                         GrLOD_t           thisLod,
900                         GrLOD_t           largeLod,
901                         GrAspectRatio_t   aspectRatio,
902                         GrTextureFormat_t format,
903                         FxU32             evenOdd,
904                         FxU8              *bm_data,
905                         long              bm_h,
906                         FxU32             u0,
907                         FxU32             v0,
908                         FxU32             width,
909                         FxU32             height,
910                         FxU32             dest_width,
911                         FxU32             dest_height,
912                         FxU16             *tlut);
913
914 FX_ENTRY void FX_CALL 
915 grCheckForRoom(FxI32 n);
916
917 FX_ENTRY void FX_CALL
918 grTexDownloadTable( GrChipID_t   tmu,
919                     GrTexTable_t type, 
920                     void         *data );
921
922 FX_ENTRY void FX_CALL
923 grTexDownloadTablePartial( GrChipID_t   tmu,
924                            GrTexTable_t type, 
925                            void         *data,
926                            int          start,
927                            int          end );
928
929 FX_ENTRY void FX_CALL 
930 grTexMipMapMode( GrChipID_t     tmu, 
931                  GrMipMapMode_t mode,
932                  FxBool         lodBlend );
933
934 FX_ENTRY void FX_CALL 
935 grTexMultibase( GrChipID_t tmu,
936                 FxBool     enable );
937
938 FX_ENTRY void FX_CALL
939 grTexMultibaseAddress( GrChipID_t       tmu,
940                        GrTexBaseRange_t range,
941                        FxU32            startAddress,
942                        FxU32            evenOdd,
943                        GrTexInfo        *info );
944
945 /*
946 ** utility texture functions
947 */
948 FX_ENTRY GrMipMapId_t FX_CALL 
949 guTexAllocateMemory(
950                     GrChipID_t tmu,
951                     FxU8 odd_even_mask,
952                     int width, int height,
953                     GrTextureFormat_t fmt,
954                     GrMipMapMode_t mm_mode,
955                     GrLOD_t smallest_lod, GrLOD_t largest_lod,
956                     GrAspectRatio_t aspect,
957                     GrTextureClampMode_t s_clamp_mode,
958                     GrTextureClampMode_t t_clamp_mode,
959                     GrTextureFilterMode_t minfilter_mode,
960                     GrTextureFilterMode_t magfilter_mode,
961                     float lod_bias,
962                     FxBool trilinear
963                     );
964
965 FX_ENTRY FxBool FX_CALL 
966 guTexChangeAttributes(
967                       GrMipMapId_t mmid,
968                       int width, int height,
969                       GrTextureFormat_t fmt,
970                       GrMipMapMode_t mm_mode,
971                       GrLOD_t smallest_lod, GrLOD_t largest_lod,
972                       GrAspectRatio_t aspect,
973                       GrTextureClampMode_t s_clamp_mode,
974                       GrTextureClampMode_t t_clamp_mode,
975                       GrTextureFilterMode_t minFilterMode,
976                       GrTextureFilterMode_t magFilterMode
977                       );
978
979 FX_ENTRY void FX_CALL 
980 guTexCombineFunction(
981                      GrChipID_t tmu,
982                      GrTextureCombineFnc_t fnc
983                      );
984
985 FX_ENTRY GrMipMapId_t FX_CALL 
986 guTexGetCurrentMipMap( GrChipID_t tmu );
987
988 FX_ENTRY GrMipMapInfo * FX_CALL 
989 guTexGetMipMapInfo( GrMipMapId_t mmid );
990
991 FX_ENTRY FxU32 FX_CALL 
992 guTexMemQueryAvail( GrChipID_t tmu );
993
994 FX_ENTRY void FX_CALL 
995 guTexMemReset( void );
996
997 FX_ENTRY void FX_CALL 
998 guTexDownloadMipMap(
999                     GrMipMapId_t mmid,
1000                     const void *src,
1001                     const GuNccTable *table
1002                     );
1003
1004 FX_ENTRY void FX_CALL 
1005 guTexDownloadMipMapLevel(
1006                          GrMipMapId_t mmid,
1007                          GrLOD_t lod,
1008                          const void **src
1009                          );
1010 FX_ENTRY void FX_CALL 
1011 guTexSource( GrMipMapId_t id );
1012
1013 /*
1014 ** linear frame buffer functions
1015 */
1016
1017 FX_ENTRY FxBool FX_CALL
1018 grLfbLock( GrLock_t type, GrBuffer_t buffer, GrLfbWriteMode_t writeMode,
1019            GrOriginLocation_t origin, FxBool pixelPipeline, 
1020            GrLfbInfo_t *info );
1021
1022 FX_ENTRY FxBool FX_CALL
1023 grLfbUnlock( GrLock_t type, GrBuffer_t buffer );
1024
1025 FX_ENTRY void FX_CALL 
1026 grLfbConstantAlpha( GrAlpha_t alpha );
1027
1028 FX_ENTRY void FX_CALL 
1029 grLfbConstantDepth( FxU16 depth );
1030
1031 FX_ENTRY void FX_CALL 
1032 grLfbWriteColorSwizzle(FxBool swizzleBytes, FxBool swapWords);
1033
1034 FX_ENTRY void FX_CALL
1035 grLfbWriteColorFormat(GrColorFormat_t colorFormat);
1036
1037
1038 FX_ENTRY FxBool FX_CALL
1039 grLfbWriteRegion( GrBuffer_t dst_buffer, 
1040                   FxU32 dst_x, FxU32 dst_y, 
1041                   GrLfbSrcFmt_t src_format, 
1042                   FxU32 src_width, FxU32 src_height, 
1043                   FxI32 src_stride, void *src_data );
1044
1045 FX_ENTRY FxBool FX_CALL
1046 grLfbReadRegion( GrBuffer_t src_buffer,
1047                  FxU32 src_x, FxU32 src_y,
1048                  FxU32 src_width, FxU32 src_height,
1049                  FxU32 dst_stride, void *dst_data );
1050
1051
1052 /*
1053 **  Antialiasing Functions
1054 */
1055 FX_ENTRY void FX_CALL
1056 grAADrawLine(const GrVertex *v1, const GrVertex *v2);
1057
1058 FX_ENTRY void FX_CALL
1059 grAADrawPoint(const GrVertex *pt );
1060
1061 FX_ENTRY void FX_CALL
1062 grAADrawPolygon(const int nverts, const int ilist[], const GrVertex vlist[]);
1063
1064 FX_ENTRY void FX_CALL
1065 grAADrawPolygonVertexList(const int nverts, const GrVertex vlist[]);
1066
1067 FX_ENTRY void FX_CALL
1068 grAADrawTriangle(
1069                  const GrVertex *a, const GrVertex *b, const GrVertex *c,
1070                  FxBool ab_antialias, FxBool bc_antialias, FxBool ca_antialias
1071                  );
1072
1073 /*
1074 ** glide management functions
1075 */
1076 FX_ENTRY void FX_CALL
1077 grGlideInit( void );
1078
1079 FX_ENTRY void FX_CALL
1080 grGlideShutdown( void );
1081
1082 FX_ENTRY void FX_CALL
1083 grGlideGetVersion( char version[80] );
1084
1085 FX_ENTRY void FX_CALL
1086 grGlideGetState( GrState *state );
1087
1088 FX_ENTRY void FX_CALL
1089 grGlideSetState( const GrState *state );
1090
1091 FX_ENTRY void FX_CALL
1092 grGlideShamelessPlug(const FxBool on);
1093
1094 FX_ENTRY void FX_CALL
1095 grHints(GrHint_t hintType, FxU32 hintMask);
1096
1097 #endif /* FX_GLIDE_NO_FUNC_PROTO */
1098
1099 #ifdef __cplusplus
1100 }
1101 #endif
1102
1103 #include "glideutl.h"
1104
1105 #endif /* __GLIDE_H__ */
1106
1107
1108 #ifndef _VOLITION_GLIDE_EXT
1109 #define _VOLITION_GLIDE_EXT
1110
1111 // Returns 1 if Glide found, else 0 if not
1112 int vglide_init();
1113
1114 // shuts glide lib
1115 void vglide_close();
1116
1117 extern void (__stdcall *grDrawLine)(const GrVertex *v1, const GrVertex *v2);
1118 extern void (__stdcall *grDrawPlanarPolygon)(int nverts, const int ilist[], const GrVertex vlist[]);
1119 extern void (__stdcall *grDrawPlanarPolygonVertexList)(int nverts, const GrVertex vlist[]);
1120 extern void (__stdcall *grDrawPoint)(const GrVertex *pt);
1121 extern void (__stdcall *grDrawPolygon)(int nverts, const int ilist[], const GrVertex vlist[]);
1122 extern void (__stdcall *grDrawPolygonVertexList)(int nverts, const GrVertex vlist[]);
1123 extern void (__stdcall *grDrawTriangle)(const GrVertex *a, const GrVertex *b, const GrVertex *c);
1124 extern void (__stdcall *guDrawTriangleWithClip)(const GrVertex *a, const GrVertex *b, const GrVertex *c);
1125 extern void (__stdcall *grBufferClear)(GrColor_t color, GrAlpha_t alpha, FxU16 depth);
1126 extern int (__stdcall *grBufferNumPending)(void);
1127 extern void (__stdcall *grBufferSwap)(int swap_interval);
1128 extern void (__stdcall *grRenderBuffer)(GrBuffer_t buffer);
1129
1130 typedef void (*GrErrorCallbackFnc_t)(const char *string, FxBool fatal);
1131
1132 extern void (__stdcall *grErrorSetCallback)(GrErrorCallbackFnc_t fnc);
1133 extern void (__stdcall *grSstIdle)(void);
1134 extern FxU32 (__stdcall *grSstVideoLine)(void);
1135 extern FxBool (__stdcall *grSstVRetraceOn)(void);
1136 extern FxBool (__stdcall *grSstIsBusy)(void);
1137 extern FxBool (__stdcall *grSstWinOpen)(
1138           FxU32                hWnd,
1139           GrScreenResolution_t screen_resolution,
1140           GrScreenRefresh_t    refresh_rate,
1141           GrColorFormat_t      color_format,
1142           GrOriginLocation_t   origin_location,
1143           int                  nColBuffers,
1144           int                  nAuxBuffers);
1145 extern void (__stdcall *grSstWinClose)(void);
1146 extern FxBool (__stdcall *grSstControl)(FxU32 code);
1147 extern FxBool (__stdcall *grSstQueryHardware)(GrHwConfiguration *hwconfig);
1148 extern FxBool (__stdcall *grSstQueryBoards)(GrHwConfiguration *hwconfig);
1149 extern void (__stdcall *grSstOrigin)(GrOriginLocation_t origin);
1150 extern void (__stdcall *grSstSelect)(int which_sst);
1151 extern FxU32 (__stdcall *grSstScreenHeight)(void);
1152 extern FxU32 (__stdcall *grSstScreenWidth)(void);
1153 extern FxU32 (__stdcall *grSstStatus)(void);
1154 extern void (__stdcall *grSstPerfStats)(GrSstPerfStats_t *pStats);
1155 extern void (__stdcall *grSstResetPerfStats)(void);
1156 extern void (__stdcall *grResetTriStats)();
1157 extern void (__stdcall *grTriStats)(FxU32 *trisProcessed, FxU32 *trisDrawn);
1158 extern void (__stdcall *grAlphaBlendFunction)(GrAlphaBlendFnc_t rgb_sf, GrAlphaBlendFnc_t rgb_df, GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df);
1159 extern void (__stdcall *grAlphaCombine)(GrCombineFunction_t function, GrCombineFactor_t factor, GrCombineLocal_t local, GrCombineOther_t other, FxBool invert);
1160 extern void (__stdcall *grAlphaControlsITRGBLighting)(FxBool enable);
1161 extern void (__stdcall *grAlphaTestFunction)(GrCmpFnc_t function);
1162 extern void (__stdcall *grAlphaTestReferenceValue)(GrAlpha_t value);
1163 extern void (__stdcall *grChromakeyMode)(GrChromakeyMode_t mode);
1164 extern void (__stdcall *grChromakeyValue)(GrColor_t value);
1165 extern void (__stdcall *grClipWindow)(FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy);
1166 extern void (__stdcall *grColorCombine)(
1167                GrCombineFunction_t function, GrCombineFactor_t factor,
1168                GrCombineLocal_t local, GrCombineOther_t other,
1169                FxBool invert);
1170 extern void (__stdcall *grColorMask)(FxBool rgb, FxBool a);
1171 extern void (__stdcall *grCullMode)(GrCullMode_t mode);
1172 extern void (__stdcall *grConstantColorValue)(GrColor_t value);
1173 extern void (__stdcall *grConstantColorValue4)(float a, float r, float g, float b);
1174 extern void (__stdcall *grDepthBiasLevel)(FxI16 level);
1175 extern void (__stdcall *grDepthBufferFunction)(GrCmpFnc_t function);
1176 extern void (__stdcall *grDepthBufferMode)(GrDepthBufferMode_t mode);
1177 extern void (__stdcall *grDepthMask)(FxBool mask);
1178 extern void (__stdcall *grDisableAllEffects)(void);
1179 extern void (__stdcall *grDitherMode)( GrDitherMode_t mode);
1180 extern void (__stdcall *grFogColorValue)( GrColor_t fogcolor);
1181 extern void (__stdcall *grFogMode)(GrFogMode_t mode);
1182 extern void (__stdcall *grFogTable)(const GrFog_t ft[GR_FOG_TABLE_SIZE]);
1183 extern void (__stdcall *grGammaCorrectionValue)(float value);
1184 extern void (__stdcall *grSplash)(float x, float y, float width, float height, FxU32 frame);
1185 extern FxU32 (__stdcall *grTexCalcMemRequired)(
1186                      GrLOD_t lodmin, GrLOD_t lodmax,
1187                      GrAspectRatio_t aspect, GrTextureFormat_t fmt);
1188 extern FxU32 (__stdcall *grTexTextureMemRequired)(FxU32 evenOdd, GrTexInfo *info);
1189 extern FxU32 (__stdcall *grTexMinAddress)(GrChipID_t tmu);
1190 extern FxU32 (__stdcall *grTexMaxAddress)(GrChipID_t tmu);
1191 extern void (__stdcall *grTexNCCTable)(GrChipID_t tmu, GrNCCTable_t table);
1192 extern void (__stdcall *grTexSource)(GrChipID_t tmu, FxU32 startAddress, FxU32 evenOdd, GrTexInfo  *info);
1193 extern void (__stdcall *grTexClampMode)(GrChipID_t tmu, GrTextureClampMode_t s_clampmode, GrTextureClampMode_t t_clampmode);
1194 extern void (__stdcall *grTexCombine)(
1195              GrChipID_t tmu,
1196              GrCombineFunction_t rgb_function,
1197              GrCombineFactor_t rgb_factor, 
1198              GrCombineFunction_t alpha_function,
1199              GrCombineFactor_t alpha_factor,
1200              FxBool rgb_invert,
1201              FxBool alpha_invert
1202              );
1203 extern void (__stdcall *grTexCombineFunction)(
1204                      GrChipID_t tmu,
1205                      GrTextureCombineFnc_t fnc
1206                      );
1207 extern void (__stdcall *grTexDetailControl)(
1208                    GrChipID_t tmu,
1209                    int lod_bias,
1210                    FxU8 detail_scale,
1211                    float detail_max
1212                    );
1213 extern void (__stdcall *grTexFilterMode)(
1214                 GrChipID_t tmu,
1215                 GrTextureFilterMode_t minfilter_mode,
1216                 GrTextureFilterMode_t magfilter_mode
1217                 );
1218 extern void (__stdcall *grTexLodBiasValue)(GrChipID_t tmu, float bias);
1219 extern void (__stdcall *grTexDownloadMipMap)(GrChipID_t tmu,
1220                      FxU32      startAddress,
1221                      FxU32      evenOdd,
1222                      GrTexInfo  *info);
1223
1224 extern void (__stdcall *grTexDownloadMipMapLevel)(GrChipID_t        tmu,
1225                           FxU32             startAddress,
1226                           GrLOD_t           thisLod,
1227                           GrLOD_t           largeLod,
1228                           GrAspectRatio_t   aspectRatio,
1229                           GrTextureFormat_t format,
1230                           FxU32             evenOdd,
1231                           void              *data);
1232
1233 extern void (__stdcall *grTexDownloadMipMapLevelPartial)(GrChipID_t        tmu,
1234                                  FxU32             startAddress,
1235                                  GrLOD_t           thisLod,
1236                                  GrLOD_t           largeLod,
1237                                  GrAspectRatio_t   aspectRatio,
1238                                  GrTextureFormat_t format,
1239                                  FxU32             evenOdd,
1240                                  void              *data,
1241                                  int               start,
1242                                  int               end);
1243
1244
1245 extern void (__stdcall *ConvertAndDownloadRle)(GrChipID_t        tmu,
1246                         FxU32             startAddress,
1247                         GrLOD_t           thisLod,
1248                         GrLOD_t           largeLod,
1249                         GrAspectRatio_t   aspectRatio,
1250                         GrTextureFormat_t format,
1251                         FxU32             evenOdd,
1252                         FxU8              *bm_data,
1253                         long              bm_h,
1254                         FxU32             u0,
1255                         FxU32             v0,
1256                         FxU32             width,
1257                         FxU32             height,
1258                         FxU32             dest_width,
1259                         FxU32             dest_height,
1260                         FxU16             *tlut);
1261
1262 extern void (__stdcall *grCheckForRoom)(FxI32 n);
1263
1264 extern void (__stdcall *grTexDownloadTable)(GrChipID_t   tmu,
1265                     GrTexTable_t type, 
1266                     void         *data);
1267
1268 extern void (__stdcall *grTexDownloadTablePartial)(GrChipID_t   tmu,
1269                            GrTexTable_t type, 
1270                            void         *data,
1271                            int          start,
1272                            int          end);
1273
1274 extern void (__stdcall *grTexMipMapMode)(GrChipID_t     tmu, 
1275                  GrMipMapMode_t mode,
1276                  FxBool         lodBlend);
1277
1278 extern void (__stdcall *grTexMultibase)(GrChipID_t tmu,
1279                 FxBool     enable);
1280
1281 extern void (__stdcall *grTexMultibaseAddress)(GrChipID_t       tmu,
1282                        GrTexBaseRange_t range,
1283                        FxU32            startAddress,
1284                        FxU32            evenOdd,
1285                        GrTexInfo        *info);
1286
1287 extern GrMipMapId_t (__stdcall *guTexAllocateMemory)(
1288                     GrChipID_t tmu,
1289                     FxU8 odd_even_mask,
1290                     int width, int height,
1291                     GrTextureFormat_t fmt,
1292                     GrMipMapMode_t mm_mode,
1293                     GrLOD_t smallest_lod, GrLOD_t largest_lod,
1294                     GrAspectRatio_t aspect,
1295                     GrTextureClampMode_t s_clamp_mode,
1296                     GrTextureClampMode_t t_clamp_mode,
1297                     GrTextureFilterMode_t minfilter_mode,
1298                     GrTextureFilterMode_t magfilter_mode,
1299                     float lod_bias,
1300                     FxBool trilinear
1301                     );
1302
1303 extern FxBool (__stdcall *guTexChangeAttributes)(
1304                       GrMipMapId_t mmid,
1305                       int width, int height,
1306                       GrTextureFormat_t fmt,
1307                       GrMipMapMode_t mm_mode,
1308                       GrLOD_t smallest_lod, GrLOD_t largest_lod,
1309                       GrAspectRatio_t aspect,
1310                       GrTextureClampMode_t s_clamp_mode,
1311                       GrTextureClampMode_t t_clamp_mode,
1312                       GrTextureFilterMode_t minFilterMode,
1313                       GrTextureFilterMode_t magFilterMode
1314                       );
1315 extern void (__stdcall *guTexCombineFunction)(
1316                      GrChipID_t tmu,
1317                      GrTextureCombineFnc_t fnc
1318                      );
1319 extern GrMipMapId_t (__stdcall *guTexGetCurrentMipMap)(GrChipID_t tmu);
1320 extern GrMipMapInfo* (__stdcall *guTexGetMipMapInfo)(GrMipMapId_t mmid);
1321 extern FxU32 (__stdcall *guTexMemQueryAvail)(GrChipID_t tmu);
1322 extern void (__stdcall *guTexMemReset)(void);
1323 extern void (__stdcall *guTexDownloadMipMap)(
1324                     GrMipMapId_t mmid,
1325                     const void *src,
1326                     const GuNccTable *table
1327                     );
1328 extern void (__stdcall *guTexDownloadMipMapLevel)(
1329                          GrMipMapId_t mmid,
1330                          GrLOD_t lod,
1331                          const void **src
1332                          );
1333 extern void (__stdcall *guTexSource)(GrMipMapId_t id);
1334 extern void (__stdcall *guColorCombineFunction)(GrColorCombineFnc_t fnc);
1335
1336 extern FxBool (__stdcall *grLfbLock)( GrLock_t type, GrBuffer_t buffer, GrLfbWriteMode_t writeMode,
1337            GrOriginLocation_t origin, FxBool pixelPipeline, 
1338            GrLfbInfo_t *info);
1339 extern FxBool (__stdcall *grLfbUnlock)(GrLock_t type, GrBuffer_t buffer);
1340 extern void (__stdcall *grLfbConstantAlpha)(GrAlpha_t alpha);
1341 extern void (__stdcall *grLfbConstantDepth)(FxU16 depth);
1342 extern void (__stdcall *grLfbWriteColorSwizzle)(FxBool swizzleBytes, FxBool swapWords);
1343 extern void (__stdcall *grLfbWriteColorFormat)(GrColorFormat_t colorFormat);
1344 extern FxBool (__stdcall *grLfbWriteRegion)(GrBuffer_t dst_buffer, 
1345                   FxU32 dst_x, FxU32 dst_y, 
1346                   GrLfbSrcFmt_t src_format, 
1347                   FxU32 src_width, FxU32 src_height, 
1348                   FxI32 src_stride, void *src_data);
1349
1350 extern FxBool (__stdcall *grLfbReadRegion)(GrBuffer_t src_buffer,
1351                  FxU32 src_x, FxU32 src_y,
1352                  FxU32 src_width, FxU32 src_height,
1353                  FxU32 dst_stride, void *dst_data);
1354
1355 extern void (__stdcall *grAADrawLine)(const GrVertex *v1, const GrVertex *v2);
1356 extern void (__stdcall *grAADrawPoint)(const GrVertex *pt);
1357 extern void (__stdcall *grAADrawPolygon)(const int nverts, const int ilist[], const GrVertex vlist[]);
1358 extern void (__stdcall *grAADrawPolygonVertexList)(const int nverts, const GrVertex vlist[]);
1359 extern void (__stdcall *grAADrawTriangle)(
1360                  const GrVertex *a, const GrVertex *b, const GrVertex *c,
1361                  FxBool ab_antialias, FxBool bc_antialias, FxBool ca_antialias
1362                  );
1363 extern void (__stdcall *grGlideInit)(void);
1364 extern void (__stdcall *grGlideShutdown)(void);
1365 extern void (__stdcall *grGlideGetVersion)(char version[80]);
1366 extern void (__stdcall *grGlideGetState)(GrState *state);
1367 extern void (__stdcall *grGlideSetState)( const GrState *state);
1368 extern void (__stdcall *grGlideShamelessPlug)(const FxBool on);
1369 extern void (__stdcall *grHints)(GrHint_t hintType, FxU32 hintMask);
1370
1371 extern float (__stdcall *guFogTableIndexToW)(int i);
1372 extern void (__stdcall *guFogGenerateExp)( GrFog_t fogtable[GR_FOG_TABLE_SIZE], float density );
1373 extern void (__stdcall *guFogGenerateExp2)( GrFog_t fogtable[GR_FOG_TABLE_SIZE], float density );
1374 extern void (__stdcall *guFogGenerateLinear)( GrFog_t fogtable[GR_FOG_TABLE_SIZE], float nearZ, float farZ );
1375
1376 #endif  //_VOLITION_GLIDE_EXT
1377