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.m_sampler = resManager->CreateSampler(reinterpret_cast<const vk::SamplerCreateInfo&>(Scene::SamplerConfig::DEFAULT));
|
||||||
m_vulkanTexture.SetDescriptorSet(resManager, resManager->GetDescriptorLayoutSet(binding), binding);
|
m_vulkanTexture.SetDescriptorSet(resManager, resManager->GetDescriptorLayoutSet(binding), binding);
|
||||||
|
|
||||||
//m_vulkanTexture.UpdateAddress(this);
|
|
||||||
//UpdateRenderResource(GetOwnerResource());
|
|
||||||
GetRenderResource().renderObject = &m_vulkanTexture;
|
GetRenderResource().renderObject = &m_vulkanTexture;
|
||||||
m_vulkanTexture.UpdateAddress(this);
|
m_vulkanTexture.UpdateAddress(this);
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace OpenVulkano::Vulkan
|
|||||||
|
|
||||||
~ManagedBuffer()
|
~ManagedBuffer()
|
||||||
{
|
{
|
||||||
allocation->device.destroy(buffer);
|
if (allocation) [[likely]] allocation->device.destroy(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool IsLast() const
|
[[nodiscard]] bool IsLast() const
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ namespace OpenVulkano::Vulkan
|
|||||||
{
|
{
|
||||||
if (memPool->FreeBuffer(buffer)) return;
|
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;
|
delete buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ namespace OpenVulkano::Vulkan
|
|||||||
{
|
{
|
||||||
transferQueue.waitIdle();
|
transferQueue.waitIdle();
|
||||||
transferQueue = nullptr;
|
transferQueue = nullptr;
|
||||||
|
OnShutdown(this); // Notify all custom resources that it's time to die
|
||||||
geometries.clear();
|
geometries.clear();
|
||||||
nodes.clear();
|
nodes.clear();
|
||||||
textures.clear();
|
textures.clear();
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "IShaderOwner.hpp"
|
#include "IShaderOwner.hpp"
|
||||||
#include "MemoryPool.hpp"
|
#include "MemoryPool.hpp"
|
||||||
#include "Base/Wrapper.hpp"
|
#include "Base/Wrapper.hpp"
|
||||||
|
#include "Base/Event.hpp"
|
||||||
#include "Base/Render/IResourceManager.hpp"
|
#include "Base/Render/IResourceManager.hpp"
|
||||||
#include "Vulkan/Image.hpp"
|
#include "Vulkan/Image.hpp"
|
||||||
#include "Scene/Shader/DescriptorInputDescription.hpp"
|
#include "Scene/Shader/DescriptorInputDescription.hpp"
|
||||||
@@ -134,6 +135,8 @@ namespace OpenVulkano
|
|||||||
vk::DescriptorSetLayout* GetDescriptorLayoutSet(const DescriptorSetLayoutBinding& descriptorSetLayoutBinding);
|
vk::DescriptorSetLayout* GetDescriptorLayoutSet(const DescriptorSetLayoutBinding& descriptorSetLayoutBinding);
|
||||||
|
|
||||||
VulkanShader* CreateShader(Scene::Shader* shader);
|
VulkanShader* CreateShader(Scene::Shader* shader);
|
||||||
|
|
||||||
|
Event<ResourceManager*> OnShutdown;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user