Fix leak of descriptor memory during each capture on D3D12

This commit is contained in:
baldurk
2021-01-25 11:13:28 +00:00
parent e6601672ec
commit 106999a43a
5 changed files with 19 additions and 5 deletions
+1
View File
@@ -607,6 +607,7 @@ struct D3D12InitialContents
template <typename Configuration>
void Free(ResourceManager<Configuration> *rm)
{
SAFE_DELETE_ARRAY(descriptors);
SAFE_RELEASE(resource);
FreeAlignedBuffer(srcData);
}
+15 -2
View File
@@ -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);
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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()