/********************************************************************************
	gex.h: Ultra 64 MARIO Brothers include file

	Copyright (c) 1995 Nintendo co., ltd.  All rights reserved

	Sept 25  1995
 ********************************************************************************/

#ifndef GEX_H
#define	GEX_H


/********************************************************************************/
/*	gsDPLoadTextureBlock() without gsDPSetTextureImage()						*/
/********************************************************************************/

#define	gsxDPLoadTextureImage(fmt, siz, width, height,		\
		pal, cms, cmt, masks, maskt, shifts, shiftt)		\
									\
	gsDPSetTile(fmt, siz, 0, 0, G_TX_LOADTILE, 0 , cmt, maskt,	\
		shiftt, cms, masks, shifts),				\
	gsDPLoadSync(),							\
	gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (width)*(height)-1,		\
				 	CALC_DXT(width, siz##_BYTES)),					\
	gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0,	\
		G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,	\
		shifts),						\
	gsDPSetTileSize(G_TX_RENDERTILE, 0, 0,				\
		((width)-1) << G_TEXTURE_IMAGE_FRAC,			\
		((height)-1) << G_TEXTURE_IMAGE_FRAC)


/********************************************************************************/
/*	Static display-list to load texture image made by Tanimoto.					*/
/********************************************************************************/

#define	g_Tani_LoadTextureImage(gfxptr, timg, fmt, siz, width, height,	tmem, ttdn)		\
																						\
	gDPSetTextureImage(gfxptr, fmt, siz, 1, timg);										\
	gDPTileSync(gfxptr);																\
	gDPSetTile(gfxptr, fmt, siz, 0, tmem, ttdn, 0,  0,0,0, 0,0,0);						\
	gDPLoadSync(gfxptr);																\
	gDPLoadBlock(gfxptr, ttdn, 0, 0, ((width)*(height)-1),								\
				  CALC_DXT(width, siz##_BYTES) )


#define	gs_Tani_LoadTextureImage(timg, fmt, siz, width, height,	tmem, ttdn)			\
																					\
	gsDPSetTextureImage(fmt, siz, 1, timg),											\
	gsDPTileSync(),																	\
	gsDPSetTile(fmt, siz, 0, tmem, ttdn, 0,  0,0,0, 0,0,0),							\
	gsDPLoadSync(),																	\
	gsDPLoadBlock(ttdn, 0, 0, ((width)*(height)-1),									\
				  CALC_DXT(width, siz##_BYTES) )

/********************************************************************************/
/*	Static display-list to load texture image Ver.2 made by Tanimoto.			*/
/********************************************************************************/

#define	g_Tani_LoadTextureImage2(gfxptr, timg, fmt, siz, width, height,	tmem, ttdn)		\
																						\
	gDPSetTextureImage(gfxptr, fmt, siz, 1, timg);										\
	gDPLoadSync(gfxptr);																\
	gDPLoadBlock(gfxptr, ttdn, 0, 0, ((width)*(height)-1),								\
				  CALC_DXT(width, siz##_BYTES) )


#define	gs_Tani_LoadTextureImage2(timg, fmt, siz, width, height, tmem, ttdn)		\
																					\
	gsDPSetTextureImage(fmt, siz, 1, timg),											\
	gsDPLoadSync(),																	\
	gsDPLoadBlock(ttdn, 0, 0, ((width)*(height)-1),									\
				  CALC_DXT(width, siz##_BYTES) )


/********************************************************************************/
/*	Static display-list to set up Texture Tile Descriptor made by Tanimoto.		*/
/********************************************************************************/

#define	g_Tani_SetUpTileDescrip(gfxptr, fmt, siz, width, height, tmem, ttdn, 		\
							 cms, masks, shifts, cmt, maskt, shiftt)				\
																					\
	gDPTileSync(gfxptr);															\
	gDPSetTile(gfxptr, fmt, siz, ((((width)*siz##_LINE_BYTES)+7)>>3), tmem,			\
				ttdn, 0, (cmt), (maskt), (shiftt), (cms), (masks), (shifts));		\
	gDPSetTileSize(gfxptr, ttdn, 0, 0,												\
					(((width) -1) << G_TEXTURE_IMAGE_FRAC),							\
					(((height)-1) << G_TEXTURE_IMAGE_FRAC) )


#define	gs_Tani_SetUpTileDescrip(fmt, siz, width, height, tmem, ttdn, 				\
							 	 cms, masks, shifts, cmt, maskt, shiftt)			\
																					\
	gsDPTileSync(),																	\
	gsDPSetTile(fmt, siz, ((((width)*siz##_LINE_BYTES)+7)>>3), tmem,				\
				ttdn, 0, (cmt), (maskt), (shiftt), (cms), (masks), (shifts)),		\
	gsDPSetTileSize(ttdn, 0, 0,														\
					(((width) -1) << G_TEXTURE_IMAGE_FRAC),							\
					(((height)-1) << G_TEXTURE_IMAGE_FRAC) )


#endif
