Commit 2916b30e by Geoff Lang

Removed extra AddRef and Release calls on D3D11 objects.

Change-Id: I5918c67735658912663c79e964b8edfb288784a3 Reviewed-on: https://chromium-review.googlesource.com/178450Reviewed-by: 's avatarShannon Woods <shannonwoods@chromium.org> Commit-Queue: Shannon Woods <shannonwoods@chromium.org> Tested-by: 's avatarShannon Woods <shannonwoods@chromium.org>
parent 89a13e9e
......@@ -182,10 +182,27 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv,
ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
{
mRenderer = Renderer11::makeRenderer11(renderer);
mTexture = resource;
if (mTexture)
{
mTexture->AddRef();
}
mRenderTarget = rtv;
if (mRenderTarget)
{
mRenderTarget->AddRef();
}
mDepthStencil = NULL;
mShaderResource = srv;
if (mShaderResource)
{
mShaderResource->AddRef();
}
mSubresourceIndex = 0;
if (mRenderTarget && mTexture)
......@@ -211,10 +228,27 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv,
ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
{
mRenderer = Renderer11::makeRenderer11(renderer);
mTexture = resource;
if (mTexture)
{
mTexture->AddRef();
}
mRenderTarget = NULL;
mDepthStencil = dsv;
if (mDepthStencil)
{
mDepthStencil->AddRef();
}
mShaderResource = srv;
if (mShaderResource)
{
mShaderResource->AddRef();
}
mSubresourceIndex = 0;
if (mDepthStencil && mTexture)
......@@ -376,11 +410,6 @@ void RenderTarget11::invalidate(GLint x, GLint y, GLsizei width, GLsizei height)
ID3D11Resource *RenderTarget11::getTexture() const
{
if (mTexture)
{
mTexture->AddRef();
}
return mTexture;
}
......
......@@ -20,6 +20,7 @@ class Renderer11;
class RenderTarget11 : public RenderTarget
{
public:
// RenderTarget11 takes ownership of any D3D11 resources it is given and will AddRef them
RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth);
RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth);
RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum internalFormat, GLsizei samples);
......
......@@ -628,73 +628,33 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
return EGL_SUCCESS;
}
// Increments refcount on texture.
// caller must Release() the returned texture
ID3D11Texture2D *SwapChain11::getOffscreenTexture()
{
if (mOffscreenTexture)
{
mOffscreenTexture->AddRef();
}
return mOffscreenTexture;
}
// Increments refcount on view.
// caller must Release() the returned view
ID3D11RenderTargetView *SwapChain11::getRenderTarget()
{
if (mOffscreenRTView)
{
mOffscreenRTView->AddRef();
}
return mOffscreenRTView;
}
// Increments refcount on view.
// caller must Release() the returned view
ID3D11ShaderResourceView *SwapChain11::getRenderTargetShaderResource()
{
if (mOffscreenSRView)
{
mOffscreenSRView->AddRef();
}
return mOffscreenSRView;
}
// Increments refcount on view.
// caller must Release() the returned view
ID3D11DepthStencilView *SwapChain11::getDepthStencil()
{
if (mDepthStencilDSView)
{
mDepthStencilDSView->AddRef();
}
return mDepthStencilDSView;
}
// Increments refcount on view.
// caller must Release() the returned view
ID3D11ShaderResourceView * SwapChain11::getDepthStencilShaderResource()
{
if (mDepthStencilSRView)
{
mDepthStencilSRView->AddRef();
}
return mDepthStencilSRView;
}
ID3D11Texture2D *SwapChain11::getDepthStencilTexture()
{
if (mDepthStencilTexture)
{
mDepthStencilTexture->AddRef();
}
return mDepthStencilTexture;
}
......
......@@ -289,7 +289,10 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
: TextureStorage11(renderer, 0, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE)
{
mTexture = swapchain->getOffscreenTexture();
mTexture->AddRef();
mSRV = swapchain->getRenderTargetShaderResource();
mSRV->AddRef();
mSwizzleTexture = NULL;
mSwizzleSRV = NULL;
......@@ -316,7 +319,6 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
offscreenRTV->GetDesc(&rtvDesc);
mRenderTargetFormat = rtvDesc.Format;
SafeRelease(offscreenRTV);
GLint internalFormat = d3d11_gl::GetInternalFormat(mTextureFormat, renderer->getCurrentClientVersion());
mSwizzleTextureFormat = gl_d3d11::GetSwizzleTexFormat(internalFormat, renderer);
......@@ -453,12 +455,10 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
}
ASSERT(SUCCEEDED(result));
// RenderTarget11 expects to be the owner of the resources it is given but TextureStorage11
// also needs to keep a reference to the texture/SRV.
mTexture->AddRef();
srv->AddRef();
mRenderTarget[level] = new RenderTarget11(mRenderer, rtv, mTexture, srv, getLevelWidth(level), getLevelHeight(level), 1);
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
}
else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN)
{
......@@ -480,12 +480,10 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
}
ASSERT(SUCCEEDED(result));
// RenderTarget11 expects to be the owner of the resources it is given but TextureStorage11
// also needs to keep a reference to the texture/SRV.
mTexture->AddRef();
srv->AddRef();
mRenderTarget[level] = new RenderTarget11(mRenderer, dsv, mTexture, srv, getLevelWidth(level), getLevelHeight(level), 1);
// RenderTarget will take ownership of these resources
SafeRelease(dsv);
}
else
{
......@@ -787,11 +785,11 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
}
ASSERT(SUCCEEDED(result));
// RenderTarget11 expects to be the owner of the resources it is given but TextureStorage11
// also needs to keep a reference to the texture.
mTexture->AddRef();
mRenderTarget[faceIndex][level] = new RenderTarget11(mRenderer, rtv, mTexture, srv, getLevelWidth(level), getLevelHeight(level), 1);
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
SafeRelease(srv);
}
else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN)
{
......@@ -813,11 +811,11 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
}
ASSERT(SUCCEEDED(result));
// RenderTarget11 expects to be the owner of the resources it is given but TextureStorage11
// also needs to keep a reference to the texture.
mTexture->AddRef();
mRenderTarget[faceIndex][level] = new RenderTarget11(mRenderer, dsv, mTexture, srv, getLevelWidth(level), getLevelHeight(level), 1);
// RenderTarget will take ownership of these resources
SafeRelease(dsv);
SafeRelease(srv);
}
else
{
......@@ -1150,12 +1148,10 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
}
ASSERT(SUCCEEDED(result));
// RenderTarget11 expects to be the owner of the resources it is given but TextureStorage11
// also needs to keep a reference to the texture/SRV.
mTexture->AddRef();
srv->AddRef();
mLevelRenderTargets[mipLevel] = new RenderTarget11(mRenderer, rtv, mTexture, srv, getLevelWidth(mipLevel), getLevelHeight(mipLevel), getLevelDepth(mipLevel));
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
}
else
{
......@@ -1203,11 +1199,11 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
}
ASSERT(SUCCEEDED(result));
// RenderTarget11 expects to be the owner of the resources it is given but TextureStorage11
// also needs to keep a reference to the texture.
mTexture->AddRef();
mLevelLayerRenderTargets[key] = new RenderTarget11(mRenderer, rtv, mTexture, srv, getLevelWidth(mipLevel), getLevelHeight(mipLevel), 1);
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
SafeRelease(srv);
}
else
{
......@@ -1517,11 +1513,11 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
}
ASSERT(SUCCEEDED(result));
// RenderTarget11 expects to be the owner of the resources it is given but TextureStorage11
// also needs to keep a reference to the texture.
mTexture->AddRef();
mRenderTargets[key] = new RenderTarget11(mRenderer, rtv, mTexture, srv, getLevelWidth(mipLevel), getLevelHeight(mipLevel), 1);
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
SafeRelease(srv);
}
else
{
......
......@@ -18,6 +18,7 @@
namespace rx
{
// TODO: AddRef the incoming surface to take ownership instead of expecting that its ref is being given.
RenderTarget9::RenderTarget9(Renderer *renderer, IDirect3DSurface9 *surface)
{
mRenderer = Renderer9::makeRenderer9(renderer);
......@@ -112,6 +113,7 @@ void RenderTarget9::invalidate(GLint x, GLint y, GLsizei width, GLsizei height)
IDirect3DSurface9 *RenderTarget9::getSurface()
{
// Caller is responsible for releasing the returned surface reference.
// TODO: remove the AddRef to match RenderTarget11
if (mRenderTarget)
{
mRenderTarget->AddRef();
......
......@@ -328,6 +328,7 @@ EGLint SwapChain9::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
// Increments refcount on surface.
// caller must Release() the returned surface
// TODO: remove the AddRef to match SwapChain11
IDirect3DSurface9 *SwapChain9::getRenderTarget()
{
if (mRenderTarget)
......@@ -340,6 +341,7 @@ IDirect3DSurface9 *SwapChain9::getRenderTarget()
// Increments refcount on surface.
// caller must Release() the returned surface
// TODO: remove the AddRef to match SwapChain11
IDirect3DSurface9 *SwapChain9::getDepthStencil()
{
if (mDepthStencil)
......@@ -352,6 +354,7 @@ IDirect3DSurface9 *SwapChain9::getDepthStencil()
// Increments refcount on texture.
// caller must Release() the returned texture
// TODO: remove the AddRef to match SwapChain11
IDirect3DTexture9 *SwapChain9::getOffscreenTexture()
{
if (mOffscreenTexture)
......
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