Further improve early stencil rejection test by restoring stencil blocks to a single value if possible

This commit is contained in:
Magnus Norddahl 2016-12-01 13:31:42 +01:00
commit fc16f6bbbc
4 changed files with 94 additions and 45 deletions

View file

@ -44,7 +44,7 @@ private:
void LoopBlockY();
void LoopBlockX();
void LoopFullBlock();
void LoopPartialBlock();
void LoopPartialBlock(bool isSingleStencilValue);
void SetupAffineBlock();
SSAVec4i ProcessPixel32(SSAVec4i bg, SSAInt *varying);
@ -59,9 +59,7 @@ private:
SSAInt ToPal8(SSAVec4i c);
void SetStencilBlock(SSAInt block);
void StencilSet(SSAInt x, SSAInt y, SSAUByte value);
void StencilClear(SSAUByte value);
SSAUByte StencilGet(SSAInt x, SSAInt y);
SSAUByte StencilGetSingle();
SSABool StencilIsSingleValue();
@ -87,6 +85,8 @@ private:
SSAStack<SSAFloat> stack_AffineW;
SSAStack<SSAFloat> stack_AffineVaryingPosY[TriVertex::NumVarying];
SSAStack<SSAInt> stack_AffineVaryingPosX[TriVertex::NumVarying];
SSAStack<SSABool> stack_stencilblock_restored;
SSAStack<SSAUByte> stack_stencilblock_lastval;
SSAUBytePtr dest;
SSAInt pitch;