mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
Fix mask calculation in SetOtherMode_L functions.
Need other corrections/optimizations. Functions inside switch look useless now.
This commit is contained in:
parent
b33f643905
commit
4fa08bd906
24
F3D.cpp
24
F3D.cpp
|
@ -258,7 +258,8 @@ void F3D_SetOtherMode_H( u32 w0, u32 w1 )
|
|||
|
||||
void F3D_SetOtherMode_L( u32 w0, u32 w1 )
|
||||
{
|
||||
switch (_SHIFTR( w0, 8, 8 ))
|
||||
const u32 shift = _SHIFTR( w0, 8, 8 );
|
||||
switch (shift)
|
||||
{
|
||||
case G_MDSFT_ALPHACOMPARE:
|
||||
gDPSetAlphaCompare( w1 >> G_MDSFT_ALPHACOMPARE );
|
||||
|
@ -269,17 +270,18 @@ void F3D_SetOtherMode_L( u32 w0, u32 w1 )
|
|||
case G_MDSFT_RENDERMODE:
|
||||
gDPSetRenderMode( w1 & 0xCCCCFFFF, w1 & 0x3333FFFF );
|
||||
break;
|
||||
default:
|
||||
u32 shift = _SHIFTR( w0, 8, 8 );
|
||||
u32 length = _SHIFTR( w0, 0, 8 );
|
||||
u32 mask = ((1 << length) - 1) << shift;
|
||||
|
||||
gDP.otherMode.l &= ~mask;
|
||||
gDP.otherMode.l |= w1 & mask;
|
||||
|
||||
gDP.changed |= CHANGED_RENDERMODE | CHANGED_ALPHACOMPARE;
|
||||
break;
|
||||
}
|
||||
const u32 length = _SHIFTR( w0, 0, 8 );
|
||||
// u32 mask = ((1 << length) - 1) << shift;
|
||||
u32 mask = 0;
|
||||
for (int i = length; i > 0; i--)
|
||||
mask = (mask << 1) | 1;
|
||||
mask <<= shift;
|
||||
|
||||
gDP.otherMode.l &= ~mask;
|
||||
gDP.otherMode.l |= w1 & mask;
|
||||
|
||||
gDP.changed |= CHANGED_RENDERMODE | CHANGED_ALPHACOMPARE;
|
||||
}
|
||||
|
||||
void F3D_EndDL( u32 w0, u32 w1 )
|
||||
|
|
22
F3DEX2.cpp
22
F3DEX2.cpp
|
@ -193,7 +193,9 @@ void F3DEX2_SetOtherMode_H( u32 w0, u32 w1 )
|
|||
|
||||
void F3DEX2_SetOtherMode_L( u32 w0, u32 w1 )
|
||||
{
|
||||
switch (32 - _SHIFTR( w0, 8, 8 ) - (_SHIFTR( w0, 0, 8 ) + 1))
|
||||
const u32 length = _SHIFTR( w0, 0, 8 ) + 1;
|
||||
const u32 shift = 32 - _SHIFTR( w0, 8, 8 ) - length;
|
||||
switch (shift)
|
||||
{
|
||||
case G_MDSFT_ALPHACOMPARE:
|
||||
gDPSetAlphaCompare( w1 >> G_MDSFT_ALPHACOMPARE );
|
||||
|
@ -205,16 +207,18 @@ void F3DEX2_SetOtherMode_L( u32 w0, u32 w1 )
|
|||
gDPSetRenderMode( w1 & 0xCCCCFFFF, w1 & 0x3333FFFF );
|
||||
break;
|
||||
default:
|
||||
u32 length = _SHIFTR( w0, 0, 8 ) + 1;
|
||||
u32 shift = 32 - _SHIFTR( w0, 8, 8 ) - length;
|
||||
u32 mask = ((1 << length) - 1) << shift;
|
||||
|
||||
gDP.otherMode.l &= ~mask;
|
||||
gDP.otherMode.l |= w1 & mask;
|
||||
|
||||
gDP.changed |= CHANGED_RENDERMODE | CHANGED_ALPHACOMPARE;
|
||||
break;
|
||||
}
|
||||
//u32 mask = ((1 << length) - 1) << shift;
|
||||
u32 mask = 0;
|
||||
for (int i = length; i > 0; i--)
|
||||
mask = (mask << 1) | 1;
|
||||
mask <<= shift;
|
||||
|
||||
gDP.otherMode.l &= ~mask;
|
||||
gDP.otherMode.l |= w1 & mask;
|
||||
|
||||
gDP.changed |= CHANGED_RENDERMODE | CHANGED_ALPHACOMPARE;
|
||||
}
|
||||
|
||||
void F3DEX2_GeometryMode( u32 w0, u32 w1 )
|
||||
|
|
Loading…
Reference in New Issue
Block a user