#ifndef RDPDUMP_H
#define RDPDUMP_H

#include <types.h>

// Format types
#define G_IM_FMT_RGBA		0		// RGBA, of course
#define G_IM_FMT_YUV		1		// YUV.. self-explanatory
#define G_IM_FMT_CI			2		// Color Index
#define G_IM_FMT_IA			3		// Intensity with alpha
#define G_IM_FMT_I			4		// Intensity only

// Size types
#define G_IM_SIZ_4b			0
#define G_IM_SIZ_8b			1
#define G_IM_SIZ_16b		2
#define G_IM_SIZ_32b		3


void InitRDP(void);
void DoRDPEmulation(void);

void RDP_Unknown(void);
void RDP_NoOp(void);

void RDP_TriFill(void);
void RDP_TriFillZBuf(void);
void RDP_TriTxtr(void);
void RDP_TriTxtrZBuf(void);
void RDP_TriShade(void);
void RDP_TriShadeZBuf(void);
void RDP_TriShadeTxtr(void);
void RDP_TriShadeTxtrZBuf(void);
void RDP_TexRect(void);
void RDP_TexRect_Continue(void);
void RDP_TexRectFlip(void);

void RDP_LoadSync(void);
void RDP_PipeSync(void);
void RDP_TileSync(void);
void RDP_FullSync(void);

void RDP_SetKeyGB(void);
void RDP_SetKeyR(void);
void RDP_SetConvert(void);
void RDP_SetScissor(void);
void RDP_SetPrimDepth(void);
void RDP_SetOtherMode(void);

void RDP_LoadTLUT(void);
void RDP_SetTileSize(void);
void RDP_LoadBlock(void);
void RDP_LoadTile(void);
void RDP_SetTile(void);
void RDP_FillRect(void);
void RDP_SetFillColor(void);
void RDP_SetFogColor(void);
void RDP_SetBlendColor(void);
void RDP_SetPrimColor(void);
void RDP_SetEnvColor(void);
void RDP_SetCombine(void);

void RDP_SetTImg(void);
void RDP_SetZImg(void);
void RDP_SetCImg(void);

void (*RDPCommandTable[64])(void) = {
    RDP_NoOp,        RDP_Unknown,       RDP_Unknown,      RDP_Unknown,     RDP_Unknown,    RDP_Unknown,      RDP_Unknown,      RDP_Unknown,
	RDP_TriFill,     RDP_TriFillZBuf,   RDP_TriTxtr,      RDP_TriTxtrZBuf, RDP_TriShade,   RDP_TriShadeZBuf, RDP_TriShadeTxtr, RDP_TriShadeTxtrZBuf,
	RDP_Unknown,     RDP_Unknown,       RDP_Unknown,      RDP_Unknown,     RDP_Unknown,    RDP_Unknown,      RDP_Unknown,      RDP_Unknown,
	RDP_Unknown,     RDP_Unknown,       RDP_Unknown,      RDP_Unknown,     RDP_Unknown,    RDP_Unknown,      RDP_Unknown,      RDP_Unknown,
	RDP_Unknown,     RDP_Unknown,       RDP_Unknown,      RDP_Unknown,     RDP_TexRect,    RDP_TexRectFlip,  RDP_LoadSync,     RDP_PipeSync,
	RDP_TileSync,    RDP_FullSync,      RDP_SetKeyGB,     RDP_SetKeyR,     RDP_SetConvert, RDP_SetScissor,   RDP_SetPrimDepth, RDP_SetOtherMode,
	RDP_LoadTLUT,    RDP_Unknown,       RDP_SetTileSize,  RDP_LoadBlock,   RDP_LoadTile,   RDP_SetTile,      RDP_FillRect,     RDP_SetFillColor,
	RDP_SetFogColor, RDP_SetBlendColor, RDP_SetPrimColor, RDP_SetEnvColor, RDP_SetCombine, RDP_SetTImg,      RDP_SetZImg,      RDP_SetCImg
};

#endif
