Keep DX12 descriptor heaps alive until deferred copy/write flush.

This commit is contained in:
Julian Meder
2019-02-28 13:39:18 +01:00
committed by Baldur Karlsson
parent c6edcf9a38
commit bf17650ace
2 changed files with 21 additions and 0 deletions
+7
View File
@@ -2136,10 +2136,17 @@ void WrappedID3D12Device::FlushPendingDescriptorWrites()
}
for(size_t i = 0; i < writes.size(); i++)
{
writes[i].dest->CopyFrom(writes[i].desc);
writes[i].dest->GetHeap()->Release();
}
for(size_t i = 0; i < copies.size(); i++)
{
copies[i].dst->CopyFrom(*copies[i].src);
copies[i].src->GetHeap()->Release();
copies[i].dst->GetHeap()->Release();
}
}
template <typename SerialiserType>
@@ -944,6 +944,7 @@ void WrappedID3D12Device::CreateConstantBufferView(const D3D12_CONSTANT_BUFFER_V
{
SCOPED_LOCK(m_DynDescLock);
m_DynamicDescriptorWrites.push_back(write);
write.dest->GetHeap()->AddRef();
m_DynamicDescriptorRefs.push_back(write.desc);
}
@@ -986,6 +987,7 @@ void WrappedID3D12Device::CreateShaderResourceView(ID3D12Resource *pResource,
{
SCOPED_LOCK(m_DynDescLock);
m_DynamicDescriptorWrites.push_back(write);
write.dest->GetHeap()->AddRef();
if(pResource && pResource->GetDesc().Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
m_DynamicDescriptorRefs.push_back(write.desc);
}
@@ -1036,6 +1038,7 @@ void WrappedID3D12Device::CreateUnorderedAccessView(ID3D12Resource *pResource,
{
SCOPED_LOCK(m_DynDescLock);
m_DynamicDescriptorWrites.push_back(write);
write.dest->GetHeap()->AddRef();
if(pResource && pResource->GetDesc().Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
m_DynamicDescriptorRefs.push_back(write.desc);
}
@@ -1081,6 +1084,7 @@ void WrappedID3D12Device::CreateRenderTargetView(ID3D12Resource *pResource,
{
SCOPED_LOCK(m_DynDescLock);
m_DynamicDescriptorWrites.push_back(write);
write.dest->GetHeap()->AddRef();
if(pResource && pResource->GetDesc().Dimension == D3D12_RESOURCE_DIMENSION_BUFFER)
m_DynamicDescriptorRefs.push_back(write.desc);
}
@@ -1123,6 +1127,7 @@ void WrappedID3D12Device::CreateDepthStencilView(ID3D12Resource *pResource,
{
SCOPED_LOCK(m_DynDescLock);
m_DynamicDescriptorWrites.push_back(write);
write.dest->GetHeap()->AddRef();
}
{
@@ -1161,6 +1166,7 @@ void WrappedID3D12Device::CreateSampler(const D3D12_SAMPLER_DESC *pDesc,
{
SCOPED_LOCK(m_DynDescLock);
m_DynamicDescriptorWrites.push_back(write);
write.dest->GetHeap()->AddRef();
}
{
@@ -2072,7 +2078,11 @@ void WrappedID3D12Device::CopyDescriptors(
SCOPED_LOCK(m_DynDescLock);
m_DynamicDescriptorCopies.insert(m_DynamicDescriptorCopies.end(), copies.begin(), copies.end());
for(size_t i = 0; i < copies.size(); i++)
{
copies[i].src->GetHeap()->AddRef();
copies[i].dst->GetHeap()->AddRef();
m_DynamicDescriptorRefs.push_back(*copies[i].src);
}
}
{
@@ -2142,7 +2152,11 @@ void WrappedID3D12Device::CopyDescriptorsSimple(UINT NumDescriptors,
SCOPED_LOCK(m_DynDescLock);
m_DynamicDescriptorCopies.insert(m_DynamicDescriptorCopies.end(), copies.begin(), copies.end());
for(size_t i = 0; i < copies.size(); i++)
{
copies[i].src->GetHeap()->AddRef();
copies[i].dst->GetHeap()->AddRef();
m_DynamicDescriptorRefs.push_back(*copies[i].src);
}
}
{