Commit 136a2742 by Jamie Madill Committed by Commit Bot

TextureStorage11: Use unique_ptr for RenderTargets.

This ensures they are auto-freed when the Storage is destroyed. Also remove the 'delete this' design pattern. BUG=angleproject:2151 Change-Id: I784b94c7125a1bbc15f5d6ae90e55317e199faa6 Reviewed-on: https://chromium-review.googlesource.com/673137 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarFrank Henigman <fjhenigman@chromium.org>
parent 33510107
......@@ -659,9 +659,9 @@ gl::Error TextureD3D::releaseTexStorage(const gl::Context *context)
{
return gl::NoError();
}
ANGLE_TRY(mTexStorage->onDestroy(context));
mTexStorage = nullptr;
return gl::NoError();
auto err = mTexStorage->onDestroy(context);
SafeDelete(mTexStorage);
return err;
}
gl::Error TextureD3D::onDestroy(const gl::Context *context)
......
......@@ -33,10 +33,10 @@ class TextureStorage : angle::NonCopyable
{
public:
TextureStorage() {}
virtual ~TextureStorage() {}
virtual gl::Error onDestroy(const gl::Context *context)
{
delete this;
return gl::NoError();
}
......@@ -67,9 +67,6 @@ class TextureStorage : angle::NonCopyable
{
return gl::NoError();
}
protected:
virtual ~TextureStorage() {}
};
using TexStoragePointer = angle::UniqueObjectPointer<TextureStorage, gl::Context>;
......
......@@ -222,7 +222,7 @@ class TextureStorage11_2D : public TextureStorage11
d3d11::SharedSRV *outSRV) const override;
TextureHelper11 mTexture;
RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
std::unique_ptr<RenderTarget11> mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
bool mHasKeyedMutex;
// These are members related to the zero max-LOD workaround.
......@@ -235,7 +235,7 @@ class TextureStorage11_2D : public TextureStorage11
// A more likely example is an app that creates an empty texture, renders to it, and then calls glGenerateMipmap
// TODO: In this rendering scenario, release the mLevelZeroTexture after mTexture has been created to save memory.
TextureHelper11 mLevelZeroTexture;
RenderTarget11 *mLevelZeroRenderTarget;
std::unique_ptr<RenderTarget11> mLevelZeroRenderTarget;
bool mUseLevelZeroTexture;
// Swizzle-related variables
......@@ -396,11 +396,12 @@ class TextureStorage11_Cube : public TextureStorage11
static const size_t CUBE_FACE_COUNT = 6;
TextureHelper11 mTexture;
RenderTarget11 *mRenderTarget[CUBE_FACE_COUNT][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
std::unique_ptr<RenderTarget11> mRenderTarget[CUBE_FACE_COUNT]
[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
// Level-zero workaround members. See TextureStorage11_2D's workaround members for a description.
TextureHelper11 mLevelZeroTexture;
RenderTarget11 *mLevelZeroRenderTarget[CUBE_FACE_COUNT];
std::unique_ptr<RenderTarget11> mLevelZeroRenderTarget[CUBE_FACE_COUNT];
bool mUseLevelZeroTexture;
TextureHelper11 mSwizzleTexture;
......@@ -445,10 +446,9 @@ class TextureStorage11_3D : public TextureStorage11
d3d11::SharedSRV *outSRV) const override;
typedef std::pair<int, int> LevelLayerKey;
typedef std::map<LevelLayerKey, RenderTarget11*> RenderTargetMap;
RenderTargetMap mLevelLayerRenderTargets;
std::map<LevelLayerKey, std::unique_ptr<RenderTarget11>> mLevelLayerRenderTargets;
RenderTarget11 *mLevelRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
std::unique_ptr<RenderTarget11> mLevelRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TextureHelper11 mTexture;
TextureHelper11 mSwizzleTexture;
......@@ -520,8 +520,7 @@ class TextureStorage11_2DArray : public TextureStorage11
DXGI_FORMAT resourceFormat,
d3d11::SharedSRV *srv) const;
typedef std::map<LevelLayerRangeKey, RenderTarget11 *> RenderTargetMap;
RenderTargetMap mRenderTargets;
std::map<LevelLayerRangeKey, std::unique_ptr<RenderTarget11>> mRenderTargets;
TextureHelper11 mTexture;
......
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