From bfc905ff75ce3a35c0f874937a6def8d117f1c8b Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Sun, 16 Mar 2025 19:09:54 +0100 Subject: [PATCH] Added some extra safety checks --- FSR3UnityPlugin.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/FSR3UnityPlugin.cpp b/FSR3UnityPlugin.cpp index c2baf1c..df16636 100644 --- a/FSR3UnityPlugin.cpp +++ b/FSR3UnityPlugin.cpp @@ -173,16 +173,15 @@ static uint32_t AllocateFeatureSlot() static void FreeFeatureSlot(uint32_t featureSlot) { + // Prevent duplicate free slots + auto& slots = s_FeatureSlots._Get_container(); + if (std::find(slots.begin(), slots.end(), featureSlot) != slots.end()) + return; + s_FeatureSlots.push(featureSlot); memset(&s_Features[featureSlot], 0, sizeof(FSR3Feature)); } -static PFN_vkVoidFunction GetVulkanDeviceProcAddr(VkDevice device, const char* pName) -{ - UnityVulkanInstance instance = s_GraphicsVulkan->Instance(); - return instance.getInstanceProcAddr(instance.instance, pName); -} - static bool LoadFidelityFXLibrary(_In_ LPCWSTR lpLibFileName) { s_ffxModule = LoadLibrary(lpLibFileName); @@ -229,6 +228,12 @@ static bool LoadFidelityFXLibrary(_In_ LPCWSTR lpLibFileName) return true; } +static PFN_vkVoidFunction GetVulkanDeviceProcAddr(VkDevice device, const char* pName) +{ + UnityVulkanInstance instance = s_GraphicsVulkan->Instance(); + return instance.getInstanceProcAddr(instance.instance, pName); +} + extern "C" bool UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AMDUP_InitApi() { std::lock_guard lock(s_FeatureMutex); @@ -276,6 +281,8 @@ extern "C" bool UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AMDUP_InitApi() static void DestroyFeature(uint32_t featureSlot) { auto& feature = s_Features[featureSlot]; + if (feature.upscalingContext == nullptr && !feature.isValid) + return; if (s_GraphicsD3D12 != nullptr) {