Rice GLES2 (from mupen64plus-ae) plugin. Compile but doesn't works well on the OpenPa...
[mupen64plus-pandora.git] / source / gles2rice / src / RSP_Parser.h
CommitLineData
292f9317 1/*
2Copyright (C) 2003 Rice1964
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program; if not, write to the Free Software
16Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18*/
19
20
21#ifndef __RICE_RDP_GFX_H__
22#define __RICE_RDP_GFX_H__
23
24#define RSP_SPNOOP 0 // handle 0 gracefully
25#define RSP_MTX 1
26#define RSP_RESERVED0 2 // unknown
27#define RSP_MOVEMEM 3 // move a block of memory (up to 4 words) to dmem
28#define RSP_VTX 4
29#define RSP_RESERVED1 5 // unknown
30#define RSP_DL 6
31#define RSP_RESERVED2 7 // unknown
32#define RSP_RESERVED3 8 // unknown
33#define RSP_SPRITE2D 9 // sprite command
34#define RSP_SPRITE2D_BASE 9 // sprite command
35
36
37#define RSP_1ST 0xBF
38#define RSP_TRI1 (RSP_1ST-0)
39#define RSP_CULLDL (RSP_1ST-1)
40#define RSP_POPMTX (RSP_1ST-2)
41#define RSP_MOVEWORD (RSP_1ST-3)
42#define RSP_TEXTURE (RSP_1ST-4)
43#define RSP_SETOTHERMODE_H (RSP_1ST-5)
44#define RSP_SETOTHERMODE_L (RSP_1ST-6)
45#define RSP_ENDDL (RSP_1ST-7)
46#define RSP_SETGEOMETRYMODE (RSP_1ST-8)
47#define RSP_CLEARGEOMETRYMODE (RSP_1ST-9)
48#define RSP_LINE3D (RSP_1ST-10)
49#define RSP_RDPHALF_1 (RSP_1ST-11)
50#define RSP_RDPHALF_2 (RSP_1ST-12)
51#define RSP_RDPHALF_CONT (RSP_1ST-13)
52
53#define RSP_MODIFYVTX (RSP_1ST-13)
54#define RSP_TRI2 (RSP_1ST-14)
55#define RSP_BRANCH_Z (RSP_1ST-15)
56#define RSP_LOAD_UCODE (RSP_1ST-16)
57
58#define RSP_SPRITE2D_SCALEFLIP (RSP_1ST-1)
59#define RSP_SPRITE2D_DRAW (RSP_1ST-2)
60
61#define RSP_ZELDAVTX 1
62#define RSP_ZELDAMODIFYVTX 2
63#define RSP_ZELDACULLDL 3
64#define RSP_ZELDABRANCHZ 4
65#define RSP_ZELDATRI1 5
66#define RSP_ZELDATRI2 6
67#define RSP_ZELDALINE3D 7
68#define RSP_ZELDARDPHALF_2 0xf1
69#define RSP_ZELDASETOTHERMODE_H 0xe3
70#define RSP_ZELDASETOTHERMODE_L 0xe2
71#define RSP_ZELDARDPHALF_1 0xe1
72#define RSP_ZELDASPNOOP 0xe0
73#define RSP_ZELDAENDDL 0xdf
74#define RSP_ZELDADL 0xde
75#define RSP_ZELDALOAD_UCODE 0xdd
76#define RSP_ZELDAMOVEMEM 0xdc
77#define RSP_ZELDAMOVEWORD 0xdb
78#define RSP_ZELDAMTX 0xda
79#define RSP_ZELDAGEOMETRYMODE 0xd9
80#define RSP_ZELDAPOPMTX 0xd8
81#define RSP_ZELDATEXTURE 0xd7
82#define RSP_ZELDASUBMODULE 0xd6
83
84// 4 is something like a conditional DL
85#define RSP_DMATRI 0x05
86#define G_DLINMEM 0x07
87
88// RDP commands:
89#define RDP_NOOP 0xc0
90#define RDP_SETCIMG 0xff
91#define RDP_SETZIMG 0xfe
92#define RDP_SETTIMG 0xfd
93#define RDP_SETCOMBINE 0xfc
94#define RDP_SETENVCOLOR 0xfb
95#define RDP_SETPRIMCOLOR 0xfa
96#define RDP_SETBLENDCOLOR 0xf9
97#define RDP_SETFOGCOLOR 0xf8
98#define RDP_SETFILLCOLOR 0xf7
99#define RDP_FILLRECT 0xf6
100#define RDP_SETTILE 0xf5
101#define RDP_LOADTILE 0xf4
102#define RDP_LOADBLOCK 0xf3
103#define RDP_SETTILESIZE 0xf2
104#define RDP_LOADTLUT 0xf0
105#define RDP_RDPSETOTHERMODE 0xef
106#define RDP_SETPRIMDEPTH 0xee
107#define RDP_SETSCISSOR 0xed
108#define RDP_SETCONVERT 0xec
109#define RDP_SETKEYR 0xeb
110#define RDP_SETKEYGB 0xea
111#define RDP_FULLSYNC 0xe9
112#define RDP_TILESYNC 0xe8
113#define RDP_PIPESYNC 0xe7
114#define RDP_LOADSYNC 0xe6
115#define RDP_TEXRECT_FLIP 0xe5
116#define RDP_TEXRECT 0xe4
117
118
119
120
121#define RSP_ZELDA_MTX_MODELVIEW 0x00
122#define RSP_ZELDA_MTX_PROJECTION 0x04
123#define RSP_ZELDA_MTX_MUL 0x00
124#define RSP_ZELDA_MTX_LOAD 0x02
125#define RSP_ZELDA_MTX_PUSH 0x00
126#define RSP_ZELDA_MTX_NOPUSH 0x01
127
128
129
130//
131// RSP_SETOTHERMODE_L sft: shift count
132
133#define RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE 0
134#define RSP_SETOTHERMODE_SHIFT_ZSRCSEL 2
135#define RSP_SETOTHERMODE_SHIFT_RENDERMODE 3
136#define RSP_SETOTHERMODE_SHIFT_BLENDER 16
137
138//
139// RSP_SETOTHERMODE_H sft: shift count
140
141#define RSP_SETOTHERMODE_SHIFT_BLENDMASK 0 // unsupported
142#define RSP_SETOTHERMODE_SHIFT_ALPHADITHER 4
143#define RSP_SETOTHERMODE_SHIFT_RGBDITHER 6
144
145#define RSP_SETOTHERMODE_SHIFT_COMBKEY 8
146#define RSP_SETOTHERMODE_SHIFT_TEXTCONV 9
147#define RSP_SETOTHERMODE_SHIFT_TEXTFILT 12
148#define RSP_SETOTHERMODE_SHIFT_TEXTLUT 14
149#define RSP_SETOTHERMODE_SHIFT_TEXTLOD 16
150#define RSP_SETOTHERMODE_SHIFT_TEXTDETAIL 17
151#define RSP_SETOTHERMODE_SHIFT_TEXTPERSP 19
152#define RSP_SETOTHERMODE_SHIFT_CYCLETYPE 20
153#define RSP_SETOTHERMODE_SHIFT_COLORDITHER 22 // unsupported in HW 2.0
154#define RSP_SETOTHERMODE_SHIFT_PIPELINE 23
155
156// RSP_SETOTHERMODE_H gPipelineMode
157#define RSP_PIPELINE_MODE_1PRIMITIVE (1 << RSP_SETOTHERMODE_SHIFT_PIPELINE)
158#define RSP_PIPELINE_MODE_NPRIMITIVE (0 << RSP_SETOTHERMODE_SHIFT_PIPELINE)
159
160// RSP_SETOTHERMODE_H gSetCycleType
161#define CYCLE_TYPE_1 0
162#define CYCLE_TYPE_2 1
163#define CYCLE_TYPE_COPY 2
164#define CYCLE_TYPE_FILL 3
165
166// RSP_SETOTHERMODE_H gSetTextureLUT
167#define TLUT_FMT_NONE (0 << RSP_SETOTHERMODE_SHIFT_TEXTLUT)
168#define TLUT_FMT_UNKNOWN (1 << RSP_SETOTHERMODE_SHIFT_TEXTLUT)
169#define TLUT_FMT_RGBA16 (2 << RSP_SETOTHERMODE_SHIFT_TEXTLUT)
170#define TLUT_FMT_IA16 (3 << RSP_SETOTHERMODE_SHIFT_TEXTLUT)
171
172// RSP_SETOTHERMODE_H gSetTextureFilter
173#define RDP_TFILTER_POINT (0 << RSP_SETOTHERMODE_SHIFT_TEXTFILT)
174#define RDP_TFILTER_AVERAGE (3 << RSP_SETOTHERMODE_SHIFT_TEXTFILT)
175#define RDP_TFILTER_BILERP (2 << RSP_SETOTHERMODE_SHIFT_TEXTFILT)
176
177// RSP_SETOTHERMODE_L gSetAlphaCompare
178#define RDP_ALPHA_COMPARE_NONE (0 << RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE)
179#define RDP_ALPHA_COMPARE_THRESHOLD (1 << RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE)
180#define RDP_ALPHA_COMPARE_DITHER (3 << RSP_SETOTHERMODE_SHIFT_ALPHACOMPARE)
181
182// RSP_SETOTHERMODE_L gSetRenderMode
183#define Z_COMPARE 0x0010
184#define Z_UPDATE 0x0020
185#define ZMODE_DEC 0x0c00
186
187
188//
189// flags for RSP_SETGEOMETRYMODE
190//
191#define G_ZBUFFER 0x00000001
192#define G_TEXTURE_ENABLE 0x00000002 // Microcode use only
193#define G_SHADE 0x00000004 // enable Gouraud interp
194//
195#define G_SHADING_SMOOTH 0x00000200 // flat or smooth shaded
196#define G_CULL_FRONT 0x00001000
197#define G_CULL_BACK 0x00002000
198#define G_CULL_BOTH 0x00003000 // To make code cleaner
199#define G_FOG 0x00010000
200#define G_LIGHTING 0x00020000
201#define G_TEXTURE_GEN 0x00040000
202#define G_TEXTURE_GEN_LINEAR 0x00080000
203#define G_LOD 0x00100000 // NOT IMPLEMENTED
204
205//
206// G_SETIMG fmt: set image formats
207//
208#define TXT_FMT_RGBA 0
209#define TXT_FMT_YUV 1
210#define TXT_FMT_CI 2
211#define TXT_FMT_IA 3
212#define TXT_FMT_I 4
213
214//
215// G_SETIMG siz: set image pixel size
216//
217#define TXT_SIZE_4b 0
218#define TXT_SIZE_8b 1
219#define TXT_SIZE_16b 2
220#define TXT_SIZE_32b 3
221
222//
223// Texturing macros
224//
225
226#define RDP_TXT_LOADTILE 7
227#define RDP_TXT_RENDERTILE 0
228
229#define RDP_TXT_NOMIRROR 0
230#define RDP_TXT_WRAP 0
231#define RDP_TXT_MIRROR 0x1
232#define RDP_TXT_CLAMP 0x2
233#define RDP_TXT_NOMASK 0
234#define RDP_TXT_NOLOD 0
235
236
237
238//
239// MOVEMEM indices
240//
241// Each of these indexes an entry in a dmem table
242// which points to a 1-4 word block of dmem in
243// which to store a 1-4 word DMA.
244//
245//
246#define RSP_GBI1_MV_MEM_VIEWPORT 0x80
247#define RSP_GBI1_MV_MEM_LOOKATY 0x82
248#define RSP_GBI1_MV_MEM_LOOKATX 0x84
249#define RSP_GBI1_MV_MEM_L0 0x86
250#define RSP_GBI1_MV_MEM_L1 0x88
251#define RSP_GBI1_MV_MEM_L2 0x8a
252#define RSP_GBI1_MV_MEM_L3 0x8c
253#define RSP_GBI1_MV_MEM_L4 0x8e
254#define RSP_GBI1_MV_MEM_L5 0x90
255#define RSP_GBI1_MV_MEM_L6 0x92
256#define RSP_GBI1_MV_MEM_L7 0x94
257#define RSP_GBI1_MV_MEM_TXTATT 0x96
258#define RSP_GBI1_MV_MEM_MATRIX_1 0x9e // NOTE: this is in moveword table
259#define RSP_GBI1_MV_MEM_MATRIX_2 0x98
260#define RSP_GBI1_MV_MEM_MATRIX_3 0x9a
261#define RSP_GBI1_MV_MEM_MATRIX_4 0x9c
262
263# define RSP_GBI2_MV_MEM__VIEWPORT 8
264# define RSP_GBI2_MV_MEM__LIGHT 10
265# define RSP_GBI2_MV_MEM__POINT 12
266# define RSP_GBI2_MV_MEM__MATRIX 14 /* NOTE: this is in moveword table */
267# define RSP_GBI2_MV_MEM_O_LOOKATX (0*24)
268# define RSP_GBI2_MV_MEM_O_LOOKATY (1*24)
269# define RSP_GBI2_MV_MEM_O_L0 (2*24)
270# define RSP_GBI2_MV_MEM_O_L1 (3*24)
271# define RSP_GBI2_MV_MEM_O_L2 (4*24)
272# define RSP_GBI2_MV_MEM_O_L3 (5*24)
273# define RSP_GBI2_MV_MEM_O_L4 (6*24)
274# define RSP_GBI2_MV_MEM_O_L5 (7*24)
275# define RSP_GBI2_MV_MEM_O_L6 (8*24)
276# define RSP_GBI2_MV_MEM_O_L7 (9*24)
277
278
279//
280// MOVEWORD indices
281//
282// Each of these indexes an entry in a dmem table
283// which points to a word in dmem in dmem where
284// an immediate word will be stored.
285//
286//
287#define RSP_MOVE_WORD_MATRIX 0x00 // NOTE: also used by movemem
288#define RSP_MOVE_WORD_NUMLIGHT 0x02
289#define RSP_MOVE_WORD_CLIP 0x04
290#define RSP_MOVE_WORD_SEGMENT 0x06
291#define RSP_MOVE_WORD_FOG 0x08
292#define RSP_MOVE_WORD_LIGHTCOL 0x0a
293#define RSP_MOVE_WORD_POINTS 0x0c
294#define RSP_MOVE_WORD_PERSPNORM 0x0e
295
296//
297// These are offsets from the address in the dmem table
298//
299#define RSP_MV_WORD_OFFSET_NUMLIGHT 0x00
300#define RSP_MV_WORD_OFFSET_CLIP_RNX 0x04
301#define RSP_MV_WORD_OFFSET_CLIP_RNY 0x0c
302#define RSP_MV_WORD_OFFSET_CLIP_RPX 0x14
303#define RSP_MV_WORD_OFFSET_CLIP_RPY 0x1c
304#define RSP_MV_WORD_OFFSET_FOG 0x00
305#define RSP_MV_WORD_OFFSET_POINT_RGBA 0x10
306#define RSP_MV_WORD_OFFSET_POINT_ST 0x14
307#define RSP_MV_WORD_OFFSET_POINT_XYSCREEN 0x18
308#define RSP_MV_WORD_OFFSET_POINT_ZSCREEN 0x1c
309
310
311
312// flags to inhibit pushing of the display list (on branch)
313#define RSP_DLIST_PUSH 0x00
314#define RSP_DLIST_NOPUSH 0x01
315
316
317//
318// RSP_MTX: parameter flags
319//
320#define RSP_MATRIX_MODELVIEW 0x00
321#define RSP_MATRIX_PROJECTION 0x01
322
323#define RSP_MATRIX_MUL 0x00
324#define RSP_MATRIX_LOAD 0x02
325
326#define RSP_MATRIX_NOPUSH 0x00
327#define RSP_MATRIX_PUSH 0x04
328
329
330
331typedef struct
332{
333 uint32 type;
334 uint32 flags;
335
336 uint32 ucode_boot;
337 uint32 ucode_boot_size;
338
339 uint32 ucode;
340 uint32 ucode_size;
341
342 uint32 ucode_data;
343 uint32 ucode_data_size;
344
345 uint32 dram_stack;
346 uint32 dram_stack_size;
347
348 uint32 output_buff;
349 uint32 output_buff_size;
350
351 uint32 data_ptr;
352 uint32 data_size;
353
354 uint32 yield_data_ptr;
355 uint32 yield_data_size;
356} OSTask_t;
357
358typedef union {
359 OSTask_t t;
360 uint64 force_structure_alignment;
361} OSTask;
362
363#define MAX_DL_STACK_SIZE 32
364#define MAX_DL_COUNT 1000000
365
366typedef struct {
367 bool used;
368 uint32 crc_size;
369 uint32 crc_800;
370 uint32 ucode;
371 uint32 minor_ver;
372 uint32 variant;
373 char rspstr[200];
374
375 uint32 ucStart;
376 uint32 ucSize;
377 uint32 ucDStart;
378 uint32 ucDSize;
379 uint32 ucCRC;
380 uint32 ucDWORD1;
381 uint32 ucDWORD2;
382 uint32 ucDWORD3;
383 uint32 ucDWORD4;
384} UcodeInfo;
385
386
387typedef struct
388{
389 uint32 ucode;
390 uint32 crc_size;
391 uint32 crc_800;
392 const unsigned char * ucode_name;
393 bool non_nearclip;
394 bool reject;
395} UcodeData;
396
397struct TileDescriptor
398{
399 // Set by SetTile
400 unsigned int dwFormat :3; // e.g. RGBA, YUV etc
401 unsigned int dwSize :2; // e.g 4/8/16/32bpp
402 unsigned int dwLine :9; // Ummm...
403 unsigned int dwPalette :4; // 0..15 - a palette index?
404 uint32 dwTMem; // Texture memory location
405
406 unsigned int bClampS :1;
407 unsigned int bClampT :1;
408 unsigned int bMirrorS :1;
409 unsigned int bMirrorT :1;
410
411 unsigned int dwMaskS :4;
412 unsigned int dwMaskT :4;
413 unsigned int dwShiftS :4;
414 unsigned int dwShiftT :4;
415
416 // Set by SetTileSize
417 unsigned int sl :10; // Upper left S - 8:3
418 unsigned int tl :10; // Upper Left T - 8:3
419 unsigned int sh :10; // Lower Right S
420 unsigned int th :10; // Lower Right T
421};
422
423enum LoadType
424{
425 BY_NEVER_SET,
426 BY_LOAD_BLOCK,
427 BY_LOAD_TILE,
428 BY_LOAD_TLUT,
429};
430
431struct LoadCmdInfo
432{
433 LoadType loadtype;
434 unsigned int sl :10; // Upper left S - 8:3
435 unsigned int tl :10; // Upper Left T - 8:3
436 unsigned int sh :10; // Lower Right S
437 unsigned int th :10; // Lower Right T
438 unsigned int dxt :12;
439};
440
441typedef struct { // This is in Intel format
442 uint32 SourceImagePointer;
443 uint32 TlutPointer;
444
445 short SubImageWidth;
446 short Stride;
447
448 char SourceImageBitSize;
449 char SourceImageType;
450 short SubImageHeight;
451
452 short SourceImageOffsetT;
453 short SourceImageOffsetS;
454
455 char dummy[4];
456} SpriteStruct; //Converted Sprint struct in Intel format
457
458typedef struct{
459 short px;
460 short py;
461 float scaleX;
462 float scaleY;
463 uint8 flipX;
464 uint8 flipY;
465 SpriteStruct *spritePtr;
466} Sprite2DInfo;
467
468
469typedef struct
470{
471 unsigned int c2_m2b:2;
472 unsigned int c1_m2b:2;
473 unsigned int c2_m2a:2;
474 unsigned int c1_m2a:2;
475 unsigned int c2_m1b:2;
476 unsigned int c1_m1b:2;
477 unsigned int c2_m1a:2;
478 unsigned int c1_m1a:2;
479} RDP_BlenderSetting;
480
481typedef struct
482{
483 union
484 {
485 struct
486 {
487 // Low bits
488 unsigned int alpha_compare : 2; // 0..1
489 unsigned int depth_source : 1; // 2..2
490
491 // unsigned int render_mode : 13; // 3..15
492 unsigned int aa_en : 1; // 3
493 unsigned int z_cmp : 1; // 4
494 unsigned int z_upd : 1; // 5
495 unsigned int im_rd : 1; // 6
496 unsigned int clr_on_cvg : 1; // 7
497
498 unsigned int cvg_dst : 2; // 8..9
499 unsigned int zmode : 2; // 10..11
500
501 unsigned int cvg_x_alpha : 1; // 12
502 unsigned int alpha_cvg_sel : 1; // 13
503 unsigned int force_bl : 1; // 14
504 unsigned int tex_edge : 1; // 15 - Not used
505
506 unsigned int blender : 16; // 16..31
507
508 // High bits
509 unsigned int blend_mask : 4; // 0..3 - not supported
510 unsigned int alpha_dither : 2; // 4..5
511 unsigned int rgb_dither : 2; // 6..7
512
513 unsigned int key_en : 1; // 8..8
514 unsigned int text_conv : 3; // 9..11
515 unsigned int text_filt : 2; // 12..13
516 unsigned int text_tlut : 2; // 14..15
517
518 unsigned int text_lod : 1; // 16..16
519 unsigned int text_sharpen : 1; // 17..18
520 unsigned int text_detail : 1; // 17..18
521 unsigned int text_persp : 1; // 19..19
522 unsigned int cycle_type : 2; // 20..21
523 unsigned int reserved : 1; // 22..22 - not supported
524 unsigned int atomic_prim : 1; // 23..23
525
526 unsigned int pad : 8; // 24..31 - padding
527
528 };
529 uint64 _u64;
530 uint32 _u32[2];
531 };
532} RDP_OtherMode;
533
534
535typedef enum
536{
537 CMD_SETTILE,
538 CMD_SETTILE_SIZE,
539 CMD_LOADBLOCK,
540 CMD_LOADTILE,
541 CMD_LOADTLUT,
542 CMD_SET_TEXTURE,
543 CMD_LOAD_OBJ_TXTR,
544} SetTileCmdType;
545
546
547// The display list PC stack. Before this was an array of 10
548// items, but this way we can nest as deeply as necessary.
549
550typedef struct
551{
552 uint32 pc;
553 int countdown;
554} DListStack;
555
556typedef struct
557{
558 int x0, y0, x1, y1, mode;
559 int left, top, right, bottom;
560} ScissorType;
561
562// Mask down to 0x003FFFFF?
563#define RSPSegmentAddr(seg) ( gRSP.segments[((seg)>>24)&0x0F] + ((seg)&0x00FFFFFF) )
564#define RDRAM_UWORD(addr) (*(uint32 *)((addr)+g_pRDRAMu8))
565#define RDRAM_SWORD(addr) (*(s32 *)((addr)+g_pRDRAMu8))
566#define RDRAM_UHALF(addr) (*(uint16 *)(((addr)^2)+g_pRDRAMu8))
567#define RDRAM_SHALF(addr) (*(short *)(((addr)^2)+g_pRDRAMu8))
568#define RDRAM_UBYTE(addr) (*(uint8 *)(((addr)^3)+g_pRDRAMu8))
569#define RDRAM_SBYTE(addr) (*(s8 *)(((addr)^3)+g_pRDRAMu8))
570#define pRDRAM_UWORD(addr) ((uint32 *)((addr)+g_pRDRAMu8))
571#define pRDRAM_SWORD(addr) ((s32 *)((addr)+g_pRDRAMu8))
572#define pRDRAM_UHALF(addr) ((uint16 *)(((addr)^2)+g_pRDRAMu8))
573#define pRDRAM_SHALF(addr) ((short *)(((addr)^2)+g_pRDRAMu8))
574#define pRDRAM_UBYTE(addr) ((uint8 *)(((addr)^3)+g_pRDRAMu8))
575#define pRDRAM_SBYTE(addr) ((s8 *)(((addr)^3)+g_pRDRAMu8))
576
577extern uint16 g_wRDPTlut[];
578extern const char *textluttype[4];
579
580extern const char *pszImgFormat[8];
581extern const char *pszImgSize[4];
582extern uint8 pnImgSize[4];
583extern const char *textlutname[4];
584
585extern SetImgInfo g_CI;
586extern SetImgInfo g_ZI;
587extern SetImgInfo g_TI;
588extern TmemType g_Tmem;
589
590extern DListStack gDlistStack[MAX_DL_STACK_SIZE];
591
592extern int gDlistStackPointer;
593
594void DLParser_Init();
595void RDP_GFX_Reset();
596void RDP_Cleanup();
597void DLParser_Process(OSTask * pTask);
598void RDP_DLParser_Process(void);
599
600void PrepareTextures();
601void RDP_InitRenderState();
602void DisplayVertexInfo(uint32 dwAddr, uint32 dwV0, uint32 dwN);
603void RSP_MoveMemLight(uint32 dwLight, uint32 dwAddr);
604void RSP_MoveMemViewport(uint32 dwAddr);
605void RDP_NOIMPL_WARN(const char* op);
606void RSP_GFX_Force_Matrix(uint32 dwAddr);
607void RSP_GFX_InitGeometryMode();
608void RSP_SetUcode(int ucode, uint32 ucStart=0, uint32 ucDStart=0, uint32 cdSize=0);
609uint32 CalcalateCRC(uint32* srcPtr, uint32 srcSize);
610void RDP_GFX_PopDL();
611
612extern Matrix matToLoad;
613void LoadMatrix(uint32 addr);
614
615unsigned int ComputeCRC32(unsigned int crc, const uint8 *buf, unsigned int len);
616
617void TriggerDPInterrupt();
618void TriggerSPInterrupt();
619uint32 DLParser_CheckUcode(uint32 ucStart, uint32 ucDStart, uint32 ucSize, uint32 ucDSize);
620
621bool IsUsedAsDI(uint32 addr);
622
623#if defined(DEBUGGER)
624 void __cdecl LOG_UCODE(const char* szFormat, ...);
625#else
626 inline void LOG_UCODE(...) {}
627#endif
628
629#endif // __RICE_RDP_GFX_H__
630