Added Renderer11 methods to set a one-time render target, and unapply render target state.

TRAC #22679 Signed-off-by: Geoff Lang Signed-off-by: Shannon Woods Author: Jamie Madill git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@2025 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 47d37e30
...@@ -2686,8 +2686,8 @@ bool Renderer11::copyTexture(ID3D11ShaderResourceView *source, const gl::Rectang ...@@ -2686,8 +2686,8 @@ bool Renderer11::copyTexture(ID3D11ShaderResourceView *source, const gl::Rectang
static ID3D11ShaderResourceView *const nullSRV = NULL; static ID3D11ShaderResourceView *const nullSRV = NULL;
mDeviceContext->PSSetShaderResources(0, 1, &nullSRV); mDeviceContext->PSSetShaderResources(0, 1, &nullSRV);
// Apply render targets // Apply render target
mDeviceContext->OMSetRenderTargets(1, &dest, NULL); setOneTimeRenderTarget(dest);
// Set the viewport // Set the viewport
D3D11_VIEWPORT viewport; D3D11_VIEWPORT viewport;
...@@ -2709,11 +2709,10 @@ bool Renderer11::copyTexture(ID3D11ShaderResourceView *source, const gl::Rectang ...@@ -2709,11 +2709,10 @@ bool Renderer11::copyTexture(ID3D11ShaderResourceView *source, const gl::Rectang
// Unbind textures and render targets and vertex buffer // Unbind textures and render targets and vertex buffer
mDeviceContext->PSSetShaderResources(0, 1, &nullSRV); mDeviceContext->PSSetShaderResources(0, 1, &nullSRV);
static ID3D11RenderTargetView *const nullRTV = NULL; unapplyRenderTargets();
mDeviceContext->OMSetRenderTargets(1, &nullRTV, NULL);
static UINT zero = 0; UINT zero = 0;
static ID3D11Buffer *const nullBuffer = NULL; ID3D11Buffer *const nullBuffer = NULL;
mDeviceContext->IASetVertexBuffers(0, 1, &nullBuffer, &zero, &zero); mDeviceContext->IASetVertexBuffers(0, 1, &nullBuffer, &zero, &zero);
markAllStateDirty(); markAllStateDirty();
...@@ -2721,6 +2720,26 @@ bool Renderer11::copyTexture(ID3D11ShaderResourceView *source, const gl::Rectang ...@@ -2721,6 +2720,26 @@ bool Renderer11::copyTexture(ID3D11ShaderResourceView *source, const gl::Rectang
return true; return true;
} }
void Renderer11::unapplyRenderTargets()
{
setOneTimeRenderTarget(NULL);
}
void Renderer11::setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView)
{
ID3D11RenderTargetView *rtvArray[gl::IMPLEMENTATION_MAX_DRAW_BUFFERS] = {NULL};
rtvArray[0] = renderTargetView;
mDeviceContext->OMSetRenderTargets(getMaxRenderTargets(), rtvArray, NULL);
// Do not preserve the serial for this one-time-use render target
for (unsigned int rtIndex = 0; rtIndex < gl::IMPLEMENTATION_MAX_DRAW_BUFFERS; rtIndex++)
{
mAppliedRenderTargetSerials[rtIndex] = 0;
}
}
RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth) RenderTarget *Renderer11::createRenderTarget(SwapChain *swapChain, bool depth)
{ {
SwapChain11 *swapChain11 = SwapChain11::makeSwapChain11(swapChain); SwapChain11 *swapChain11 = SwapChain11::makeSwapChain11(swapChain);
......
...@@ -179,6 +179,8 @@ class Renderer11 : public Renderer ...@@ -179,6 +179,8 @@ class Renderer11 : public Renderer
IDXGIFactory *getDxgiFactory() { return mDxgiFactory; }; IDXGIFactory *getDxgiFactory() { return mDxgiFactory; };
bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource); bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
void unapplyRenderTargets();
void setOneTimeRenderTarget(ID3D11RenderTargetView *renderTargetView);
private: private:
DISALLOW_COPY_AND_ASSIGN(Renderer11); DISALLOW_COPY_AND_ASSIGN(Renderer11);
......
...@@ -649,7 +649,7 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height) ...@@ -649,7 +649,7 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
deviceContext->GSSetShader(NULL, NULL, 0); deviceContext->GSSetShader(NULL, NULL, 0);
// Apply render targets // Apply render targets
deviceContext->OMSetRenderTargets(1, &mBackBufferRTView, NULL); mRenderer->setOneTimeRenderTarget(mBackBufferRTView);
// Set the viewport // Set the viewport
D3D11_VIEWPORT viewport; D3D11_VIEWPORT viewport;
...@@ -689,9 +689,7 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height) ...@@ -689,9 +689,7 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
static ID3D11ShaderResourceView *const nullSRV = NULL; static ID3D11ShaderResourceView *const nullSRV = NULL;
deviceContext->PSSetShaderResources(0, 1, &nullSRV); deviceContext->PSSetShaderResources(0, 1, &nullSRV);
static ID3D11RenderTargetView *const nullRTV = NULL; mRenderer->unapplyRenderTargets();
deviceContext->OMSetRenderTargets(1, &nullRTV, NULL);
mRenderer->markAllStateDirty(); mRenderer->markAllStateDirty();
return EGL_SUCCESS; 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