Commit 7f4fed80 by Jamie Madill Committed by Commit Bot

D3D11: Consolidate Rasterizer State application.

BUG=angleproject:2052 Change-Id: I11094744bab4570712632a424f29dff8b19a8dea Reviewed-on: https://chromium-review.googlesource.com/659235Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent b05f3659
......@@ -1089,7 +1089,7 @@ gl::Error Blit11::swizzleTexture(const gl::Context *context,
// Apply state
stateManager->setSimpleBlendState(nullptr);
stateManager->setDepthStencilState(nullptr, 0xFFFFFFFF);
deviceContext->RSSetState(mScissorDisabledRasterizerState.get());
stateManager->setRasterizerState(&mScissorDisabledRasterizerState);
// Apply shaders
stateManager->setInputLayout(support.inputLayout);
......@@ -1217,11 +1217,11 @@ gl::Error Blit11::copyTexture(const gl::Context *context,
scissorRect.bottom = scissor->y + scissor->height;
deviceContext->RSSetScissorRects(1, &scissorRect);
deviceContext->RSSetState(mScissorEnabledRasterizerState.get());
stateManager->setRasterizerState(&mScissorEnabledRasterizerState);
}
else
{
deviceContext->RSSetState(mScissorDisabledRasterizerState.get());
stateManager->setRasterizerState(&mScissorDisabledRasterizerState);
}
// Apply shaders
......@@ -1344,11 +1344,11 @@ gl::Error Blit11::copyDepth(const gl::Context *context,
scissorRect.bottom = scissor->y + scissor->height;
deviceContext->RSSetScissorRects(1, &scissorRect);
deviceContext->RSSetState(mScissorEnabledRasterizerState.get());
stateManager->setRasterizerState(&mScissorEnabledRasterizerState);
}
else
{
deviceContext->RSSetState(mScissorDisabledRasterizerState.get());
stateManager->setRasterizerState(&mScissorDisabledRasterizerState);
}
ANGLE_TRY(mQuad2DIL.resolve(mRenderer));
......@@ -2017,7 +2017,7 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveDepth(const gl::Context *conte
stateManager->setPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
stateManager->setDrawShaders(&mResolveDepthStencilVS.getObj(), nullptr,
&mResolveDepthPS.getObj());
deviceContext->RSSetState(nullptr);
stateManager->setRasterizerState(nullptr);
stateManager->setDepthStencilState(&mDepthStencilState, 0xFFFFFFFF);
stateManager->setRenderTargets(nullptr, 0, mResolvedDepthDSView.get());
stateManager->setSimpleBlendState(nullptr);
......@@ -2187,7 +2187,7 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(const gl::Context *con
stateManager->setInputLayout(nullptr);
stateManager->setPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
stateManager->setDrawShaders(&mResolveDepthStencilVS.getObj(), nullptr, pixelShader);
deviceContext->RSSetState(nullptr);
stateManager->setRasterizerState(nullptr);
stateManager->setDepthStencilState(nullptr, 0xFFFFFFFF);
stateManager->setRenderTarget(mResolvedDepthStencilRTView.get(), nullptr);
stateManager->setSimpleBlendState(nullptr);
......
......@@ -781,11 +781,11 @@ gl::Error Clear11::clearFramebuffer(const gl::Context *context,
if (needScissoredClear)
{
deviceContext->RSSetState(mScissorEnabledRasterizerState.get());
stateManager->setRasterizerState(&mScissorEnabledRasterizerState);
}
else
{
deviceContext->RSSetState(mScissorDisabledRasterizerState.get());
stateManager->setRasterizerState(&mScissorDisabledRasterizerState);
}
// Get Shaders
......
......@@ -197,7 +197,7 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::Context *context,
stateManager->setSingleVertexBuffer(nullptr, 0, 0);
stateManager->setSimpleBlendState(nullptr);
stateManager->setDepthStencilState(&mCopyDepthStencilState, 0xFFFFFFFF);
deviceContext->RSSetState(mCopyRasterizerState.get());
stateManager->setRasterizerState(&mCopyRasterizerState);
stateManager->setRenderTarget(textureRTV.get(), nullptr);
......
......@@ -2065,6 +2065,22 @@ void StateManager11::setSimpleBlendState(const d3d11::BlendState *blendState)
mInternalDirtyBits.set(DIRTY_BIT_BLEND_STATE);
}
void StateManager11::setRasterizerState(const d3d11::RasterizerState *rasterizerState)
{
ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
if (rasterizerState)
{
deviceContext->RSSetState(rasterizerState->get());
}
else
{
deviceContext->RSSetState(nullptr);
}
mInternalDirtyBits.set(DIRTY_BIT_RASTERIZER_STATE);
}
// For each Direct3D sampler of either the pixel or vertex stage,
// looks up the corresponding OpenGL texture image unit and texture type,
// and sets the texture and its addressing/filtering state (or NULL when inactive).
......
......@@ -213,6 +213,7 @@ class StateManager11 final : angle::NonCopyable
void setPixelConstantBuffer(unsigned int slot, const d3d11::Buffer *buffer);
void setDepthStencilState(const d3d11::DepthStencilState *depthStencilState, UINT stencilRef);
void setSimpleBlendState(const d3d11::BlendState *blendState);
void setRasterizerState(const d3d11::RasterizerState *rasterizerState);
// Not handled by an internal dirty bit because of the extra draw parameters.
gl::Error applyVertexBuffer(const gl::Context *context,
......
......@@ -829,7 +829,7 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(const gl::Context *context,
// Apply state
stateManager->setDepthStencilState(nullptr, 0xFFFFFFFF);
stateManager->setSimpleBlendState(nullptr);
deviceContext->RSSetState(mPassThroughRS.get());
stateManager->setRasterizerState(&mPassThroughRS);
// Apply shaders
stateManager->setInputLayout(&mPassThroughIL);
......
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