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
CommitLineData
22726e4d 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
134enum TextureMode
135{
136 TM_NORMAL = 0,
137 TM_TEXRECT = 1,
138 TM_BGIMAGE = 2,
139 TM_FRAMEBUFFER = 3,
140};
141
142
143enum 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
180enum 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