- postponed destruction of Vulkan resources

Provided uniform way to handle lifetime of some of Vulkan resources
This helps to avoid issues like descriptor set that outlives its pool

https://forum.zdoom.org/viewtopic.php?t=64341
This commit is contained in:
alexey.lysiuk 2019-04-30 17:47:11 +03:00
commit dffe45835d
4 changed files with 29 additions and 16 deletions

View file

@ -53,32 +53,34 @@ VkHardwareTexture::~VkHardwareTexture()
if (Prev) Prev->Next = Next;
else First = Next;
auto fb = GetVulkanFrameBuffer();
if (fb)
Reset();
}
void VkHardwareTexture::Reset()
{
if (auto fb = GetVulkanFrameBuffer())
{
ResetDescriptors();
auto &deleteList = fb->FrameDeleteList;
for (auto &it : mDescriptorSets)
{
deleteList.Descriptors.push_back(std::move(it.descriptor));
it.descriptor = nullptr;
}
mDescriptorSets.clear();
if (mImage) deleteList.Images.push_back(std::move(mImage));
if (mImageView) deleteList.ImageViews.push_back(std::move(mImageView));
if (mStagingBuffer) deleteList.Buffers.push_back(std::move(mStagingBuffer));
}
}
void VkHardwareTexture::Reset()
{
mDescriptorSets.clear();
mImage.reset();
mImageView.reset();
mStagingBuffer.reset();
}
void VkHardwareTexture::ResetDescriptors()
{
if (auto fb = GetVulkanFrameBuffer())
{
auto &deleteList = fb->FrameDeleteList;
for (auto &it : mDescriptorSets)
{
deleteList.Descriptors.push_back(std::move(it.descriptor));
}
}
mDescriptorSets.clear();
}