1 /******************************************************************************
2 * Arachnoid Graphics Plugin for Mupen64Plus
3 * http://bitbucket.org/wahrhaft/mupen64plus-video-arachnoid/
5 * Copyright (C) 2007 Kristofer Karlsson, Rickard Niklasson
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.
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.
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 *****************************************************************************/
22 #ifndef GBI_DEFINITIONS_H_
23 #define GBI_DEFINITIONS_H_
28 //TODO Write comments for each group
32 // These GBI commands are common to all ucodes
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 */
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 */
75 #define G_MV_MATRIX 14
77 #define G_MW_MATRIX 0x00
78 #define G_MW_NUMLIGHT 0x02
79 #define G_MW_CLIP 0x04
80 #define G_MW_SEGMENT 0x06
82 #define G_MW_LIGHTCOL 0x0A
83 #define G_MW_FORCEMTX 0x0C
84 #define G_MW_POINTS 0x0C
85 #define G_MW_PERSPNORM 0x0E
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
93 #define G_MV_LOOKATY 0x82
94 #define G_MV_LOOKATX 0x84
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
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
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
125 #define G_TX_MIRROR 0x1
126 #define G_TX_CLAMP 0x2
131 #define G_DL_PUSH 0x00
132 #define G_DL_NOPUSH 0x01
150 * G_SETOTHERMODE_L sft: shift count
152 #define G_MDSFT_ALPHACOMPARE 0
153 #define G_MDSFT_ZSRCSEL 2
154 #define G_MDSFT_RENDERMODE 3
155 #define G_MDSFT_BLENDER 16
158 * G_SETOTHERMODE_H sft: shift count
160 #define G_MDSFT_BLENDMASK 0 /* unsupported */
161 #define G_MDSFT_ALPHADITHER 4
162 #define G_MDSFT_RGBDITHER 6
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
175 /* G_SETOTHERMODE_H gPipelineMode */
176 #define G_PM_1PRIMITIVE 1
177 #define G_PM_NPRIMITIVE 0
179 //G_SETOTHERMODE_H gSetCycleType
187 /* G_SETOTHERMODE_H gSetTexturePersp */
191 /* G_SETOTHERMODE_H gSetTextureDetail */
193 #define G_TD_SHARPEN 1
194 #define G_TD_DETAIL 2
196 /* G_SETOTHERMODE_H gSetTextureLOD */
200 /* G_SETOTHERMODE_H gSetTextureLUT */
202 #define G_TT_RGBA16 2
205 /* G_SETOTHERMODE_H gSetTextureFilter */
207 #define G_TF_AVERAGE 3
208 #define G_TF_BILERP 2
210 /* G_SETOTHERMODE_H gSetTextureConvert */
212 #define G_TC_FILTCONV 5
215 /* G_SETOTHERMODE_H gSetCombineKey */
219 /* G_SETOTHERMODE_H gSetColorDither */
220 #define G_CD_MAGICSQ 0
224 #define G_CD_DISABLE 3
225 #define G_CD_ENABLE G_CD_NOISE /* HW 1.0 compatibility mode */
227 /* G_SETOTHERMODE_H gSetAlphaDither */
228 #define G_AD_PATTERN 0
229 #define G_AD_NOTPATTERN 1
231 #define G_AD_DISABLE 3
233 /* G_SETOTHERMODE_L gSetAlphaCompare */
235 #define G_AC_THRESHOLD 1
236 #define G_AC_DITHER 3
238 /* G_SETOTHERMODE_L gSetDepthSource */
242 /* G_SETOTHERMODE_L gSetRenderMode */
248 #define CVG_DST_CLAMP 0
249 #define CVG_DST_WRAP 1
250 #define CVG_DST_FULL 2
251 #define CVG_DST_SAVE 3
253 #define ZMODE_INTER 1
256 #define CVG_X_ALPHA 1
257 #define ALPHA_CVG_SEL 1
259 #define TEX_EDGE 0 // not used
261 #define G_SC_NON_INTERLACE 0
262 #define G_SC_EVEN_INTERLACE 2
263 #define G_SC_ODD_INTERLACE 3
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; \
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; \
282 GBI::G_MV_VIEWPORT = ucode##_MV_VIEWPORT; \
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; \
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
321 #define _FIXED2FLOAT( v, b ) ((float)v * FIXED2FLOATRECIP##b)