mirror of https://github.com/PrimeDecomp/prime.git
133 lines
2.6 KiB
C
133 lines
2.6 KiB
C
|
#ifndef DOLPHIN_GXVERT_H
|
||
|
#define DOLPHIN_GXVERT_H
|
||
|
|
||
|
#include <dolphin/types.h>
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#define GXFIFO_ADDR 0xCC008000
|
||
|
|
||
|
typedef union {
|
||
|
u8 u8;
|
||
|
u16 u16;
|
||
|
u32 u32;
|
||
|
u64 u64;
|
||
|
s8 s8;
|
||
|
s16 s16;
|
||
|
s32 s32;
|
||
|
s64 s64;
|
||
|
f32 f32;
|
||
|
f64 f64;
|
||
|
} PPCWGPipe;
|
||
|
|
||
|
#ifdef __MWERKS__
|
||
|
volatile PPCWGPipe GXWGFifo : GXFIFO_ADDR;
|
||
|
#else
|
||
|
#define GXWGFifo (*(volatile PPCWGPipe*)GXFIFO_ADDR)
|
||
|
#endif
|
||
|
|
||
|
#ifdef TARGET_PC
|
||
|
|
||
|
void GXPosition3f32(f32 x, f32 y, f32 z);
|
||
|
void GXPosition3u16(u16 x, u16 y, u16 z);
|
||
|
void GXPosition3s16(s16 x, s16 y, s16 z);
|
||
|
void GXPosition3u8(u8 x, u8 y, u8 z);
|
||
|
void GXPosition3s8(s8 x, s8 y, s8 z);
|
||
|
|
||
|
void GXPosition2f32(f32 x, f32 y);
|
||
|
void GXPosition2u16(u16 x, u16 y);
|
||
|
void GXPosition2s16(s16 x, s16 y);
|
||
|
void GXPosition2u8(u8 x, u8 y);
|
||
|
void GXPosition2s8(s8 x, s8 y);
|
||
|
|
||
|
void GXPosition1x16(u16 index);
|
||
|
void GXPosition1x8(u8 index);
|
||
|
|
||
|
void GXNormal3f32(f32 x, f32 y, f32 z);
|
||
|
void GXNormal3s16(s16 x, s16 y, s16 z);
|
||
|
void GXNormal3s8(s8 x, s8 y, s8 z);
|
||
|
|
||
|
void GXNormal1x16(u16 index);
|
||
|
void GXNormal1x8(u8 index);
|
||
|
|
||
|
void GXColor4u8(u8 r, u8 g, u8 b, u8 a);
|
||
|
|
||
|
void GXColor3u8(u8 r, u8 g, u8 b);
|
||
|
|
||
|
void GXColor1u32(u32 clr);
|
||
|
void GXColor1u16(u16 clr);
|
||
|
|
||
|
void GXColor1x16(u16 index);
|
||
|
void GXColor1x8(u8 index);
|
||
|
|
||
|
void GXTexCoord2f32(f32 s, f32 t);
|
||
|
void GXTexCoord2u16(u16 s, u16 t);
|
||
|
void GXTexCoord2s16(s16 s, s16 t);
|
||
|
void GXTexCoord2u8(u8 s, u8 t);
|
||
|
void GXTexCoord2s8(s8 s, s8 t);
|
||
|
|
||
|
void GXTexCoord1f32(f32 s, f32 t);
|
||
|
void GXTexCoord1u16(u16 s, u16 t);
|
||
|
void GXTexCoord1s16(s16 s, s16 t);
|
||
|
void GXTexCoord1u8(u8 s, u8 t);
|
||
|
void GXTexCoord1s8(s8 s, s8 t);
|
||
|
|
||
|
void GXTexCoord1x16(u16 index);
|
||
|
void GXTexCoord1x8(u8 index);
|
||
|
|
||
|
extern void GXEnd(void);
|
||
|
|
||
|
#else
|
||
|
|
||
|
static inline void GXPosition2f32(const f32 x, const f32 y) {
|
||
|
GXWGFifo.f32 = x;
|
||
|
GXWGFifo.f32 = y;
|
||
|
}
|
||
|
|
||
|
static inline void GXPosition3s16(const s16 x, const s16 y, const s16 z) {
|
||
|
GXWGFifo.s16 = x;
|
||
|
GXWGFifo.s16 = y;
|
||
|
GXWGFifo.s16 = z;
|
||
|
}
|
||
|
|
||
|
static inline void GXPosition3f32(const f32 x, const f32 y, const f32 z) {
|
||
|
GXWGFifo.f32 = x;
|
||
|
GXWGFifo.f32 = y;
|
||
|
GXWGFifo.f32 = z;
|
||
|
}
|
||
|
|
||
|
static inline void GXNormal3f32(const f32 x, const f32 y, const f32 z) {
|
||
|
GXWGFifo.f32 = x;
|
||
|
GXWGFifo.f32 = y;
|
||
|
GXWGFifo.f32 = z;
|
||
|
}
|
||
|
|
||
|
static inline void GXColor4u8(const u8 r, const u8 g, const u8 b, const u8 a) {
|
||
|
GXWGFifo.u8 = r;
|
||
|
GXWGFifo.u8 = g;
|
||
|
GXWGFifo.u8 = b;
|
||
|
GXWGFifo.u8 = a;
|
||
|
}
|
||
|
|
||
|
static inline void GXTexCoord2s16(const s16 u, const s16 v) {
|
||
|
GXWGFifo.s16 = u;
|
||
|
GXWGFifo.s16 = v;
|
||
|
}
|
||
|
|
||
|
static inline void GXTexCoord2f32(const f32 u, const f32 v) {
|
||
|
GXWGFifo.f32 = u;
|
||
|
GXWGFifo.f32 = v;
|
||
|
}
|
||
|
|
||
|
static inline void GXEnd(void) {}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|