Commit 29a65546 by Dian Xiang

Using dirty bit notification for D3D11 scissor rectangle state

BUG=angleproject:1161 This is a continuation of the dirty bit refactor Change-Id: I1a9f297835943eee5f756e4e4721b2db543184ec Reviewed-on: https://chromium-review.googlesource.com/312987Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Tested-by: 's avatarDian Xiang <dianx@google.com>
parent 2da819e1
......@@ -1441,31 +1441,7 @@ gl::Error Renderer11::setDepthStencilState(const gl::State &glState)
void Renderer11::setScissorRectangle(const gl::Rectangle &scissor, bool enabled)
{
if (mForceSetScissor || memcmp(&scissor, &mCurScissor, sizeof(gl::Rectangle)) != 0 ||
enabled != mScissorEnabled)
{
if (enabled)
{
D3D11_RECT rect;
rect.left = std::max(0, scissor.x);
rect.top = std::max(0, scissor.y);
rect.right = scissor.x + std::max(0, scissor.width);
rect.bottom = scissor.y + std::max(0, scissor.height);
mDeviceContext->RSSetScissorRects(1, &rect);
}
if (enabled != mScissorEnabled)
{
mStateManager.forceSetRasterState();
}
mCurScissor = scissor;
mScissorEnabled = enabled;
mStateManager.setCurScissorEnabled(mScissorEnabled);
}
mForceSetScissor = false;
mStateManager.setScissorRectangle(scissor, enabled);
}
void Renderer11::setViewport(const gl::Rectangle &viewport, float zNear, float zFar, GLenum drawMode, GLenum frontFace,
......@@ -1728,7 +1704,6 @@ gl::Error Renderer11::applyRenderTarget(const gl::Framebuffer *framebuffer)
mRenderTargetDesc.height = renderTargetHeight;
mRenderTargetDesc.format = renderTargetFormat;
mForceSetViewport = true;
mForceSetScissor = true;
mStateManager.forceSetBlendState();
if (!mDepthStencilInitialized)
......@@ -2525,7 +2500,7 @@ void Renderer11::markAllStateDirty()
mStateManager.forceSetBlendState();
mStateManager.forceSetDepthStencilState();
mStateManager.forceSetRasterState();
mForceSetScissor = true;
mStateManager.forceSetScissorState();
mForceSetViewport = true;
mAppliedIB = NULL;
......
......@@ -413,11 +413,6 @@ class Renderer11 : public RendererD3D
StateManager11 mStateManager;
// Currently applied scissor rectangle
bool mForceSetScissor;
bool mScissorEnabled;
gl::Rectangle mCurScissor;
// Currently applied viewport
bool mForceSetViewport;
gl::Rectangle mCurViewport;
......
......@@ -38,11 +38,12 @@ class StateManager11 final : angle::NonCopyable
gl::Error setRasterizerState(const gl::RasterizerState &rasterState);
void setScissorRectangle(const gl::Rectangle &scissor, bool enabled);
void forceSetBlendState() { mBlendStateIsDirty = true; }
void forceSetDepthStencilState() { mDepthStencilStateIsDirty = true; }
void forceSetRasterState() { mRasterizerStateIsDirty = true; }
void setCurScissorEnabled(bool enabled) { mCurScissorEnabled = enabled; }
void forceSetScissorState() { mScissorStateIsDirty = true; }
void updateStencilSizeIfChanged(bool depthStencilInitialized, unsigned int stencilSize);
......@@ -68,7 +69,10 @@ class StateManager11 final : angle::NonCopyable
bool mRasterizerStateIsDirty;
gl::RasterizerState mCurRasterState;
// Currently applied scissor rectangle state
bool mScissorStateIsDirty;
bool mCurScissorEnabled;
gl::Rectangle mCurScissorRect;
ID3D11DeviceContext *mDeviceContext;
RenderStateCache *mStateCache;
......
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