#ifndef WARP3D_GCCLIB_PROTOS_H
#define WARP3D_GCCLIB_PROTOS_H



#ifdef __PPC__

extern struct Library *Warp3DPPCBase;

#include <powerpc/warpup_macros.h>

/************************** Context functions ***********************************/
#define W3D_CreateContext(v1,v2)	PPCLP2	(Warp3DPPCBase,-30,W3D_Context *,	ULONG *,3,v1,struct TagItem *,4,v2)
#define W3D_CreateContextTags(v1, tags...) \
	({ULONG _tags[] = { tags }; W3D_CreateContext((v1), (struct TagItem *)_tags);})
#define W3D_DestroyContext(v1)		PPCLP1NR(Warp3DPPCBase,-36,			W3D_Context *,3,v1)
#define W3D_GetState(v1,v2)		PPCLP2	(Warp3DPPCBase,-42,ULONG,		W3D_Context *,3,v1,ULONG,4,v2)
#define W3D_SetState(v1,v2,v3)		PPCLP3	(Warp3DPPCBase,-48,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3)
#define W3D_Hint(v1,v2,v3)		PPCLP3	(Warp3DPPCBase,-294,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3)

/************************** Hardware/Driver functions ***************************/
#define W3D_CheckDriver()		PPCLP0	(Warp3DPPCBase,-54,ULONG		)
#define W3D_LockHardware(v1)		PPCLP1	(Warp3DPPCBase,-60,ULONG,		W3D_Context *,3,v1)
#define W3D_UnLockHardware(v1)		PPCLP1NR(Warp3DPPCBase,-66,			W3D_Context *,3,v1)
#define W3D_WaitIdle(v1)		PPCLP1NR(Warp3DPPCBase,-72,			W3D_Context *,3,v1)
#define W3D_CheckIdle(v1)		PPCLP1	(Warp3DPPCBase,-78,ULONG,		W3D_Context *,3,v1)
#define W3D_Query(v1,v2,v3)		PPCLP3	(Warp3DPPCBase,-84,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3)
#define W3D_GetTexFmtInfo(v1,v2,v3)	PPCLP3	(Warp3DPPCBase,-90,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3)
#define W3D_GetDriverState(v1)		PPCLP1	(Warp3DPPCBase,-306,ULONG,		W3D_Context *,3,v1)
#define W3D_GetDestFmt()		PPCLP0	(Warp3DPPCBase,-384,ULONG		)

/************************** Texture functions ***********************************/
#define W3D_AllocTexObj(v1,v2,v3)	PPCLP3	(Warp3DPPCBase,-96,W3D_Texture *,	W3D_Context *,3,v1,ULONG *,4,v2,struct TagItem *,5,v3)
#define W3D_AllocTexObjTags(v1, v2, tags...) \
	({ULONG _tags[] = { tags }; W3D_AllocTexObj((v1), (v2), (struct TagItem *)_tags);})
#define W3D_FreeTexObj(v1,v2)		PPCLP2NR(Warp3DPPCBase,-102,			W3D_Context *,3,v1,W3D_Texture *,4,v2)
#define W3D_ReleaseTexture(v1,v2)	PPCLP2NR(Warp3DPPCBase,-108,			W3D_Context *,3,v1,W3D_Texture *,4,v2)
#define W3D_FlushTextures(v1,v2)	PPCLP1NR(Warp3DPPCBase,-114,			W3D_Context *,3,v1)
#define W3D_SetFilter(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-120,ULONG,		W3D_Context *,3,v1,W3D_Texture *,4,v2,ULONG,5,v3,ULONG,6,v4)
#define W3D_SetTexEnv(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-126,ULONG,		W3D_Context *,3,v1,W3D_Texture *,4,v2,ULONG,5,v3,W3D_Color *,6,v4)
#define W3D_SetWrapMode(v1,v2,v3,v4,v5)	PPCLP5	(Warp3DPPCBase,-132,ULONG,		W3D_Context *,3,v1,W3D_Texture *,4,v2,ULONG,5,v3,ULONG,6,v4,W3D_Color *,7,v5)
#define W3D_UpdateTexImage(v1,v2,v3,v4,v5)PPCLP5(Warp3DPPCBase,-138,ULONG,		W3D_Context *,3,v1,W3D_Texture *,4,v2,void *,5,v3,ULONG,6,v4,ULONG *,7,v5)
#define W3D_UpdateTexSubImage(v1,v2,v3,v4,v5,v6,v7)	PPCLP7	(Warp3DPPCBase,-372,ULONG,		W3D_Context *,3,v1,W3D_Texture *,4,v2,void *,5,v3,ULONG,6,v4,ULONG *,7,v5,W3D_Scissor *,8,v6,ULONG,9,v7)
#define W3D_UploadTexture(v1,v2)	PPCLP2	(Warp3DPPCBase,-144,ULONG,		W3D_Context *,3,v1,W3D_Texture *,4,v2)
#define W3D_FreeAllTexObj(v1,v2)	PPCLP1	(Warp3DPPCBase,-378,ULONG,		W3D_Context *,3,v1)

/************************** Drawing functions ***********************************/
#define W3D_DrawLine(v1,v2)		PPCLP2	(Warp3DPPCBase,-150,ULONG,		W3D_Context *,3,v1,W3D_Line *,4,v2)
#define W3D_DrawPoint(v1,v2)		PPCLP2	(Warp3DPPCBase,-156,ULONG,		W3D_Context *,3,v1,W3D_Point *,4,v2)
#define W3D_DrawTriangle(v1,v2)		PPCLP2	(Warp3DPPCBase,-162,ULONG,		W3D_Context *,3,v1,W3D_Triangle *,4,v2)
#define W3D_DrawTriFan(v1,v2)		PPCLP2	(Warp3DPPCBase,-168,ULONG,		W3D_Context *,3,v1,W3D_Triangles *,4,v2)
#define W3D_DrawTriStrip(v1,v2)		PPCLP2	(Warp3DPPCBase,-174,ULONG,		W3D_Context *,3,v1,W3D_Triangles *,4,v2)
#define W3D_Flush(v1)			PPCLP1	(Warp3DPPCBase,-312,ULONG,		W3D_Context *,3,v1)

/************************** Effect functions ************************************/
#define W3D_SetAlphaMode(v1,v2,v3)	PPCLP3	(Warp3DPPCBase,-180,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,W3D_Float *,5,v3)
#define W3D_SetBlendMode(v1,v2,v3)	PPCLP3	(Warp3DPPCBase,-186,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3)
#define W3D_SetDrawRegion(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-192,ULONG,		W3D_Context *,3,v1,struct BitMap *,4,v2,int,5,v3,W3D_Scissor *,6,v4)
#define W3D_SetDrawRegionWBM(v1,v2,v3)	PPCLP3	(Warp3DPPCBase,-300,ULONG,		W3D_Context *,3,v1,W3D_Bitmap *,4,v2,W3D_Scissor *,5,v3)
#define W3D_SetFogParams(v1,v2,v3)	PPCLP3	(Warp3DPPCBase,-198,ULONG,		W3D_Context *,3,v1,W3D_Fog *,4,v2,ULONG,5,v3)
#define W3D_SetLogicOp(v1,v2)		PPCLP2	(Warp3DPPCBase,-288,ULONG,		W3D_Context *,3,v1,ULONG,4,v2)
#define W3D_SetColorMask(v1,v2,v3,v4,v5)	PPCLP5	(Warp3DPPCBase,-204,ULONG,		W3D_Context *,3,v1,W3D_Bool,4,v2,W3D_Bool,5,v3,W3D_Bool,6,v4,W3D_Bool,7,v5)
#define W3D_SetPenMask(v1,v2)		PPCLP2	(Warp3DPPCBase,-318,ULONG,		W3D_Context *,3,v1,ULONG,4,v2)
#define W3D_SetCurrentColor(v1,v2)	PPCLP2	(Warp3DPPCBase,-360,ULONG,		W3D_Context *,3,v1,W3D_Color *,4,v2)
#define W3D_SetCurrentPen(v1,v2)	PPCLP2	(Warp3DPPCBase,-366,ULONG,		W3D_Context *,3,v1,ULONG,4,v2)

/************************** ZBuffer functions ***********************************/
#define W3D_AllocZBuffer(v1)		PPCLP1	(Warp3DPPCBase,-216,ULONG,		W3D_Context *,3,v1)
#define W3D_FreeZBuffer(v1)		PPCLP1	(Warp3DPPCBase,-222,ULONG,		W3D_Context *,3,v1)
#define W3D_ClearZBuffer(v1,v2)		PPCLP2	(Warp3DPPCBase,-228,ULONG,		W3D_Context *,3,v1,W3D_Double *,4,v2)
#define W3D_ReadZPixel(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-234,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,W3D_Double *,6,v4)
#define W3D_ReadZSpan(v1,v2,v3,v4,v5)	PPCLP5	(Warp3DPPCBase,-240,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG,6,v4,W3D_Double *,7,v5)
#define W3D_SetZCompareMode(v1,v2)	PPCLP2	(Warp3DPPCBase,-246,ULONG,		W3D_Context *,3,v1,ULONG,4,v2)
#define W3D_WriteZPixel(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-348,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,W3D_Double *,6,v4)
#define W3D_WriteZSpan(v1,v2,v3,v4,v5,v6)	PPCLP6	(Warp3DPPCBase,-354,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG,6,v4,W3D_Double *,7,v5,UBYTE *,8,v6)

/************************** StencilBuffer functions *****************************/
#define W3D_AllocStencilBuffer(v1)	PPCLP1	(Warp3DPPCBase,-252,ULONG,		W3D_Context *,3,v1)
#define W3D_ClearStencilBuffer(v1,v2)	PPCLP2	(Warp3DPPCBase,-258,ULONG,		W3D_Context *,3,v1,ULONG *,4,v2)
#define W3D_FillStencilBuffer(v1,v2,v3,v4,v5,v6,v7)	PPCLP2	(Warp3DPPCBase,-264,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG,6,v4,ULONG,7,v5,ULONG,8,v6,void *,9,v7)
#define W3D_FreeStencilBuffer(v1)	PPCLP1	(Warp3DPPCBase,-270,ULONG,		W3D_Context *,3,v1)
#define W3D_ReadStencilPixel(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-276,ULONG,	W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG *,6,v4)
#define W3D_ReadStencilSpan(v1,v2,v3,v4,v5)	PPCLP5	(Warp3DPPCBase,-282,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG,6,v4,ULONG *,7,v5)
#define W3D_SetStencilFunc(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-210,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG,6,v4)
#define W3D_SetStencilOp(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-324,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG,6,v4)
#define W3D_SetWriteMask(v1,v2)		PPCLP2	(Warp3DPPCBase,-330,ULONG,		W3D_Context *,3,v1,ULONG,4,v2)
#define W3D_WriteStencilPixel(v1,v2,v3,v4)	PPCLP4	(Warp3DPPCBase,-336,ULONG,	W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG,6,v4)
#define W3D_WriteStencilSpan(v1,v2,v3,v4,v5,v6)	PPCLP6	(Warp3DPPCBase,-342,ULONG,		W3D_Context *,3,v1,ULONG,4,v2,ULONG,5,v3,ULONG,6,v4,ULONG *,7,v5,UBYTE *,8,v6)

#endif /* __PPC__ */

#endif /* POWERPC_GCCLIB_PROTOS_H */
