Arachnoid GLESv1.1 plugin. Compile and run (a bit glitchy and no frameskip) on the...
[mupen64plus-pandora.git] / source / mupen64plus-video-arachnoid / src / GBI / GBIDefs.h
1 /******************************************************************************
2  * Arachnoid Graphics Plugin for Mupen64Plus
3  * http://bitbucket.org/wahrhaft/mupen64plus-video-arachnoid/
4  *
5  * Copyright (C) 2007 Kristofer Karlsson, Rickard Niklasson
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  *****************************************************************************/
21
22 #ifndef GBI_DEFINITIONS_H_
23 #define GBI_DEFINITIONS_H_
24
25 #include "GBI.h"
26
27
28 //TODO Write comments for each group
29
30 #define G_NOOP                    0x00
31
32 // These GBI commands are common to all ucodes
33
34 #define    G_SETCIMG                0xFF    /*  -1 */
35 #define    G_SETZIMG                0xFE    /*  -2 */
36 #define    G_SETTIMG                0xFD    /*  -3 */
37 #define    G_SETCOMBINE             0xFC    /*  -4 */
38 #define    G_SETENVCOLOR            0xFB    /*  -5 */
39 #define    G_SETPRIMCOLOR           0xFA    /*  -6 */
40 #define    G_SETBLENDCOLOR          0xF9    /*  -7 */
41 #define    G_SETFOGCOLOR            0xF8    /*  -8 */
42 #define    G_SETFILLCOLOR           0xF7    /*  -9 */
43 #define    G_FILLRECT               0xF6    /* -10 */
44 #define    G_SETTILE                0xF5    /* -11 */
45 #define    G_LOADTILE               0xF4    /* -12 */
46 #define    G_LOADBLOCK              0xF3    /* -13 */
47 #define    G_SETTILESIZE            0xF2    /* -14 */
48 #define    G_LOADTLUT               0xF0    /* -16 */
49 #define    G_RDPSETOTHERMODE        0xEF    /* -17 */
50 #define    G_SETPRIMDEPTH           0xEE    /* -18 */
51 #define    G_SETSCISSOR             0xED    /* -19 */
52 #define    G_SETCONVERT             0xEC    /* -20 */
53 #define    G_SETKEYR                0xEB    /* -21 */
54 #define    G_SETKEYGB               0xEA    /* -22 */
55 #define    G_RDPFULLSYNC            0xE9    /* -23 */
56 #define    G_RDPTILESYNC            0xE8    /* -24 */
57 #define    G_RDPPIPESYNC            0xE7    /* -25 */
58 #define    G_RDPLOADSYNC            0xE6    /* -26 */
59 #define G_TEXRECTFLIP               0xE5    /* -27 */
60 #define G_TEXRECT                   0xE4    /* -28 */
61
62 #define G_TRI_FILL                  0xC8    /* fill triangle:            11001000 */
63 #define G_TRI_SHADE                 0xCC    /* shade triangle:           11001100 */
64 #define G_TRI_TXTR                  0xCA    /* texture triangle:         11001010 */
65 #define G_TRI_SHADE_TXTR            0xCE    /* shade, texture triangle:  11001110 */
66 #define G_TRI_FILL_ZBUFF            0xC9    /* fill, zbuff triangle:     11001001 */
67 #define G_TRI_SHADE_ZBUFF           0xCD    /* shade, zbuff triangle:    11001101 */
68 #define G_TRI_TXTR_ZBUFF            0xCB    /* texture, zbuff triangle:  11001011 */
69 #define G_TRI_SHADE_TXTR_ZBUFF      0xCF    /* shade, txtr, zbuff trngl: 11001111 */
70
71 #define G_MV_MMTX           2    
72 #define G_MV_PMTX           6
73 #define G_MV_LIGHT          10
74 #define G_MV_POINT          12
75 #define G_MV_MATRIX         14
76
77 #define G_MW_MATRIX         0x00
78 #define G_MW_NUMLIGHT       0x02
79 #define G_MW_CLIP           0x04
80 #define G_MW_SEGMENT        0x06
81 #define G_MW_FOG            0x08
82 #define G_MW_LIGHTCOL       0x0A
83 #define G_MW_FORCEMTX       0x0C
84 #define G_MW_POINTS         0x0C
85 #define    G_MW_PERSPNORM   0x0E
86
87 #define G_MWO_POINT_RGBA        0x10
88 #define G_MWO_POINT_ST          0x14
89 #define G_MWO_POINT_XYSCREEN    0x18
90 #define G_MWO_POINT_ZSCREEN     0x1C
91
92 //Move Memory Defines
93 #define G_MV_LOOKATY       0x82
94 #define G_MV_LOOKATX       0x84
95 #define G_MV_L0            0x86
96 #define G_MV_L1            0x88
97 #define G_MV_L2            0x8a
98 #define G_MV_L3            0x8c
99 #define G_MV_L4            0x8e
100 #define G_MV_L5            0x90
101 #define G_MV_L6            0x92
102 #define G_MV_L7            0x94
103 #define G_MV_TXTATT        0x96
104 #define G_MV_MATRIX_1      0x9E
105 #define G_MV_MATRIX_2      0x98
106 #define G_MV_MATRIX_3      0x9A
107 #define G_MV_MATRIX_4      0x9C
108
109
110
111 // Image formats
112 #define G_IM_FMT_RGBA   0
113 #define G_IM_FMT_YUV    1
114 #define G_IM_FMT_CI     2
115 #define G_IM_FMT_IA     3
116 #define G_IM_FMT_I      4
117
118 // Image sizes
119 #define G_IM_SIZ_4b     0
120 #define G_IM_SIZ_8b     1
121 #define G_IM_SIZ_16b    2
122 #define G_IM_SIZ_32b    3
123 #define G_IM_SIZ_DD     5
124
125 #define G_TX_MIRROR     0x1
126 #define G_TX_CLAMP      0x2
127
128
129
130 //
131 #define G_DL_PUSH      0x00
132 #define G_DL_NOPUSH    0x01
133
134 enum TextureMode
135 {
136     TM_NORMAL      = 0,
137     TM_TEXRECT     = 1,
138     TM_BGIMAGE     = 2,
139     TM_FRAMEBUFFER = 3,
140 };
141
142
143 enum LoadType
144 {
145     LOADTYPE_BLOCK = 0,
146     LOADTYPE_TILE  = 1,
147 };
148
149 /*
150  * G_SETOTHERMODE_L sft: shift count
151  */
152 #define    G_MDSFT_ALPHACOMPARE     0
153 #define    G_MDSFT_ZSRCSEL          2
154 #define    G_MDSFT_RENDERMODE       3
155 #define    G_MDSFT_BLENDER          16
156
157 /*
158  * G_SETOTHERMODE_H sft: shift count
159  */
160 #define    G_MDSFT_BLENDMASK        0    /* unsupported */
161 #define    G_MDSFT_ALPHADITHER      4
162 #define    G_MDSFT_RGBDITHER        6
163
164 #define    G_MDSFT_COMBKEY          8
165 #define    G_MDSFT_TEXTCONV         9
166 #define    G_MDSFT_TEXTFILT        12
167 #define    G_MDSFT_TEXTLUT         14
168 #define    G_MDSFT_TEXTLOD         16
169 #define    G_MDSFT_TEXTDETAIL      17
170 #define    G_MDSFT_TEXTPERSP       19
171 #define    G_MDSFT_CYCLETYPE       20
172 #define    G_MDSFT_COLORDITHER     22    /* unsupported in HW 2.0 */
173 #define    G_MDSFT_PIPELINE        23
174
175 /* G_SETOTHERMODE_H gPipelineMode */
176 #define    G_PM_1PRIMITIVE            1
177 #define    G_PM_NPRIMITIVE            0
178
179 //G_SETOTHERMODE_H gSetCycleType 
180 enum G_CYCLE_TYPE {
181     G_CYC_1CYCLE = 0,
182     G_CYC_2CYCLE = 1,
183     G_CYC_COPY   = 2,
184     G_CYC_FILL   = 3,  
185 };
186
187 /* G_SETOTHERMODE_H gSetTexturePersp */
188 #define G_TP_NONE                0
189 #define G_TP_PERSP               1
190
191 /* G_SETOTHERMODE_H gSetTextureDetail */
192 #define G_TD_CLAMP               0
193 #define G_TD_SHARPEN             1
194 #define G_TD_DETAIL              2
195
196 /* G_SETOTHERMODE_H gSetTextureLOD */
197 #define G_TL_TILE                0
198 #define G_TL_LOD                 1
199
200 /* G_SETOTHERMODE_H gSetTextureLUT */
201 #define G_TT_NONE                0
202 #define G_TT_RGBA16              2
203 #define G_TT_IA16                3
204
205 /* G_SETOTHERMODE_H gSetTextureFilter */
206 #define G_TF_POINT               0
207 #define G_TF_AVERAGE             3
208 #define G_TF_BILERP              2
209
210 /* G_SETOTHERMODE_H gSetTextureConvert */
211 #define G_TC_CONV                0
212 #define G_TC_FILTCONV            5
213 #define G_TC_FILT                6
214
215 /* G_SETOTHERMODE_H gSetCombineKey */
216 #define G_CK_NONE                0
217 #define G_CK_KEY                 1
218
219 /* G_SETOTHERMODE_H gSetColorDither */
220 #define    G_CD_MAGICSQ          0
221 #define    G_CD_BAYER            1
222 #define    G_CD_NOISE            2
223
224 #define    G_CD_DISABLE          3
225 #define    G_CD_ENABLE           G_CD_NOISE    /* HW 1.0 compatibility mode */
226
227 /* G_SETOTHERMODE_H gSetAlphaDither */
228 #define    G_AD_PATTERN          0
229 #define    G_AD_NOTPATTERN       1
230 #define    G_AD_NOISE            2
231 #define    G_AD_DISABLE          3
232
233 /* G_SETOTHERMODE_L gSetAlphaCompare */
234 #define    G_AC_NONE             0
235 #define    G_AC_THRESHOLD        1
236 #define    G_AC_DITHER           3
237
238 /* G_SETOTHERMODE_L gSetDepthSource */
239 #define    G_ZS_PIXEL            0
240 #define    G_ZS_PRIM             1
241
242 /* G_SETOTHERMODE_L gSetRenderMode */
243 #define    AA_EN                 1
244 #define    Z_CMP                 1
245 #define    Z_UPD                 1
246 #define    IM_RD                 1
247 #define    CLR_ON_CVG            1
248 #define    CVG_DST_CLAMP         0
249 #define    CVG_DST_WRAP          1
250 #define    CVG_DST_FULL          2
251 #define    CVG_DST_SAVE          3
252 #define    ZMODE_OPA             0
253 #define    ZMODE_INTER           1
254 #define    ZMODE_XLU             2
255 #define    ZMODE_DEC             3
256 #define    CVG_X_ALPHA           1
257 #define    ALPHA_CVG_SEL         1
258 #define    FORCE_BL              1
259 #define    TEX_EDGE              0 // not used
260
261 #define    G_SC_NON_INTERLACE    0
262 #define    G_SC_EVEN_INTERLACE   2
263 #define    G_SC_ODD_INTERLACE    3
264
265
266 #define GBI_InitFlags( ucode ) \
267     GBI::G_MTX_STACKSIZE        = ucode##_MTX_STACKSIZE; \
268     GBI::G_MTX_MODELVIEW        = ucode##_MTX_MODELVIEW; \
269     GBI::G_MTX_PROJECTION       = ucode##_MTX_PROJECTION; \
270     GBI::G_MTX_MUL              = ucode##_MTX_MUL; \
271     GBI::G_MTX_LOAD             = ucode##_MTX_LOAD; \
272     GBI::G_MTX_NOPUSH           = ucode##_MTX_NOPUSH; \
273     GBI::G_MTX_PUSH             = ucode##_MTX_PUSH; \
274 \
275     GBI::G_TEXTURE_ENABLE       = ucode##_TEXTURE_ENABLE; \
276     GBI::G_SHADING_SMOOTH       = ucode##_SHADING_SMOOTH; \
277     GBI::G_CULL_FRONT           = ucode##_CULL_FRONT; \
278     GBI::G_CULL_BACK            = ucode##_CULL_BACK; \
279     GBI::G_CULL_BOTH            = ucode##_CULL_BOTH; \
280     GBI::G_CLIPPING             = ucode##_CLIPPING; \
281 \
282     GBI::G_MV_VIEWPORT          = ucode##_MV_VIEWPORT; \
283     /* \
284     GBI::G_MWO_aLIGHT_1        = ucode##_MWO_aLIGHT_1; \
285     GBI::G_MWO_bLIGHT_1        = ucode##_MWO_bLIGHT_1; \
286     GBI::G_MWO_aLIGHT_2        = ucode##_MWO_aLIGHT_2; \
287     GBI::G_MWO_bLIGHT_2        = ucode##_MWO_bLIGHT_2; \
288     GBI::G_MWO_aLIGHT_3        = ucode##_MWO_aLIGHT_3; \
289     GBI::G_MWO_bLIGHT_3        = ucode##_MWO_bLIGHT_3; \
290     GBI::G_MWO_aLIGHT_4        = ucode##_MWO_aLIGHT_4; \
291     GBI::G_MWO_bLIGHT_4        = ucode##_MWO_bLIGHT_4; \
292     GBI::G_MWO_aLIGHT_5        = ucode##_MWO_aLIGHT_5; \
293     GBI::G_MWO_bLIGHT_5        = ucode##_MWO_bLIGHT_5; \
294     GBI::G_MWO_aLIGHT_6        = ucode##_MWO_aLIGHT_6; \
295     GBI::G_MWO_bLIGHT_6        = ucode##_MWO_bLIGHT_6; \
296     GBI::G_MWO_aLIGHT_7        = ucode##_MWO_aLIGHT_7; \
297     GBI::G_MWO_bLIGHT_7        = ucode##_MWO_bLIGHT_7; \
298     GBI::G_MWO_aLIGHT_8        = ucode##_MWO_aLIGHT_8; \
299     GBI::G_MWO_bLIGHT_8        = ucode##_MWO_bLIGHT_8; \
300     */
301
302
303 // Fixed point conversion factors
304 #define FIXED2FLOATRECIP1    0.5f
305 #define FIXED2FLOATRECIP2    0.25f
306 #define FIXED2FLOATRECIP3    0.125f
307 #define FIXED2FLOATRECIP4    0.0625f
308 #define FIXED2FLOATRECIP5    0.03125f
309 #define FIXED2FLOATRECIP6    0.015625f
310 #define FIXED2FLOATRECIP7    0.0078125f
311 #define FIXED2FLOATRECIP8    0.00390625f
312 #define FIXED2FLOATRECIP9    0.001953125f
313 #define FIXED2FLOATRECIP10   0.0009765625f
314 #define FIXED2FLOATRECIP11   0.00048828125f
315 #define FIXED2FLOATRECIP12   0.00024414063f
316 #define FIXED2FLOATRECIP13   0.00012207031f
317 #define FIXED2FLOATRECIP14   6.1035156e-05f
318 #define FIXED2FLOATRECIP15   3.0517578e-05f
319 #define FIXED2FLOATRECIP16   1.5258789e-05f
320
321 #define _FIXED2FLOAT( v, b ) ((float)v * FIXED2FLOATRECIP##b)
322
323 #endif