Glide Plugin GLES2 port from mupen64plus-ae, but with special FrameSkip code
[mupen64plus-pandora.git] / source / gles2glide64 / src / Glitch64 / inc / glide.h
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 /*
22 ** GLIDE.H
23 **
24 ** The following #defines are relevant when using Glide:
25 **
26 ** One of the following "platform constants" must be defined during
27 ** compilation:
28 **
29 **            __DOS__           Defined for 32-bit DOS applications
30 **            __WIN32__         Defined for 32-bit Windows applications
31 **            __sparc__         Defined for Sun Solaris/SunOS
32 **            __linux__         Defined for Linux applications
33 **            __FreeBSD__       Defined for FreeBSD applications
34 **            __NetBSD__        Defined for NetBSD applications
35 **            __OpenBSD__       Defined for OpenBSD applications
36 **            __IRIX__          Defined for SGI Irix applications
37 **
38 */
39 #ifndef __GLIDE_H__
40 #define __GLIDE_H__
41
42 #include <3dfx.h>
43 #include <glidesys.h>
44 #include <sst1vid.h>
45
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49
50 /*
51 ** -----------------------------------------------------------------------
52 ** TYPE DEFINITIONS
53 ** -----------------------------------------------------------------------
54 */
55 typedef FxU32 GrColor_t;
56 typedef FxU8  GrAlpha_t;
57 typedef FxU32 GrMipMapId_t;
58 typedef FxU32 GrStipplePattern_t;
59 typedef FxU8  GrFog_t;
60 typedef FxU32 GrContext_t;
61 typedef int (FX_CALL *GrProc)();
62
63 #ifndef WIN32
64 typedef int HWND;
65 #endif
66
67 /*
68 ** -----------------------------------------------------------------------
69 ** CONSTANTS AND TYPES
70 ** -----------------------------------------------------------------------
71 */
72 #define GR_NULL_MIPMAP_HANDLE  ((GrMipMapId_t) -1)
73
74 #define GR_MIPMAPLEVELMASK_EVEN  FXBIT(0)
75 #define GR_MIPMAPLEVELMASK_ODD  FXBIT(1)
76 #define GR_MIPMAPLEVELMASK_BOTH (GR_MIPMAPLEVELMASK_EVEN | GR_MIPMAPLEVELMASK_ODD )
77
78 #define GR_LODBIAS_BILINEAR     0.5
79 #define GR_LODBIAS_TRILINEAR    0.0
80
81 typedef FxI32 GrChipID_t;
82 #define GR_TMU0         0x0
83 #define GR_TMU1         0x1
84 #define GR_TMU2         0x2
85
86 #define GR_FBI          0x0
87
88 typedef FxI32 GrCombineFunction_t;
89 #define GR_COMBINE_FUNCTION_ZERO        0x0
90 #define GR_COMBINE_FUNCTION_NONE        GR_COMBINE_FUNCTION_ZERO
91 #define GR_COMBINE_FUNCTION_LOCAL       0x1
92 #define GR_COMBINE_FUNCTION_LOCAL_ALPHA 0x2
93 #define GR_COMBINE_FUNCTION_SCALE_OTHER 0x3
94 #define GR_COMBINE_FUNCTION_BLEND_OTHER GR_COMBINE_FUNCTION_SCALE_OTHER
95 #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL 0x4
96 #define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA 0x5 
97 #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL 0x6
98 #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL 0x7
99 #define GR_COMBINE_FUNCTION_BLEND GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL
100 #define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x8
101 #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL 0x9
102 #define GR_COMBINE_FUNCTION_BLEND_LOCAL GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL
103 #define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x10
104
105 typedef FxI32 GrCombineFactor_t;
106 #define GR_COMBINE_FACTOR_ZERO          0x0
107 #define GR_COMBINE_FACTOR_NONE          GR_COMBINE_FACTOR_ZERO
108 #define GR_COMBINE_FACTOR_LOCAL         0x1
109 #define GR_COMBINE_FACTOR_OTHER_ALPHA   0x2
110 #define GR_COMBINE_FACTOR_LOCAL_ALPHA   0x3
111 #define GR_COMBINE_FACTOR_TEXTURE_ALPHA 0x4
112 #define GR_COMBINE_FACTOR_TEXTURE_RGB   0x5
113 #define GR_COMBINE_FACTOR_DETAIL_FACTOR GR_COMBINE_FACTOR_TEXTURE_ALPHA
114 #define GR_COMBINE_FACTOR_LOD_FRACTION  0x5
115 #define GR_COMBINE_FACTOR_ONE           0x8
116 #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL 0x9
117 #define GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA 0xa
118 #define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA 0xb
119 #define GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA 0xc
120 #define GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA
121 #define GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION 0xd
122
123
124 typedef FxI32 GrCombineLocal_t;
125 #define GR_COMBINE_LOCAL_ITERATED 0x0
126 #define GR_COMBINE_LOCAL_CONSTANT 0x1
127 #define GR_COMBINE_LOCAL_NONE GR_COMBINE_LOCAL_CONSTANT
128 #define GR_COMBINE_LOCAL_DEPTH  0x2
129
130 typedef FxI32 GrCombineOther_t;
131 #define GR_COMBINE_OTHER_ITERATED 0x0
132 #define GR_COMBINE_OTHER_TEXTURE 0x1
133 #define GR_COMBINE_OTHER_CONSTANT 0x2
134 #define GR_COMBINE_OTHER_NONE GR_COMBINE_OTHER_CONSTANT
135
136
137 typedef FxI32 GrAlphaSource_t;
138 #define GR_ALPHASOURCE_CC_ALPHA 0x0
139 #define GR_ALPHASOURCE_ITERATED_ALPHA 0x1
140 #define GR_ALPHASOURCE_TEXTURE_ALPHA 0x2
141 #define GR_ALPHASOURCE_TEXTURE_ALPHA_TIMES_ITERATED_ALPHA 0x3
142
143
144 typedef FxI32 GrColorCombineFnc_t;
145 #define GR_COLORCOMBINE_ZERO 0x0
146 #define GR_COLORCOMBINE_CCRGB 0x1
147 #define GR_COLORCOMBINE_ITRGB 0x2
148 #define GR_COLORCOMBINE_ITRGB_DELTA0 0x3
149 #define GR_COLORCOMBINE_DECAL_TEXTURE 0x4
150 #define GR_COLORCOMBINE_TEXTURE_TIMES_CCRGB 0x5
151 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB 0x6
152 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_DELTA0 0x7
153 #define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_ADD_ALPHA 0x8
154 #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA 0x9
155 #define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA_ADD_ITRGB 0xa
156 #define GR_COLORCOMBINE_TEXTURE_ADD_ITRGB 0xb
157 #define GR_COLORCOMBINE_TEXTURE_SUB_ITRGB 0xc
158 #define GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA 0xd
159 #define GR_COLORCOMBINE_DIFF_SPEC_A 0xe
160 #define GR_COLORCOMBINE_DIFF_SPEC_B 0xf
161 #define GR_COLORCOMBINE_ONE 0x10
162
163 typedef FxI32 GrAlphaBlendFnc_t;
164 #define GR_BLEND_ZERO 0x0
165 #define GR_BLEND_SRC_ALPHA 0x1
166 #define GR_BLEND_SRC_COLOR 0x2
167 #define GR_BLEND_DST_COLOR GR_BLEND_SRC_COLOR
168 #define GR_BLEND_DST_ALPHA 0x3 
169 #define GR_BLEND_ONE 0x4
170 #define GR_BLEND_ONE_MINUS_SRC_ALPHA 0x5
171 #define GR_BLEND_ONE_MINUS_SRC_COLOR 0x6
172 #define GR_BLEND_ONE_MINUS_DST_COLOR GR_BLEND_ONE_MINUS_SRC_COLOR 
173 #define GR_BLEND_ONE_MINUS_DST_ALPHA 0x7
174 #define GR_BLEND_RESERVED_8 0x8
175 #define GR_BLEND_RESERVED_9 0x9
176 #define GR_BLEND_RESERVED_A 0xa
177 #define GR_BLEND_RESERVED_B 0xb
178 #define GR_BLEND_RESERVED_C 0xc
179 #define GR_BLEND_RESERVED_D 0xd
180 #define GR_BLEND_RESERVED_E 0xe
181 #define GR_BLEND_ALPHA_SATURATE 0xf
182 #define GR_BLEND_PREFOG_COLOR GR_BLEND_ALPHA_SATURATE
183
184 typedef FxI32 GrAspectRatio_t;
185 #define GR_ASPECT_LOG2_8x1        3       /* 8W x 1H */
186 #define GR_ASPECT_LOG2_4x1        2       /* 4W x 1H */
187 #define GR_ASPECT_LOG2_2x1        1       /* 2W x 1H */
188 #define GR_ASPECT_LOG2_1x1        0       /* 1W x 1H */
189 #define GR_ASPECT_LOG2_1x2       -1       /* 1W x 2H */
190 #define GR_ASPECT_LOG2_1x4       -2       /* 1W x 4H */
191 #define GR_ASPECT_LOG2_1x8       -3       /* 1W x 8H */
192
193 typedef FxI32 GrBuffer_t;
194 #define GR_BUFFER_FRONTBUFFER   0x0
195 #define GR_BUFFER_BACKBUFFER    0x1
196 #define GR_BUFFER_AUXBUFFER     0x2
197 #define GR_BUFFER_DEPTHBUFFER   0x3
198 #define GR_BUFFER_ALPHABUFFER   0x4
199 #define GR_BUFFER_TRIPLEBUFFER  0x5
200
201 typedef FxI32 GrChromakeyMode_t;
202 #define GR_CHROMAKEY_DISABLE    0x0
203 #define GR_CHROMAKEY_ENABLE     0x1
204
205 typedef FxI32 GrChromaRangeMode_t;
206 #define GR_CHROMARANGE_RGB_ALL_EXT  0x0
207
208 #define GR_CHROMARANGE_DISABLE_EXT  0x00
209 #define GR_CHROMARANGE_ENABLE_EXT   0x01
210
211 typedef FxI32 GrTexChromakeyMode_t;
212 #define GR_TEXCHROMA_DISABLE_EXT               0x0
213 #define GR_TEXCHROMA_ENABLE_EXT                0x1
214
215 #define GR_TEXCHROMARANGE_RGB_ALL_EXT  0x0
216
217 typedef FxI32 GrCmpFnc_t;
218 #define GR_CMP_NEVER    0x0
219 #define GR_CMP_LESS     0x1
220 #define GR_CMP_EQUAL    0x2
221 #define GR_CMP_LEQUAL   0x3
222 #define GR_CMP_GREATER  0x4
223 #define GR_CMP_NOTEQUAL 0x5
224 #define GR_CMP_GEQUAL   0x6
225 #define GR_CMP_ALWAYS   0x7
226
227 typedef FxI32 GrColorFormat_t;
228 #define GR_COLORFORMAT_ARGB     0x0
229 #define GR_COLORFORMAT_ABGR     0x1
230
231 #define GR_COLORFORMAT_RGBA     0x2
232 #define GR_COLORFORMAT_BGRA     0x3
233
234 typedef FxI32 GrCullMode_t;
235 #define GR_CULL_DISABLE         0x0
236 #define GR_CULL_NEGATIVE        0x1
237 #define GR_CULL_POSITIVE        0x2
238
239 typedef FxI32 GrDepthBufferMode_t;
240 #define GR_DEPTHBUFFER_DISABLE                  0x0
241 #define GR_DEPTHBUFFER_ZBUFFER                  0x1
242 #define GR_DEPTHBUFFER_WBUFFER                  0x2
243 #define GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS  0x3
244 #define GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS  0x4
245
246 typedef FxI32 GrDitherMode_t;
247 #define GR_DITHER_DISABLE       0x0
248 #define GR_DITHER_2x2           0x1
249 #define GR_DITHER_4x4           0x2
250
251 typedef FxI32 GrStippleMode_t;
252 #define GR_STIPPLE_DISABLE      0x0
253 #define GR_STIPPLE_PATTERN      0x1
254 #define GR_STIPPLE_ROTATE       0x2
255
256 typedef FxI32 GrFogMode_t;
257 #define GR_FOG_DISABLE                     0x0
258 #define GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT  0x1
259 #define GR_FOG_WITH_TABLE_ON_Q             0x2
260 #define GR_FOG_WITH_TABLE_ON_W             GR_FOG_WITH_TABLE_ON_Q
261 #define GR_FOG_WITH_ITERATED_Z             0x3
262 #define GR_FOG_WITH_ITERATED_ALPHA_EXT     0x4
263 #define GR_FOG_MULT2                       0x100
264 #define GR_FOG_ADD2                        0x200
265
266 typedef FxU32 GrLock_t;
267 #define GR_LFB_READ_ONLY  0x00
268 #define GR_LFB_WRITE_ONLY 0x01
269 #define GR_LFB_IDLE       0x00
270 #define GR_LFB_NOIDLE     0x10
271
272 #define GR_LFB_WRITE_ONLY_EXPLICIT_EXT  0x02 /* explicitly not allow reading from the lfb pointer */
273
274 typedef FxI32 GrLfbBypassMode_t;
275 #define GR_LFBBYPASS_DISABLE    0x0
276 #define GR_LFBBYPASS_ENABLE     0x1
277
278 typedef FxI32 GrLfbWriteMode_t;
279 #define GR_LFBWRITEMODE_565        0x0 /* RGB:RGB */
280 #define GR_LFBWRITEMODE_555        0x1 /* RGB:RGB */
281 #define GR_LFBWRITEMODE_1555       0x2 /* ARGB:ARGB */
282 #define GR_LFBWRITEMODE_RESERVED1  0x3
283 #define GR_LFBWRITEMODE_888        0x4 /* RGB */
284 #define GR_LFBWRITEMODE_8888       0x5 /* ARGB */
285 #define GR_LFBWRITEMODE_RESERVED2  0x6
286 #define GR_LFBWRITEMODE_RESERVED3  0x7
287 #define GR_LFBWRITEMODE_RESERVED4  0x8
288 #define GR_LFBWRITEMODE_RESERVED5  0x9
289 #define GR_LFBWRITEMODE_RESERVED6  0xa
290 #define GR_LFBWRITEMODE_RESERVED7  0xb
291 #define GR_LFBWRITEMODE_565_DEPTH  0xc /* RGB:DEPTH */
292 #define GR_LFBWRITEMODE_555_DEPTH  0xd /* RGB:DEPTH */
293 #define GR_LFBWRITEMODE_1555_DEPTH 0xe /* ARGB:DEPTH */
294 #define GR_LFBWRITEMODE_ZA16       0xf /* DEPTH:DEPTH */
295 #define GR_LFBWRITEMODE_ANY        0xFF
296
297
298 typedef FxI32 GrOriginLocation_t;
299 #define GR_ORIGIN_UPPER_LEFT    0x0
300 #define GR_ORIGIN_LOWER_LEFT    0x1
301 #define GR_ORIGIN_ANY           0xFF
302
303 typedef struct {
304     int                size;
305     void               *lfbPtr;
306     FxU32              strideInBytes;        
307     GrLfbWriteMode_t   writeMode;
308     GrOriginLocation_t origin;
309 } GrLfbInfo_t;
310
311 typedef FxI32 GrLOD_t;
312 #define GR_LOD_LOG2_256         0x8
313 #define GR_LOD_LOG2_128         0x7
314 #define GR_LOD_LOG2_64          0x6
315 #define GR_LOD_LOG2_32          0x5
316 #define GR_LOD_LOG2_16          0x4
317 #define GR_LOD_LOG2_8           0x3
318 #define GR_LOD_LOG2_4           0x2
319 #define GR_LOD_LOG2_2           0x1
320 #define GR_LOD_LOG2_1           0x0
321
322 typedef FxI32 GrMipMapMode_t;
323 #define GR_MIPMAP_DISABLE               0x0 /* no mip mapping  */
324 #define GR_MIPMAP_NEAREST               0x1 /* use nearest mipmap */
325 #define GR_MIPMAP_NEAREST_DITHER        0x2 /* GR_MIPMAP_NEAREST + LOD dith */
326
327 typedef FxI32 GrSmoothingMode_t;
328 #define GR_SMOOTHING_DISABLE    0x0
329 #define GR_SMOOTHING_ENABLE     0x1
330
331 typedef FxI32 GrTextureClampMode_t;
332 #define GR_TEXTURECLAMP_WRAP        0x0
333 #define GR_TEXTURECLAMP_CLAMP       0x1
334 #define GR_TEXTURECLAMP_MIRROR_EXT  0x2
335
336 typedef FxI32 GrTextureCombineFnc_t;
337 #define GR_TEXTURECOMBINE_ZERO          0x0 /* texout = 0 */
338 #define GR_TEXTURECOMBINE_DECAL         0x1 /* texout = texthis */
339 #define GR_TEXTURECOMBINE_OTHER         0x2 /* this TMU in passthru mode */
340 #define GR_TEXTURECOMBINE_ADD           0x3 /* tout = tthis + t(this+1) */
341 #define GR_TEXTURECOMBINE_MULTIPLY      0x4 /* texout = tthis * t(this+1) */
342 #define GR_TEXTURECOMBINE_SUBTRACT      0x5 /* Sutract from upstream TMU */
343 #define GR_TEXTURECOMBINE_DETAIL        0x6 /* detail--detail on tthis */
344 #define GR_TEXTURECOMBINE_DETAIL_OTHER  0x7 /* detail--detail on tthis+1 */
345 #define GR_TEXTURECOMBINE_TRILINEAR_ODD 0x8 /* trilinear--odd levels tthis*/
346 #define GR_TEXTURECOMBINE_TRILINEAR_EVEN 0x9 /*trilinear--even levels tthis*/
347 #define GR_TEXTURECOMBINE_ONE           0xa /* texout = 0xFFFFFFFF */
348
349 typedef FxI32 GrTextureFilterMode_t;
350 #define GR_TEXTUREFILTER_POINT_SAMPLED  0x0
351 #define GR_TEXTUREFILTER_BILINEAR       0x1
352
353 typedef FxI32 GrTextureFormat_t;
354 /* KoolSmoky - */
355 #define GR_TEXFMT_8BIT                  0x0
356 #define GR_TEXFMT_RGB_332               GR_TEXFMT_8BIT
357 #define GR_TEXFMT_YIQ_422               0x1
358 #define GR_TEXFMT_ALPHA_8               0x2 /* (0..0xFF) alpha     */
359 #define GR_TEXFMT_INTENSITY_8           0x3 /* (0..0xFF) intensity */
360 #define GR_TEXFMT_ALPHA_INTENSITY_44    0x4
361 #define GR_TEXFMT_P_8                   0x5 /* 8-bit palette */
362 #define GR_TEXFMT_RSVD0                 0x6 /* GR_TEXFMT_P_8_RGBA */
363 #define GR_TEXFMT_P_8_6666              GR_TEXFMT_RSVD0
364 #define GR_TEXFMT_P_8_6666_EXT          GR_TEXFMT_RSVD0
365 #define GR_TEXFMT_RSVD1                 0x7
366 #define GR_TEXFMT_16BIT                 0x8
367 #define GR_TEXFMT_ARGB_8332             GR_TEXFMT_16BIT
368 #define GR_TEXFMT_AYIQ_8422             0x9
369 #define GR_TEXFMT_RGB_565               0xa
370 #define GR_TEXFMT_ARGB_1555             0xb
371 #define GR_TEXFMT_ARGB_4444             0xc
372 #define GR_TEXFMT_ALPHA_INTENSITY_88    0xd
373 #define GR_TEXFMT_AP_88                 0xe /* 8-bit alpha 8-bit palette */
374 #define GR_TEXFMT_RSVD2                 0xf
375 #define GR_TEXFMT_RSVD4                 GR_TEXFMT_RSVD2
376
377 typedef FxU32 GrTexTable_t;
378 #define GR_TEXTABLE_NCC0                 0x0
379 #define GR_TEXTABLE_NCC1                 0x1
380 #define GR_TEXTABLE_PALETTE              0x2
381 #define GR_TEXTABLE_PALETTE_6666_EXT     0x3
382
383 typedef FxU32 GrNCCTable_t;
384 #define GR_NCCTABLE_NCC0    0x0
385 #define GR_NCCTABLE_NCC1    0x1
386
387 typedef FxU32 GrTexBaseRange_t;
388 #define GR_TEXBASE_256      0x3
389 #define GR_TEXBASE_128      0x2
390 #define GR_TEXBASE_64       0x1
391 #define GR_TEXBASE_32_TO_1  0x0
392
393
394 typedef FxU32 GrEnableMode_t;
395 #define GR_MODE_DISABLE     0x0
396 #define GR_MODE_ENABLE      0x1
397
398 #define GR_AA_ORDERED            0x01
399 #define GR_ALLOW_MIPMAP_DITHER   0x02
400 #define GR_PASSTHRU              0x03
401 #define GR_SHAMELESS_PLUG        0x04
402 #define GR_VIDEO_SMOOTHING       0x05
403
404 typedef FxU32 GrCoordinateSpaceMode_t;
405 #define GR_WINDOW_COORDS    0x00
406 #define GR_CLIP_COORDS      0x01
407
408 /* Types of data in strips */
409 #define GR_FLOAT        0
410 #define GR_U8           1
411
412 /* Parameters for strips */
413 #define GR_PARAM_XY       0x01
414 #define GR_PARAM_Z        0x02
415 #define GR_PARAM_W        0x03
416 #define GR_PARAM_Q        0x04
417 #define GR_PARAM_FOG_EXT  0x05
418
419 #define GR_PARAM_A        0x10
420
421 #define GR_PARAM_RGB      0x20
422
423 #define GR_PARAM_PARGB    0x30
424
425 #define GR_PARAM_ST0      0x40
426 #define GR_PARAM_ST1      GR_PARAM_ST0+1
427 #define GR_PARAM_ST2      GR_PARAM_ST0+2
428
429 #define GR_PARAM_Q0       0x50
430 #define GR_PARAM_Q1       GR_PARAM_Q0+1
431 #define GR_PARAM_Q2       GR_PARAM_Q0+2
432
433 #define GR_PARAM_DISABLE  0x00
434 #define GR_PARAM_ENABLE   0x01
435
436 /*
437 ** grDrawVertexArray/grDrawVertexArrayContiguous primitive type
438 */
439 #define GR_POINTS                        0
440 #define GR_LINE_STRIP                    1
441 #define GR_LINES                         2
442 #define GR_POLYGON                       3
443 #define GR_TRIANGLE_STRIP                4
444 #define GR_TRIANGLE_FAN                  5
445 #define GR_TRIANGLES                     6
446 #define GR_TRIANGLE_STRIP_CONTINUE       7
447 #define GR_TRIANGLE_FAN_CONTINUE         8
448
449 /* 
450 ** grGet/grReset types
451 */
452 #define GR_BITS_DEPTH                   0x01
453 #define GR_BITS_RGBA                    0x02
454 #define GR_FIFO_FULLNESS                0x03
455 #define GR_FOG_TABLE_ENTRIES            0x04
456 #define GR_GAMMA_TABLE_ENTRIES          0x05
457 #define GR_GLIDE_STATE_SIZE             0x06
458 #define GR_GLIDE_VERTEXLAYOUT_SIZE      0x07
459 #define GR_IS_BUSY                      0x08
460 #define GR_LFB_PIXEL_PIPE               0x09
461 #define GR_MAX_TEXTURE_SIZE             0x0a
462 #define GR_MAX_TEXTURE_ASPECT_RATIO     0x0b
463 #define GR_MEMORY_FB                    0x0c
464 #define GR_MEMORY_TMU                   0x0d
465 #define GR_MEMORY_UMA                   0x0e
466 #define GR_NUM_BOARDS                   0x0f
467 #define GR_NON_POWER_OF_TWO_TEXTURES    0x10
468 #define GR_NUM_FB                       0x11
469 #define GR_NUM_SWAP_HISTORY_BUFFER      0x12
470 #define GR_NUM_TMU                      0x13
471 #define GR_PENDING_BUFFERSWAPS          0x14
472 #define GR_REVISION_FB                  0x15
473 #define GR_REVISION_TMU                 0x16
474 #define GR_STATS_LINES                  0x17  /* grGet/grReset */
475 #define GR_STATS_PIXELS_AFUNC_FAIL      0x18
476 #define GR_STATS_PIXELS_CHROMA_FAIL     0x19
477 #define GR_STATS_PIXELS_DEPTHFUNC_FAIL  0x1a
478 #define GR_STATS_PIXELS_IN              0x1b
479 #define GR_STATS_PIXELS_OUT             0x1c
480 #define GR_STATS_PIXELS                 0x1d  /* grReset */
481 #define GR_STATS_POINTS                 0x1e  /* grGet/grReset */
482 #define GR_STATS_TRIANGLES_IN           0x1f
483 #define GR_STATS_TRIANGLES_OUT          0x20
484 #define GR_STATS_TRIANGLES              0x21  /* grReset */
485 #define GR_SWAP_HISTORY                 0x22
486 #define GR_SUPPORTS_PASSTHRU            0x23
487 #define GR_TEXTURE_ALIGN                0x24
488 #define GR_VIDEO_POSITION               0x25
489 #define GR_VIEWPORT                     0x26
490 #define GR_WDEPTH_MIN_MAX               0x27
491 #define GR_ZDEPTH_MIN_MAX               0x28
492 #define GR_VERTEX_PARAMETER             0x29
493 #define GR_BITS_GAMMA                   0x2a
494 #define GR_GET_RESERVED_1               0x1000
495
496 /*
497 ** grGetString types
498 */
499 #define GR_EXTENSION                    0xa0
500 #define GR_HARDWARE                     0xa1
501 #define GR_RENDERER                     0xa2
502 #define GR_VENDOR                       0xa3
503 #define GR_VERSION                      0xa4
504
505 /*
506 ** -----------------------------------------------------------------------
507 ** STRUCTURES
508 ** -----------------------------------------------------------------------
509 */
510
511 typedef struct {
512     GrLOD_t           smallLodLog2;
513     GrLOD_t           largeLodLog2;
514     GrAspectRatio_t   aspectRatioLog2;
515     GrTextureFormat_t format;
516     void              *data;
517 } GrTexInfo;
518
519 typedef struct GrSstPerfStats_s {
520   FxU32  pixelsIn;              /* # pixels processed (minus buffer clears) */
521   FxU32  chromaFail;            /* # pixels not drawn due to chroma key */ 
522   FxU32  zFuncFail;             /* # pixels not drawn due to Z comparison */
523   FxU32  aFuncFail;             /* # pixels not drawn due to alpha comparison */
524   FxU32  pixelsOut;             /* # pixels drawn (including buffer clears) */
525 } GrSstPerfStats_t;
526
527 typedef struct {
528   GrScreenResolution_t resolution;
529   GrScreenRefresh_t    refresh;
530   int                  numColorBuffers;
531   int                  numAuxBuffers;
532 } GrResolution;
533
534 typedef GrResolution GlideResolution;
535
536 #define GR_QUERY_ANY  ((FxU32)(~0))
537
538 typedef FxU32 GrLfbSrcFmt_t;
539 #define GR_LFB_SRC_FMT_565          0x00
540 #define GR_LFB_SRC_FMT_555          0x01
541 #define GR_LFB_SRC_FMT_1555         0x02
542 #define GR_LFB_SRC_FMT_888          0x04
543 #define GR_LFB_SRC_FMT_8888         0x05
544 #define GR_LFB_SRC_FMT_565_DEPTH    0x0c
545 #define GR_LFB_SRC_FMT_555_DEPTH    0x0d
546 #define GR_LFB_SRC_FMT_1555_DEPTH   0x0e
547 #define GR_LFB_SRC_FMT_ZA16         0x0f
548 #define GR_LFB_SRC_FMT_RLE16        0x80
549
550 #ifdef H3D
551 #define GR_HINT_H3DENABLE               4
552 #undef  GR_HINTTYPE_MAX
553 #define GR_HINTTYPE_MAX 4
554 #endif
555
556 /*
557 ** -----------------------------------------------------------------------
558 ** FUNCTION PROTOTYPES
559 ** -----------------------------------------------------------------------
560 */
561 #ifndef FX_GLIDE_NO_FUNC_PROTO
562 /*
563 ** rendering functions
564 */
565 FX_ENTRY void FX_CALL
566 grDrawPoint( const void *pt );
567
568 FX_ENTRY void FX_CALL
569 grDrawLine( const void *v1, const void *v2 );
570
571 FX_ENTRY void FX_CALL
572 grDrawTriangle( const void *a, const void *b, const void *c );
573
574 FX_ENTRY void FX_CALL
575 grVertexLayout(FxU32 param, FxI32 offset, FxU32 mode);
576
577 FX_ENTRY void FX_CALL 
578 grDrawVertexArray(FxU32 mode, FxU32 Count, void *pointers);
579
580 FX_ENTRY void FX_CALL 
581 grDrawVertexArrayContiguous(FxU32 mode, FxU32 Count, void *pointers, FxU32 stride);
582
583 /*
584 **  Antialiasing Functions
585 */
586
587 FX_ENTRY void FX_CALL
588 grAADrawTriangle(
589                  const void *a, const void *b, const void *c,
590                  FxBool ab_antialias, FxBool bc_antialias, FxBool ca_antialias
591                  );
592
593 /*
594 ** buffer management
595 */
596 FX_ENTRY void FX_CALL
597 grBufferClear( GrColor_t color, GrAlpha_t alpha, FxU32 depth );
598
599 FX_ENTRY void FX_CALL
600 grBufferSwap( FxU32 swap_interval );
601
602 FX_ENTRY void FX_CALL
603 grRenderBuffer( GrBuffer_t buffer );
604
605 /*
606 ** error management
607 */
608 typedef void (*GrErrorCallbackFnc_t)( const char *string, FxBool fatal );
609
610 FX_ENTRY void FX_CALL 
611 grErrorSetCallback( GrErrorCallbackFnc_t fnc );
612
613 /*
614 ** SST routines
615 */
616 FX_ENTRY void FX_CALL 
617 grFinish(void);
618
619 FX_ENTRY void FX_CALL 
620 grFlush(void);
621
622 FX_ENTRY GrContext_t FX_CALL 
623 grSstWinOpen(
624           HWND                 hWnd,
625           GrScreenResolution_t screen_resolution,
626           GrScreenRefresh_t    refresh_rate,
627           GrColorFormat_t      color_format,
628           GrOriginLocation_t   origin_location,
629           int                  nColBuffers,
630           int                  nAuxBuffers);
631
632 FX_ENTRY FxBool FX_CALL
633 grSstWinClose( GrContext_t context );
634
635 FX_ENTRY void FX_CALL
636 grSetNumPendingBuffers(FxI32 NumPendingBuffers);
637
638 FX_ENTRY FxBool FX_CALL
639 grSelectContext( GrContext_t context );
640
641 FX_ENTRY void FX_CALL
642 grSstOrigin(GrOriginLocation_t  origin);
643
644 FX_ENTRY void FX_CALL 
645 grSstSelect( int which_sst );
646
647 /*
648 ** Glide configuration and special effect maintenance functions
649 */
650 FX_ENTRY void FX_CALL
651 grAlphaBlendFunction(
652                      GrAlphaBlendFnc_t rgb_sf,   GrAlphaBlendFnc_t rgb_df,
653                      GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df
654                      );
655
656 FX_ENTRY void FX_CALL
657 grAlphaCombine(
658                GrCombineFunction_t function, GrCombineFactor_t factor,
659                GrCombineLocal_t local, GrCombineOther_t other,
660                FxBool invert
661                );
662
663 FX_ENTRY void FX_CALL
664 grAlphaControlsITRGBLighting( FxBool enable );
665
666 FX_ENTRY void FX_CALL
667 grAlphaTestFunction( GrCmpFnc_t function );
668
669 FX_ENTRY void FX_CALL
670 grAlphaTestReferenceValue( GrAlpha_t value );
671
672 FX_ENTRY void FX_CALL 
673 grChromakeyMode( GrChromakeyMode_t mode );
674
675 FX_ENTRY void FX_CALL 
676 grChromakeyValue( GrColor_t value );
677
678 FX_ENTRY void FX_CALL 
679 grClipWindow( FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy );
680
681 FX_ENTRY void FX_CALL 
682 grColorCombine(
683                GrCombineFunction_t function, GrCombineFactor_t factor,
684                GrCombineLocal_t local, GrCombineOther_t other,
685                FxBool invert );
686
687 FX_ENTRY void FX_CALL
688 grColorMask( FxBool rgb, FxBool a );
689
690 FX_ENTRY void FX_CALL 
691 grCullMode( GrCullMode_t mode );
692
693 FX_ENTRY void FX_CALL 
694 grConstantColorValue( GrColor_t value );
695
696 FX_ENTRY void FX_CALL 
697 grDepthBiasLevel( FxI32 level );
698
699 FX_ENTRY void FX_CALL 
700 grDepthBufferFunction( GrCmpFnc_t function );
701
702 FX_ENTRY void FX_CALL 
703 grDepthBufferMode( GrDepthBufferMode_t mode );
704
705 FX_ENTRY void FX_CALL 
706 grDepthMask( FxBool mask );
707
708 FX_ENTRY void FX_CALL 
709 grDisableAllEffects( void );
710
711 FX_ENTRY void FX_CALL 
712 grDitherMode( GrDitherMode_t mode );
713
714 FX_ENTRY void FX_CALL 
715 grFogColorValue( GrColor_t fogcolor );
716
717 FX_ENTRY void FX_CALL 
718 grFogMode( GrFogMode_t mode );
719
720 FX_ENTRY void FX_CALL 
721 grFogTable( const GrFog_t ft[] );
722
723 FX_ENTRY void FX_CALL 
724 grLoadGammaTable( FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);
725
726 FX_ENTRY void FX_CALL
727 grSplash(float x, float y, float width, float height, FxU32 frame);
728
729 FX_ENTRY FxU32 FX_CALL 
730 grGet( FxU32 pname, FxU32 plength, FxI32 *params );
731
732 FX_ENTRY const char * FX_CALL 
733 grGetString( FxU32 pname );
734
735 FX_ENTRY FxI32 FX_CALL 
736 grQueryResolutions( const GrResolution *resTemplate, GrResolution *output );
737
738 FX_ENTRY FxBool FX_CALL 
739 grReset( FxU32 what );
740
741 FX_ENTRY GrProc FX_CALL
742 grGetProcAddress( char *procName );
743
744 FX_ENTRY void FX_CALL 
745 grEnable( GrEnableMode_t mode );
746
747 FX_ENTRY void FX_CALL 
748 grDisable( GrEnableMode_t mode );
749
750 FX_ENTRY void FX_CALL 
751 grCoordinateSpace( GrCoordinateSpaceMode_t mode );
752
753 FX_ENTRY void FX_CALL 
754 grDepthRange( FxFloat n, FxFloat f );
755
756 FX_ENTRY void FX_CALL 
757 grStippleMode( GrStippleMode_t mode );
758
759 FX_ENTRY void FX_CALL 
760 grStipplePattern( GrStipplePattern_t mode );
761
762 FX_ENTRY void FX_CALL 
763 grViewport( FxI32 x, FxI32 y, FxI32 width, FxI32 height );
764
765 /*
766 ** texture mapping control functions
767 */
768 FX_ENTRY FxU32 FX_CALL 
769 grTexCalcMemRequired(
770                      GrLOD_t lodmin, GrLOD_t lodmax,
771                      GrAspectRatio_t aspect, GrTextureFormat_t fmt);
772
773 FX_ENTRY FxU32 FX_CALL 
774 grTexTextureMemRequired( FxU32     evenOdd,
775                                  GrTexInfo *info   );
776
777 FX_ENTRY FxU32 FX_CALL 
778 grTexMinAddress( GrChipID_t tmu );
779
780 FX_ENTRY FxU32 FX_CALL 
781 grTexMaxAddress( GrChipID_t tmu );
782
783 FX_ENTRY void FX_CALL 
784 grTexNCCTable( GrNCCTable_t table );
785
786 FX_ENTRY void FX_CALL 
787 grTexSource( GrChipID_t tmu,
788              FxU32      startAddress,
789              FxU32      evenOdd,
790              GrTexInfo  *info );
791
792 FX_ENTRY void FX_CALL 
793 grTexClampMode(
794                GrChipID_t tmu,
795                GrTextureClampMode_t s_clampmode,
796                GrTextureClampMode_t t_clampmode
797                );
798
799 FX_ENTRY void FX_CALL 
800 grTexCombine(
801              GrChipID_t tmu,
802              GrCombineFunction_t rgb_function,
803              GrCombineFactor_t rgb_factor, 
804              GrCombineFunction_t alpha_function,
805              GrCombineFactor_t alpha_factor,
806              FxBool rgb_invert,
807              FxBool alpha_invert
808              );
809
810 FX_ENTRY void FX_CALL 
811 grTexDetailControl(
812                    GrChipID_t tmu,
813                    int lod_bias,
814                    FxU8 detail_scale,
815                    float detail_max
816                    );
817
818 FX_ENTRY void FX_CALL 
819 grTexFilterMode(
820                 GrChipID_t tmu,
821                 GrTextureFilterMode_t minfilter_mode,
822                 GrTextureFilterMode_t magfilter_mode
823                 );
824
825
826 FX_ENTRY void FX_CALL 
827 grTexLodBiasValue(GrChipID_t tmu, float bias );
828
829 FX_ENTRY void FX_CALL 
830 grTexDownloadMipMap( GrChipID_t tmu,
831                      FxU32      startAddress,
832                      FxU32      evenOdd,
833                      GrTexInfo  *info );
834
835 FX_ENTRY void FX_CALL 
836 grTexDownloadMipMapLevel( GrChipID_t        tmu,
837                           FxU32             startAddress,
838                           GrLOD_t           thisLod,
839                           GrLOD_t           largeLod,
840                           GrAspectRatio_t   aspectRatio,
841                           GrTextureFormat_t format,
842                           FxU32             evenOdd,
843                           void              *data );
844
845 FX_ENTRY FxBool FX_CALL 
846 grTexDownloadMipMapLevelPartial( GrChipID_t        tmu,
847                                  FxU32             startAddress,
848                                  GrLOD_t           thisLod,
849                                  GrLOD_t           largeLod,
850                                  GrAspectRatio_t   aspectRatio,
851                                  GrTextureFormat_t format,
852                                  FxU32             evenOdd,
853                                  void              *data,
854                                  int               start,
855                                  int               end );
856
857 FX_ENTRY void FX_CALL
858 grTexDownloadTable( GrTexTable_t type, 
859                     void         *data );
860
861 FX_ENTRY void FX_CALL
862 grTexDownloadTablePartial( GrTexTable_t type, 
863                            void         *data,
864                            int          start,
865                            int          end );
866
867 FX_ENTRY void FX_CALL 
868 grTexMipMapMode( GrChipID_t     tmu, 
869                  GrMipMapMode_t mode,
870                  FxBool         lodBlend );
871
872 FX_ENTRY void FX_CALL 
873 grTexMultibase( GrChipID_t tmu,
874                 FxBool     enable );
875
876 FX_ENTRY void FX_CALL
877 grTexMultibaseAddress( GrChipID_t       tmu,
878                        GrTexBaseRange_t range,
879                        FxU32            startAddress,
880                        FxU32            evenOdd,
881                        GrTexInfo        *info );
882
883 /*
884 ** linear frame buffer functions
885 */
886
887 FX_ENTRY FxBool FX_CALL
888 grLfbLock( GrLock_t type, GrBuffer_t buffer, GrLfbWriteMode_t writeMode,
889            GrOriginLocation_t origin, FxBool pixelPipeline, 
890            GrLfbInfo_t *info );
891
892 FX_ENTRY FxBool FX_CALL
893 grLfbUnlock( GrLock_t type, GrBuffer_t buffer );
894
895 FX_ENTRY void FX_CALL 
896 grLfbConstantAlpha( GrAlpha_t alpha );
897
898 FX_ENTRY void FX_CALL 
899 grLfbConstantDepth( FxU32 depth );
900
901 FX_ENTRY void FX_CALL 
902 grLfbWriteColorSwizzle(FxBool swizzleBytes, FxBool swapWords);
903
904 FX_ENTRY void FX_CALL
905 grLfbWriteColorFormat(GrColorFormat_t colorFormat);
906
907 FX_ENTRY FxBool FX_CALL
908 grLfbWriteRegion( GrBuffer_t dst_buffer, 
909                   FxU32 dst_x, FxU32 dst_y, 
910                   GrLfbSrcFmt_t src_format, 
911                   FxU32 src_width, FxU32 src_height, 
912                   FxBool pixelPipeline,
913                   FxI32 src_stride, void *src_data );
914
915 FX_ENTRY FxBool FX_CALL
916 grLfbReadRegion( GrBuffer_t src_buffer,
917                  FxU32 src_x, FxU32 src_y,
918                  FxU32 src_width, FxU32 src_height,
919                  FxU32 dst_stride, void *dst_data );
920
921 /*
922 ** glide management functions
923 */
924 FX_ENTRY void FX_CALL
925 grGlideInit( void );
926
927 FX_ENTRY void FX_CALL
928 grGlideShutdown( void );
929
930 FX_ENTRY void FX_CALL
931 grGlideGetState( void *state );
932
933 FX_ENTRY void FX_CALL
934 grGlideSetState( const void *state );
935
936 FX_ENTRY void FX_CALL
937 grGlideGetVertexLayout( void *layout );
938
939 FX_ENTRY void FX_CALL
940 grGlideSetVertexLayout( const void *layout );
941
942 #endif /* FX_GLIDE_NO_FUNC_PROTO */
943
944 #ifdef __cplusplus
945 }
946 #endif
947
948 #include <glideutl.h>
949
950 #endif /* __GLIDE_H__ */