From 52d7aa269e9e55ccf01144d59d73ab059cd38bef Mon Sep 17 00:00:00 2001 From: cdozdil Date: Sat, 9 Mar 2024 18:42:19 +0300 Subject: [PATCH] unreal engine auto fix implementation --- CyberXeSS/FSR2Feature_Dx11.cpp | 27 ++++++++++++++--------- CyberXeSS/FSR2Feature_Dx12.cpp | 39 ++++++++++++++++++++++++---------- CyberXeSS/FSR2Feature_Vk.cpp | 27 ++++++++++++++--------- CyberXeSS/NVNGX_DLSS_Dx11.cpp | 17 ++++++++++++--- CyberXeSS/NVNGX_DLSS_Dx12.cpp | 12 ++++++++--- CyberXeSS/NVNGX_DLSS_Vk.cpp | 19 ++++++++++++++--- CyberXeSS/XeSSFeature_Dx12.cpp | 10 ++++++++- 7 files changed, 110 insertions(+), 41 deletions(-) diff --git a/CyberXeSS/FSR2Feature_Dx11.cpp b/CyberXeSS/FSR2Feature_Dx11.cpp index 67455c07..ac26051b 100644 --- a/CyberXeSS/FSR2Feature_Dx11.cpp +++ b/CyberXeSS/FSR2Feature_Dx11.cpp @@ -292,18 +292,25 @@ bool FSR2FeatureDx11::Evaluate(ID3D11DeviceContext* InContext, const NVSDK_NGX_P else spdlog::warn("FSR2FeatureDx11::Evaluate Can't get motion vector scales!"); - - float shapness = 0.0f; - if (InParameters->Get(NVSDK_NGX_Parameter_Sharpness, &shapness) == NVSDK_NGX_Result_Success) + if (Config::Instance()->OverrideSharpness.value_or(false)) { - params.enableSharpening = shapness != 0 && shapness != 1; - - if (params.enableSharpening) + params.enableSharpening = true; + params.sharpness = Config::Instance()->Sharpness.value_or(0.3); + } + else + { + float shapness = 0.0f; + if (InParameters->Get(NVSDK_NGX_Parameter_Sharpness, &shapness) == NVSDK_NGX_Result_Success) { - if (shapness < 0) - params.sharpness = (shapness + 1.0f) / 2.0f; - else - params.sharpness = shapness; + params.enableSharpening = shapness != 0.0f && shapness != 1.0f; + + if (params.enableSharpening) + { + if (shapness < 0) + params.sharpness = (shapness + 1.0f) / 2.0f; + else + params.sharpness = shapness; + } } } diff --git a/CyberXeSS/FSR2Feature_Dx12.cpp b/CyberXeSS/FSR2Feature_Dx12.cpp index 4c4291cb..3cda718a 100644 --- a/CyberXeSS/FSR2Feature_Dx12.cpp +++ b/CyberXeSS/FSR2Feature_Dx12.cpp @@ -45,9 +45,19 @@ bool FSR2FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N spdlog::debug("FSR2FeatureDx12::Evaluate Color exist.."); if (Config::Instance()->ColorResourceBarrier.has_value()) + { ResourceBarrier(InCommandList, paramColor, (D3D12_RESOURCE_STATES)Config::Instance()->ColorResourceBarrier.value(), D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); + } + else if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL) + { + Config::Instance()->ColorResourceBarrier = (int)D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; + + ResourceBarrier(InCommandList, paramColor, + D3D12_RESOURCE_STATE_RENDER_TARGET, + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); + } params.color = ffxGetResourceDX12(&_context, paramColor, (wchar_t*)L"FSR3Upscale_Color", FFX_RESOURCE_STATE_COMPUTE_READ); } @@ -174,18 +184,25 @@ bool FSR2FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N else spdlog::warn("FSR2FeatureDx12::Evaluate Can't get motion vector scales!"); - - float shapness; - if (InParameters->Get(NVSDK_NGX_Parameter_Sharpness, &shapness) == NVSDK_NGX_Result_Success) + if (Config::Instance()->OverrideSharpness.value_or(false)) { - params.enableSharpening = shapness != 0 && shapness != 1; - - if (params.enableSharpening) + params.enableSharpening = true; + params.sharpness = Config::Instance()->Sharpness.value_or(0.3); + } + else + { + float shapness = 0.0f; + if (InParameters->Get(NVSDK_NGX_Parameter_Sharpness, &shapness) == NVSDK_NGX_Result_Success) { - if (shapness < 0) - params.sharpness = (shapness + 1.0f) / 2.0f; - else - params.sharpness = shapness; + params.enableSharpening = shapness != 0.0f && shapness != 1.0f; + + if (params.enableSharpening) + { + if (shapness < 0) + params.sharpness = (shapness + 1.0f) / 2.0f; + else + params.sharpness = shapness; + } } } @@ -215,7 +232,7 @@ bool FSR2FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N } // restore resource states - if (paramColor && Config::Instance()->ColorResourceBarrier.value_or(false)) + if (paramColor && (Config::Instance()->ColorResourceBarrier.value_or(false) || Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL)) ResourceBarrier(InCommandList, paramColor, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, (D3D12_RESOURCE_STATES)Config::Instance()->ColorResourceBarrier.value()); diff --git a/CyberXeSS/FSR2Feature_Vk.cpp b/CyberXeSS/FSR2Feature_Vk.cpp index b51e7484..e3ca4663 100644 --- a/CyberXeSS/FSR2Feature_Vk.cpp +++ b/CyberXeSS/FSR2Feature_Vk.cpp @@ -314,18 +314,25 @@ bool FSR2FeatureVk::Evaluate(VkCommandBuffer InCmdBuffer, const NVSDK_NGX_Parame else spdlog::warn("FSR2FeatureVk::Evaluate Can't get motion vector scales!"); - - float shapness; - if (InParameters->Get(NVSDK_NGX_Parameter_Sharpness, &shapness) == NVSDK_NGX_Result_Success) + if (Config::Instance()->OverrideSharpness.value_or(false)) { - params.enableSharpening = shapness != 0 && shapness != 1; - - if (params.enableSharpening) + params.enableSharpening = true; + params.sharpness = Config::Instance()->Sharpness.value_or(0.3); + } + else + { + float shapness = 0.0f; + if (InParameters->Get(NVSDK_NGX_Parameter_Sharpness, &shapness) == NVSDK_NGX_Result_Success) { - if (shapness < 0) - params.sharpness = (shapness + 1.0f) / 2.0f; - else - params.sharpness = shapness; + params.enableSharpening = shapness != 0.0f && shapness != 1.0f; + + if (params.enableSharpening) + { + if (shapness < 0) + params.sharpness = (shapness + 1.0f) / 2.0f; + else + params.sharpness = shapness; + } } } diff --git a/CyberXeSS/NVNGX_DLSS_Dx11.cpp b/CyberXeSS/NVNGX_DLSS_Dx11.cpp index 5a8a9ad1..88c84413 100644 --- a/CyberXeSS/NVNGX_DLSS_Dx11.cpp +++ b/CyberXeSS/NVNGX_DLSS_Dx11.cpp @@ -27,27 +27,38 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_Ext(unsigned long long InApp return NVSDK_NGX_Result_Success; } -NVSDK_NGX_Result NVSDK_NGX_D3D11_Init(unsigned long long InApplicationId, const wchar_t* InApplicationDataPath, ID3D11Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init(unsigned long long InApplicationId, const wchar_t* InApplicationDataPath, ID3D11Device* InDevice, + const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) { spdlog::debug("NVSDK_NGX_D3D11_Init"); return NVSDK_NGX_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InFeatureInfo, InSDKVersion, 0); } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, const wchar_t* InApplicationDataPath, ID3D11Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, + const char* InEngineVersion, const wchar_t* InApplicationDataPath, ID3D11Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) { spdlog::debug("NVSDK_NGX_D3D11_Init_ProjectID InProjectId: {0}", InProjectId); spdlog::debug("NVSDK_NGX_D3D11_Init_ProjectID InEngineType: {0}", (int)InEngineType); spdlog::debug("NVSDK_NGX_D3D11_Init_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; + Config::Instance()->NVNGX_EngineVersion = InEngineVersion; + Config::Instance()->NVNGX_AppDataPath = InApplicationDataPath; + return NVSDK_NGX_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InFeatureInfo, InSDKVersion, 0); } -NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_with_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, const wchar_t* InApplicationDataPath, ID3D11Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_with_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, + const wchar_t* InApplicationDataPath, ID3D11Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) { spdlog::debug("NVSDK_NGX_D3D11_Init_with_ProjectID InProjectId: {0}", InProjectId); spdlog::debug("NVSDK_NGX_D3D11_Init_with_ProjectID InEngineType: {0}", (int)InEngineType); spdlog::debug("NVSDK_NGX_D3D11_Init_with_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; + Config::Instance()->NVNGX_EngineVersion = InEngineVersion; + Config::Instance()->NVNGX_AppDataPath = InApplicationDataPath; + return NVSDK_NGX_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InFeatureInfo, InSDKVersion, 0); } diff --git a/CyberXeSS/NVNGX_DLSS_Dx12.cpp b/CyberXeSS/NVNGX_DLSS_Dx12.cpp index 0624772f..d8951a61 100644 --- a/CyberXeSS/NVNGX_DLSS_Dx12.cpp +++ b/CyberXeSS/NVNGX_DLSS_Dx12.cpp @@ -1,6 +1,7 @@ #include "pch.h" #include +#include #include "Config.h" #include "XeSSFeature_Dx12.h" @@ -22,9 +23,6 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_Ext(unsigned long long InApp spdlog::debug("NVSDK_NGX_D3D12_Init_Ext InApplicationDataPath {0}", str); - if (InDevice) - D3D12Device = InDevice; - return NVSDK_NGX_Result_Success; } @@ -42,6 +40,10 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_ProjectID(const char* InProj spdlog::debug("NVSDK_NGX_D3D12_Init_ProjectID InEngineType: {0}", (int)InEngineType); spdlog::debug("NVSDK_NGX_D3D12_Init_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; + Config::Instance()->NVNGX_EngineVersion = InEngineVersion; + Config::Instance()->NVNGX_AppDataPath = InApplicationDataPath; + return NVSDK_NGX_D3D12_Init_Ext(0x1337, InApplicationDataPath, InDevice, InFeatureInfo, InSDKVersion, 0); } @@ -52,6 +54,10 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_with_ProjectID(const char* I spdlog::debug("NVSDK_NGX_D3D12_Init_with_ProjectID InEngineType: {0}", (int)InEngineType); spdlog::debug("NVSDK_NGX_D3D12_Init_with_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; + Config::Instance()->NVNGX_EngineVersion = InEngineVersion; + Config::Instance()->NVNGX_AppDataPath = InApplicationDataPath; + return NVSDK_NGX_D3D12_Init_Ext(0x1337, InApplicationDataPath, InDevice, InFeatureInfo, InSDKVersion, 0); } diff --git a/CyberXeSS/NVNGX_DLSS_Vk.cpp b/CyberXeSS/NVNGX_DLSS_Vk.cpp index 5d0a3761..6bc66df3 100644 --- a/CyberXeSS/NVNGX_DLSS_Vk.cpp +++ b/CyberXeSS/NVNGX_DLSS_Vk.cpp @@ -15,7 +15,8 @@ PFN_vkGetDeviceProcAddr vkGDPA; static inline ankerl::unordered_dense::map > VkContexts; -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init(unsigned long long InApplicationId, const wchar_t* InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init(unsigned long long InApplicationId, const wchar_t* InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, + VkDevice InDevice, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) { spdlog::info("NVSDK_NGX_VULKAN_Init InApplicationId: {0}", InApplicationId); std::wstring string(InApplicationDataPath); @@ -56,21 +57,33 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init(unsigned long long InApplic return NVSDK_NGX_Result_Success; } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, const wchar_t* InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, + const wchar_t* InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, + const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) { spdlog::debug("NVSDK_NGX_VULKAN_Init_ProjectID InProjectId: {0}", InProjectId); spdlog::debug("NVSDK_NGX_VULKAN_Init_ProjectID InEngineType: {0}", (int)InEngineType); spdlog::debug("NVSDK_NGX_VULKAN_Init_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; + Config::Instance()->NVNGX_EngineVersion = InEngineVersion; + Config::Instance()->NVNGX_AppDataPath = InApplicationDataPath; + return NVSDK_NGX_VULKAN_Init(0x1337, InApplicationDataPath, InInstance, InPD, InDevice, InGIPA, InGDPA, InFeatureInfo, InSDKVersion); } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init_with_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, const wchar_t* InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Init_with_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, + const wchar_t* InApplicationDataPath, VkInstance InInstance, VkPhysicalDevice InPD, VkDevice InDevice, PFN_vkGetInstanceProcAddr InGIPA, PFN_vkGetDeviceProcAddr InGDPA, + const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) { spdlog::debug("NVSDK_NGX_VULKAN_Init_with_ProjectID InProjectId: {0}", InProjectId); spdlog::debug("NVSDK_NGX_VULKAN_Init_with_ProjectID InEngineType {0}", (int)InEngineType); spdlog::debug("NVSDK_NGX_VULKAN_Init_with_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; + Config::Instance()->NVNGX_EngineVersion = InEngineVersion; + Config::Instance()->NVNGX_AppDataPath = InApplicationDataPath; + return NVSDK_NGX_VULKAN_Init(0x1337, InApplicationDataPath, InInstance, InPD, InDevice, InGIPA, InGDPA, InFeatureInfo, InSDKVersion); } diff --git a/CyberXeSS/XeSSFeature_Dx12.cpp b/CyberXeSS/XeSSFeature_Dx12.cpp index 360f051a..26406266 100644 --- a/CyberXeSS/XeSSFeature_Dx12.cpp +++ b/CyberXeSS/XeSSFeature_Dx12.cpp @@ -47,6 +47,14 @@ bool XeSSFeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N ResourceBarrier(InCommandList, params.pColorTexture, (D3D12_RESOURCE_STATES)Config::Instance()->ColorResourceBarrier.value(), D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); + else if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL) + { + Config::Instance()->ColorResourceBarrier = (int)D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; + + ResourceBarrier(InCommandList, params.pColorTexture, + D3D12_RESOURCE_STATE_RENDER_TARGET, + D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE); + } } else { @@ -176,7 +184,7 @@ bool XeSSFeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N } // restore resource states - if (params.pColorTexture && Config::Instance()->ColorResourceBarrier.value_or(false)) + if (params.pColorTexture && (Config::Instance()->ColorResourceBarrier.value_or(false) || Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL)) ResourceBarrier(InCommandList, params.pColorTexture, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, (D3D12_RESOURCE_STATES)Config::Instance()->ColorResourceBarrier.value());