mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-13 22:06:22 -05:00
move g3imm to src
This commit is contained in:
@@ -1,42 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "include/g3imm.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start G3_LoadMtx44
|
||||
G3_LoadMtx44: ; 0x02077770
|
||||
ldr r1, _02077784 ; =0x04000400
|
||||
mov r2, #0x16
|
||||
ldr ip, _02077788 ; =GX_SendFifo64B
|
||||
str r2, [r1]
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_02077784: .word 0x04000400
|
||||
_02077788: .word GX_SendFifo64B
|
||||
arm_func_end G3_LoadMtx44
|
||||
|
||||
arm_func_start G3_LoadMtx43
|
||||
G3_LoadMtx43: ; 0x0207778C
|
||||
ldr r1, _020777A0 ; =0x04000400
|
||||
mov r2, #0x17
|
||||
ldr ip, _020777A4 ; =GX_SendFifo48B
|
||||
str r2, [r1]
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_020777A0: .word 0x04000400
|
||||
_020777A4: .word GX_SendFifo48B
|
||||
arm_func_end G3_LoadMtx43
|
||||
|
||||
arm_func_start G3_MultMtx43
|
||||
G3_MultMtx43: ; 0x020777A8
|
||||
ldr r1, _020777BC ; =0x04000400
|
||||
mov r2, #0x19
|
||||
ldr ip, _020777C0 ; =GX_SendFifo48B
|
||||
str r2, [r1]
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_020777BC: .word 0x04000400
|
||||
_020777C0: .word GX_SendFifo48B
|
||||
arm_func_end G3_MultMtx43
|
||||
|
||||
|
||||
62
lib/NitroSDK/src/gx/g3imm.c
Normal file
62
lib/NitroSDK/src/gx/g3imm.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#include <nitro.h>
|
||||
|
||||
void G3_LoadMtx44 (const MtxFx44 *m)
|
||||
{
|
||||
SDK_NULL_ASSERT(m);
|
||||
|
||||
reg_G3X_GXFIFO = G3OP_MTX_LOAD_4x4;
|
||||
GX_SendFifo64B(&m->_00, (void *)®_G3X_GXFIFO);
|
||||
}
|
||||
|
||||
void G3_LoadMtx43 (const MtxFx43 *m)
|
||||
{
|
||||
SDK_NULL_ASSERT(m);
|
||||
|
||||
reg_G3X_GXFIFO = G3OP_MTX_LOAD_4x3;
|
||||
GX_SendFifo48B(&m->_00, (void *)®_G3X_GXFIFO);
|
||||
}
|
||||
|
||||
// void G3_MultMtx44 (const MtxFx44 *m)
|
||||
// {
|
||||
// SDK_NULL_ASSERT(m);
|
||||
//
|
||||
// reg_G3X_GXFIFO = G3OP_MTX_MULT_4x4;
|
||||
// GX_SendFifo64B(&m->_00, (void *)®_G3X_GXFIFO);
|
||||
//}
|
||||
|
||||
void G3_MultMtx43 (const MtxFx43 *m)
|
||||
{
|
||||
SDK_NULL_ASSERT(m);
|
||||
|
||||
reg_G3X_GXFIFO = G3OP_MTX_MULT_4x3;
|
||||
GX_SendFifo48B(&m->_00, (void *)®_G3X_GXFIFO);
|
||||
}
|
||||
|
||||
// void G3_MultMtx33 (const MtxFx33 *m)
|
||||
// {
|
||||
// SDK_NULL_ASSERT(m);
|
||||
//
|
||||
// reg_G3X_GXFIFO = G3OP_MTX_MULT_3x3;
|
||||
// GX_SendFifo36B(&m->_00, (void *)®_G3X_GXFIFO);
|
||||
// }
|
||||
//
|
||||
// void G3_Shininess (const u32 *table)
|
||||
// {
|
||||
// SDK_NULL_ASSERT(table);
|
||||
//
|
||||
// reg_G3X_GXFIFO = G3OP_SHININESS;
|
||||
// GX_SendFifo128B(&table[0], (void *)®_G3X_GXFIFO);
|
||||
// }
|
||||
//
|
||||
// void G3_MultTransMtx33 (const MtxFx33 *mtx, const VecFx32 *trans)
|
||||
// {
|
||||
// SDK_NULL_ASSERT(mtx);
|
||||
// SDK_NULL_ASSERT(trans);
|
||||
//
|
||||
// reg_G3X_GXFIFO = G3OP_MTX_MULT_4x3;
|
||||
// GX_SendFifo36B(&mtx->_00, (void *)®_G3X_GXFIFO);
|
||||
//
|
||||
// reg_G3X_GXFIFO = (u32)trans->x;
|
||||
// reg_G3X_GXFIFO = (u32)trans->y;
|
||||
// reg_G3X_GXFIFO = (u32)trans->z;
|
||||
// }
|
||||
@@ -3,5 +3,7 @@
|
||||
|
||||
#include <nitro/gx/gxasm.h>
|
||||
#include <nitro/gx/g2.h>
|
||||
#include <nitro/gx/g3.h>
|
||||
#include <nitro/gx/g3imm.h>
|
||||
|
||||
#endif //NITRO_GX_H_
|
||||
|
||||
498
lib/include/nitro/gx/g3.h
Normal file
498
lib/include/nitro/gx/g3.h
Normal file
@@ -0,0 +1,498 @@
|
||||
#ifndef NITRO_G3_H_
|
||||
#define NITRO_G3_H_
|
||||
|
||||
#include <nitro/gx/gxcommon.h>
|
||||
#include <nitro/hw/ARM9/io_reg.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define G3OP_NOP 0x00
|
||||
|
||||
#define G3OP_MTX_MODE 0x10
|
||||
#define G3OP_MTX_PUSH 0x11
|
||||
#define G3OP_MTX_POP 0x12
|
||||
#define G3OP_MTX_STORE 0x13
|
||||
#define G3OP_MTX_RESTORE 0x14
|
||||
#define G3OP_MTX_IDENTITY 0x15
|
||||
#define G3OP_MTX_LOAD_4x4 0x16
|
||||
#define G3OP_MTX_LOAD_4x3 0x17
|
||||
#define G3OP_MTX_MULT_4x4 0x18
|
||||
#define G3OP_MTX_MULT_4x3 0x19
|
||||
#define G3OP_MTX_MULT_3x3 0x1a
|
||||
#define G3OP_MTX_SCALE 0x1b
|
||||
#define G3OP_MTX_TRANS 0x1c
|
||||
|
||||
#define G3OP_COLOR 0x20
|
||||
#define G3OP_NORMAL 0x21
|
||||
#define G3OP_TEXCOORD 0x22
|
||||
#define G3OP_VTX_16 0x23
|
||||
#define G3OP_VTX_10 0x24
|
||||
#define G3OP_VTX_XY 0x25
|
||||
#define G3OP_VTX_XZ 0x26
|
||||
#define G3OP_VTX_YZ 0x27
|
||||
#define G3OP_VTX_DIFF 0x28
|
||||
#define G3OP_POLYGON_ATTR 0x29
|
||||
#define G3OP_TEXIMAGE_PARAM 0x2a
|
||||
#define G3OP_TEXPLTT_BASE 0x2b
|
||||
|
||||
#define G3OP_DIF_AMB 0x30
|
||||
#define G3OP_SPE_EMI 0x31
|
||||
#define G3OP_LIGHT_VECTOR 0x32
|
||||
#define G3OP_LIGHT_COLOR 0x33
|
||||
#define G3OP_SHININESS 0x34
|
||||
|
||||
#define G3OP_BEGIN 0x40
|
||||
#define G3OP_END 0x41
|
||||
|
||||
#define G3OP_SWAP_BUFFERS 0x50
|
||||
|
||||
#define G3OP_VIEWPORT 0x60
|
||||
|
||||
#define G3OP_BOX_TEST 0x70
|
||||
#define G3OP_POS_TEST 0x71
|
||||
#define G3OP_VEC_TEST 0x72
|
||||
|
||||
#define G3OP_DUMMY_COMMAND 0xFF
|
||||
|
||||
#define G3OP_NOP_NPARAMS 0
|
||||
|
||||
#define G3OP_MTX_MODE_NPARAMS 1
|
||||
#define G3OP_MTX_PUSH_NPARAMS 0
|
||||
#define G3OP_MTX_POP_NPARAMS 1
|
||||
#define G3OP_MTX_STORE_NPARAMS 1
|
||||
#define G3OP_MTX_RESTORE_NPARAMS 1
|
||||
#define G3OP_MTX_IDENTITY_NPARAMS 0
|
||||
#define G3OP_MTX_LOAD_4x4_NPARAMS 16
|
||||
#define G3OP_MTX_LOAD_4x3_NPARAMS 12
|
||||
#define G3OP_MTX_MULT_4x4_NPARAMS 16
|
||||
#define G3OP_MTX_MULT_4x3_NPARAMS 12
|
||||
#define G3OP_MTX_MULT_3x3_NPARAMS 9
|
||||
#define G3OP_MTX_SCALE_NPARAMS 3
|
||||
#define G3OP_MTX_TRANS_NPARAMS 3
|
||||
|
||||
#define G3OP_COLOR_NPARAMS 1
|
||||
#define G3OP_NORMAL_NPARAMS 1
|
||||
#define G3OP_TEXCOORD_NPARAMS 1
|
||||
#define G3OP_VTX_16_NPARAMS 2
|
||||
#define G3OP_VTX_10_NPARAMS 1
|
||||
#define G3OP_VTX_XY_NPARAMS 1
|
||||
#define G3OP_VTX_XZ_NPARAMS 1
|
||||
#define G3OP_VTX_YZ_NPARAMS 1
|
||||
#define G3OP_VTX_DIFF_NPARAMS 1
|
||||
#define G3OP_POLYGON_ATTR_NPARAMS 1
|
||||
#define G3OP_TEXIMAGE_PARAM_NPARAMS 1
|
||||
#define G3OP_TEXPLTT_BASE_NPARAMS 1
|
||||
|
||||
#define G3OP_DIF_AMB_NPARAMS 1
|
||||
#define G3OP_SPE_EMI_NPARAMS 1
|
||||
#define G3OP_LIGHT_VECTOR_NPARAMS 1
|
||||
#define G3OP_LIGHT_COLOR_NPARAMS 1
|
||||
#define G3OP_SHININESS_NPARAMS 32
|
||||
|
||||
#define G3OP_BEGIN_NPARAMS 1
|
||||
#define G3OP_END_NPARAMS 0
|
||||
|
||||
#define G3OP_SWAP_BUFFERS_NPARAMS 1
|
||||
|
||||
#define G3OP_VIEWPORT_NPARAMS 1
|
||||
|
||||
#define G3OP_BOX_TEST_NPARAMS 3
|
||||
#define G3OP_POS_TEST_NPARAMS 2
|
||||
#define G3OP_VEC_TEST_NPARAMS 1
|
||||
|
||||
#define GX_VALID_OPCODE_ASSERT(x) SDK_ASSERT((x == 0xFF) || ((x >= 0) && (x <= 0x72)))
|
||||
|
||||
typedef enum {
|
||||
GX_MTXMODE_PROJECTION = 0,
|
||||
GX_MTXMODE_POSITION = 1,
|
||||
GX_MTXMODE_POSITION_VECTOR = 2,
|
||||
GX_MTXMODE_TEXTURE = 3
|
||||
} GXMtxMode;
|
||||
|
||||
#define GX_MTXMODE_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_MTXMODE_PROJECTION, GX_MTXMODE_TEXTURE)
|
||||
|
||||
#define GX_MTX_POP_NUM_ASSERT(x) SDK_MINMAX_ASSERT(x, -30, 31)
|
||||
|
||||
#define GX_MTX_STORE_NUM_ASSERT(x) SDK_MINMAX_ASSERT(x, 0, 30)
|
||||
|
||||
#define GX_MTX_RESTORE_NUM_ASSERT(x) SDK_MINMAX_ASSERT(x, 0, 30)
|
||||
|
||||
typedef enum {
|
||||
GX_BEGIN_TRIANGLES = 0,
|
||||
GX_BEGIN_QUADS = 1,
|
||||
GX_BEGIN_TRIANGLE_STRIP = 2,
|
||||
GX_BEGIN_QUAD_STRIP = 3
|
||||
} GXBegin;
|
||||
|
||||
#define GX_BEGIN_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_BEGIN_TRIANGLES, GX_BEGIN_QUAD_STRIP)
|
||||
|
||||
typedef enum {
|
||||
GX_SORTMODE_AUTO = 0,
|
||||
GX_SORTMODE_MANUAL = 1
|
||||
} GXSortMode;
|
||||
|
||||
#define GX_SORTMODE_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_SORTMODE_AUTO, GX_SORTMODE_MANUAL)
|
||||
|
||||
typedef enum {
|
||||
GX_BUFFERMODE_Z = 0,
|
||||
GX_BUFFERMODE_W = 1
|
||||
} GXBufferMode;
|
||||
|
||||
#define GX_BUFFERMODE_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_BUFFERMODE_Z, GX_BUFFERMODE_W)
|
||||
|
||||
#define GX_VIEWPORT_ASSERT(x1, y1, x2, y2) \
|
||||
SDK_ASSERT((x1) < (x2) && (y1) < (y2) && \
|
||||
(x1) >= 0 && (x2) < 256 && \
|
||||
(y1) >= 0 && (y2) < 192)
|
||||
|
||||
#define GX_POLYGON_ATTR_POLYGONID_ASSERT(x) GX_POLYGONID_ASSERT(x)
|
||||
#define GX_POLYGON_ATTR_ALPHA_ASSERT(x) GX_ALPHA_ASSERT(x)
|
||||
|
||||
typedef enum {
|
||||
GX_LIGHTMASK_NONE = 0,
|
||||
GX_LIGHTMASK_0 = 1,
|
||||
GX_LIGHTMASK_1 = 2,
|
||||
GX_LIGHTMASK_01 = 3,
|
||||
GX_LIGHTMASK_2 = 4,
|
||||
GX_LIGHTMASK_02 = 5,
|
||||
GX_LIGHTMASK_12 = 6,
|
||||
GX_LIGHTMASK_012 = 7,
|
||||
GX_LIGHTMASK_3 = 8,
|
||||
GX_LIGHTMASK_03 = 9,
|
||||
GX_LIGHTMASK_13 = 10,
|
||||
GX_LIGHTMASK_013 = 11,
|
||||
GX_LIGHTMASK_23 = 12,
|
||||
GX_LIGHTMASK_023 = 13,
|
||||
GX_LIGHTMASK_123 = 14,
|
||||
GX_LIGHTMASK_0123 = 15
|
||||
} GXLightMask;
|
||||
|
||||
#define GX_LIGHTMASK_ASSERT(x) SDK_MINMAX_ASSERT(x, 0, 15)
|
||||
|
||||
typedef enum {
|
||||
GX_POLYGONMODE_MODULATE = 0,
|
||||
GX_POLYGONMODE_DECAL = 1,
|
||||
GX_POLYGONMODE_TOON = 2,
|
||||
GX_POLYGONMODE_SHADOW = 3
|
||||
} GXPolygonMode;
|
||||
|
||||
#define GX_POLYGONMODE_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_POLYGONMODE_MODULATE, GX_POLYGONMODE_SHADOW)
|
||||
|
||||
typedef enum {
|
||||
GX_CULL_ALL = 0,
|
||||
GX_CULL_FRONT = 1,
|
||||
GX_CULL_BACK = 2,
|
||||
GX_CULL_NONE = 3
|
||||
} GXCull;
|
||||
|
||||
#define GX_CULL_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_CULL_ALL, GX_CULL_NONE)
|
||||
|
||||
typedef enum {
|
||||
GX_POLYGON_ATTR_MISC_NONE = 0,
|
||||
GX_POLYGON_ATTR_MISC_XLU_DEPTH_UPDATE = 1 << REG_G3_POLYGON_ATTR_XL_SHIFT,
|
||||
GX_POLYGON_ATTR_MISC_FAR_CLIPPING = 1 << REG_G3_POLYGON_ATTR_FC_SHIFT,
|
||||
GX_POLYGON_ATTR_MISC_DISP_1DOT = 1 << REG_G3_POLYGON_ATTR_D1_SHIFT,
|
||||
GX_POLYGON_ATTR_MISC_DEPTHTEST_DECAL = 1 << REG_G3_POLYGON_ATTR_DT_SHIFT,
|
||||
GX_POLYGON_ATTR_MISC_FOG = 1 << REG_G3_POLYGON_ATTR_FE_SHIFT
|
||||
} GXPolygonAttrMisc;
|
||||
|
||||
typedef enum {
|
||||
GX_TEXREPEAT_NONE = 0,
|
||||
GX_TEXREPEAT_S = 1,
|
||||
GX_TEXREPEAT_T = 2,
|
||||
GX_TEXREPEAT_ST = 3
|
||||
} GXTexRepeat;
|
||||
|
||||
#define GX_TEXREPEAT_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_TEXREPEAT_NONE, GX_TEXREPEAT_ST)
|
||||
|
||||
typedef enum {
|
||||
GX_TEXFLIP_NONE = 0,
|
||||
GX_TEXFLIP_S = 1,
|
||||
GX_TEXFLIP_T = 2,
|
||||
GX_TEXFLIP_ST = 3
|
||||
} GXTexFlip;
|
||||
|
||||
#define GX_TEXFLIP_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_TEXFLIP_NONE, GX_TEXFLIP_ST)
|
||||
|
||||
typedef enum {
|
||||
GX_TEXSIZE_S8 = 0,
|
||||
GX_TEXSIZE_S16 = 1,
|
||||
GX_TEXSIZE_S32 = 2,
|
||||
GX_TEXSIZE_S64 = 3,
|
||||
GX_TEXSIZE_S128 = 4,
|
||||
GX_TEXSIZE_S256 = 5,
|
||||
GX_TEXSIZE_S512 = 6,
|
||||
GX_TEXSIZE_S1024 = 7
|
||||
} GXTexSizeS;
|
||||
|
||||
#define GX_TEXSIZE_S_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_TEXSIZE_S8, GX_TEXSIZE_S1024)
|
||||
|
||||
typedef enum {
|
||||
GX_TEXSIZE_T8 = 0,
|
||||
GX_TEXSIZE_T16 = 1,
|
||||
GX_TEXSIZE_T32 = 2,
|
||||
GX_TEXSIZE_T64 = 3,
|
||||
GX_TEXSIZE_T128 = 4,
|
||||
GX_TEXSIZE_T256 = 5,
|
||||
GX_TEXSIZE_T512 = 6,
|
||||
GX_TEXSIZE_T1024 = 7
|
||||
} GXTexSizeT;
|
||||
|
||||
#define GX_TEXSIZE_T_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_TEXSIZE_T8, GX_TEXSIZE_T1024)
|
||||
|
||||
typedef enum {
|
||||
GX_TEXFMT_NONE = 0,
|
||||
GX_TEXFMT_A3I5 = 1,
|
||||
GX_TEXFMT_PLTT4 = 2,
|
||||
GX_TEXFMT_PLTT16 = 3,
|
||||
GX_TEXFMT_PLTT256 = 4,
|
||||
GX_TEXFMT_COMP4x4 = 5,
|
||||
GX_TEXFMT_A5I3 = 6,
|
||||
GX_TEXFMT_DIRECT = 7
|
||||
} GXTexFmt;
|
||||
|
||||
#define GX_TEXFMT_ALPHA ((GXTexFmt)GX_TEXFMT_A5I3)
|
||||
|
||||
#define GX_TEXFMT_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_TEXFMT_NONE, GX_TEXFMT_DIRECT)
|
||||
|
||||
typedef enum {
|
||||
GX_TEXPLTTCOLOR0_USE = 0,
|
||||
GX_TEXPLTTCOLOR0_TRNS = 1
|
||||
} GXTexPlttColor0;
|
||||
|
||||
#define GX_TEXPLTTCOLOR0_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_TEXPLTTCOLOR0_USE, GX_TEXPLTTCOLOR0_TRNS)
|
||||
|
||||
typedef enum {
|
||||
GX_TEXGEN_NONE = 0,
|
||||
GX_TEXGEN_TEXCOORD = 1,
|
||||
GX_TEXGEN_NORMAL = 2,
|
||||
GX_TEXGEN_VERTEX = 3
|
||||
} GXTexGen;
|
||||
|
||||
#define GX_TEXGEN_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_TEXGEN_NONE, GX_TEXGEN_VERTEX)
|
||||
|
||||
#define GX_TEXIMAGE_PARAM_ADDR_ASSERT(addr) \
|
||||
SDK_ASSERT(((addr) & 0x7) == 0 && (addr) >= 0 && (addr) < 0x80000)
|
||||
|
||||
typedef enum {
|
||||
GX_LIGHTID_0 = 0,
|
||||
GX_LIGHTID_1 = 1,
|
||||
GX_LIGHTID_2 = 2,
|
||||
GX_LIGHTID_3 = 3
|
||||
} GXLightId;
|
||||
|
||||
#define GX_LIGHTID_ASSERT(x) \
|
||||
SDK_MINMAX_ASSERT(x, GX_LIGHTID_0, GX_LIGHTID_3)
|
||||
|
||||
#ifdef SDK_ADS
|
||||
typedef struct {
|
||||
u32 val[3];
|
||||
} GXBoxTestParam;
|
||||
#else
|
||||
typedef union {
|
||||
u32 val[3];
|
||||
struct {
|
||||
fx16 x;
|
||||
fx16 y;
|
||||
fx16 z;
|
||||
fx16 width;
|
||||
fx16 height;
|
||||
fx16 depth;
|
||||
};
|
||||
} GXBoxTestParam;
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
u8 * curr_cmd;
|
||||
u32 * curr_param;
|
||||
u32 * bottom;
|
||||
u32 length;
|
||||
BOOL param0_cmd_flg;
|
||||
} GXDLInfo;
|
||||
|
||||
typedef u32 GXSt;
|
||||
typedef u32 GXTexPlttBaseParam;
|
||||
|
||||
#define GX_TEXPLTTBASEPARAM_ASSERT(x) SDK_ASSERT((x) < 0xe000)
|
||||
|
||||
typedef u32 VecVtx10;
|
||||
|
||||
#define GX_VTX10_SHIFT 6
|
||||
#define GX_VTX10_INT_SIZE 3
|
||||
#define GX_VTX10_DEC_SIZE 6
|
||||
|
||||
#define GX_VTX10_INT_MASK 0x01c0
|
||||
#define GX_VTX10_DEC_MASK 0x003f
|
||||
#define GX_VTX10_SIGN_MASK 0x0200
|
||||
#define GX_VTX10_MASK (GX_VTX10_INT_MASK | GX_VTX10_DEC_MASK | GX_VTX10_SIGN_MASK)
|
||||
|
||||
#define GX_VTX10_MAX ((fx32)(0x00007fc0))
|
||||
#define GX_VTX10_MIN ((fx32)(0xffff8000))
|
||||
|
||||
#define GX_VEC_VTX10_X_SHIFT 0
|
||||
#define GX_VEC_VTX10_Y_SHIFT 10
|
||||
#define GX_VEC_VTX10_Z_SHIFT 20
|
||||
|
||||
#define GX_FX16PAIR(a, b) ((u32)((u32)(u16)(a) | ((u32)(u16)(b) << 16)))
|
||||
|
||||
#define GX_VECVTX10(x, y, z) \
|
||||
((VecVtx10) (((((x) >> (FX32_DEC_SIZE - GX_VTX10_DEC_SIZE)) & GX_VTX10_MASK) << GX_VEC_VTX10_X_SHIFT) | \
|
||||
((((y) >> (FX32_DEC_SIZE - GX_VTX10_DEC_SIZE)) & GX_VTX10_MASK) << GX_VEC_VTX10_Y_SHIFT) | \
|
||||
((((z) >> (FX32_DEC_SIZE - GX_VTX10_DEC_SIZE)) & GX_VTX10_MASK) << GX_VEC_VTX10_Z_SHIFT)))
|
||||
|
||||
typedef u32 VecVtxDiff;
|
||||
|
||||
#define GX_VTXDIFF_MASK 0x03ff
|
||||
|
||||
#define GX_VTXDIFF_MAX ((fx32)(0x000001ff))
|
||||
#define GX_VTXDIFF_MIN ((fx32)(0xfffffe00))
|
||||
|
||||
#define GX_VEC_VTXDIFF_X_SHIFT 0
|
||||
#define GX_VEC_VTXDIFF_Y_SHIFT 10
|
||||
#define GX_VEC_VTXDIFF_Z_SHIFT 20
|
||||
|
||||
#define GX_VECVTXDIFF(x, y, z) \
|
||||
((VecVtxDiff) ((((x) & GX_VTXDIFF_MASK) << GX_VEC_VTXDIFF_X_SHIFT) | \
|
||||
(((y) & GX_VTXDIFF_MASK) << GX_VEC_VTXDIFF_Y_SHIFT) | \
|
||||
(((z) & GX_VTXDIFF_MASK) << GX_VEC_VTXDIFF_Z_SHIFT)))
|
||||
|
||||
#define GX_FX16ST(x) ((s16)((x) >> 8))
|
||||
|
||||
#define GX_ST(s, t) ((GXSt)((u16)GX_FX16ST(s) | ((u16)GX_FX16ST(t) << 16)))
|
||||
|
||||
#define GX_COMP4x4_PLTT_IDX(image) \
|
||||
((u32)(0x20000 + (((image) & 0x1ffff) >> 1) + (((image) & 0x40000) >> 2)))
|
||||
|
||||
#define GX_PACK_OP(op1, op2, op3, op4) \
|
||||
((u32)((op1) | ((op2) << 8) | ((op3) << 16) | ((op4) << 24)))
|
||||
|
||||
#define GX_PACK_SWAPBUFFERS_PARAM(am, zw) \
|
||||
((u32) (((am) << REG_G3_SWAP_BUFFERS_XS_SHIFT) | \
|
||||
((zw) << REG_G3_SWAP_BUFFERS_DP_SHIFT)))
|
||||
|
||||
#define GX_PACK_MTXMODE_PARAM(mode) ((u32) ((mode) << REG_G3_MTX_MODE_M_SHIFT))
|
||||
#define GX_PACK_POPMTX_PARAM(num) ((u32) (num))
|
||||
#define GX_PACK_STOREMTX_PARAM(num) ((u32) (num))
|
||||
#define GX_PACK_RESTOREMTX_PARAM(num) ((u32) (num))
|
||||
|
||||
#define GX_PACK_LIGHTVECTOR_PARAM(lightID, x, y, z) \
|
||||
((u32)GX_VECFX10((x), (y), (z)) | \
|
||||
((u32)(lightID) << REG_G3_LIGHT_VECTOR_LNUM_SHIFT))
|
||||
|
||||
#define GX_PACK_LIGHTCOLOR_PARAM(lightID, rgb) \
|
||||
((u32)((rgb) | \
|
||||
((u32)(lightID) << REG_G3_LIGHT_COLOR_LNUM_SHIFT)))
|
||||
|
||||
#define GX_PACK_DIFFAMB_PARAM(diffuse, ambient, IsSetVtxColor) \
|
||||
((u32)((diffuse) | \
|
||||
((ambient) << REG_G3_DIF_AMB_AMBIENT_RED_SHIFT) | \
|
||||
(((IsSetVtxColor) != FALSE) << REG_G3_DIF_AMB_C_SHIFT)))
|
||||
|
||||
#define GX_PACK_SPECEMI_PARAM(specular, emission, IsShininess) \
|
||||
((u32)((specular) | \
|
||||
((emission) << REG_G3_SPE_EMI_EMISSION_RED_SHIFT) | \
|
||||
(((IsShininess) != FALSE) << REG_G3_SPE_EMI_S_SHIFT)))
|
||||
|
||||
#define GX_PACK_POLYGONATTR_PARAM(light, polyMode, cullMode, polygonID, alpha, misc) \
|
||||
((u32)(((light) << REG_G3_POLYGON_ATTR_LE_SHIFT) | \
|
||||
((polyMode) << REG_G3_POLYGON_ATTR_PM_SHIFT) | \
|
||||
((cullMode) << REG_G3_POLYGON_ATTR_BK_SHIFT) | \
|
||||
(misc) | \
|
||||
((polygonID) << REG_G3_POLYGON_ATTR_ID_SHIFT) | \
|
||||
((alpha) << REG_G3_POLYGON_ATTR_ALPHA_SHIFT)))
|
||||
|
||||
#define GX_PACK_BEGIN_PARAM(primitive) \
|
||||
((u32)((primitive) << REG_G3_BEGIN_VTXS_TYPE_SHIFT))
|
||||
|
||||
#define GX_PACK_COLOR_PARAM(rgb) ((u32)(rgb))
|
||||
#define GX_PACK_NORMAL_PARAM(x, y, z) ((u32)GX_VECFX10((x), (y), (z)))
|
||||
#define GX_PACK_VTX10_PARAM(x, y, z) ((u32)GX_VECVTX10((x), (y), (z)))
|
||||
#define GX_PACK_VTXXY_PARAM(x, y) (GX_FX16PAIR((x), (y)))
|
||||
#define GX_PACK_VTXXZ_PARAM(x, z) (GX_FX16PAIR((x), (z)))
|
||||
#define GX_PACK_VTXYZ_PARAM(y, z) (GX_FX16PAIR((y), (z)))
|
||||
#define GX_PACK_VTXDIFF_PARAM(x, y, z) (GX_VECVTXDIFF((x), (y), (z)))
|
||||
#define GX_PACK_TEXCOORD_PARAM(s, t) (GX_ST((s), (t)))
|
||||
|
||||
#define GX_PACK_TEXIMAGE_PARAM(texFmt, texGen, s, t, repeat, flip, pltt0, addr) \
|
||||
((u32)(((addr) >> 3) | \
|
||||
((texFmt) << REG_G3_TEXIMAGE_PARAM_TEXFMT_SHIFT) | \
|
||||
((texGen) << REG_G3_TEXIMAGE_PARAM_TGEN_SHIFT) | \
|
||||
((s) << REG_G3_TEXIMAGE_PARAM_V_SIZE_SHIFT) | \
|
||||
((t) << REG_G3_TEXIMAGE_PARAM_T_SIZE_SHIFT) | \
|
||||
((repeat) << REG_G3_TEXIMAGE_PARAM_RS_SHIFT) | \
|
||||
((flip) << REG_G3_TEXIMAGE_PARAM_FS_SHIFT) | \
|
||||
((pltt0) << REG_G3_TEXIMAGE_PARAM_TR_SHIFT)))
|
||||
|
||||
#define GX_PACK_TEXPLTTBASE_PARAM(addr, texFmt) \
|
||||
((u32)((addr) >> (4 - ((texFmt) == GX_TEXFMT_PLTT4))))
|
||||
|
||||
#define GX_PACK_VIEWPORT_PARAM(x1, y1, x2, y2) \
|
||||
((u32)((x1) | ((y1) << 8) | ((x2) << 16) | ((y2) << 24)))
|
||||
|
||||
#define GX_PACK_VECTORTEST_PARAM(x, y, z) ((u32)GX_VECFX10((x), (y), (z)))
|
||||
|
||||
#if !(defined(SDK_WIN32) || defined(SDK_FROM_TOOL))
|
||||
void G3_BeginMakeDL(GXDLInfo * info, void * ptr, u32 length);
|
||||
u32 G3_EndMakeDL(GXDLInfo * info);
|
||||
static void * G3_GetDLStart(const GXDLInfo * info);
|
||||
static u32 G3_GetDLLength(const GXDLInfo * info);
|
||||
static u32 G3_GetDLSize(const GXDLInfo * info);
|
||||
|
||||
static GXTexPlttBaseParam G3_MakeTexPlttBaseParam(u32 plttBaseAddr, GXTexFmt texfmt);
|
||||
|
||||
static inline void * G3_GetDLStart (const GXDLInfo * info)
|
||||
{
|
||||
return (void *)info->bottom;
|
||||
}
|
||||
|
||||
static inline u32 G3_GetDLLength (const GXDLInfo * info)
|
||||
{
|
||||
return info->length;
|
||||
}
|
||||
|
||||
static inline u32 G3_GetDLSize (const GXDLInfo * info)
|
||||
{
|
||||
SDK_ASSERT((u32)info->bottom < (u32)info->curr_param);
|
||||
if ((u32)info->curr_cmd & 3) {
|
||||
return (u32)((u32)info->curr_param - (u32)info->bottom);
|
||||
} else {
|
||||
return (u32)((u32)info->curr_cmd - (u32)info->bottom);
|
||||
}
|
||||
}
|
||||
|
||||
static inline GXTexPlttBaseParam G3_MakeTexPlttBaseParam (u32 plttBaseAddr, GXTexFmt texfmt)
|
||||
{
|
||||
SDK_ASSERT(GX_TEXFMT_NONE != texfmt);
|
||||
|
||||
if (GX_TEXFMT_PLTT4 == texfmt) {
|
||||
|
||||
SDK_ASSERT((plttBaseAddr & 0x7) == 0);
|
||||
return (GXTexPlttBaseParam)(plttBaseAddr >> 3);
|
||||
} else {
|
||||
|
||||
SDK_ASSERT((plttBaseAddr & 0xf) == 0);
|
||||
return (GXTexPlttBaseParam)(plttBaseAddr >> 4);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
317
lib/include/nitro/gx/g3imm.h
Normal file
317
lib/include/nitro/gx/g3imm.h
Normal file
@@ -0,0 +1,317 @@
|
||||
#ifndef NITRO_G3IMM_H_
|
||||
#define NITRO_G3IMM_H_
|
||||
|
||||
#include <nitro/hw/ARM9/io_reg.h>
|
||||
#include <nitro/gx/g3.h>
|
||||
//#include <nitro/fx/fx_const.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
static void G3_Direct0(int op);
|
||||
static void G3_Direct1(int op, u32 param0);
|
||||
static void G3_Direct2(int op, u32 param0, u32 param1);
|
||||
static void G3_Direct3(int op, u32 param0, u32 param1, u32 param2);
|
||||
|
||||
static void G3_MtxMode(GXMtxMode mode);
|
||||
static void G3_PushMtx(void);
|
||||
static void G3_PopMtx(int num);
|
||||
static void G3_StoreMtx(int num);
|
||||
static void G3_RestoreMtx(int num);
|
||||
static void G3_Identity(void);
|
||||
|
||||
void G3_LoadMtx44(const MtxFx44 * m);
|
||||
void G3_LoadMtx43(const MtxFx43 * m);
|
||||
void G3_MultMtx44(const MtxFx44 * m);
|
||||
void G3_MultMtx43(const MtxFx43 * m);
|
||||
void G3_MultMtx33(const MtxFx33 * m);
|
||||
void G3_MultTransMtx33(const MtxFx33 * mtx, const VecFx32 * trans);
|
||||
|
||||
static void G3_Scale(fx32 x, fx32 y, fx32 z);
|
||||
static void G3_Translate(fx32 x, fx32 y, fx32 z);
|
||||
static void G3_Color(GXRgb rgb);
|
||||
static void G3_Normal(fx16 x, fx16 y, fx16 z);
|
||||
static void G3_TexCoord(fx32 s, fx32 t);
|
||||
static void G3_Vtx(fx16 x, fx16 y, fx16 z);
|
||||
static void G3_Vtx10(fx16 x, fx16 y, fx16 z);
|
||||
static void G3_VtxXY(fx16 x, fx16 y);
|
||||
static void G3_VtxXZ(fx16 x, fx16 z);
|
||||
static void G3_VtxYZ(fx16 y, fx16 z);
|
||||
static void G3_VtxDiff(fx16 x, fx16 y, fx16 z);
|
||||
static void G3_PolygonAttr(int light, GXPolygonMode polyMode, GXCull cullMode, int polygonID, int alpha, int misc);
|
||||
static void G3_TexImageParam(GXTexFmt texFmt,
|
||||
GXTexGen texGen,
|
||||
GXTexSizeS s,
|
||||
GXTexSizeT t,
|
||||
GXTexRepeat repeat, GXTexFlip flip, GXTexPlttColor0 pltt0, u32 addr);
|
||||
|
||||
static void G3_TexPlttBase(u32 addr, GXTexFmt texfmt);
|
||||
static void G3_MaterialColorDiffAmb(GXRgb diffuse, GXRgb ambient, BOOL IsSetVtxColor);
|
||||
static void G3_MaterialColorSpecEmi(GXRgb specular, GXRgb emission, BOOL IsShininess);
|
||||
static void G3_LightVector(GXLightId lightID, fx16 x, fx16 y, fx16 z);
|
||||
static void G3_LightColor(GXLightId lightID, GXRgb rgb);
|
||||
void G3_Shininess(const u32 * table);
|
||||
static void G3_Begin(GXBegin primitive);
|
||||
static void G3_End(void);
|
||||
static void G3_SwapBuffers(GXSortMode am, GXBufferMode zw);
|
||||
static void G3_ViewPort(int x1, int y1, int x2, int y2);
|
||||
static void G3_BoxTest(const GXBoxTestParam * box);
|
||||
static void G3_PositionTest(fx16 x, fx16 y, fx16 z);
|
||||
static void G3_VectorTest(fx16 x, fx16 y, fx16 z);
|
||||
|
||||
static inline void G3_Direct0 (int op)
|
||||
{
|
||||
*(REGType32v *)(REG_MTX_MODE_ADDR + ((op - G3OP_MTX_MODE) * 4)) = 0;
|
||||
}
|
||||
|
||||
static inline void G3_Direct1 (int op, u32 param0)
|
||||
{
|
||||
*(REGType32v *)(REG_MTX_MODE_ADDR + ((op - G3OP_MTX_MODE) * 4)) = param0;
|
||||
}
|
||||
|
||||
static inline void G3_Direct2 (int op, u32 param0, u32 param1)
|
||||
{
|
||||
*(REGType32v *)(REG_MTX_MODE_ADDR + ((op - G3OP_MTX_MODE) * 4)) = param0;
|
||||
*(REGType32v *)(REG_MTX_MODE_ADDR + ((op - G3OP_MTX_MODE) * 4)) = param1;
|
||||
}
|
||||
|
||||
static inline void G3_Direct3 (int op, u32 param0, u32 param1, u32 param2)
|
||||
{
|
||||
*(REGType32v *)(REG_MTX_MODE_ADDR + ((op - G3OP_MTX_MODE) * 4)) = param0;
|
||||
*(REGType32v *)(REG_MTX_MODE_ADDR + ((op - G3OP_MTX_MODE) * 4)) = param1;
|
||||
*(REGType32v *)(REG_MTX_MODE_ADDR + ((op - G3OP_MTX_MODE) * 4)) = param2;
|
||||
}
|
||||
|
||||
static inline void G3_MtxMode (GXMtxMode mode)
|
||||
{
|
||||
GX_MTXMODE_ASSERT(mode);
|
||||
reg_G3_MTX_MODE = GX_PACK_MTXMODE_PARAM(mode);
|
||||
}
|
||||
|
||||
static inline void G3_PushMtx ()
|
||||
{
|
||||
reg_G3_MTX_PUSH = 0;
|
||||
}
|
||||
|
||||
static inline void G3_PopMtx (int num)
|
||||
{
|
||||
GX_MTX_POP_NUM_ASSERT(num);
|
||||
reg_G3_MTX_POP = GX_PACK_POPMTX_PARAM(num);
|
||||
}
|
||||
|
||||
static inline void G3_StoreMtx (int num)
|
||||
{
|
||||
GX_MTX_STORE_NUM_ASSERT(num);
|
||||
reg_G3_MTX_STORE = GX_PACK_STOREMTX_PARAM(num);
|
||||
}
|
||||
|
||||
static inline void G3_RestoreMtx (int num)
|
||||
{
|
||||
GX_MTX_RESTORE_NUM_ASSERT(num);
|
||||
reg_G3_MTX_RESTORE = GX_PACK_RESTOREMTX_PARAM(num);
|
||||
}
|
||||
|
||||
static inline void G3_Identity ()
|
||||
{
|
||||
reg_G3_MTX_IDENTITY = 0;
|
||||
}
|
||||
|
||||
static inline void G3_Scale (fx32 x, fx32 y, fx32 z)
|
||||
{
|
||||
reg_G3_MTX_SCALE = (u32)x;
|
||||
reg_G3_MTX_SCALE = (u32)y;
|
||||
reg_G3_MTX_SCALE = (u32)z;
|
||||
}
|
||||
|
||||
static inline void G3_Translate (fx32 x, fx32 y, fx32 z)
|
||||
{
|
||||
reg_G3_MTX_TRANS = (u32)x;
|
||||
reg_G3_MTX_TRANS = (u32)y;
|
||||
reg_G3_MTX_TRANS = (u32)z;
|
||||
}
|
||||
|
||||
static inline void G3_Color (GXRgb rgb)
|
||||
{
|
||||
GXRGB_ASSERT(rgb);
|
||||
reg_G3_COLOR = GX_PACK_COLOR_PARAM(rgb);
|
||||
}
|
||||
|
||||
static inline void G3_Normal (fx16 x, fx16 y, fx16 z)
|
||||
{
|
||||
SDK_MINMAX_ASSERT(x, -FX16_ONE, FX16_ONE - 1);
|
||||
SDK_MINMAX_ASSERT(y, -FX16_ONE, FX16_ONE - 1);
|
||||
SDK_MINMAX_ASSERT(z, -FX16_ONE, FX16_ONE - 1);
|
||||
|
||||
reg_G3_NORMAL = GX_PACK_NORMAL_PARAM(x, y, z);
|
||||
}
|
||||
|
||||
static inline void G3_TexCoord (fx32 s, fx32 t)
|
||||
{
|
||||
SDK_MINMAX_ASSERT(s, -2048 * FX32_ONE, 2048 * FX32_ONE - 1);
|
||||
SDK_MINMAX_ASSERT(t, -2048 * FX32_ONE, 2048 * FX32_ONE - 1);
|
||||
|
||||
reg_G3_TEXCOORD = GX_PACK_TEXCOORD_PARAM(s, t);
|
||||
}
|
||||
|
||||
static inline void G3_Vtx (fx16 x, fx16 y, fx16 z)
|
||||
{
|
||||
reg_G3_VTX_16 = GX_FX16PAIR(x, y);
|
||||
reg_G3_VTX_16 = (u32)(u16)z;
|
||||
}
|
||||
|
||||
static inline void G3_Vtx10 (fx16 x, fx16 y, fx16 z)
|
||||
{
|
||||
reg_G3_VTX_10 = GX_PACK_VTX10_PARAM(x, y, z);
|
||||
}
|
||||
|
||||
static inline void G3_VtxXY (fx16 x, fx16 y)
|
||||
{
|
||||
reg_G3_VTX_XY = GX_PACK_VTXXY_PARAM(x, y);
|
||||
}
|
||||
|
||||
static inline void G3_VtxXZ (fx16 x, fx16 z)
|
||||
{
|
||||
reg_G3_VTX_XZ = GX_PACK_VTXXZ_PARAM(x, z);
|
||||
}
|
||||
|
||||
static inline void G3_VtxYZ (fx16 y, fx16 z)
|
||||
{
|
||||
reg_G3_VTX_YZ = GX_PACK_VTXYZ_PARAM(y, z);
|
||||
}
|
||||
|
||||
static inline void G3_VtxDiff (fx16 x, fx16 y, fx16 z)
|
||||
{
|
||||
SDK_MINMAX_ASSERT(x, (fx16)0xfe00, (fx16)0x1ff);
|
||||
SDK_MINMAX_ASSERT(y, (fx16)0xfe00, (fx16)0x1ff);
|
||||
SDK_MINMAX_ASSERT(z, (fx16)0xfe00, (fx16)0x1ff);
|
||||
|
||||
reg_G3_VTX_DIFF = GX_PACK_VTXDIFF_PARAM(x, y, z);
|
||||
}
|
||||
|
||||
static inline void G3_PolygonAttr (int light, GXPolygonMode polyMode, GXCull cullMode, int polygonID, int alpha, int misc
|
||||
)
|
||||
{
|
||||
GX_LIGHTMASK_ASSERT(light);
|
||||
GX_POLYGONMODE_ASSERT(polyMode);
|
||||
GX_CULL_ASSERT(cullMode);
|
||||
GX_POLYGON_ATTR_POLYGONID_ASSERT(polygonID);
|
||||
GX_POLYGON_ATTR_ALPHA_ASSERT(alpha);
|
||||
|
||||
reg_G3_POLYGON_ATTR = GX_PACK_POLYGONATTR_PARAM(light,
|
||||
polyMode, cullMode, polygonID, alpha, misc);
|
||||
}
|
||||
|
||||
static inline void G3_TexImageParam (GXTexFmt texFmt,
|
||||
GXTexGen texGen,
|
||||
GXTexSizeS s,
|
||||
GXTexSizeT t,
|
||||
GXTexRepeat repeat,
|
||||
GXTexFlip flip, GXTexPlttColor0 pltt0, u32 addr)
|
||||
{
|
||||
GX_TEXREPEAT_ASSERT(repeat);
|
||||
GX_TEXFLIP_ASSERT(flip);
|
||||
GX_TEXSIZE_S_ASSERT(s);
|
||||
GX_TEXSIZE_T_ASSERT(t);
|
||||
GX_TEXFMT_ASSERT(texFmt);
|
||||
GX_TEXPLTTCOLOR0_ASSERT(pltt0);
|
||||
GX_TEXGEN_ASSERT(texGen);
|
||||
GX_TEXIMAGE_PARAM_ADDR_ASSERT(addr);
|
||||
|
||||
reg_G3_TEXIMAGE_PARAM = GX_PACK_TEXIMAGE_PARAM(texFmt, texGen, s, t, repeat, flip, pltt0, addr);
|
||||
}
|
||||
|
||||
static inline void G3_TexPlttBase (u32 addr, GXTexFmt texfmt)
|
||||
{
|
||||
u32 param = GX_PACK_TEXPLTTBASE_PARAM(addr, texfmt);
|
||||
GX_TEXPLTTBASEPARAM_ASSERT(param);
|
||||
|
||||
reg_G3_TEXPLTT_BASE = param;
|
||||
}
|
||||
|
||||
static inline void G3_MaterialColorDiffAmb (GXRgb diffuse, GXRgb ambient, BOOL IsSetVtxColor)
|
||||
{
|
||||
GXRGB_ASSERT(diffuse);
|
||||
GXRGB_ASSERT(ambient);
|
||||
|
||||
reg_G3_DIF_AMB = GX_PACK_DIFFAMB_PARAM(diffuse, ambient, IsSetVtxColor);
|
||||
}
|
||||
|
||||
static inline void G3_MaterialColorSpecEmi (GXRgb specular, GXRgb emission, BOOL IsShininess)
|
||||
{
|
||||
GXRGB_ASSERT(specular);
|
||||
GXRGB_ASSERT(emission);
|
||||
|
||||
reg_G3_SPE_EMI = GX_PACK_SPECEMI_PARAM(specular, emission, IsShininess);
|
||||
}
|
||||
|
||||
static inline void G3_LightVector (GXLightId lightID, fx16 x, fx16 y, fx16 z)
|
||||
{
|
||||
GX_LIGHTID_ASSERT(lightID);
|
||||
SDK_MINMAX_ASSERT(x, -FX16_ONE, FX16_ONE - 1);
|
||||
SDK_MINMAX_ASSERT(y, -FX16_ONE, FX16_ONE - 1);
|
||||
SDK_MINMAX_ASSERT(z, -FX16_ONE, FX16_ONE - 1);
|
||||
|
||||
reg_G3_LIGHT_VECTOR = GX_PACK_LIGHTVECTOR_PARAM(lightID, x, y, z);
|
||||
}
|
||||
|
||||
static inline void G3_LightColor (GXLightId lightID, GXRgb rgb)
|
||||
{
|
||||
GX_LIGHTID_ASSERT(lightID);
|
||||
GXRGB_ASSERT(rgb);
|
||||
|
||||
reg_G3_LIGHT_COLOR = GX_PACK_LIGHTCOLOR_PARAM(lightID, rgb);
|
||||
}
|
||||
|
||||
static inline void G3_Begin (GXBegin primitive)
|
||||
{
|
||||
GX_BEGIN_ASSERT(primitive);
|
||||
reg_G3_BEGIN_VTXS = GX_PACK_BEGIN_PARAM(primitive);
|
||||
}
|
||||
|
||||
static inline void G3_End (void)
|
||||
{
|
||||
reg_G3_END_VTXS = 0;
|
||||
}
|
||||
|
||||
static inline void G3_SwapBuffers (GXSortMode am, GXBufferMode zw)
|
||||
{
|
||||
GX_SORTMODE_ASSERT(am);
|
||||
GX_BUFFERMODE_ASSERT(zw);
|
||||
|
||||
reg_G3_SWAP_BUFFERS = GX_PACK_SWAPBUFFERS_PARAM(am, zw);
|
||||
}
|
||||
|
||||
static inline void G3_ViewPort (int x1, int y1, int x2, int y2)
|
||||
{
|
||||
GX_VIEWPORT_ASSERT(x1, y1, x2, y2);
|
||||
reg_G3_VIEWPORT = GX_PACK_VIEWPORT_PARAM(x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
static inline void G3_BoxTest (const GXBoxTestParam * box)
|
||||
{
|
||||
reg_G3_BOX_TEST = box->val[0];
|
||||
reg_G3_BOX_TEST = box->val[1];
|
||||
reg_G3_BOX_TEST = box->val[2];
|
||||
}
|
||||
|
||||
static inline void G3_PositionTest (fx16 x, fx16 y, fx16 z)
|
||||
{
|
||||
reg_G3_POS_TEST = GX_FX16PAIR(x, y);
|
||||
reg_G3_POS_TEST = (u32)(u16)z;
|
||||
}
|
||||
|
||||
static inline void G3_VectorTest (fx16 x, fx16 y, fx16 z)
|
||||
{
|
||||
SDK_MINMAX_ASSERT(x, -FX16_ONE, FX16_ONE - 1);
|
||||
SDK_MINMAX_ASSERT(y, -FX16_ONE, FX16_ONE - 1);
|
||||
SDK_MINMAX_ASSERT(z, -FX16_ONE, FX16_ONE - 1);
|
||||
|
||||
reg_G3_VEC_TEST = GX_PACK_VECTORTEST_PARAM(x, y, z);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
2
main.lsf
2
main.lsf
@@ -232,7 +232,7 @@ Static main
|
||||
Object lib/NitroSDK/asm/gx_vramcnt.o
|
||||
Object lib/NitroSDK/asm/gx_bgcnt.o
|
||||
Object lib/NitroSDK/src/gx/g2.o
|
||||
Object lib/NitroSDK/asm/g3imm.o
|
||||
Object lib/NitroSDK/src/gx/g3imm.o
|
||||
Object lib/NitroSDK/asm/g3x.o
|
||||
Object lib/NitroSDK/asm/g3_util.o
|
||||
Object lib/NitroSDK/asm/gx_load2d.o
|
||||
|
||||
Reference in New Issue
Block a user