summaryrefslogtreecommitdiffstats
path: root/tools/gfx
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2018-12-13 18:14:38 -0500
committerGitHub <noreply@github.com>2018-12-13 18:14:38 -0500
commit11793edf25a4907fe396d69fd3cdddaee3d421d5 (patch)
tree5248608d231c0f5d64ab1ca2b3b2a757e79a6b9c /tools/gfx
parent765c87e83608b2987b3f15b4722d027f5f30f748 (diff)
Remove memory and resource leaks (#754)
* Remove circular reference to renderer on Vk & D3D12 DescriptorSetImpl * Refactor Stbi image loading such that memory is correctly freed when goes out of scope. Added Crt memory dump at termination. Reduced erroneous reporting by scoping TestContext. * Used capitalized acronym for STBImage to keep Tim happy.
Diffstat (limited to 'tools/gfx')
-rw-r--r--tools/gfx/render-d3d11.cpp2
-rw-r--r--tools/gfx/render-d3d12.cpp11
-rw-r--r--tools/gfx/render-vk.cpp2
3 files changed, 8 insertions, 7 deletions
diff --git a/tools/gfx/render-d3d11.cpp b/tools/gfx/render-d3d11.cpp
index b0b2b9c04..e049bad38 100644
--- a/tools/gfx/render-d3d11.cpp
+++ b/tools/gfx/render-d3d11.cpp
@@ -96,6 +96,8 @@ public:
virtual void waitForGpu() override {}
virtual RendererType getRendererType() const override { return RendererType::DirectX11; }
+ ~D3D11Renderer() {}
+
protected:
#if 0
diff --git a/tools/gfx/render-d3d12.cpp b/tools/gfx/render-d3d12.cpp
index 360242dab..e8af974fa 100644
--- a/tools/gfx/render-d3d12.cpp
+++ b/tools/gfx/render-d3d12.cpp
@@ -313,7 +313,7 @@ protected:
ResourceView* textureView,
SamplerState* sampler) override;
- RefPtr<D3D12Renderer> m_renderer;
+ D3D12Renderer* m_renderer = nullptr; ///< Weak pointer - must be because if set on Renderer, will have a circular reference
RefPtr<DescriptorSetLayoutImpl> m_layout;
D3D12DescriptorHeap* m_resourceHeap = nullptr;
@@ -336,7 +336,7 @@ protected:
// During command submission, we need all the descriptor tables that get
- // used to come from a single heap (for each descritpor heap type).
+ // used to come from a single heap (for each descriptor heap type).
//
// We will thus keep a single heap of each type that we hope will hold
// all the descriptors that actually get needed in a frame.
@@ -2838,8 +2838,7 @@ void D3D12Renderer::setBindingState(BindingState* state)
void D3D12Renderer::DescriptorSetImpl::setConstantBuffer(UInt range, UInt index, BufferResource* buffer)
{
- auto dxDevice = m_renderer->m_device;
-
+ auto dxDevice = m_renderer->m_device.get();
auto resourceImpl = (BufferResourceImpl*) buffer;
auto resourceDesc = resourceImpl->getDesc();
@@ -3069,7 +3068,7 @@ Result D3D12Renderer::createDescriptorSetLayout(const DescriptorSetLayout::Desc&
RefPtr<DescriptorSetLayoutImpl> descriptorSetLayoutImpl = new DescriptorSetLayoutImpl();
// We know the total number of resource and sampler "slots" that an instance
- // of this decriptor-set layout would need:
+ // of this descriptor-set layout would need:
//
descriptorSetLayoutImpl->m_resourceCount = combinedCount + dedicatedResourceCount;
descriptorSetLayoutImpl->m_samplerCount = combinedCount + dedicatedSamplerCount;
@@ -3345,7 +3344,7 @@ Result D3D12Renderer::createPipelineLayout(const PipelineLayout::Desc& desc, Pip
//
UInt bindingSpace = dd;
- // Copy descriptor range infromation from the set layout into our
+ // Copy descriptor range information from the set layout into our
// temporary copy (this is required because the same set layout
// might be applied to different ranges).
//
diff --git a/tools/gfx/render-vk.cpp b/tools/gfx/render-vk.cpp
index 45b92fe98..32bc91de4 100644
--- a/tools/gfx/render-vk.cpp
+++ b/tools/gfx/render-vk.cpp
@@ -348,7 +348,7 @@ public:
static Binding::Type _getBindingType(RefObject* ptr);
void _setBinding(Binding::Type type, UInt range, UInt index, RefObject* ptr);
- RefPtr<VKRenderer> m_renderer;
+ VKRenderer* m_renderer = nullptr; ///< Weak pointer, can't be strong, because if set will become circular reference
RefPtr<DescriptorSetLayoutImpl> m_layout;
VkDescriptorSet m_descriptorSet = VK_NULL_HANDLE;