Commit 07b87fa3 by Geoff Lang

RenderTarget11::get* calls no longer add references to the D3D resources.

Issue #451 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Geoff Lang
parent 93a5ce96
...@@ -329,44 +329,21 @@ RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target) ...@@ -329,44 +329,21 @@ RenderTarget11 *RenderTarget11::makeRenderTarget11(RenderTarget *target)
ID3D11Texture2D *RenderTarget11::getTexture() const ID3D11Texture2D *RenderTarget11::getTexture() const
{ {
if (mTexture)
{
mTexture->AddRef();
}
return mTexture; return mTexture;
} }
// Adds reference, caller must call Release
ID3D11RenderTargetView *RenderTarget11::getRenderTargetView() const ID3D11RenderTargetView *RenderTarget11::getRenderTargetView() const
{ {
if (mRenderTarget)
{
mRenderTarget->AddRef();
}
return mRenderTarget; return mRenderTarget;
} }
// Adds reference, caller must call Release
ID3D11DepthStencilView *RenderTarget11::getDepthStencilView() const ID3D11DepthStencilView *RenderTarget11::getDepthStencilView() const
{ {
if (mDepthStencil)
{
mDepthStencil->AddRef();
}
return mDepthStencil; return mDepthStencil;
} }
// Adds reference, caller must call Release
ID3D11ShaderResourceView *RenderTarget11::getShaderResourceView() const ID3D11ShaderResourceView *RenderTarget11::getShaderResourceView() const
{ {
if (mShaderResource)
{
mShaderResource->AddRef();
}
return mShaderResource; return mShaderResource;
} }
......
...@@ -27,16 +27,9 @@ class RenderTarget11 : public RenderTarget ...@@ -27,16 +27,9 @@ class RenderTarget11 : public RenderTarget
static RenderTarget11 *makeRenderTarget11(RenderTarget *renderTarget); static RenderTarget11 *makeRenderTarget11(RenderTarget *renderTarget);
// Adds reference, caller must call Release
ID3D11Texture2D *getTexture() const; ID3D11Texture2D *getTexture() const;
// Adds reference, caller must call Release
ID3D11RenderTargetView *getRenderTargetView() const; ID3D11RenderTargetView *getRenderTargetView() const;
// Adds reference, caller must call Release
ID3D11DepthStencilView *getDepthStencilView() const; ID3D11DepthStencilView *getDepthStencilView() const;
// Adds reference, caller must call Release
ID3D11ShaderResourceView *getShaderResourceView() const; ID3D11ShaderResourceView *getShaderResourceView() const;
unsigned int getSubresourceIndex() const; unsigned int getSubresourceIndex() const;
......
...@@ -1017,9 +1017,6 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer) ...@@ -1017,9 +1017,6 @@ bool Renderer11::applyRenderTarget(gl::Framebuffer *framebuffer)
mDepthStencilInitialized = true; mDepthStencilInitialized = true;
} }
SafeRelease(framebufferRTVs);
SafeRelease(framebufferDSV);
return true; return true;
} }
...@@ -1566,8 +1563,6 @@ void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer * ...@@ -1566,8 +1563,6 @@ void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *
clearParams.colorClearValue.blue, clearParams.colorClearValue.blue,
clearParams.colorClearValue.alpha }; clearParams.colorClearValue.alpha };
mDeviceContext->ClearRenderTargetView(framebufferRTV, clearValues); mDeviceContext->ClearRenderTargetView(framebufferRTV, clearValues);
framebufferRTV->Release();
} }
} }
} }
...@@ -1605,8 +1600,6 @@ void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer * ...@@ -1605,8 +1600,6 @@ void Renderer11::clear(const gl::ClearParameters &clearParams, gl::Framebuffer *
UINT8 stencilClear = clearParams.stencilClearValue & 0x000000FF; UINT8 stencilClear = clearParams.stencilClearValue & 0x000000FF;
mDeviceContext->ClearDepthStencilView(framebufferDSV, clearFlags, depthClear, stencilClear); mDeviceContext->ClearDepthStencilView(framebufferDSV, clearFlags, depthClear, stencilClear);
framebufferDSV->Release();
} }
} }
} }
...@@ -2449,7 +2442,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2449,7 +2442,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
TextureStorage11_2D *storage11 = TextureStorage11_2D::makeTextureStorage11_2D(storage->getStorageInstance()); TextureStorage11_2D *storage11 = TextureStorage11_2D::makeTextureStorage11_2D(storage->getStorageInstance());
if (!storage11) if (!storage11)
{ {
source->Release();
ERR("Failed to retrieve the texture storage from the destination."); ERR("Failed to retrieve the texture storage from the destination.");
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
...@@ -2457,7 +2449,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2457,7 +2449,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
RenderTarget11 *destRenderTarget = RenderTarget11::makeRenderTarget11(storage11->getRenderTarget(level)); RenderTarget11 *destRenderTarget = RenderTarget11::makeRenderTarget11(storage11->getRenderTarget(level));
if (!destRenderTarget) if (!destRenderTarget)
{ {
source->Release();
ERR("Failed to retrieve the render target from the destination storage."); ERR("Failed to retrieve the render target from the destination storage.");
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
...@@ -2465,7 +2456,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2465,7 +2456,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
ID3D11RenderTargetView *dest = destRenderTarget->getRenderTargetView(); ID3D11RenderTargetView *dest = destRenderTarget->getRenderTargetView();
if (!dest) if (!dest)
{ {
source->Release();
ERR("Failed to retrieve the render target view from the destination render target."); ERR("Failed to retrieve the render target view from the destination render target.");
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
...@@ -2479,9 +2469,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2479,9 +2469,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool ret = copyTexture(source, sourceRect, sourceRenderTarget->getWidth(), sourceRenderTarget->getHeight(), bool ret = copyTexture(source, sourceRect, sourceRenderTarget->getWidth(), sourceRenderTarget->getHeight(),
dest, destRect, destRenderTarget->getWidth(), destRenderTarget->getHeight(), destFormat); dest, destRect, destRenderTarget->getWidth(), destRenderTarget->getHeight(), destFormat);
source->Release();
dest->Release();
return ret; return ret;
} }
...@@ -2512,7 +2499,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2512,7 +2499,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
TextureStorage11_Cube *storage11 = TextureStorage11_Cube::makeTextureStorage11_Cube(storage->getStorageInstance()); TextureStorage11_Cube *storage11 = TextureStorage11_Cube::makeTextureStorage11_Cube(storage->getStorageInstance());
if (!storage11) if (!storage11)
{ {
source->Release();
ERR("Failed to retrieve the texture storage from the destination."); ERR("Failed to retrieve the texture storage from the destination.");
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
...@@ -2520,7 +2506,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2520,7 +2506,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
RenderTarget11 *destRenderTarget = RenderTarget11::makeRenderTarget11(storage11->getRenderTarget(target, level)); RenderTarget11 *destRenderTarget = RenderTarget11::makeRenderTarget11(storage11->getRenderTarget(target, level));
if (!destRenderTarget) if (!destRenderTarget)
{ {
source->Release();
ERR("Failed to retrieve the render target from the destination storage."); ERR("Failed to retrieve the render target from the destination storage.");
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
...@@ -2528,7 +2513,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2528,7 +2513,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
ID3D11RenderTargetView *dest = destRenderTarget->getRenderTargetView(); ID3D11RenderTargetView *dest = destRenderTarget->getRenderTargetView();
if (!dest) if (!dest)
{ {
source->Release();
ERR("Failed to retrieve the render target view from the destination render target."); ERR("Failed to retrieve the render target view from the destination render target.");
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
...@@ -2542,9 +2526,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so ...@@ -2542,9 +2526,6 @@ bool Renderer11::copyImage(gl::Framebuffer *framebuffer, const gl::Rectangle &so
bool ret = copyTexture(source, sourceRect, sourceRenderTarget->getWidth(), sourceRenderTarget->getHeight(), bool ret = copyTexture(source, sourceRect, sourceRenderTarget->getWidth(), sourceRenderTarget->getHeight(),
dest, destRect, destRenderTarget->getWidth(), destRenderTarget->getHeight(), destFormat); dest, destRect, destRenderTarget->getWidth(), destRenderTarget->getHeight(), destFormat);
source->Release();
dest->Release();
return ret; return ret;
} }
...@@ -2894,7 +2875,6 @@ bool Renderer11::getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned ...@@ -2894,7 +2875,6 @@ bool Renderer11::getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned
{ {
ID3D11Resource *textureResource = NULL; ID3D11Resource *textureResource = NULL;
colorBufferRTV->GetResource(&textureResource); colorBufferRTV->GetResource(&textureResource);
colorBufferRTV->Release();
if (textureResource) if (textureResource)
{ {
...@@ -3429,6 +3409,16 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R ...@@ -3429,6 +3409,16 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R
{ {
ASSERT(readRect.width == drawRect.width && readRect.height == drawRect.height); ASSERT(readRect.width == drawRect.width && readRect.height == drawRect.height);
RenderTarget11 *drawRenderTarget11 = RenderTarget11::makeRenderTarget11(drawRenderTarget);
if (!drawRenderTarget)
{
ERR("Failed to retrieve the draw render target from the draw framebuffer.");
return gl::error(GL_OUT_OF_MEMORY, false);
}
ID3D11Texture2D *drawTexture = drawRenderTarget11->getTexture();
unsigned int drawSubresource = drawRenderTarget11->getSubresourceIndex();
RenderTarget11 *readRenderTarget11 = RenderTarget11::makeRenderTarget11(readRenderTarget); RenderTarget11 *readRenderTarget11 = RenderTarget11::makeRenderTarget11(readRenderTarget);
if (!readRenderTarget) if (!readRenderTarget)
{ {
...@@ -3440,16 +3430,13 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R ...@@ -3440,16 +3430,13 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R
unsigned int readSubresource = 0; unsigned int readSubresource = 0;
if (readRenderTarget->getSamples() > 0) if (readRenderTarget->getSamples() > 0)
{ {
ID3D11Texture2D *unresolvedTexture = readRenderTarget11->getTexture(); readTexture = resolveMultisampledTexture(readRenderTarget11->getTexture(), readRenderTarget11->getSubresourceIndex());
readTexture = resolveMultisampledTexture(unresolvedTexture, readRenderTarget11->getSubresourceIndex());
readSubresource = 0; readSubresource = 0;
unresolvedTexture->Release();
} }
else else
{ {
readTexture = readRenderTarget11->getTexture(); readTexture = readRenderTarget11->getTexture();
readTexture->AddRef();
readSubresource = readRenderTarget11->getSubresourceIndex(); readSubresource = readRenderTarget11->getSubresourceIndex();
} }
...@@ -3459,17 +3446,6 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R ...@@ -3459,17 +3446,6 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R
return gl::error(GL_OUT_OF_MEMORY, false); return gl::error(GL_OUT_OF_MEMORY, false);
} }
RenderTarget11 *drawRenderTarget11 = RenderTarget11::makeRenderTarget11(drawRenderTarget);
if (!drawRenderTarget)
{
readTexture->Release();
ERR("Failed to retrieve the draw render target from the draw framebuffer.");
return gl::error(GL_OUT_OF_MEMORY, false);
}
ID3D11Texture2D *drawTexture = drawRenderTarget11->getTexture();
unsigned int drawSubresource = drawRenderTarget11->getSubresourceIndex();
D3D11_BOX readBox; D3D11_BOX readBox;
readBox.left = readRect.x; readBox.left = readRect.x;
readBox.right = readRect.x + readRect.width; readBox.right = readRect.x + readRect.width;
...@@ -3485,8 +3461,7 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R ...@@ -3485,8 +3461,7 @@ bool Renderer11::blitRenderbufferRect(const gl::Rectangle &readRect, const gl::R
mDeviceContext->CopySubresourceRegion(drawTexture, drawSubresource, drawRect.x, drawRect.y, 0, mDeviceContext->CopySubresourceRegion(drawTexture, drawSubresource, drawRect.x, drawRect.y, 0,
readTexture, readSubresource, pSrcBox); readTexture, readSubresource, pSrcBox);
readTexture->Release(); SafeRelease(readTexture);
drawTexture->Release();
return true; return true;
} }
......
...@@ -187,15 +187,6 @@ void TextureStorage11::generateMipmapLayer(RenderTarget11 *source, RenderTarget1 ...@@ -187,15 +187,6 @@ void TextureStorage11::generateMipmapLayer(RenderTarget11 *source, RenderTarget1
destRTV, destArea, dest->getWidth(), dest->getHeight(), destRTV, destArea, dest->getWidth(), dest->getHeight(),
GL_RGBA); GL_RGBA);
} }
if (sourceSRV)
{
sourceSRV->Release();
}
if (destRTV)
{
destRTV->Release();
}
} }
} }
......
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