Vulkan: Fix sampler object leak

This commit is contained in:
goeiecool9999 2024-11-04 19:54:04 +01:00
parent df53971507
commit 721d0cebad
3 changed files with 10 additions and 4 deletions

View file

@ -128,6 +128,7 @@ public:
~VKRObjectTextureView() override; ~VKRObjectTextureView() override;
VkImageView m_textureImageView{ VK_NULL_HANDLE }; VkImageView m_textureImageView{ VK_NULL_HANDLE };
VkSampler m_textureViewSampler{ VK_NULL_HANDLE };
VkSampler m_textureDefaultSampler[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; // relict from LatteTextureViewVk, get rid of it eventually VkSampler m_textureDefaultSampler[2] = { VK_NULL_HANDLE, VK_NULL_HANDLE }; // relict from LatteTextureViewVk, get rid of it eventually
}; };

View file

@ -3773,6 +3773,8 @@ VKRObjectTextureView::VKRObjectTextureView(VKRObjectTexture* tex, VkImageView vi
VKRObjectTextureView::~VKRObjectTextureView() VKRObjectTextureView::~VKRObjectTextureView()
{ {
auto logicalDevice = VulkanRenderer::GetInstance()->GetLogicalDevice(); auto logicalDevice = VulkanRenderer::GetInstance()->GetLogicalDevice();
if (m_textureViewSampler != VK_NULL_HANDLE)
vkDestroySampler(logicalDevice, m_textureViewSampler, nullptr);
if (m_textureDefaultSampler[0] != VK_NULL_HANDLE) if (m_textureDefaultSampler[0] != VK_NULL_HANDLE)
vkDestroySampler(logicalDevice, m_textureDefaultSampler[0], nullptr); vkDestroySampler(logicalDevice, m_textureDefaultSampler[0], nullptr);
if (m_textureDefaultSampler[1] != VK_NULL_HANDLE) if (m_textureDefaultSampler[1] != VK_NULL_HANDLE)

View file

@ -727,7 +727,6 @@ VkDescriptorSetInfo* VulkanRenderer::draw_getOrCreateDescriptorSet(PipelineInfo*
VkSamplerCustomBorderColorCreateInfoEXT samplerCustomBorderColor{}; VkSamplerCustomBorderColorCreateInfoEXT samplerCustomBorderColor{};
VkSampler sampler;
VkSamplerCreateInfo samplerInfo{}; VkSamplerCreateInfo samplerInfo{};
samplerInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; samplerInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
@ -900,9 +899,13 @@ VkDescriptorSetInfo* VulkanRenderer::draw_getOrCreateDescriptorSet(PipelineInfo*
} }
} }
if (vkCreateSampler(m_logicalDevice, &samplerInfo, nullptr, &sampler) != VK_SUCCESS) if(imageViewObj->m_textureViewSampler == VK_NULL_HANDLE)
UnrecoverableError("Failed to create texture sampler"); {
info.sampler = sampler; if (vkCreateSampler(m_logicalDevice, &samplerInfo, nullptr, &imageViewObj->m_textureViewSampler) != VK_SUCCESS)
UnrecoverableError("Failed to create texture sampler");
}
info.sampler = imageViewObj->m_textureViewSampler;
textureArray.emplace_back(info); textureArray.emplace_back(info);
} }