Matches for GXPixel (#27)

* 95% match GXSetColorUpdate & GXSetAlphaUpdate (regswap)

* Fix regswap lets gooooo

* Match for GXSetZCompLoc

* Match GXSetDither
This commit is contained in:
Samuel Royal
2025-12-01 15:08:10 -05:00
committed by GitHub
parent 2f0b7cb9ec
commit 9f0a697af2
2 changed files with 54 additions and 0 deletions

View File

@@ -291,6 +291,9 @@ void __GXInitGX();
} }
#endif #endif
#define GX_BITFIELD(field, pos, size, value) (__rlwimi((field), (value), 31 - (pos) - (size) + 1, (pos), (pos) + (size) - 1))
#define GX_BITFIELD_SET(field, pos, size, value) ((field) = GX_BITFIELD(field, pos, size, value))
#define CP_STREAM_REG_INDEX_SIZE 4 #define CP_STREAM_REG_INDEX_SIZE 4
#define CP_STREAM_REG_INDEX_SHIFT 0 #define CP_STREAM_REG_INDEX_SHIFT 0
#define CP_STREAM_REG_INDEX_MASK 0x0000000f #define CP_STREAM_REG_INDEX_MASK 0x0000000f

51
src/Dolphin/gx/GXPixel.c Normal file
View File

@@ -0,0 +1,51 @@
#include "dolphin/gx.h"
#include "dolphin/gx/GXPriv.h"
void GXSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color);
void GXSetFogColor(GXColor color);
// ? GXSetFogRangeAdj();
void GXSetBlendMode(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor,
GXLogicOp op);
void GXSetColorUpdate(GXBool update_enable) {
GXData* gxdata = gx;
u32 r6 = gxdata->cmode0;
GX_BITFIELD_SET(r6, 28, 1, update_enable);
GX_WRITE_RA_REG(r6);
gxdata->cmode0 = r6;
gxdata->bpSentNot = GX_FALSE;
};
void GXSetAlphaUpdate(GXBool update_enable) {
GXData* gxdata = gx;
u32 r6 = gxdata->cmode0;
GX_BITFIELD_SET(r6, 27, 1, update_enable);
GX_WRITE_RA_REG(r6);
gxdata->cmode0 = r6;
gxdata->bpSentNot = GX_FALSE;
};
void GXSetZMode(GXBool compare_enable, GXCompare func, GXBool update_enable);
void GXSetZCompLoc(GXBool before_tex) {
GXData* gxdata = gx;
gxdata->peCtrl = gxdata->peCtrl & 0xffffffbf | (u32)before_tex << 6;
GX_WRITE_RA_REG(gxdata->peCtrl);
gxdata->bpSentNot = GX_FALSE;
};
void GXSetPixelFmt(GXPixelFmt pix_fmt, GXZFmt16 z_fmt);
void GXSetDither(GXBool dither) {
GXData* gxdata = gx;
u32 r6 = gxdata->cmode0;
r6 = r6 & 0xfffffffb | (u32)dither << 2;
GX_WRITE_RA_REG(r6);
gxdata->cmode0 = r6;
gxdata->bpSentNot = GX_FALSE;
};
void GXSetDstAlpha(GXBool enable, u8 alpha);
// ? GXSetFieldMask();
void GXSetFieldMode(u8 field_mode, u8 half_aspect_ratio);