mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 21:30:53 +00:00
Fix leak of descriptor memory during each capture on D3D12
This commit is contained in:
@@ -607,6 +607,7 @@ struct D3D12InitialContents
|
||||
template <typename Configuration>
|
||||
void Free(ResourceManager<Configuration> *rm)
|
||||
{
|
||||
SAFE_DELETE_ARRAY(descriptors);
|
||||
SAFE_RELEASE(resource);
|
||||
FreeAlignedBuffer(srcData);
|
||||
}
|
||||
|
||||
@@ -51,10 +51,21 @@ RD_TEST(D3D12_Leak_Check, D3D12GraphicsTest)
|
||||
.RTV()
|
||||
.InitialState(D3D12_RESOURCE_STATE_RENDER_TARGET);
|
||||
|
||||
ID3D12DescriptorHeapPtr descHeap;
|
||||
{
|
||||
D3D12_DESCRIPTOR_HEAP_DESC desc;
|
||||
desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
|
||||
desc.NodeMask = 1;
|
||||
desc.NumDescriptors = 1000000;
|
||||
desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
|
||||
CHECK_HR(dev->CreateDescriptorHeap(&desc, __uuidof(ID3D12DescriptorHeap), (void **)&descHeap));
|
||||
}
|
||||
|
||||
while(Running())
|
||||
{
|
||||
// allow a generous 500MB, we're really only after catching big leaks here
|
||||
if(GetMemoryUsage() > 500 * 1000 * 1000)
|
||||
// allow a generous 750MB, we're really only after catching big leaks here and want to be able
|
||||
// to run this test in debug
|
||||
if(GetMemoryUsage() > 750 * 1000 * 1000)
|
||||
{
|
||||
TEST_ERROR("Memory usage of %llu is too high!", GetMemoryUsage());
|
||||
break;
|
||||
@@ -75,6 +86,8 @@ RD_TEST(D3D12_Leak_Check, D3D12GraphicsTest)
|
||||
|
||||
cmd->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
|
||||
cmd->SetDescriptorHeaps(1, &descHeap.GetInterfacePtr());
|
||||
|
||||
IASetVertexBuffer(cmd, vb, sizeof(DefaultA2V), 0);
|
||||
cmd->SetPipelineState(pso);
|
||||
cmd->SetGraphicsRootSignature(sig);
|
||||
|
||||
@@ -5,7 +5,7 @@ import rdtest
|
||||
class D3D11_Leak_Check(rdtest.TestCase):
|
||||
demos_test_name = 'D3D11_Leak_Check'
|
||||
demos_frame_cap = 50000
|
||||
demos_frame_count = 1
|
||||
demos_frame_count = 10
|
||||
|
||||
def check_capture(self):
|
||||
memory: int = rd.GetCurrentProcessMemoryUsage()
|
||||
|
||||
@@ -5,7 +5,7 @@ import rdtest
|
||||
class D3D12_Leak_Check(rdtest.TestCase):
|
||||
demos_test_name = 'D3D12_Leak_Check'
|
||||
demos_frame_cap = 50000
|
||||
demos_frame_count = 1
|
||||
demos_frame_count = 10
|
||||
|
||||
def check_capture(self):
|
||||
memory: int = rd.GetCurrentProcessMemoryUsage()
|
||||
|
||||
@@ -5,7 +5,7 @@ import rdtest
|
||||
class VK_Leak_Check(rdtest.TestCase):
|
||||
demos_test_name = 'VK_Leak_Check'
|
||||
demos_frame_cap = 50000
|
||||
demos_frame_count = 1
|
||||
demos_frame_count = 10
|
||||
|
||||
def check_capture(self):
|
||||
memory: int = rd.GetCurrentProcessMemoryUsage()
|
||||
|
||||
Reference in New Issue
Block a user