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
parent e2f7b6b3
...@@ -1780,10 +1780,7 @@ void Context::applyState(GLenum drawMode) ...@@ -1780,10 +1780,7 @@ void Context::applyState(GLenum drawMode)
GLint alwaysFront = !isTriangleMode(drawMode); GLint alwaysFront = !isTriangleMode(drawMode);
programBinary->setUniform1iv(pointsOrLines, 1, &alwaysFront); programBinary->setUniform1iv(pointsOrLines, 1, &alwaysFront);
const gl::Renderbuffer *depthbuffer = framebufferObject->getDepthbuffer(); mRenderer->setRasterizerState(mState.rasterizer);
unsigned int depthSize = depthbuffer ? depthbuffer->getDepthSize() : 0;
mRenderer->setRasterizerState(mState.rasterizer, depthSize);
unsigned int mask = 0; unsigned int mask = 0;
if (mState.sampleCoverage) if (mState.sampleCoverage)
......
...@@ -81,7 +81,7 @@ class Renderer ...@@ -81,7 +81,7 @@ class Renderer
virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler) = 0; 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 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, virtual void setBlendState(const gl::BlendState &blendState, const gl::Color &blendColor,
unsigned int sampleMask) = 0; unsigned int sampleMask) = 0;
virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef, virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
......
...@@ -257,13 +257,11 @@ void Renderer11::setTexture(gl::SamplerType type, int index, gl::Texture *textur ...@@ -257,13 +257,11 @@ void Renderer11::setTexture(gl::SamplerType type, int index, gl::Texture *textur
UNIMPLEMENTED(); UNIMPLEMENTED();
} }
void Renderer11::setRasterizerState(const gl::RasterizerState &rasterState, unsigned int depthSize) void Renderer11::setRasterizerState(const gl::RasterizerState &rasterState)
{ {
if (mForceSetRasterState || if (mForceSetRasterState || memcmp(&rasterState, &mCurRasterState, sizeof(gl::RasterizerState)) != 0)
memcmp(&rasterState, &mCurRasterState, sizeof(gl::RasterizerState)) != 0 ||
depthSize != mCurDepthSize)
{ {
ID3D11RasterizerState *dxRasterState = mStateCache.getRasterizerState(rasterState, depthSize); ID3D11RasterizerState *dxRasterState = mStateCache.getRasterizerState(rasterState, mCurDepthSize);
if (!dxRasterState) if (!dxRasterState)
{ {
ERR("NULL blend state returned by RenderStateCache::getRasterizerState, setting the " ERR("NULL blend state returned by RenderStateCache::getRasterizerState, setting the "
...@@ -277,7 +275,6 @@ void Renderer11::setRasterizerState(const gl::RasterizerState &rasterState, unsi ...@@ -277,7 +275,6 @@ void Renderer11::setRasterizerState(const gl::RasterizerState &rasterState, unsi
dxRasterState->Release(); dxRasterState->Release();
} }
mCurRasterState = rasterState; mCurRasterState = rasterState;
mCurDepthSize = depthSize;
} }
mForceSetRasterState = false; mForceSetRasterState = false;
......
...@@ -48,7 +48,7 @@ class Renderer11 : public Renderer ...@@ -48,7 +48,7 @@ class Renderer11 : public Renderer
virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler); 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 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, virtual void setBlendState(const gl::BlendState &blendState, const gl::Color &blendColor,
unsigned int sampleMask); unsigned int sampleMask);
virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef, virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
......
...@@ -660,10 +660,9 @@ void Renderer9::setTexture(gl::SamplerType type, int index, gl::Texture *texture ...@@ -660,10 +660,9 @@ void Renderer9::setTexture(gl::SamplerType type, int index, gl::Texture *texture
mDevice->SetTexture(d3dSampler, d3dTexture); 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 rasterStateChanged = mForceSetRasterState || memcmp(&rasterState, &mCurRasterState, sizeof(gl::RasterizerState)) != 0;
bool depthSizeChanged = mForceSetRasterState || depthSize != mCurDepthSize;
if (rasterStateChanged) if (rasterStateChanged)
{ {
...@@ -679,18 +678,13 @@ void Renderer9::setRasterizerState(const gl::RasterizerState &rasterState, unsig ...@@ -679,18 +678,13 @@ void Renderer9::setRasterizerState(const gl::RasterizerState &rasterState, unsig
mDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, rasterState.scissorTest ? TRUE : FALSE); mDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, rasterState.scissorTest ? TRUE : FALSE);
mCurRasterState = rasterState;
}
if (rasterStateChanged || depthSizeChanged)
{
if (rasterState.polygonOffsetFill) if (rasterState.polygonOffsetFill)
{ {
if (depthSize > 0) if (mCurDepthSize > 0)
{ {
mDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, *(DWORD*)&rasterState.polygonOffsetFactor); 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); mDevice->SetRenderState(D3DRS_DEPTHBIAS, *(DWORD*)&depthBias);
} }
} }
...@@ -700,7 +694,7 @@ void Renderer9::setRasterizerState(const gl::RasterizerState &rasterState, unsig ...@@ -700,7 +694,7 @@ void Renderer9::setRasterizerState(const gl::RasterizerState &rasterState, unsig
mDevice->SetRenderState(D3DRS_DEPTHBIAS, 0); mDevice->SetRenderState(D3DRS_DEPTHBIAS, 0);
} }
mCurDepthSize = depthSize; mCurRasterState = rasterState;
} }
mForceSetRasterState = false; mForceSetRasterState = false;
...@@ -1088,6 +1082,8 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1088,6 +1082,8 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
stencilbufferSerial != mAppliedStencilbufferSerial || stencilbufferSerial != mAppliedStencilbufferSerial ||
!mDepthStencilInitialized) !mDepthStencilInitialized)
{ {
unsigned int depthSize = 0;
// Apply the depth stencil on the device // Apply the depth stencil on the device
if (depthStencil) if (depthStencil)
{ {
...@@ -1107,12 +1103,20 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1107,12 +1103,20 @@ bool Renderer9::applyRenderTarget(gl::Framebuffer *framebuffer)
mDevice->SetDepthStencilSurface(depthStencilSurface); mDevice->SetDepthStencilSurface(depthStencilSurface);
depthStencilSurface->Release(); depthStencilSurface->Release();
depthSize = depthStencil->getDepthSize();
} }
else else
{ {
mDevice->SetDepthStencilSurface(NULL); mDevice->SetDepthStencilSurface(NULL);
} }
if (!mDepthStencilInitialized || depthSize != mCurDepthSize)
{
mCurDepthSize = depthSize;
mForceSetRasterState = true;
}
mAppliedDepthbufferSerial = depthbufferSerial; mAppliedDepthbufferSerial = depthbufferSerial;
mAppliedStencilbufferSerial = stencilbufferSerial; mAppliedStencilbufferSerial = stencilbufferSerial;
mDepthStencilInitialized = true; mDepthStencilInitialized = true;
......
...@@ -83,7 +83,7 @@ class Renderer9 : public Renderer ...@@ -83,7 +83,7 @@ class Renderer9 : public Renderer
virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler); 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 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, virtual void setBlendState(const gl::BlendState &blendState, const gl::Color &blendColor,
unsigned int sampleMask); unsigned int sampleMask);
virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef, virtual void setDepthStencilState(const gl::DepthStencilState &depthStencilState, int stencilRef,
...@@ -246,6 +246,7 @@ class Renderer9 : public Renderer ...@@ -246,6 +246,7 @@ class Renderer9 : public Renderer
bool mDepthStencilInitialized; bool mDepthStencilInitialized;
bool mRenderTargetDescInitialized; bool mRenderTargetDescInitialized;
rx::RenderTarget::Desc mRenderTargetDesc; rx::RenderTarget::Desc mRenderTargetDesc;
unsigned int mCurDepthSize;
IDirect3DStateBlock9 *mMaskedClearSavedState; IDirect3DStateBlock9 *mMaskedClearSavedState;
...@@ -259,7 +260,6 @@ class Renderer9 : public Renderer ...@@ -259,7 +260,6 @@ class Renderer9 : public Renderer
bool mForceSetRasterState; bool mForceSetRasterState;
gl::RasterizerState mCurRasterState; gl::RasterizerState mCurRasterState;
unsigned int mCurDepthSize;
bool mForceSetScissor; bool mForceSetScissor;
gl::Rectangle mCurScissor; gl::Rectangle mCurScissor;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment