2013-04-05 06:13:26 +00:00
|
|
|
#ifndef GSP_H
|
|
|
|
#define GSP_H
|
|
|
|
|
|
|
|
#include "Types.h"
|
|
|
|
#include "GBI.h"
|
|
|
|
#include "gDP.h"
|
|
|
|
|
|
|
|
#define CHANGED_VIEWPORT 0x01
|
|
|
|
#define CHANGED_MATRIX 0x02
|
2016-11-26 12:31:50 +00:00
|
|
|
#define CHANGED_TEXTURE 0x04
|
2013-04-05 06:13:26 +00:00
|
|
|
#define CHANGED_GEOMETRYMODE 0x08
|
2016-11-26 12:31:50 +00:00
|
|
|
#define CHANGED_FOGPOSITION 0x10
|
|
|
|
#define CHANGED_LIGHT 0x20
|
|
|
|
#define CHANGED_LOOKAT 0x40
|
2015-05-18 06:31:27 +00:00
|
|
|
#define CHANGED_TEXTURESCALE 0x80
|
2016-11-26 12:31:50 +00:00
|
|
|
#define CHANGED_HW_LIGHT 0x100
|
2014-03-21 08:14:59 +00:00
|
|
|
|
|
|
|
#define CLIP_X 0x03
|
|
|
|
#define CLIP_NEGX 0x01
|
|
|
|
#define CLIP_POSX 0x02
|
|
|
|
#define CLIP_Y 0x0C
|
|
|
|
#define CLIP_NEGY 0x04
|
|
|
|
#define CLIP_POSY 0x08
|
2016-06-06 15:35:26 +00:00
|
|
|
#define CLIP_W 0x10
|
|
|
|
#define CLIP_ALL 0x1F // CLIP_NEGX|CLIP_POSX|CLIP_NEGY|CLIP_POSY|CLIP_W
|
2014-03-21 08:14:59 +00:00
|
|
|
|
2016-03-19 08:02:49 +00:00
|
|
|
#define MODIFY_XY 0x000000FF
|
|
|
|
#define MODIFY_Z 0x0000FF00
|
|
|
|
#define MODIFY_ST 0x00FF0000
|
|
|
|
#define MODIFY_RGBA 0xFF000000
|
|
|
|
#define MODIFY_ALL 0xFFFFFFFF
|
|
|
|
|
2017-04-01 17:54:45 +00:00
|
|
|
enum Component { R, G, B };
|
|
|
|
enum Axis { X ,Y, Z, W };
|
|
|
|
|
2013-04-05 06:13:26 +00:00
|
|
|
struct SPVertex
|
|
|
|
{
|
2014-09-22 14:42:20 +00:00
|
|
|
f32 x, y, z, w;
|
|
|
|
f32 nx, ny, nz, __pad0;
|
|
|
|
f32 r, g, b, a;
|
2014-12-18 13:38:43 +00:00
|
|
|
f32 flat_r, flat_g, flat_b, flat_a;
|
2014-09-22 14:42:20 +00:00
|
|
|
f32 s, t;
|
2016-03-19 08:02:49 +00:00
|
|
|
u32 modify;
|
2014-03-21 08:14:59 +00:00
|
|
|
u8 HWLight;
|
2016-03-19 08:02:49 +00:00
|
|
|
u8 clip;
|
2014-09-22 14:42:20 +00:00
|
|
|
s16 flag;
|
2013-04-05 06:13:26 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct gSPInfo
|
|
|
|
{
|
|
|
|
u32 segment[16];
|
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
u32 modelViewi, stackSize, billboard;
|
|
|
|
f32 modelView[32][4][4];
|
|
|
|
f32 projection[4][4];
|
|
|
|
f32 combined[4][4];
|
|
|
|
} matrix;
|
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
f32 A, B, C, D;
|
|
|
|
f32 X, Y;
|
|
|
|
f32 baseScaleX, baseScaleY;
|
|
|
|
} objMatrix;
|
|
|
|
|
2014-10-24 11:21:06 +00:00
|
|
|
u32 objRendermode;
|
|
|
|
|
2013-04-05 06:13:26 +00:00
|
|
|
u32 vertexColorBase;
|
|
|
|
u32 vertexi;
|
|
|
|
|
2017-04-01 17:54:45 +00:00
|
|
|
struct
|
|
|
|
{
|
|
|
|
f32 rgb[12][3];
|
|
|
|
f32 xyz[12][3];
|
|
|
|
f32 i_xyz[12][3];
|
|
|
|
f32 pos_xyzw[12][4];
|
|
|
|
f32 ca[12], la[12], qa[12];
|
|
|
|
} lights;
|
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
f32 rgb[2][3];
|
|
|
|
f32 xyz[2][3];
|
|
|
|
f32 i_xyz[2][3];
|
|
|
|
f32 pos_xyzw[2][4];
|
|
|
|
f32 ca[2], la[2], qa[2];
|
|
|
|
} lookat;
|
|
|
|
|
2016-11-26 12:31:50 +00:00
|
|
|
s32 numLights;
|
2014-10-11 08:16:51 +00:00
|
|
|
bool lookatEnable;
|
2013-04-05 06:13:26 +00:00
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
f32 scales, scalet;
|
|
|
|
s32 level, on, tile;
|
2014-09-21 12:15:22 +00:00
|
|
|
} texture;
|
2013-04-05 06:13:26 +00:00
|
|
|
|
|
|
|
gDPTile *textureTile[2];
|
|
|
|
|
2017-06-16 08:36:07 +00:00
|
|
|
struct Viewport
|
2013-04-05 06:13:26 +00:00
|
|
|
{
|
|
|
|
f32 vscale[4];
|
|
|
|
f32 vtrans[4];
|
|
|
|
f32 x, y, width, height;
|
|
|
|
f32 nearz, farz;
|
|
|
|
} viewport;
|
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
s16 multiplier, offset;
|
2017-04-27 08:05:28 +00:00
|
|
|
f32 multiplierf, offsetf;
|
2013-04-05 06:13:26 +00:00
|
|
|
} fog;
|
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
u32 address, width, height, format, size, palette;
|
2013-06-09 11:49:34 +00:00
|
|
|
f32 imageX, imageY, scaleW, scaleH;
|
2013-04-05 06:13:26 +00:00
|
|
|
} bgImage;
|
|
|
|
|
|
|
|
u32 geometryMode;
|
|
|
|
u32 changed;
|
|
|
|
|
2016-11-17 09:39:16 +00:00
|
|
|
struct {
|
|
|
|
u8 sid;
|
|
|
|
u32 flag;
|
|
|
|
u32 addr;
|
|
|
|
} selectDL;
|
2013-04-05 06:13:26 +00:00
|
|
|
u32 status[4];
|
|
|
|
|
|
|
|
struct
|
|
|
|
{
|
2014-10-10 15:04:08 +00:00
|
|
|
u32 vtx, mtx, tex_offset, tex_shift, tex_count;
|
2013-04-05 06:13:26 +00:00
|
|
|
} DMAOffsets;
|
2014-10-16 10:49:32 +00:00
|
|
|
|
2017-09-06 10:12:28 +00:00
|
|
|
u32 DMAIO_address;
|
|
|
|
|
2014-10-16 10:49:32 +00:00
|
|
|
// CBFD
|
|
|
|
u32 vertexNormalBase;
|
|
|
|
f32 vertexCoordMod[16];
|
2017-07-07 10:57:07 +00:00
|
|
|
|
|
|
|
u32 textureCoordScaleOrg;
|
|
|
|
u32 textureCoordScale[2];
|
2013-04-05 06:13:26 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern gSPInfo gSP;
|
|
|
|
|
|
|
|
void gSPLoadUcodeEx( u32 uc_start, u32 uc_dstart, u16 uc_dsize );
|
|
|
|
void gSPNoOp();
|
|
|
|
void gSPMatrix( u32 matrix, u8 param );
|
|
|
|
void gSPDMAMatrix( u32 matrix, u8 index, u8 multiply );
|
|
|
|
void gSPViewport( u32 v );
|
|
|
|
void gSPForceMatrix( u32 mptr );
|
|
|
|
void gSPLight( u32 l, s32 n );
|
2014-10-16 10:49:32 +00:00
|
|
|
void gSPLightCBFD( u32 l, s32 n );
|
2014-10-11 08:16:51 +00:00
|
|
|
void gSPLookAt( u32 l, u32 n );
|
2017-06-26 07:53:42 +00:00
|
|
|
void gSPLightAcclaim(u32 l, s32 n);
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPVertex( u32 v, u32 n, u32 v0 );
|
|
|
|
void gSPCIVertex( u32 v, u32 n, u32 v0 );
|
|
|
|
void gSPDMAVertex( u32 v, u32 n, u32 v0 );
|
2014-10-16 10:49:32 +00:00
|
|
|
void gSPCBFDVertex( u32 v, u32 n, u32 v0 );
|
2017-06-16 06:23:00 +00:00
|
|
|
void gSPT3DUXVertex(u32 v, u32 n, u32 ci);
|
2017-07-07 10:57:07 +00:00
|
|
|
void gSPF3DAMVertex( u32 v, u32 n, u32 v0 );
|
2017-04-28 11:56:53 +00:00
|
|
|
void gSPSWVertex(const SWVertex * vertex, u32 n, u32 v0);
|
2017-06-16 06:23:00 +00:00
|
|
|
void gSPDisplayList(u32 dl);
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPBranchList( u32 dl );
|
2017-07-18 10:33:05 +00:00
|
|
|
void gSPBranchLessZ(u32 branchdl, u32 vtx, u32 zval);
|
2016-12-20 14:36:31 +00:00
|
|
|
void gSPBranchLessW( u32 branchdl, u32 vtx, u32 wval );
|
2014-10-06 16:01:45 +00:00
|
|
|
void gSPDlistCount(u32 count, u32 v);
|
2015-04-18 08:16:42 +00:00
|
|
|
void gSPSprite2DBase(u32 _base );
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPDMATriangles( u32 tris, u32 n );
|
2014-03-21 08:14:59 +00:00
|
|
|
void gSP1Quadrangle( s32 v0, s32 v1, s32 v2, s32 v3 );
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPCullDisplayList( u32 v0, u32 vn );
|
|
|
|
void gSPPopMatrix( u32 param );
|
|
|
|
void gSPPopMatrixN( u32 param, u32 num );
|
|
|
|
void gSPSegment( s32 seg, s32 base );
|
|
|
|
void gSPClipRatio( u32 r );
|
|
|
|
void gSPInsertMatrix( u32 where, u32 num );
|
2014-09-21 12:15:22 +00:00
|
|
|
void gSPModifyVertex(u32 _vtx, u32 _where, u32 _val );
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPNumLights( s32 n );
|
|
|
|
void gSPLightColor( u32 lightNum, u32 packedColor );
|
|
|
|
void gSPFogFactor( s16 fm, s16 fo );
|
|
|
|
void gSPPerspNormalize( u16 scale );
|
|
|
|
void gSPTexture( f32 sc, f32 tc, s32 level, s32 tile, s32 on );
|
|
|
|
void gSPEndDisplayList();
|
|
|
|
void gSPGeometryMode( u32 clear, u32 set );
|
|
|
|
void gSPSetGeometryMode( u32 mode );
|
|
|
|
void gSPClearGeometryMode( u32 mode );
|
2014-12-20 14:29:17 +00:00
|
|
|
void gSPSetOtherMode_H(u32 _length, u32 _shift, u32 _data);
|
|
|
|
void gSPSetOtherMode_L(u32 _length, u32 _shift, u32 _data);
|
|
|
|
void gSPLine3D(s32 v0, s32 v1, s32 flag);
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPLineW3D( s32 v0, s32 v1, s32 wd, s32 flag );
|
2016-11-17 09:34:23 +00:00
|
|
|
void gSPSetStatus(u32 sid, u32 val);
|
2015-04-18 08:16:42 +00:00
|
|
|
void gSPObjRectangle(u32 _sp );
|
|
|
|
void gSPObjRectangleR(u32 _sp);
|
|
|
|
void gSPObjSprite(u32 _sp);
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPObjLoadTxtr( u32 tx );
|
|
|
|
void gSPObjLoadTxSprite( u32 txsp );
|
2014-10-20 11:57:52 +00:00
|
|
|
void gSPObjLoadTxRect(u32 txsp);
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPObjLoadTxRectR( u32 txsp );
|
2015-04-18 08:16:42 +00:00
|
|
|
void gSPBgRect1Cyc(u32 _bg );
|
|
|
|
void gSPBgRectCopy(u32 _bg );
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPObjMatrix( u32 mtx );
|
|
|
|
void gSPObjSubMatrix( u32 mtx );
|
2014-10-24 11:21:06 +00:00
|
|
|
void gSPObjRendermode(u32 _mode);
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPSetDMAOffsets( u32 mtxoffset, u32 vtxoffset );
|
2014-10-10 15:04:08 +00:00
|
|
|
void gSPSetDMATexOffset(u32 _addr);
|
2013-04-05 06:13:26 +00:00
|
|
|
void gSPSetVertexColorBase( u32 base );
|
2014-10-16 10:49:32 +00:00
|
|
|
void gSPSetVertexNormaleBase( u32 base );
|
2014-03-21 08:14:59 +00:00
|
|
|
void gSPProcessVertex(u32 v);
|
2014-10-16 10:49:32 +00:00
|
|
|
void gSPCoordMod(u32 _w0, u32 _w1);
|
2017-09-12 04:41:27 +00:00
|
|
|
void gSPCombineMatrices(u32 _mode);
|
2014-03-21 08:14:59 +00:00
|
|
|
|
2014-10-30 04:23:50 +00:00
|
|
|
void gSPTriangle(s32 v0, s32 v1, s32 v2);
|
2014-03-21 08:14:59 +00:00
|
|
|
void gSP1Triangle(s32 v0, s32 v1, s32 v2);
|
|
|
|
void gSP2Triangles(const s32 v00, const s32 v01, const s32 v02, const s32 flag0,
|
2014-09-21 12:15:22 +00:00
|
|
|
const s32 v10, const s32 v11, const s32 v12, const s32 flag1 );
|
2014-03-21 08:14:59 +00:00
|
|
|
void gSP4Triangles(const s32 v00, const s32 v01, const s32 v02,
|
2014-09-21 12:15:22 +00:00
|
|
|
const s32 v10, const s32 v11, const s32 v12,
|
|
|
|
const s32 v20, const s32 v21, const s32 v22,
|
|
|
|
const s32 v30, const s32 v31, const s32 v32 );
|
2014-03-21 08:14:59 +00:00
|
|
|
|
2017-10-03 11:19:08 +00:00
|
|
|
void gSPLightVertex(SPVertex & _vtx);
|
|
|
|
|
|
|
|
extern void (*gSPTransformVector)(float vtx[4], float mtx[4][4]);
|
2017-09-16 15:13:51 +00:00
|
|
|
extern void (*gSPInverseTransformVector)(float vtx[4], float mtx[4][4]);
|
2014-10-16 10:49:32 +00:00
|
|
|
void gSPSetupFunctions();
|
2016-12-15 15:30:52 +00:00
|
|
|
void gSPFlushTriangles();
|
2013-04-05 06:13:26 +00:00
|
|
|
#endif
|