Commit e9e15349 by Jamie Madill

D3D11: Remove RTV and DSV cache vars from Renderer11.

These were only referenced by the StateManager11. Instead of using these cache variables, ensure the StateManager11 marks the RT as dirty and apply the RenderTarget state. Also remove the RenderTarget setters from Renderer11, and don't unapply RTs after a one-time set operation. The StateManager11 should take care of updating the necessary changes itself. BUG=angleproject:1321 Change-Id: Idc8d22ea9e92ac8d07392ab10d067df6084403bb Reviewed-on: https://chromium-review.googlesource.com/330462Reviewed-by: 's avatarJohn Bauman <jbauman@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 4b66f055
......@@ -729,7 +729,7 @@ gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source,
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr);
// Apply render target
mRenderer->setOneTimeRenderTarget(dest);
stateManager->setOneTimeRenderTarget(dest, nullptr);
// Set the viewport
D3D11_VIEWPORT viewport;
......@@ -753,8 +753,6 @@ gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source,
// Unbind textures and render targets and vertex buffer
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr);
mRenderer->unapplyRenderTargets();
UINT zero = 0;
ID3D11Buffer *const nullBuffer = nullptr;
deviceContext->IASetVertexBuffers(0, 1, &nullBuffer, &zero, &zero);
......@@ -870,7 +868,7 @@ gl::Error Blit11::copyTexture(ID3D11ShaderResourceView *source,
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr);
// Apply render target
mRenderer->setOneTimeRenderTarget(dest);
stateManager->setOneTimeRenderTarget(dest, nullptr);
// Set the viewport
D3D11_VIEWPORT viewport;
......@@ -904,8 +902,6 @@ gl::Error Blit11::copyTexture(ID3D11ShaderResourceView *source,
// Unbind textures and render targets and vertex buffer
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr);
mRenderer->unapplyRenderTargets();
UINT zero = 0;
ID3D11Buffer *const nullBuffer = nullptr;
deviceContext->IASetVertexBuffers(0, 1, &nullBuffer, &zero, &zero);
......@@ -998,7 +994,7 @@ gl::Error Blit11::copyDepth(ID3D11ShaderResourceView *source, const gl::Box &sou
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr);
// Apply render target
deviceContext->OMSetRenderTargets(0, nullptr, dest);
stateManager->setOneTimeRenderTarget(nullptr, dest);
// Set the viewport
D3D11_VIEWPORT viewport;
......@@ -1022,8 +1018,6 @@ gl::Error Blit11::copyDepth(ID3D11ShaderResourceView *source, const gl::Box &sou
// Unbind textures and render targets and vertex buffer
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr);
mRenderer->unapplyRenderTargets();
UINT zero = 0;
ID3D11Buffer *const nullBuffer = nullptr;
deviceContext->IASetVertexBuffers(0, 1, &nullBuffer, &zero, &zero);
......
......@@ -521,8 +521,7 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams, const gl
deviceContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
// Apply render targets
deviceContext->OMSetRenderTargets(static_cast<unsigned int>(rtvs.size()),
(rtvs.empty() ? nullptr : &rtvs[0]), dsv);
mRenderer->getStateManager()->setOneTimeRenderTargets(rtvs, dsv);
// Draw the clear quad
deviceContext->Draw(4, 0);
......
......@@ -238,7 +238,7 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::PixelUnpackState &unpac
deviceContext->OMSetDepthStencilState(mCopyDepthStencilState, 0xFFFFFFFF);
deviceContext->RSSetState(mCopyRasterizerState);
mRenderer->setOneTimeRenderTarget(textureRTV);
stateManager->setOneTimeRenderTarget(textureRTV, nullptr);
if (!StructEquals(mParamsData, shaderParams))
{
......
......@@ -3021,28 +3021,6 @@ gl::Error Renderer11::copyImage2DArray(const gl::Framebuffer *framebuffer, const
return gl::Error(GL_NO_ERROR);
}
void Renderer11::unapplyRenderTargets()
{
setOneTimeRenderTarget(NULL);
}
// When finished with this rendertarget, markAllStateDirty must be called.
void Renderer11::setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView)
{
ID3D11RenderTargetView *rtvArray[gl::IMPLEMENTATION_MAX_DRAW_BUFFERS] = {NULL};
rtvArray[0] = renderTargetView;
mDeviceContext->OMSetRenderTargets(getRendererCaps().maxDrawBuffers, rtvArray, NULL);
// Do not preserve the serial for this one-time-use render target
for (size_t rtIndex = 0; rtIndex < ArraySize(mAppliedRTVs); rtIndex++)
{
mAppliedRTVs[rtIndex] = angle::DirtyPointer;
}
mAppliedDSV = angle::DirtyPointer;
}
gl::Error Renderer11::createRenderTarget(int width, int height, GLenum format, GLsizei samples, RenderTargetD3D **outRT)
{
const d3d11::TextureFormat &formatInfo = d3d11::GetTextureFormatInfo(format, mRenderer11DeviceCaps);
......
......@@ -257,8 +257,6 @@ class Renderer11 : public RendererD3D
GLenum destinationFormat, GLenum sourcePixelsType, const gl::Box &destArea);
void markAllStateDirty();
void unapplyRenderTargets();
void setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView);
gl::Error packPixels(const TextureHelper11 &textureHelper,
const PackPixelsParams &params,
uint8_t *pixelsOut);
......@@ -390,10 +388,6 @@ class Renderer11 : public RendererD3D
RenderStateCache mStateCache;
// current render target states
uintptr_t mAppliedRTVs[gl::IMPLEMENTATION_MAX_DRAW_BUFFERS];
uintptr_t mAppliedDSV;
// Currently applied sampler states
std::vector<bool> mForceSetVertexSamplerStates;
std::vector<gl::SamplerState> mCurVertexSamplerStates;
......
......@@ -799,10 +799,22 @@ void StateManager11::invalidateEverything()
invalidateBoundViews();
}
void StateManager11::setRenderTarget(ID3D11RenderTargetView *renderTarget,
ID3D11DepthStencilView *depthStencil)
void StateManager11::setOneTimeRenderTarget(ID3D11RenderTargetView *renderTarget,
ID3D11DepthStencilView *depthStencil)
{
mRenderer->getDeviceContext()->OMSetRenderTargets(1, &renderTarget, depthStencil);
mRenderTargetIsDirty = true;
}
void StateManager11::setOneTimeRenderTargets(
const std::vector<ID3D11RenderTargetView *> &renderTargets,
ID3D11DepthStencilView *depthStencil)
{
UINT count = static_cast<UINT>(renderTargets.size());
auto renderTargetPointer = (!renderTargets.empty() ? renderTargets.data() : nullptr);
mRenderer->getDeviceContext()->OMSetRenderTargets(count, renderTargetPointer, depthStencil);
mRenderTargetIsDirty = true;
}
void StateManager11::onBeginQuery(Query11 *query)
......
......@@ -81,8 +81,11 @@ class StateManager11 final : angle::NonCopyable
void invalidateRenderTarget();
void invalidateBoundViews();
void invalidateEverything();
void setRenderTarget(ID3D11RenderTargetView *renderTarget,
ID3D11DepthStencilView *depthStencil);
void setOneTimeRenderTarget(ID3D11RenderTargetView *renderTarget,
ID3D11DepthStencilView *depthStencil);
void setOneTimeRenderTargets(const std::vector<ID3D11RenderTargetView *> &renderTargets,
ID3D11DepthStencilView *depthStencil);
void onBeginQuery(Query11 *query);
void onDeleteQueryObject(Query11 *query);
......
......@@ -744,8 +744,10 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width,
deviceContext->PSSetShader(mPassThroughPS, NULL, 0);
deviceContext->GSSetShader(NULL, NULL, 0);
auto stateManager = mRenderer->getStateManager();
// Apply render targets
mRenderer->setOneTimeRenderTarget(mBackBufferRTView);
stateManager->setOneTimeRenderTarget(mBackBufferRTView, nullptr);
// Set the viewport
D3D11_VIEWPORT viewport;
......@@ -758,7 +760,6 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width,
deviceContext->RSSetViewports(1, &viewport);
// Apply textures
auto stateManager = mRenderer->getStateManager();
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, mOffscreenSRView);
deviceContext->PSSetSamplers(0, 1, &mPassThroughSampler);
......@@ -770,7 +771,6 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width,
// cleanup is caught under the current eglSwapBuffers() PIX/Graphics Diagnostics call rather than the next one.
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, NULL);
mRenderer->unapplyRenderTargets();
mRenderer->markAllStateDirty();
return EGL_SUCCESS;
......
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