Refactored Renderer::setDepthStencilState to no longer require the stencil size parameter.
TRAC #22145
Signed-off-by: Nicolas Capens
Signed-off-by: Daniel Koch
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1517 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index a834a4d..14a5e37 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -798,14 +798,13 @@
}
void Renderer9::setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
- int stencilBackRef, bool frontFaceCCW, unsigned int stencilSize)
+ int stencilBackRef, bool frontFaceCCW)
{
bool depthStencilStateChanged = mForceSetDepthStencilState ||
memcmp(&depthStencilState, &mCurDepthStencilState, sizeof(gl::DepthStencilState)) != 0;
bool stencilRefChanged = mForceSetDepthStencilState || stencilRef != mCurStencilRef ||
stencilBackRef != mCurStencilBackRef;
bool frontFaceCCWChanged = mForceSetDepthStencilState || frontFaceCCW != mCurFrontFaceCCW;
- bool stencilSizeChanged = mForceSetDepthStencilState || stencilSize != mCurStencilSize;
if (depthStencilStateChanged)
{
@@ -822,9 +821,9 @@
mCurDepthStencilState = depthStencilState;
}
- if (depthStencilStateChanged || stencilRefChanged || frontFaceCCWChanged || stencilSizeChanged)
+ if (depthStencilStateChanged || stencilRefChanged || frontFaceCCWChanged)
{
- if (depthStencilState.stencilTest && stencilSize > 0)
+ if (depthStencilState.stencilTest && mCurStencilSize > 0)
{
mDevice->SetRenderState(D3DRS_STENCILENABLE, TRUE);
mDevice->SetRenderState(D3DRS_TWOSIDEDSTENCILMODE, TRUE);
@@ -842,7 +841,7 @@
}
// get the maximum size of the stencil ref
- GLuint maxStencil = (1 << stencilSize) - 1;
+ unsigned int maxStencil = (1 << mCurStencilSize) - 1;
mDevice->SetRenderState(frontFaceCCW ? D3DRS_STENCILWRITEMASK : D3DRS_CCW_STENCILWRITEMASK,
depthStencilState.stencilWritemask);
@@ -888,7 +887,6 @@
mCurStencilRef = stencilRef;
mCurStencilBackRef = stencilBackRef;
mCurFrontFaceCCW = frontFaceCCW;
- mCurStencilSize = stencilSize;
}
mForceSetDepthStencilState = false;
@@ -1083,6 +1081,7 @@
!mDepthStencilInitialized)
{
unsigned int depthSize = 0;
+ unsigned int stencilSize = 0;
// Apply the depth stencil on the device
if (depthStencil)
@@ -1105,6 +1104,7 @@
depthStencilSurface->Release();
depthSize = depthStencil->getDepthSize();
+ stencilSize = depthStencil->getStencilSize();
}
else
{
@@ -1117,6 +1117,12 @@
mForceSetRasterState = true;
}
+ if (!mDepthStencilInitialized || stencilSize != mCurStencilSize)
+ {
+ mCurStencilSize = stencilSize;
+ mForceSetDepthStencilState = true;
+ }
+
mAppliedDepthbufferSerial = depthbufferSerial;
mAppliedStencilbufferSerial = stencilbufferSerial;
mDepthStencilInitialized = true;