From e3aefd7dded5dced921bba756a36d3fa22897639 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Wed, 7 Feb 2024 18:30:25 +0100 Subject: [PATCH] Fix LODBias update bug when using bindless textures --- VulkanDrv/TextureManager.cpp | 12 ++++++++++++ VulkanDrv/TextureManager.h | 1 + VulkanDrv/UVulkanRenderDevice.cpp | 1 + 3 files changed, 14 insertions(+) diff --git a/VulkanDrv/TextureManager.cpp b/VulkanDrv/TextureManager.cpp index bb2dd48..9d8fbdb 100644 --- a/VulkanDrv/TextureManager.cpp +++ b/VulkanDrv/TextureManager.cpp @@ -61,6 +61,18 @@ void TextureManager::ClearCache() } } +void TextureManager::ClearAllBindlessIndexes() +{ + for (auto& cache : TextureCache) + { + for (auto& it : cache) + { + for (int& index : it.second->BindlessIndex) + index = -1; + } + } +} + void TextureManager::CreateNullTexture() { auto cmdbuffer = renderer->Commands->GetTransferCommands(); diff --git a/VulkanDrv/TextureManager.h b/VulkanDrv/TextureManager.h index 1dd44b4..1c4c4fc 100644 --- a/VulkanDrv/TextureManager.h +++ b/VulkanDrv/TextureManager.h @@ -16,6 +16,7 @@ class TextureManager CachedTexture* GetTexture(FTextureInfo* info, bool masked); void ClearCache(); + void ClearAllBindlessIndexes(); std::unique_ptr NullTexture; std::unique_ptr NullTextureView; diff --git a/VulkanDrv/UVulkanRenderDevice.cpp b/VulkanDrv/UVulkanRenderDevice.cpp index cfebf02..ce13f95 100644 --- a/VulkanDrv/UVulkanRenderDevice.cpp +++ b/VulkanDrv/UVulkanRenderDevice.cpp @@ -576,6 +576,7 @@ void UVulkanRenderDevice::Unlock(UBOOL Blit) if (Samplers->LODBias != LODBias) { DescriptorSets->ClearCache(); + Textures->ClearAllBindlessIndexes(); Samplers->CreateSceneSamplers(); }