Refactored Renderer::setRasterizerState to no longer need a depthSize parameter.

TRAC #22145

Signed-off-by: Nicolas Capens
Signed-off-by: Daniel Koch

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1516 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 9c24798..20a2933 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1780,10 +1780,7 @@
     GLint alwaysFront = !isTriangleMode(drawMode);
     programBinary->setUniform1iv(pointsOrLines, 1, &alwaysFront);
 
-    const gl::Renderbuffer *depthbuffer = framebufferObject->getDepthbuffer();
-    unsigned int depthSize = depthbuffer ? depthbuffer->getDepthSize() : 0;
-
-    mRenderer->setRasterizerState(mState.rasterizer, depthSize);
+    mRenderer->setRasterizerState(mState.rasterizer);
 
     unsigned int mask = 0;
     if (mState.sampleCoverage)
diff --git a/src/libGLESv2/renderer/Renderer.h b/src/libGLESv2/renderer/Renderer.h
index c239b8c..57d3596 100644
--- a/src/libGLESv2/renderer/Renderer.h
+++ b/src/libGLESv2/renderer/Renderer.h
@@ -81,7 +81,7 @@
     virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler) = 0;
     virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture) = 0;
 
-    virtual void setRasterizerState(const gl::RasterizerState &rasterState, unsigned int depthSize) = 0;
+    virtual void setRasterizerState(const gl::RasterizerState &rasterState) = 0;
     virtual void setBlendState(const gl::BlendState &blendState, const gl::Color &blendColor,
                                unsigned int sampleMask) = 0;
     virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 5a1f7a2..1f2c5de 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -257,13 +257,11 @@
     UNIMPLEMENTED();
 }
 
-void Renderer11::setRasterizerState(const gl::RasterizerState &rasterState, unsigned int depthSize)
+void Renderer11::setRasterizerState(const gl::RasterizerState &rasterState)
 {
-    if (mForceSetRasterState ||
-        memcmp(&rasterState, &mCurRasterState, sizeof(gl::RasterizerState)) != 0 ||
-        depthSize != mCurDepthSize)
+    if (mForceSetRasterState || memcmp(&rasterState, &mCurRasterState, sizeof(gl::RasterizerState)) != 0)
     {
-        ID3D11RasterizerState *dxRasterState = mStateCache.getRasterizerState(rasterState, depthSize);
+        ID3D11RasterizerState *dxRasterState = mStateCache.getRasterizerState(rasterState, mCurDepthSize);
         if (!dxRasterState)
         {
             ERR("NULL blend state returned by RenderStateCache::getRasterizerState, setting the "
@@ -277,7 +275,6 @@
             dxRasterState->Release();
         }
         mCurRasterState = rasterState;
-        mCurDepthSize = depthSize;
     }
 
     mForceSetRasterState = false;
diff --git a/src/libGLESv2/renderer/Renderer11.h b/src/libGLESv2/renderer/Renderer11.h
index 157d57b..aebd856 100644
--- a/src/libGLESv2/renderer/Renderer11.h
+++ b/src/libGLESv2/renderer/Renderer11.h
@@ -48,7 +48,7 @@
     virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
     virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture);
 
-    virtual void setRasterizerState(const gl::RasterizerState &rasterState, unsigned int depthSize);
+    virtual void setRasterizerState(const gl::RasterizerState &rasterState);
     virtual void setBlendState(const gl::BlendState &blendState, const gl::Color &blendColor,
                                unsigned int sampleMask);
     virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index d8995d5..a834a4d 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -660,10 +660,9 @@
     mDevice->SetTexture(d3dSampler, d3dTexture);
 }
 
-void Renderer9::setRasterizerState(const gl::RasterizerState &rasterState, unsigned int depthSize)
+void Renderer9::setRasterizerState(const gl::RasterizerState &rasterState)
 {
     bool rasterStateChanged = mForceSetRasterState || memcmp(&rasterState, &mCurRasterState, sizeof(gl::RasterizerState)) != 0;
-    bool depthSizeChanged = mForceSetRasterState || depthSize != mCurDepthSize;
 
     if (rasterStateChanged)
     {
@@ -679,18 +678,13 @@
 
         mDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, rasterState.scissorTest ? TRUE : FALSE);
 
-        mCurRasterState = rasterState;
-    }
-
-    if (rasterStateChanged || depthSizeChanged)
-    {
         if (rasterState.polygonOffsetFill)
         {
-            if (depthSize > 0)
+            if (mCurDepthSize > 0)
             {
                 mDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, *(DWORD*)&rasterState.polygonOffsetFactor);
 
-                float depthBias = ldexp(rasterState.polygonOffsetUnits, -static_cast<int>(depthSize));
+                float depthBias = ldexp(rasterState.polygonOffsetUnits, -static_cast<int>(mCurDepthSize));
                 mDevice->SetRenderState(D3DRS_DEPTHBIAS, *(DWORD*)&depthBias);
             }
         }
@@ -700,7 +694,7 @@
             mDevice->SetRenderState(D3DRS_DEPTHBIAS, 0);
         }
 
-        mCurDepthSize = depthSize;
+        mCurRasterState = rasterState;
     }
 
     mForceSetRasterState = false;
@@ -1088,6 +1082,8 @@
         stencilbufferSerial != mAppliedStencilbufferSerial ||
         !mDepthStencilInitialized)
     {
+        unsigned int depthSize = 0;
+
         // Apply the depth stencil on the device
         if (depthStencil)
         {
@@ -1107,12 +1103,20 @@
 
             mDevice->SetDepthStencilSurface(depthStencilSurface);
             depthStencilSurface->Release();
+
+            depthSize = depthStencil->getDepthSize();
         }
         else
         {
             mDevice->SetDepthStencilSurface(NULL);
         }
 
+        if (!mDepthStencilInitialized || depthSize != mCurDepthSize)
+        {
+            mCurDepthSize = depthSize;
+            mForceSetRasterState = true;
+        }
+
         mAppliedDepthbufferSerial = depthbufferSerial;
         mAppliedStencilbufferSerial = stencilbufferSerial;
         mDepthStencilInitialized = true;
diff --git a/src/libGLESv2/renderer/Renderer9.h b/src/libGLESv2/renderer/Renderer9.h
index cd555d0..68afc19 100644
--- a/src/libGLESv2/renderer/Renderer9.h
+++ b/src/libGLESv2/renderer/Renderer9.h
@@ -83,7 +83,7 @@
     virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
     virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture);
 
-    virtual void setRasterizerState(const gl::RasterizerState &rasterState, unsigned int depthSize);
+    virtual void setRasterizerState(const gl::RasterizerState &rasterState);
     virtual void setBlendState(const gl::BlendState &blendState, const gl::Color &blendColor,
                                unsigned int sampleMask);
     virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
@@ -246,6 +246,7 @@
     bool mDepthStencilInitialized;
     bool mRenderTargetDescInitialized;
     rx::RenderTarget::Desc mRenderTargetDesc;
+    unsigned int mCurDepthSize;
 
     IDirect3DStateBlock9 *mMaskedClearSavedState;
 
@@ -259,7 +260,6 @@
 
     bool mForceSetRasterState;
     gl::RasterizerState mCurRasterState;
-    unsigned int mCurDepthSize;
 
     bool mForceSetScissor;
     gl::Rectangle mCurScissor;