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) ...@@ -659,9 +659,9 @@ gl::Error TextureD3D::releaseTexStorage(const gl::Context *context)
{ {
return gl::NoError(); return gl::NoError();
} }
ANGLE_TRY(mTexStorage->onDestroy(context)); auto err = mTexStorage->onDestroy(context);
mTexStorage = nullptr; SafeDelete(mTexStorage);
return gl::NoError(); return err;
} }
gl::Error TextureD3D::onDestroy(const gl::Context *context) gl::Error TextureD3D::onDestroy(const gl::Context *context)
......
...@@ -33,10 +33,10 @@ class TextureStorage : angle::NonCopyable ...@@ -33,10 +33,10 @@ class TextureStorage : angle::NonCopyable
{ {
public: public:
TextureStorage() {} TextureStorage() {}
virtual ~TextureStorage() {}
virtual gl::Error onDestroy(const gl::Context *context) virtual gl::Error onDestroy(const gl::Context *context)
{ {
delete this;
return gl::NoError(); return gl::NoError();
} }
...@@ -67,9 +67,6 @@ class TextureStorage : angle::NonCopyable ...@@ -67,9 +67,6 @@ class TextureStorage : angle::NonCopyable
{ {
return gl::NoError(); return gl::NoError();
} }
protected:
virtual ~TextureStorage() {}
}; };
using TexStoragePointer = angle::UniqueObjectPointer<TextureStorage, gl::Context>; using TexStoragePointer = angle::UniqueObjectPointer<TextureStorage, gl::Context>;
......
...@@ -222,7 +222,7 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -222,7 +222,7 @@ class TextureStorage11_2D : public TextureStorage11
d3d11::SharedSRV *outSRV) const override; d3d11::SharedSRV *outSRV) const override;
TextureHelper11 mTexture; TextureHelper11 mTexture;
RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; std::unique_ptr<RenderTarget11> mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
bool mHasKeyedMutex; bool mHasKeyedMutex;
// These are members related to the zero max-LOD workaround. // These are members related to the zero max-LOD workaround.
...@@ -235,7 +235,7 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -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 // 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. // TODO: In this rendering scenario, release the mLevelZeroTexture after mTexture has been created to save memory.
TextureHelper11 mLevelZeroTexture; TextureHelper11 mLevelZeroTexture;
RenderTarget11 *mLevelZeroRenderTarget; std::unique_ptr<RenderTarget11> mLevelZeroRenderTarget;
bool mUseLevelZeroTexture; bool mUseLevelZeroTexture;
// Swizzle-related variables // Swizzle-related variables
...@@ -396,11 +396,12 @@ class TextureStorage11_Cube : public TextureStorage11 ...@@ -396,11 +396,12 @@ class TextureStorage11_Cube : public TextureStorage11
static const size_t CUBE_FACE_COUNT = 6; static const size_t CUBE_FACE_COUNT = 6;
TextureHelper11 mTexture; 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. // Level-zero workaround members. See TextureStorage11_2D's workaround members for a description.
TextureHelper11 mLevelZeroTexture; TextureHelper11 mLevelZeroTexture;
RenderTarget11 *mLevelZeroRenderTarget[CUBE_FACE_COUNT]; std::unique_ptr<RenderTarget11> mLevelZeroRenderTarget[CUBE_FACE_COUNT];
bool mUseLevelZeroTexture; bool mUseLevelZeroTexture;
TextureHelper11 mSwizzleTexture; TextureHelper11 mSwizzleTexture;
...@@ -445,10 +446,9 @@ class TextureStorage11_3D : public TextureStorage11 ...@@ -445,10 +446,9 @@ class TextureStorage11_3D : public TextureStorage11
d3d11::SharedSRV *outSRV) const override; d3d11::SharedSRV *outSRV) const override;
typedef std::pair<int, int> LevelLayerKey; typedef std::pair<int, int> LevelLayerKey;
typedef std::map<LevelLayerKey, RenderTarget11*> RenderTargetMap; std::map<LevelLayerKey, std::unique_ptr<RenderTarget11>> mLevelLayerRenderTargets;
RenderTargetMap mLevelLayerRenderTargets;
RenderTarget11 *mLevelRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; std::unique_ptr<RenderTarget11> mLevelRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TextureHelper11 mTexture; TextureHelper11 mTexture;
TextureHelper11 mSwizzleTexture; TextureHelper11 mSwizzleTexture;
...@@ -520,8 +520,7 @@ class TextureStorage11_2DArray : public TextureStorage11 ...@@ -520,8 +520,7 @@ class TextureStorage11_2DArray : public TextureStorage11
DXGI_FORMAT resourceFormat, DXGI_FORMAT resourceFormat,
d3d11::SharedSRV *srv) const; d3d11::SharedSRV *srv) const;
typedef std::map<LevelLayerRangeKey, RenderTarget11 *> RenderTargetMap; std::map<LevelLayerRangeKey, std::unique_ptr<RenderTarget11>> mRenderTargets;
RenderTargetMap mRenderTargets;
TextureHelper11 mTexture; 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