mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
softjit: Get rid of pointless AGE00 tests.
This commit is contained in:
parent
f47fb7e14e
commit
75a918f96f
1 changed files with 21 additions and 7 deletions
|
@ -27,6 +27,21 @@ static_assert(sizeof(PixelFuncID) == sizeof(PixelFuncID::fullKey) + sizeof(Pixel
|
||||||
static_assert(sizeof(PixelFuncID) == sizeof(PixelFuncID::fullKey), "Bad pixel func ID size");
|
static_assert(sizeof(PixelFuncID) == sizeof(PixelFuncID::fullKey), "Bad pixel func ID size");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline GEComparison OptimizeRefByteCompare(GEComparison func, u8 ref) {
|
||||||
|
// Not equal tests are easier.
|
||||||
|
if (ref == 0 && func == GE_COMP_GREATER)
|
||||||
|
return GE_COMP_NOTEQUAL;
|
||||||
|
if (ref == 0xFF && func == GE_COMP_LESS)
|
||||||
|
return GE_COMP_NOTEQUAL;
|
||||||
|
|
||||||
|
// Sometimes games pointlessly use tests like these.
|
||||||
|
if (ref == 0 && func == GE_COMP_GEQUAL)
|
||||||
|
return GE_COMP_ALWAYS;
|
||||||
|
if (ref == 0xFF && func == GE_COMP_LEQUAL)
|
||||||
|
return GE_COMP_ALWAYS;
|
||||||
|
return func;
|
||||||
|
}
|
||||||
|
|
||||||
void ComputePixelFuncID(PixelFuncID *id) {
|
void ComputePixelFuncID(PixelFuncID *id) {
|
||||||
id->fullKey = 0;
|
id->fullKey = 0;
|
||||||
|
|
||||||
|
@ -60,8 +75,8 @@ void ComputePixelFuncID(PixelFuncID *id) {
|
||||||
id->depthWrite = gstate.isDepthTestEnabled() && gstate.isDepthWriteEnabled();
|
id->depthWrite = gstate.isDepthTestEnabled() && gstate.isDepthWriteEnabled();
|
||||||
|
|
||||||
if (id->stencilTest) {
|
if (id->stencilTest) {
|
||||||
id->stencilTestFunc = gstate.getStencilTestFunction();
|
|
||||||
id->stencilTestRef = gstate.getStencilTestRef() & gstate.getStencilTestMask();
|
id->stencilTestRef = gstate.getStencilTestRef() & gstate.getStencilTestMask();
|
||||||
|
id->stencilTestFunc = OptimizeRefByteCompare(gstate.getStencilTestFunction(), id->stencilTestRef);
|
||||||
id->hasStencilTestMask = gstate.getStencilTestMask() != 0xFF && gstate.FrameBufFormat() != GE_FORMAT_565;
|
id->hasStencilTestMask = gstate.getStencilTestMask() != 0xFF && gstate.FrameBufFormat() != GE_FORMAT_565;
|
||||||
|
|
||||||
// Stencil can't be written on 565, and any invalid op acts like KEEP, which is 0.
|
// Stencil can't be written on 565, and any invalid op acts like KEEP, which is 0.
|
||||||
|
@ -79,10 +94,6 @@ void ComputePixelFuncID(PixelFuncID *id) {
|
||||||
if (id->StencilTestFunc() == GE_COMP_ALWAYS)
|
if (id->StencilTestFunc() == GE_COMP_ALWAYS)
|
||||||
id->sFail = id->zPass;
|
id->sFail = id->zPass;
|
||||||
|
|
||||||
// Not equal tests are easier.
|
|
||||||
if (id->stencilTestRef == 0 && id->StencilTestFunc() == GE_COMP_GREATER)
|
|
||||||
id->stencilTestFunc = GE_COMP_NOTEQUAL;
|
|
||||||
|
|
||||||
// Normalize REPLACE 00 to ZERO, especially if using a mask.
|
// Normalize REPLACE 00 to ZERO, especially if using a mask.
|
||||||
if (gstate.getStencilTestRef() == 0) {
|
if (gstate.getStencilTestRef() == 0) {
|
||||||
if (id->SFail() == GE_STENCILOP_REPLACE)
|
if (id->SFail() == GE_STENCILOP_REPLACE)
|
||||||
|
@ -116,8 +127,11 @@ void ComputePixelFuncID(PixelFuncID *id) {
|
||||||
id->alphaTestRef = gstate.getAlphaTestRef() & gstate.getAlphaTestMask();
|
id->alphaTestRef = gstate.getAlphaTestRef() & gstate.getAlphaTestMask();
|
||||||
id->hasAlphaTestMask = gstate.getAlphaTestMask() != 0xFF;
|
id->hasAlphaTestMask = gstate.getAlphaTestMask() != 0xFF;
|
||||||
// Try to pick a more optimal variant.
|
// Try to pick a more optimal variant.
|
||||||
if (id->alphaTestRef == 0 && id->AlphaTestFunc() == GE_COMP_GREATER)
|
id->alphaTestFunc = OptimizeRefByteCompare(id->AlphaTestFunc(), id->alphaTestRef);
|
||||||
id->alphaTestFunc = GE_COMP_NOTEQUAL;
|
if (id->alphaTestFunc == GE_COMP_ALWAYS) {
|
||||||
|
id->alphaTestRef = 0;
|
||||||
|
id->hasAlphaTestMask = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If invalid (6 or 7), doesn't do any blending, so force off.
|
// If invalid (6 or 7), doesn't do any blending, so force off.
|
||||||
|
|
Loading…
Add table
Reference in a new issue