From d1a89662ffa11c7a0afd30dcc145c3cb3715121f Mon Sep 17 00:00:00 2001 From: cdozdil Date: Wed, 20 May 2026 12:20:36 +0300 Subject: [PATCH] Standardize NVSDK Init code between APIs --- OptiScaler/inputs/NVNGX_DLSS_Dx11.cpp | 26 +++++++++++++++++----- OptiScaler/inputs/NVNGX_DLSS_Dx12.cpp | 18 ++++++++++------ OptiScaler/inputs/NVNGX_DLSS_Vk.cpp | 31 ++++++++++++++++++++------- 3 files changed, 56 insertions(+), 19 deletions(-) diff --git a/OptiScaler/inputs/NVNGX_DLSS_Dx11.cpp b/OptiScaler/inputs/NVNGX_DLSS_Dx11.cpp index c0d11043..30679df5 100644 --- a/OptiScaler/inputs/NVNGX_DLSS_Dx11.cpp +++ b/OptiScaler/inputs/NVNGX_DLSS_Dx11.cpp @@ -144,6 +144,12 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_Ext(unsigned long long InApp if (!_skipInit) UpdateInitPaths(&localFeatureInfo); + State::Instance().NVNGX_ApplicationId = InApplicationId; + State::Instance().NVNGX_ApplicationDataPath = std::wstring(InApplicationDataPath); + State::Instance().NVNGX_Version = InSDKVersion; + State::Instance().NVNGX_FeatureInfo = InFeatureInfo; + State::Instance().NVNGX_Version = InSDKVersion; + if (Config::Instance()->DLSSEnabled.value_or_default() && !_skipInit) { if (Config::Instance()->UseGenericAppIdWithDlss.value_or_default()) @@ -164,16 +170,21 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_Ext(unsigned long long InApp if (result == NVSDK_NGX_Result_Success) NVNGXProxy::SetDx11Inited(true); } + else + { + LOG_WARN("NVNGXProxy::NVNGXModule or NVNGXProxy::D3D11_Init_Ext is nullptr!"); + } } - State::Instance().NVNGX_ApplicationId = InApplicationId; - State::Instance().NVNGX_ApplicationDataPath = std::wstring(InApplicationDataPath); - State::Instance().NVNGX_Version = InSDKVersion; - State::Instance().NVNGX_FeatureInfo = InFeatureInfo; - if (InFeatureInfo != nullptr && InSDKVersion > 0x0000013) State::Instance().NVNGX_Logger = InFeatureInfo->LoggingInfo; + if (State::Instance().NvngxDx11Inited) + { + LOG_WARN("NVNGX already inited"); + return NVSDK_NGX_Result_Success; + } + LOG_INFO("AppId: {0}", InApplicationId); LOG_INFO("SDK: {0:x}", (int) InSDKVersion); std::wstring string(InApplicationDataPath); @@ -391,6 +402,9 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_GetParameters(NVSDK_NGX_Parameter } *OutParameters = GetNGXParameters("OptiDx11"); + + LOG_DEBUG("Returning custom Opti parameters"); + return NVSDK_NGX_Result_Success; } @@ -419,6 +433,8 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_GetCapabilityParameters(NVSDK_NGX *OutParameters = GetNGXParameters("OptiDx11"); + LOG_DEBUG("Returning custom Opti parameters"); + return NVSDK_NGX_Result_Success; } diff --git a/OptiScaler/inputs/NVNGX_DLSS_Dx12.cpp b/OptiScaler/inputs/NVNGX_DLSS_Dx12.cpp index 0f2ea236..9b07465d 100644 --- a/OptiScaler/inputs/NVNGX_DLSS_Dx12.cpp +++ b/OptiScaler/inputs/NVNGX_DLSS_Dx12.cpp @@ -151,9 +151,6 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_Ext(unsigned long long InApp { LOG_FUNC(); - if (Config::Instance()->UseGenericAppIdWithDlss.value_or_default()) - InApplicationId = app_id_override; - NVSDK_NGX_FeatureCommonInfo localFeatureInfo = {}; std::memcpy(&localFeatureInfo, InFeatureInfo, sizeof(NVSDK_NGX_FeatureCommonInfo)); @@ -164,18 +161,20 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_Ext(unsigned long long InApp State::Instance().NVNGX_ApplicationDataPath = std::wstring(InApplicationDataPath); State::Instance().NVNGX_Version = InSDKVersion; State::Instance().NVNGX_FeatureInfo = &localFeatureInfo; - - if (InFeatureInfo != nullptr && InSDKVersion > 0x0000013) - State::Instance().NVNGX_Logger = InFeatureInfo->LoggingInfo; + State::Instance().NVNGX_Version = InSDKVersion; if (Config::Instance()->DLSSEnabled.value_or_default() && !_skipInit) { + if (Config::Instance()->UseGenericAppIdWithDlss.value_or_default()) + InApplicationId = app_id_override; + if (NVNGXProxy::NVNGXModule() == nullptr) NVNGXProxy::InitNVNGX(); if (NVNGXProxy::NVNGXModule() != nullptr && NVNGXProxy::D3D12_Init_Ext() != nullptr) { LOG_INFO("calling NVNGXProxy::D3D12_Init_Ext"); + auto result = NVNGXProxy::D3D12_Init_Ext()(InApplicationId, InApplicationDataPath, InDevice, InSDKVersion, &localFeatureInfo); LOG_INFO("calling NVNGXProxy::D3D12_Init_Ext result: {0:X}", (UINT) result); @@ -189,6 +188,9 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_Ext(unsigned long long InApp } } + if (InFeatureInfo != nullptr && InSDKVersion > 0x0000013) + State::Instance().NVNGX_Logger = InFeatureInfo->LoggingInfo; + if (State::Instance().NvngxDx12Inited) { LOG_WARN("NVNGX already inited"); @@ -459,6 +461,8 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_GetParameters(NVSDK_NGX_Parameter *OutParameters = GetNGXParameters("OptiDx12"); + LOG_DEBUG("Returning custom Opti parameters"); + return NVSDK_NGX_Result_Success; } @@ -486,6 +490,8 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_GetCapabilityParameters(NVSDK_NGX *OutParameters = GetNGXParameters("OptiDx12"); + LOG_DEBUG("Returning custom Opti parameters"); + return NVSDK_NGX_Result_Success; } diff --git a/OptiScaler/inputs/NVNGX_DLSS_Vk.cpp b/OptiScaler/inputs/NVNGX_DLSS_Vk.cpp index f321f76b..c9350205 100644 --- a/OptiScaler/inputs/NVNGX_DLSS_Vk.cpp +++ b/OptiScaler/inputs/NVNGX_DLSS_Vk.cpp @@ -150,6 +150,12 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init_Ext2( if (!_skipInit) UpdateInitPaths(&localFeatureInfo); + State::Instance().NVNGX_ApplicationId = InApplicationId; + State::Instance().NVNGX_ApplicationDataPath = std::wstring(InApplicationDataPath); + State::Instance().NVNGX_Version = InSDKVersion; + State::Instance().NVNGX_FeatureInfo = &localFeatureInfo; + State::Instance().NVNGX_Version = InSDKVersion; + if (Config::Instance()->DLSSEnabled.value_or_default() && !_skipInit) { if (Config::Instance()->UseGenericAppIdWithDlss.value_or_default()) @@ -170,15 +176,21 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init_Ext2( } } - DLSSGMod::InitDLSSGMod_Vulkan(); - DLSSGMod::VULKAN_Init_Ext2(InApplicationId, InApplicationDataPath, InInstance, InPD, InDevice, InGIPA, InGDPA, - InSDKVersion, &localFeatureInfo); + if (InFeatureInfo != nullptr && InSDKVersion > 0x0000013) + State::Instance().NVNGX_Logger = InFeatureInfo->LoggingInfo; - State::Instance().NVNGX_ApplicationId = InApplicationId; - State::Instance().NVNGX_ApplicationDataPath = std::wstring(InApplicationDataPath); - State::Instance().NVNGX_Version = InSDKVersion; - State::Instance().NVNGX_FeatureInfo = &localFeatureInfo; - State::Instance().NVNGX_Version = InSDKVersion; + if (State::Instance().NvngxVkInited) + { + LOG_WARN("NVNGX already inited"); + return NVSDK_NGX_Result_Success; + } + + if (State::Instance().activeFgInput == FGInput::Nukems) + { + DLSSGMod::InitDLSSGMod_Vulkan(); + DLSSGMod::VULKAN_Init_Ext2(InApplicationId, InApplicationDataPath, InInstance, InPD, InDevice, InGIPA, InGDPA, + InSDKVersion, &localFeatureInfo); + } State::Instance().NVNGX_FeatureInfo_Paths.clear(); @@ -458,6 +470,9 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_GetParameters(NVSDK_NGX_Paramete } *OutParameters = GetNGXParameters("OptiVk"); + + LOG_DEBUG("Returning custom Opti parameters"); + return NVSDK_NGX_Result_Success; }