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, ...@@ -182,10 +182,27 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11RenderTargetView *rtv,
ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth) ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
{ {
mRenderer = Renderer11::makeRenderer11(renderer); mRenderer = Renderer11::makeRenderer11(renderer);
mTexture = resource; mTexture = resource;
if (mTexture)
{
mTexture->AddRef();
}
mRenderTarget = rtv; mRenderTarget = rtv;
if (mRenderTarget)
{
mRenderTarget->AddRef();
}
mDepthStencil = NULL; mDepthStencil = NULL;
mShaderResource = srv; mShaderResource = srv;
if (mShaderResource)
{
mShaderResource->AddRef();
}
mSubresourceIndex = 0; mSubresourceIndex = 0;
if (mRenderTarget && mTexture) if (mRenderTarget && mTexture)
...@@ -211,10 +228,27 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ...@@ -211,10 +228,27 @@ RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv,
ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth) ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth)
{ {
mRenderer = Renderer11::makeRenderer11(renderer); mRenderer = Renderer11::makeRenderer11(renderer);
mTexture = resource; mTexture = resource;
if (mTexture)
{
mTexture->AddRef();
}
mRenderTarget = NULL; mRenderTarget = NULL;
mDepthStencil = dsv; mDepthStencil = dsv;
if (mDepthStencil)
{
mDepthStencil->AddRef();
}
mShaderResource = srv; mShaderResource = srv;
if (mShaderResource)
{
mShaderResource->AddRef();
}
mSubresourceIndex = 0; mSubresourceIndex = 0;
if (mDepthStencil && mTexture) if (mDepthStencil && mTexture)
...@@ -376,11 +410,6 @@ void RenderTarget11::invalidate(GLint x, GLint y, GLsizei width, GLsizei height) ...@@ -376,11 +410,6 @@ void RenderTarget11::invalidate(GLint x, GLint y, GLsizei width, GLsizei height)
ID3D11Resource *RenderTarget11::getTexture() const ID3D11Resource *RenderTarget11::getTexture() const
{ {
if (mTexture)
{
mTexture->AddRef();
}
return mTexture; return mTexture;
} }
......
...@@ -20,6 +20,7 @@ class Renderer11; ...@@ -20,6 +20,7 @@ class Renderer11;
class RenderTarget11 : public RenderTarget class RenderTarget11 : public RenderTarget
{ {
public: 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, 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, ID3D11DepthStencilView *dsv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height, GLsizei depth);
RenderTarget11(Renderer *renderer, GLsizei width, GLsizei height, GLenum internalFormat, GLsizei samples); 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) ...@@ -628,73 +628,33 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
return EGL_SUCCESS; return EGL_SUCCESS;
} }
// Increments refcount on texture.
// caller must Release() the returned texture
ID3D11Texture2D *SwapChain11::getOffscreenTexture() ID3D11Texture2D *SwapChain11::getOffscreenTexture()
{ {
if (mOffscreenTexture)
{
mOffscreenTexture->AddRef();
}
return mOffscreenTexture; return mOffscreenTexture;
} }
// Increments refcount on view.
// caller must Release() the returned view
ID3D11RenderTargetView *SwapChain11::getRenderTarget() ID3D11RenderTargetView *SwapChain11::getRenderTarget()
{ {
if (mOffscreenRTView)
{
mOffscreenRTView->AddRef();
}
return mOffscreenRTView; return mOffscreenRTView;
} }
// Increments refcount on view.
// caller must Release() the returned view
ID3D11ShaderResourceView *SwapChain11::getRenderTargetShaderResource() ID3D11ShaderResourceView *SwapChain11::getRenderTargetShaderResource()
{ {
if (mOffscreenSRView)
{
mOffscreenSRView->AddRef();
}
return mOffscreenSRView; return mOffscreenSRView;
} }
// Increments refcount on view.
// caller must Release() the returned view
ID3D11DepthStencilView *SwapChain11::getDepthStencil() ID3D11DepthStencilView *SwapChain11::getDepthStencil()
{ {
if (mDepthStencilDSView)
{
mDepthStencilDSView->AddRef();
}
return mDepthStencilDSView; return mDepthStencilDSView;
} }
// Increments refcount on view.
// caller must Release() the returned view
ID3D11ShaderResourceView * SwapChain11::getDepthStencilShaderResource() ID3D11ShaderResourceView * SwapChain11::getDepthStencilShaderResource()
{ {
if (mDepthStencilSRView)
{
mDepthStencilSRView->AddRef();
}
return mDepthStencilSRView; return mDepthStencilSRView;
} }
ID3D11Texture2D *SwapChain11::getDepthStencilTexture() ID3D11Texture2D *SwapChain11::getDepthStencilTexture()
{ {
if (mDepthStencilTexture)
{
mDepthStencilTexture->AddRef();
}
return mDepthStencilTexture; return mDepthStencilTexture;
} }
......
...@@ -289,7 +289,10 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch ...@@ -289,7 +289,10 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
: TextureStorage11(renderer, 0, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE) : TextureStorage11(renderer, 0, D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE)
{ {
mTexture = swapchain->getOffscreenTexture(); mTexture = swapchain->getOffscreenTexture();
mTexture->AddRef();
mSRV = swapchain->getRenderTargetShaderResource(); mSRV = swapchain->getRenderTargetShaderResource();
mSRV->AddRef();
mSwizzleTexture = NULL; mSwizzleTexture = NULL;
mSwizzleSRV = NULL; mSwizzleSRV = NULL;
...@@ -316,7 +319,6 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch ...@@ -316,7 +319,6 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
D3D11_RENDER_TARGET_VIEW_DESC rtvDesc; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc;
offscreenRTV->GetDesc(&rtvDesc); offscreenRTV->GetDesc(&rtvDesc);
mRenderTargetFormat = rtvDesc.Format; mRenderTargetFormat = rtvDesc.Format;
SafeRelease(offscreenRTV);
GLint internalFormat = d3d11_gl::GetInternalFormat(mTextureFormat, renderer->getCurrentClientVersion()); GLint internalFormat = d3d11_gl::GetInternalFormat(mTextureFormat, renderer->getCurrentClientVersion());
mSwizzleTextureFormat = gl_d3d11::GetSwizzleTexFormat(internalFormat, renderer); mSwizzleTextureFormat = gl_d3d11::GetSwizzleTexFormat(internalFormat, renderer);
...@@ -453,12 +455,10 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level) ...@@ -453,12 +455,10 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
} }
ASSERT(SUCCEEDED(result)); 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); 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) else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN)
{ {
...@@ -480,12 +480,10 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level) ...@@ -480,12 +480,10 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
} }
ASSERT(SUCCEEDED(result)); 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); mRenderTarget[level] = new RenderTarget11(mRenderer, dsv, mTexture, srv, getLevelWidth(level), getLevelHeight(level), 1);
// RenderTarget will take ownership of these resources
SafeRelease(dsv);
} }
else else
{ {
...@@ -787,11 +785,11 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int ...@@ -787,11 +785,11 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
} }
ASSERT(SUCCEEDED(result)); 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); 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) else if (mDepthStencilFormat != DXGI_FORMAT_UNKNOWN)
{ {
...@@ -813,11 +811,11 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int ...@@ -813,11 +811,11 @@ RenderTarget *TextureStorage11_Cube::getRenderTargetFace(GLenum faceTarget, int
} }
ASSERT(SUCCEEDED(result)); 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); 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 else
{ {
...@@ -1150,12 +1148,10 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel) ...@@ -1150,12 +1148,10 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(int mipLevel)
} }
ASSERT(SUCCEEDED(result)); 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)); mLevelRenderTargets[mipLevel] = new RenderTarget11(mRenderer, rtv, mTexture, srv, getLevelWidth(mipLevel), getLevelHeight(mipLevel), getLevelDepth(mipLevel));
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
} }
else else
{ {
...@@ -1203,11 +1199,11 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer) ...@@ -1203,11 +1199,11 @@ RenderTarget *TextureStorage11_3D::getRenderTargetLayer(int mipLevel, int layer)
} }
ASSERT(SUCCEEDED(result)); 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); 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 else
{ {
...@@ -1517,11 +1513,11 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l ...@@ -1517,11 +1513,11 @@ RenderTarget *TextureStorage11_2DArray::getRenderTargetLayer(int mipLevel, int l
} }
ASSERT(SUCCEEDED(result)); 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); 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 else
{ {
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
namespace rx 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) RenderTarget9::RenderTarget9(Renderer *renderer, IDirect3DSurface9 *surface)
{ {
mRenderer = Renderer9::makeRenderer9(renderer); mRenderer = Renderer9::makeRenderer9(renderer);
...@@ -112,6 +113,7 @@ void RenderTarget9::invalidate(GLint x, GLint y, GLsizei width, GLsizei height) ...@@ -112,6 +113,7 @@ void RenderTarget9::invalidate(GLint x, GLint y, GLsizei width, GLsizei height)
IDirect3DSurface9 *RenderTarget9::getSurface() IDirect3DSurface9 *RenderTarget9::getSurface()
{ {
// Caller is responsible for releasing the returned surface reference. // Caller is responsible for releasing the returned surface reference.
// TODO: remove the AddRef to match RenderTarget11
if (mRenderTarget) if (mRenderTarget)
{ {
mRenderTarget->AddRef(); mRenderTarget->AddRef();
......
...@@ -328,6 +328,7 @@ EGLint SwapChain9::swapRect(EGLint x, EGLint y, EGLint width, EGLint height) ...@@ -328,6 +328,7 @@ EGLint SwapChain9::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
// Increments refcount on surface. // Increments refcount on surface.
// caller must Release() the returned surface // caller must Release() the returned surface
// TODO: remove the AddRef to match SwapChain11
IDirect3DSurface9 *SwapChain9::getRenderTarget() IDirect3DSurface9 *SwapChain9::getRenderTarget()
{ {
if (mRenderTarget) if (mRenderTarget)
...@@ -340,6 +341,7 @@ IDirect3DSurface9 *SwapChain9::getRenderTarget() ...@@ -340,6 +341,7 @@ IDirect3DSurface9 *SwapChain9::getRenderTarget()
// Increments refcount on surface. // Increments refcount on surface.
// caller must Release() the returned surface // caller must Release() the returned surface
// TODO: remove the AddRef to match SwapChain11
IDirect3DSurface9 *SwapChain9::getDepthStencil() IDirect3DSurface9 *SwapChain9::getDepthStencil()
{ {
if (mDepthStencil) if (mDepthStencil)
...@@ -352,6 +354,7 @@ IDirect3DSurface9 *SwapChain9::getDepthStencil() ...@@ -352,6 +354,7 @@ IDirect3DSurface9 *SwapChain9::getDepthStencil()
// Increments refcount on texture. // Increments refcount on texture.
// caller must Release() the returned texture // caller must Release() the returned texture
// TODO: remove the AddRef to match SwapChain11
IDirect3DTexture9 *SwapChain9::getOffscreenTexture() IDirect3DTexture9 *SwapChain9::getOffscreenTexture()
{ {
if (mOffscreenTexture) 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