From c7087cfce5ebbf35a73cc5f0ae4442e0577d9ef5 Mon Sep 17 00:00:00 2001 From: FakeMichau <49685661+FakeMichau@users.noreply.github.com> Date: Mon, 31 Aug 2026 00:20:12 +0200 Subject: [PATCH] Fix a black screen with Nukem's in Vulkan --- OptiScaler/framegen/nvngx/Nvngx_FG.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/OptiScaler/framegen/nvngx/Nvngx_FG.cpp b/OptiScaler/framegen/nvngx/Nvngx_FG.cpp index cbb535c6..d9cec493 100644 --- a/OptiScaler/framegen/nvngx/Nvngx_FG.cpp +++ b/OptiScaler/framegen/nvngx/Nvngx_FG.cpp @@ -541,7 +541,10 @@ NVSDK_NGX_Result Nvngx_FG::VULKAN_ReleaseFeature(NVSDK_NGX_Handle* InHandle) // LOG_TRACE("Handle received from the game: {:X}", (uint64_t) InHandle); - auto result = provider->VULKAN_ReleaseFeature(((Nvngx_FG_Handle*) InHandle)->nativeHandle); + Nvngx_FG_Handle* ourHandle = (Nvngx_FG_Handle*) InHandle; + std::scoped_lock lock(ourHandle->handleMutex); + + auto result = provider->VULKAN_ReleaseFeature(ourHandle->nativeHandle); if (result == NVSDK_NGX_Result_Success) delete InHandle; @@ -571,12 +574,18 @@ NVSDK_NGX_Result Nvngx_FG::VULKAN_EvaluateFeature(VkCommandBuffer InCmdList, con if (!provider) return NVSDK_NGX_Result_Fail; + if (!InFeatureHandle) + return NVSDK_NGX_Result_FAIL_InvalidParameter; + if (InFeatureHandle->Id < NVNGX_PROVIDER_ID_OFFSET) return NVSDK_NGX_Result_FAIL_FeatureNotFound; + Nvngx_FG_Handle* ourHandle = (Nvngx_FG_Handle*) InFeatureHandle; + std::shared_lock lock(ourHandle->handleMutex); + // LOG_TRACE("Handle received from the game: {:X}", (uint64_t) InFeatureHandle); - return provider->VULKAN_EvaluateFeature(InCmdList, InFeatureHandle, InParameters, InCallback); + return provider->VULKAN_EvaluateFeature(InCmdList, ourHandle->nativeHandle, InParameters, InCallback); } NVSDK_NGX_Result Nvngx_FG::VULKAN_PopulateParameters_Impl(NVSDK_NGX_Parameter* InParameters)