- 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:
parent
8d36f0a0cf
commit
dffe45835d
4 changed files with 29 additions and 16 deletions
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue