Prevent crash when trying to release buffer from already destroyed memory pool
This commit is contained in:
@@ -56,8 +56,6 @@ namespace OpenVulkano::Vulkan
|
||||
m_vulkanTexture.m_sampler = resManager->CreateSampler(reinterpret_cast<const vk::SamplerCreateInfo&>(Scene::SamplerConfig::DEFAULT));
|
||||
m_vulkanTexture.SetDescriptorSet(resManager, resManager->GetDescriptorLayoutSet(binding), binding);
|
||||
|
||||
//m_vulkanTexture.UpdateAddress(this);
|
||||
//UpdateRenderResource(GetOwnerResource());
|
||||
GetRenderResource().renderObject = &m_vulkanTexture;
|
||||
m_vulkanTexture.UpdateAddress(this);
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace OpenVulkano::Vulkan
|
||||
|
||||
~ManagedBuffer()
|
||||
{
|
||||
allocation->device.destroy(buffer);
|
||||
if (allocation) [[likely]] allocation->device.destroy(buffer);
|
||||
}
|
||||
|
||||
[[nodiscard]] bool IsLast() const
|
||||
|
||||
@@ -23,6 +23,8 @@ namespace OpenVulkano::Vulkan
|
||||
{
|
||||
if (memPool->FreeBuffer(buffer)) return;
|
||||
}
|
||||
Logger::RENDER->error("Attempted to released buffer to pool, but owning pool no longer exists!");
|
||||
buffer->allocation = nullptr; // Allocation is no longer valid since owning pool is gone already
|
||||
delete buffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ namespace OpenVulkano::Vulkan
|
||||
{
|
||||
transferQueue.waitIdle();
|
||||
transferQueue = nullptr;
|
||||
OnShutdown(this); // Notify all custom resources that it's time to die
|
||||
geometries.clear();
|
||||
nodes.clear();
|
||||
textures.clear();
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "IShaderOwner.hpp"
|
||||
#include "MemoryPool.hpp"
|
||||
#include "Base/Wrapper.hpp"
|
||||
#include "Base/Event.hpp"
|
||||
#include "Base/Render/IResourceManager.hpp"
|
||||
#include "Vulkan/Image.hpp"
|
||||
#include "Scene/Shader/DescriptorInputDescription.hpp"
|
||||
@@ -134,6 +135,8 @@ namespace OpenVulkano
|
||||
vk::DescriptorSetLayout* GetDescriptorLayoutSet(const DescriptorSetLayoutBinding& descriptorSetLayoutBinding);
|
||||
|
||||
VulkanShader* CreateShader(Scene::Shader* shader);
|
||||
|
||||
Event<ResourceManager*> OnShutdown;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user