Commit 8ef9a968 by Jamie Madill Committed by Commit Bot

D3D11: Fix memory leak on multisample stencil resolve.

This would happen when checking the current resource vs the prior one. Calling GetResource would increment the reference count, but we would not properly call Release. BUG=angleproject:1710 Change-Id: Iefa9ee60929b9808985649c83f6322c1043fa5ed Reviewed-on: https://chromium-review.googlesource.com/434801Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 3117c69e
...@@ -2129,6 +2129,8 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS ...@@ -2129,6 +2129,8 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS
{ {
mStencilSRV.Reset(); mStencilSRV.Reset();
} }
SafeRelease(priorResource);
} }
if (mStencilSRV == nullptr) if (mStencilSRV == nullptr)
......
...@@ -4018,9 +4018,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn, ...@@ -4018,9 +4018,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
RenderTarget11 *drawRenderTarget11 = GetAs<RenderTarget11>(drawRenderTarget); RenderTarget11 *drawRenderTarget11 = GetAs<RenderTarget11>(drawRenderTarget);
if (!drawRenderTarget11) if (!drawRenderTarget11)
{ {
return gl::Error( return gl::OutOfMemory()
GL_OUT_OF_MEMORY, << "Failed to retrieve the internal draw render target from the draw framebuffer.";
"Failed to retrieve the internal draw render target from the draw framebuffer.");
} }
TextureHelper11 drawTexture = TextureHelper11::MakeAndReference( TextureHelper11 drawTexture = TextureHelper11::MakeAndReference(
...@@ -4032,9 +4031,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn, ...@@ -4032,9 +4031,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
RenderTarget11 *readRenderTarget11 = GetAs<RenderTarget11>(readRenderTarget); RenderTarget11 *readRenderTarget11 = GetAs<RenderTarget11>(readRenderTarget);
if (!readRenderTarget11) if (!readRenderTarget11)
{ {
return gl::Error( return gl::OutOfMemory()
GL_OUT_OF_MEMORY, << "Failed to retrieve the internal read render target from the read framebuffer.";
"Failed to retrieve the internal read render target from the read framebuffer.");
} }
TextureHelper11 readTexture; TextureHelper11 readTexture;
...@@ -4043,8 +4041,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn, ...@@ -4043,8 +4041,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
if (readRenderTarget->getSamples() > 1) if (readRenderTarget->getSamples() > 1)
{ {
auto readRT11 = GetAs<RenderTarget11>(readRenderTarget); ANGLE_TRY_RESULT(resolveMultisampledTexture(readRenderTarget11, depthBlit, stencilBlit),
ANGLE_TRY_RESULT(resolveMultisampledTexture(readRT11, depthBlit, stencilBlit), readTexture); readTexture);
if (!stencilBlit) if (!stencilBlit)
{ {
...@@ -4060,9 +4058,9 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn, ...@@ -4060,9 +4058,9 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
mDevice->CreateShaderResourceView(readTexture.getResource(), &viewDesc, &readSRV); mDevice->CreateShaderResourceView(readTexture.getResource(), &viewDesc, &readSRV);
if (FAILED(hresult)) if (FAILED(hresult))
{ {
return gl::Error( return gl::OutOfMemory()
GL_OUT_OF_MEMORY, << "Renderer11::blitRenderbufferRect: Failed to create temporary SRV, "
"Renderer11::blitRenderbufferRect: Failed to create temporary SRV."); << hresult;
} }
} }
} }
......
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