From 8d64e4e51332b3ee2cd23a15a0b19a903ca4c97d Mon Sep 17 00:00:00 2001 From: cdozdil Date: Sat, 9 Mar 2024 23:43:56 +0300 Subject: [PATCH] auto ue fixes corrected --- CyberXeSS/Config.cpp | 1 + CyberXeSS/Config.h | 14 +---- CyberXeSS/CyberXeSS.vcxproj | 6 +- CyberXeSS/CyberXeSS.vcxproj.filters | 23 ++++---- CyberXeSS/FSR2Feature.cpp | 1 + CyberXeSS/FSR2Feature.h | 3 +- CyberXeSS/FSR2Feature_Dx11.cpp | 1 + CyberXeSS/FSR2Feature_Dx12.cpp | 5 +- CyberXeSS/FSR2Feature_Dx12.h | 1 + CyberXeSS/FSR2Feature_Vk.cpp | 2 +- CyberXeSS/FSR2Feature_Vk.h | 1 + CyberXeSS/IFeature.cpp | 1 + CyberXeSS/IFeature_Dx12.cpp | 1 + CyberXeSS/NVNGX_DLSS_Dx11.cpp | 41 +++++++------ CyberXeSS/NVNGX_DLSS_Dx12.cpp | 30 ++++++---- CyberXeSS/NVNGX_DLSS_Vk.cpp | 54 +++++++++++------- CyberXeSS/NVNGX_Parameter.h | 12 ++-- CyberXeSS/Util.cpp | 1 + CyberXeSS/XeSSFeature.cpp | 1 + CyberXeSS/XeSSFeature.h | 1 + CyberXeSS/XeSSFeature_Dx11.cpp | 1 + CyberXeSS/XeSSFeature_Dx12.cpp | 5 +- CyberXeSS/XeSSFeature_Dx12.h | 1 + CyberXeSS/dllmain.cpp | 1 + CyberXeSS/fsr2/include/dx11/ffx_fsr2_dx11.h | 10 ++-- .../dx11/shaders/ffx_fsr2_shaders_dx11.h | 2 +- CyberXeSS/fsr2/include/dx12/ffx_fsr2_dx12.h | 12 ++-- .../dx12/shaders/ffx_fsr2_shaders_dx12.h | 2 +- CyberXeSS/fsr2/include/ffx_assert.h | 4 +- CyberXeSS/fsr2/include/ffx_error.h | 2 +- CyberXeSS/fsr2/include/ffx_fsr2.h | 18 +++--- CyberXeSS/fsr2/include/ffx_fsr2_interface.h | 10 ++-- CyberXeSS/fsr2/include/ffx_util.h | 2 +- CyberXeSS/fsr2/include/vk/ffx_fsr2_vk.h | 18 +++--- .../include/vk/shaders/ffx_fsr2_shaders_vk.h | 2 +- CyberXeSS/fsr2/lib/ffx_fsr2_api_dx11_x64.lib | Bin 2203554 -> 2203340 bytes CyberXeSS/fsr2/lib/ffx_fsr2_api_dx11_x64d.lib | Bin 3985400 -> 3985184 bytes CyberXeSS/fsr2/lib/ffx_fsr2_api_dx12_x64.lib | Bin 3500346 -> 3500102 bytes CyberXeSS/fsr2/lib/ffx_fsr2_api_dx12_x64d.lib | Bin 5221888 -> 5221642 bytes CyberXeSS/fsr2/lib/ffx_fsr2_api_vk_x64.lib | Bin 2728162 -> 2727844 bytes CyberXeSS/fsr2/lib/ffx_fsr2_api_vk_x64d.lib | Bin 3841712 -> 3841392 bytes CyberXeSS/fsr2/lib/ffx_fsr2_api_x64.lib | Bin 88474 -> 87764 bytes CyberXeSS/fsr2/lib/ffx_fsr2_api_x64d.lib | Bin 199512 -> 199134 bytes 43 files changed, 156 insertions(+), 134 deletions(-) diff --git a/CyberXeSS/Config.cpp b/CyberXeSS/Config.cpp index 5c5e3860..02d8bcf3 100644 --- a/CyberXeSS/Config.cpp +++ b/CyberXeSS/Config.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "Config.h" #include diff --git a/CyberXeSS/Config.h b/CyberXeSS/Config.h index 64ddb095..74875151 100644 --- a/CyberXeSS/Config.h +++ b/CyberXeSS/Config.h @@ -11,15 +11,6 @@ typedef enum NVNGX_EngineType NVNGX_ENGINE_COUNT } NVNGX_EngineType; -typedef enum GPU_Vendor -{ - AMD = 0, - NVIDIA, - INTEL, - OTHER, -} GPU_Vendor; - - class Config { public: @@ -84,9 +75,8 @@ public: std::optional VulkanUpscaler; // Engine Info - NVNGX_EngineType NVNGX_Engine; - const char* NVNGX_EngineVersion; - const wchar_t* NVNGX_AppDataPath; + NVNGX_EngineType NVNGX_Engine = NVNGX_ENGINE_TYPE_CUSTOM; + bool NVNGX_EngineVersion5 = false; void Reload(); diff --git a/CyberXeSS/CyberXeSS.vcxproj b/CyberXeSS/CyberXeSS.vcxproj index a7b5425b..beb67fb1 100644 --- a/CyberXeSS/CyberXeSS.vcxproj +++ b/CyberXeSS/CyberXeSS.vcxproj @@ -82,7 +82,7 @@ $(SolutionDir)external\vulkan\include;$(SolutionDir)external\nvngx_dlss_sdk;$(SolutionDir)external\xess\inc\xess;$(SolutionDir)CyberXeSS\fsr2\include;$(SolutionDir)external\simpleini;$(SolutionDir)external\unordered_dense\include;$(SolutionDir)external\spdlog\include;C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath) $(SolutionDir)CyberXess\fsr2\lib;$(SolutionDir)CyberXess\vulkan;$(SolutionDir)external\xess\lib;C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x64;$(LibraryPath) nvngx - ..\..\God of War + ..\..\..\Games\Banishers Ghosts of New Eden\NWD\Binaries\Win64 $(SolutionDir)external\vulkan\include;$(SolutionDir)external\nvngx_dlss_sdk;$(SolutionDir)external\xess\inc\xess;$(SolutionDir)CyberXeSS\fsr2\include;$(SolutionDir)external\simpleini;$(SolutionDir)external\unordered_dense\include;$(SolutionDir)external\spdlog\include;C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Include;$(IncludePath) @@ -141,7 +141,7 @@ Windows true false - d3d11.lib;dxgi.lib;d3d12.lib;dxguid.lib;libxess.lib;vulkan-1.lib;ffx_fsr2_api_x64d.lib;ffx_fsr2_api_dx11_x64d.lib;ffx_fsr2_api_dx12_x64d.lib;ffx_fsr2_api_vk_x64d.lib;%(AdditionalDependencies) + dxgi.lib;d3d11.lib;d3d12.lib;vulkan-1.lib;dxguid.lib;libxess.lib;ffx_fsr2_api_x64d.lib;ffx_fsr2_api_dx11_x64d.lib;ffx_fsr2_api_dx12_x64d.lib;ffx_fsr2_api_vk_x64d.lib;%(AdditionalDependencies) @@ -202,8 +202,8 @@ copy $(SolutionDir)nvngx.ini $(SolutionDir)x64\Release\a\ - + diff --git a/CyberXeSS/CyberXeSS.vcxproj.filters b/CyberXeSS/CyberXeSS.vcxproj.filters index 32138ff7..824cf5e5 100644 --- a/CyberXeSS/CyberXeSS.vcxproj.filters +++ b/CyberXeSS/CyberXeSS.vcxproj.filters @@ -65,26 +65,20 @@ Header Files - - Header Files - - - Header Files - Header Files Header Files + + Header Files + Config - - NVNGX - XeSS @@ -113,10 +107,13 @@ Source Files - + Source Files - + + Source Files + + Source Files @@ -125,10 +122,10 @@ Source Files - + Source Files - + Source Files diff --git a/CyberXeSS/FSR2Feature.cpp b/CyberXeSS/FSR2Feature.cpp index 5f9211c8..48328dc4 100644 --- a/CyberXeSS/FSR2Feature.cpp +++ b/CyberXeSS/FSR2Feature.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "FSR2Feature.h" #include "Config.h" diff --git a/CyberXeSS/FSR2Feature.h b/CyberXeSS/FSR2Feature.h index 395a32f7..dbf9fd2f 100644 --- a/CyberXeSS/FSR2Feature.h +++ b/CyberXeSS/FSR2Feature.h @@ -1,7 +1,8 @@ #pragma once -#include "IFeature.h" #include +#include "IFeature.h" + inline static std::string ResultToString(FfxErrorCode result) { switch (result) diff --git a/CyberXeSS/FSR2Feature_Dx11.cpp b/CyberXeSS/FSR2Feature_Dx11.cpp index ac26051b..f4aa332e 100644 --- a/CyberXeSS/FSR2Feature_Dx11.cpp +++ b/CyberXeSS/FSR2Feature_Dx11.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "FSR2Feature_Dx11.h" #include "Config.h" diff --git a/CyberXeSS/FSR2Feature_Dx12.cpp b/CyberXeSS/FSR2Feature_Dx12.cpp index 3cda718a..40bf79c0 100644 --- a/CyberXeSS/FSR2Feature_Dx12.cpp +++ b/CyberXeSS/FSR2Feature_Dx12.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "FSR2Feature_Dx12.h" #include "Config.h" @@ -52,7 +53,7 @@ bool FSR2FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N } else if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL) { - Config::Instance()->ColorResourceBarrier = (int)D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE; + Config::Instance()->ColorResourceBarrier = (int)D3D12_RESOURCE_STATE_RENDER_TARGET; ResourceBarrier(InCommandList, paramColor, D3D12_RESOURCE_STATE_RENDER_TARGET, @@ -232,7 +233,7 @@ bool FSR2FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N } // restore resource states - if (paramColor && (Config::Instance()->ColorResourceBarrier.value_or(false) || Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL)) + if (paramColor && Config::Instance()->ColorResourceBarrier.has_value()) ResourceBarrier(InCommandList, paramColor, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, (D3D12_RESOURCE_STATES)Config::Instance()->ColorResourceBarrier.value()); diff --git a/CyberXeSS/FSR2Feature_Dx12.h b/CyberXeSS/FSR2Feature_Dx12.h index 99e864d6..1aa242f8 100644 --- a/CyberXeSS/FSR2Feature_Dx12.h +++ b/CyberXeSS/FSR2Feature_Dx12.h @@ -1,3 +1,4 @@ +#pragma once #include "FSR2Feature.h" #include "IFeature_Dx12.h" diff --git a/CyberXeSS/FSR2Feature_Vk.cpp b/CyberXeSS/FSR2Feature_Vk.cpp index e3ca4663..566fd6db 100644 --- a/CyberXeSS/FSR2Feature_Vk.cpp +++ b/CyberXeSS/FSR2Feature_Vk.cpp @@ -1,8 +1,8 @@ +#pragma once #include "pch.h" #include "FSR2Feature_Vk.h" #include "Config.h" -#include #include "nvsdk_ngx_vk.h" bool FSR2FeatureVk::InitFSR2(const NVSDK_NGX_Parameter* InParameters) diff --git a/CyberXeSS/FSR2Feature_Vk.h b/CyberXeSS/FSR2Feature_Vk.h index ea3c1541..01dd7fae 100644 --- a/CyberXeSS/FSR2Feature_Vk.h +++ b/CyberXeSS/FSR2Feature_Vk.h @@ -1,3 +1,4 @@ +#pragma once #include #include diff --git a/CyberXeSS/IFeature.cpp b/CyberXeSS/IFeature.cpp index e48e52d3..67a3f0be 100644 --- a/CyberXeSS/IFeature.cpp +++ b/CyberXeSS/IFeature.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "IFeature.h" diff --git a/CyberXeSS/IFeature_Dx12.cpp b/CyberXeSS/IFeature_Dx12.cpp index dc5ab6ff..e9c6eee2 100644 --- a/CyberXeSS/IFeature_Dx12.cpp +++ b/CyberXeSS/IFeature_Dx12.cpp @@ -1,3 +1,4 @@ +#pragma once #include "IFeature_Dx12.h" void IFeature_Dx12::ResourceBarrier(ID3D12GraphicsCommandList* commandList, ID3D12Resource* resource, D3D12_RESOURCE_STATES beforeState, D3D12_RESOURCE_STATES afterState) diff --git a/CyberXeSS/NVNGX_DLSS_Dx11.cpp b/CyberXeSS/NVNGX_DLSS_Dx11.cpp index 88c84413..12049428 100644 --- a/CyberXeSS/NVNGX_DLSS_Dx11.cpp +++ b/CyberXeSS/NVNGX_DLSS_Dx11.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include @@ -39,12 +40,15 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_ProjectID(const char* InProj { 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; + if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && InEngineVersion) + { + spdlog::debug("NVSDK_NGX_D3D11_Init_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_EngineVersion5 = InEngineVersion[0] == '5'; + } + return NVSDK_NGX_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InFeatureInfo, InSDKVersion, 0); } @@ -53,11 +57,14 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_with_ProjectID(const char* I { 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; + + if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && InEngineVersion) + { + spdlog::debug("NVSDK_NGX_D3D11_Init_with_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_EngineVersion5 = InEngineVersion[0] == '5'; + } return NVSDK_NGX_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InFeatureInfo, InSDKVersion, 0); } @@ -66,7 +73,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_with_ProjectID(const char* I #pragma region NVSDK_NGX_D3D11_Shutdown -NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Shutdown(void) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Shutdown(void) { spdlog::info("NVSDK_NGX_D3D11_Shutdown"); @@ -79,7 +86,7 @@ NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Shutdown(void) return NVSDK_NGX_Result_Success; } -NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Shutdown1(ID3D11Device* InDevice) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Shutdown1(ID3D11Device* InDevice) { spdlog::info("NVSDK_NGX_D3D11_Shutdown1"); return NVSDK_NGX_D3D11_Shutdown(); @@ -89,7 +96,7 @@ NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_D3D11_Shutdown1(ID3D11Device* InDevice) #pragma region NVSDK_NGX_D3D11 Parameters -NVSDK_NGX_Result NVSDK_NGX_D3D11_GetParameters(NVSDK_NGX_Parameter** OutParameters) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_GetParameters(NVSDK_NGX_Parameter** OutParameters) { spdlog::debug("NVSDK_NGX_D3D11_GetParameters"); @@ -105,7 +112,7 @@ NVSDK_NGX_Result NVSDK_NGX_D3D11_GetParameters(NVSDK_NGX_Parameter** OutParamete } } -NVSDK_NGX_Result NVSDK_NGX_D3D11_GetCapabilityParameters(NVSDK_NGX_Parameter** OutParameters) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_GetCapabilityParameters(NVSDK_NGX_Parameter** OutParameters) { spdlog::debug("NVSDK_NGX_D3D11_GetCapabilityParameters"); @@ -121,7 +128,7 @@ NVSDK_NGX_Result NVSDK_NGX_D3D11_GetCapabilityParameters(NVSDK_NGX_Parameter** O } } -NVSDK_NGX_Result NVSDK_NGX_D3D11_AllocateParameters(NVSDK_NGX_Parameter** OutParameters) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_AllocateParameters(NVSDK_NGX_Parameter** OutParameters) { spdlog::debug("NVSDK_NGX_D3D11_AllocateParameters"); @@ -151,7 +158,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_PopulateParameters_Impl(NVSDK_NGX return NVSDK_NGX_Result_Success; } -NVSDK_NGX_Result NVSDK_NGX_D3D11_DestroyParameters(NVSDK_NGX_Parameter* InParameters) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_DestroyParameters(NVSDK_NGX_Parameter* InParameters) { spdlog::debug("NVSDK_NGX_D3D11_DestroyParameters"); @@ -163,7 +170,7 @@ NVSDK_NGX_Result NVSDK_NGX_D3D11_DestroyParameters(NVSDK_NGX_Parameter* InParame return NVSDK_NGX_Result_Success; } -NVSDK_NGX_Result NVSDK_NGX_D3D11_GetScratchBufferSize(NVSDK_NGX_Feature InFeatureId, const NVSDK_NGX_Parameter* InParameters, size_t* OutSizeInBytes) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_GetScratchBufferSize(NVSDK_NGX_Feature InFeatureId, const NVSDK_NGX_Parameter* InParameters, size_t* OutSizeInBytes) { spdlog::warn("NVSDK_NGX_D3D11_GetScratchBufferSize -> 52428800"); *OutSizeInBytes = 52428800; @@ -174,7 +181,7 @@ NVSDK_NGX_Result NVSDK_NGX_D3D11_GetScratchBufferSize(NVSDK_NGX_Feature InFeatur #pragma region NVSDK_NGX_D3D11 Feature -NVSDK_NGX_Result NVSDK_NGX_D3D11_CreateFeature(ID3D11DeviceContext* InDevCtx, NVSDK_NGX_Feature InFeatureID, NVSDK_NGX_Parameter* InParameters, NVSDK_NGX_Handle** OutHandle) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_CreateFeature(ID3D11DeviceContext* InDevCtx, NVSDK_NGX_Feature InFeatureID, NVSDK_NGX_Parameter* InParameters, NVSDK_NGX_Handle** OutHandle) { spdlog::info("NVSDK_NGX_D3D11_CreateFeature"); @@ -214,7 +221,7 @@ NVSDK_NGX_Result NVSDK_NGX_D3D11_CreateFeature(ID3D11DeviceContext* InDevCtx, NV return NVSDK_NGX_Result_Fail; } -NVSDK_NGX_Result NVSDK_NGX_D3D11_ReleaseFeature(NVSDK_NGX_Handle* InHandle) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_ReleaseFeature(NVSDK_NGX_Handle* InHandle) { spdlog::info("NVSDK_NGX_D3D11_ReleaseFeature"); @@ -232,7 +239,7 @@ NVSDK_NGX_Result NVSDK_NGX_D3D11_ReleaseFeature(NVSDK_NGX_Handle* InHandle) return NVSDK_NGX_Result_Success; } -NVSDK_NGX_Result NVSDK_NGX_D3D11_GetFeatureRequirements(IDXGIAdapter* Adapter, const NVSDK_NGX_FeatureDiscoveryInfo* FeatureDiscoveryInfo, NVSDK_NGX_FeatureRequirement* OutSupported) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_GetFeatureRequirements(IDXGIAdapter* Adapter, const NVSDK_NGX_FeatureDiscoveryInfo* FeatureDiscoveryInfo, NVSDK_NGX_FeatureRequirement* OutSupported) { spdlog::debug("NVSDK_NGX_D3D11_GetFeatureRequirements"); @@ -245,7 +252,7 @@ NVSDK_NGX_Result NVSDK_NGX_D3D11_GetFeatureRequirements(IDXGIAdapter* Adapter, c return NVSDK_NGX_Result_Success; } -NVSDK_NGX_Result NVSDK_NGX_D3D11_EvaluateFeature(ID3D11DeviceContext* InDevCtx, const NVSDK_NGX_Handle* InFeatureHandle, const NVSDK_NGX_Parameter* InParameters, PFN_NVSDK_NGX_ProgressCallback InCallback) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_EvaluateFeature(ID3D11DeviceContext* InDevCtx, const NVSDK_NGX_Handle* InFeatureHandle, const NVSDK_NGX_Parameter* InParameters, PFN_NVSDK_NGX_ProgressCallback InCallback) { spdlog::debug("NVSDK_NGX_D3D11_EvaluateFeature Handle: {0}", InFeatureHandle->Id); diff --git a/CyberXeSS/NVNGX_DLSS_Dx12.cpp b/CyberXeSS/NVNGX_DLSS_Dx12.cpp index d8951a61..7c90948a 100644 --- a/CyberXeSS/NVNGX_DLSS_Dx12.cpp +++ b/CyberXeSS/NVNGX_DLSS_Dx12.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include @@ -20,8 +21,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_Ext(unsigned long long InApp spdlog::info("NVSDK_NGX_D3D12_Init_Ext SDK: {0:x}", (int)InSDKVersion); std::wstring string(InApplicationDataPath); std::string str(string.begin(), string.end()); - spdlog::debug("NVSDK_NGX_D3D12_Init_Ext InApplicationDataPath {0}", str); - + spdlog::info("NVSDK_NGX_D3D12_Init_Ext InApplicationDataPath {0}", str); return NVSDK_NGX_Result_Success; } @@ -36,13 +36,16 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init(unsigned long long InApplica NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, const wchar_t* InApplicationDataPath, ID3D12Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) { - spdlog::debug("NVSDK_NGX_D3D12_Init_ProjectID InProjectId: {0}", InProjectId); - spdlog::debug("NVSDK_NGX_D3D12_Init_ProjectID InEngineType: {0}", (int)InEngineType); - spdlog::debug("NVSDK_NGX_D3D12_Init_ProjectID InEngineVersion: {0}", InEngineVersion); + spdlog::info("NVSDK_NGX_D3D12_Init_ProjectID InProjectId: {0}", InProjectId); + spdlog::info("NVSDK_NGX_D3D12_Init_ProjectID InEngineType: {0}", (int)InEngineType); Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; - Config::Instance()->NVNGX_EngineVersion = InEngineVersion; - Config::Instance()->NVNGX_AppDataPath = InApplicationDataPath; + + if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && InEngineVersion) + { + spdlog::debug("NVSDK_NGX_D3D12_Init_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_EngineVersion5 = InEngineVersion[0] == '5'; + } return NVSDK_NGX_D3D12_Init_Ext(0x1337, InApplicationDataPath, InDevice, InFeatureInfo, InSDKVersion, 0); } @@ -50,13 +53,16 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_ProjectID(const char* InProj NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_Init_with_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion, const wchar_t* InApplicationDataPath, ID3D12Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, NVSDK_NGX_Version InSDKVersion) { - spdlog::debug("NVSDK_NGX_D3D12_Init_with_ProjectID InProjectId: {0}", InProjectId); - spdlog::debug("NVSDK_NGX_D3D12_Init_with_ProjectID InEngineType: {0}", (int)InEngineType); - spdlog::debug("NVSDK_NGX_D3D12_Init_with_ProjectID InEngineVersion: {0}", InEngineVersion); + spdlog::info("NVSDK_NGX_D3D12_Init_with_ProjectID InProjectId: {0}", InProjectId); + spdlog::info("NVSDK_NGX_D3D12_Init_with_ProjectID InEngineType: {0}", (int)InEngineType); Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; - Config::Instance()->NVNGX_EngineVersion = InEngineVersion; - Config::Instance()->NVNGX_AppDataPath = InApplicationDataPath; + + if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && InEngineVersion) + { + spdlog::debug("NVSDK_NGX_D3D12_Init_with_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_EngineVersion5 = InEngineVersion[0] == '5'; + } 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 6bc66df3..e6f98731 100644 --- a/CyberXeSS/NVNGX_DLSS_Vk.cpp +++ b/CyberXeSS/NVNGX_DLSS_Vk.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include @@ -15,7 +16,7 @@ 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, +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); @@ -57,32 +58,41 @@ 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, +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; + + if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && InEngineVersion) + { + spdlog::debug("NVSDK_NGX_VULKAN_Init_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_EngineVersion5 = InEngineVersion[0] == '5'; + } 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, +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; + + if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && InEngineVersion) + { + spdlog::debug("NVSDK_NGX_VULKAN_Init_with_ProjectID InEngineVersion: {0}", InEngineVersion); + Config::Instance()->NVNGX_EngineVersion5 = InEngineVersion[0] == '5'; + } + + Config::Instance()->NVNGX_Engine = (NVNGX_EngineType)InEngineType; + Config::Instance()->NVNGX_EngineVersion5 = InEngineVersion; return NVSDK_NGX_VULKAN_Init(0x1337, InApplicationDataPath, InInstance, InPD, InDevice, InGIPA, InGDPA, InFeatureInfo, InSDKVersion); } @@ -103,7 +113,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_GetParameters(NVSDK_NGX_Paramete } } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_AllocateParameters(NVSDK_NGX_Parameter** OutParameters) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_AllocateParameters(NVSDK_NGX_Parameter** OutParameters) { spdlog::debug("NVSDK_NGX_VULKAN_AllocateParameters"); @@ -119,7 +129,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_AllocateParameters(NV } } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_GetCapabilityParameters(NVSDK_NGX_Parameter** OutParameters) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_GetCapabilityParameters(NVSDK_NGX_Parameter** OutParameters) { spdlog::debug("NVSDK_NGX_VULKAN_GetCapabilityParameters"); @@ -147,7 +157,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_PopulateParameters_Impl(NVSDK_NG return NVSDK_NGX_Result_Success; } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_DestroyParameters(NVSDK_NGX_Parameter* InParameters) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_DestroyParameters(NVSDK_NGX_Parameter* InParameters) { spdlog::debug("NVSDK_NGX_VULKAN_DestroyParameters"); @@ -159,7 +169,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_DestroyParameters(NVS return NVSDK_NGX_Result_Success; } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_GetScratchBufferSize(NVSDK_NGX_Feature InFeatureId, const NVSDK_NGX_Parameter* InParameters, size_t* OutSizeInBytes) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_GetScratchBufferSize(NVSDK_NGX_Feature InFeatureId, const NVSDK_NGX_Parameter* InParameters, size_t* OutSizeInBytes) { spdlog::debug("NVSDK_NGX_VULKAN_GetScratchBufferSize -> 52428800"); @@ -167,7 +177,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_GetScratchBufferSize( return NVSDK_NGX_Result_Success; } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_CreateFeature1(VkDevice InDevice, VkCommandBuffer InCmdList, NVSDK_NGX_Feature InFeatureID, NVSDK_NGX_Parameter* InParameters, NVSDK_NGX_Handle** OutHandle) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_CreateFeature1(VkDevice InDevice, VkCommandBuffer InCmdList, NVSDK_NGX_Feature InFeatureID, NVSDK_NGX_Parameter* InParameters, NVSDK_NGX_Handle** OutHandle) { spdlog::info("NVSDK_NGX_VULKAN_CreateFeature1"); @@ -192,14 +202,14 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_CreateFeature1(VkDevi return NVSDK_NGX_Result_FAIL_PlatformError; } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_CreateFeature(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Feature InFeatureID, NVSDK_NGX_Parameter* InParameters, NVSDK_NGX_Handle** OutHandle) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_CreateFeature(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Feature InFeatureID, NVSDK_NGX_Parameter* InParameters, NVSDK_NGX_Handle** OutHandle) { spdlog::info("NVSDK_NGX_VULKAN_CreateFeature"); return NVSDK_NGX_VULKAN_CreateFeature1(vkDevice, InCmdBuffer, InFeatureID, InParameters, OutHandle); } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_ReleaseFeature(NVSDK_NGX_Handle* InHandle) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_ReleaseFeature(NVSDK_NGX_Handle* InHandle) { spdlog::debug("NVSDK_NGX_VULKAN_ReleaseFeature"); @@ -217,7 +227,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_ReleaseFeature(NVSDK_ return NVSDK_NGX_Result_Success; } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_EvaluateFeature(VkCommandBuffer InCmdList, const NVSDK_NGX_Handle* InFeatureHandle, const NVSDK_NGX_Parameter* InParameters, PFN_NVSDK_NGX_ProgressCallback InCallback) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_EvaluateFeature(VkCommandBuffer InCmdList, const NVSDK_NGX_Handle* InFeatureHandle, const NVSDK_NGX_Parameter* InParameters, PFN_NVSDK_NGX_ProgressCallback InCallback) { spdlog::debug("NVSDK_NGX_VULKAN_EvaluateFeature"); @@ -238,7 +248,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_EvaluateFeature(VkCom return NVSDK_NGX_Result_Fail; } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Shutdown(void) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Shutdown(void) { spdlog::debug("NVSDK_NGX_VULKAN_Shutdown"); @@ -254,7 +264,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Shutdown(void) return NVSDK_NGX_Result_Success; } -NVSDK_NGX_API NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_VULKAN_Shutdown1(VkDevice InDevice) +NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_Shutdown1(VkDevice InDevice) { spdlog::debug("NVSDK_NGX_VULKAN_Shutdown1"); return NVSDK_NGX_VULKAN_Shutdown(); diff --git a/CyberXeSS/NVNGX_Parameter.h b/CyberXeSS/NVNGX_Parameter.h index b4621be6..2b8782bc 100644 --- a/CyberXeSS/NVNGX_Parameter.h +++ b/CyberXeSS/NVNGX_Parameter.h @@ -91,8 +91,7 @@ inline NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_DLSS_GetOptimalSettingsCallback(NVS case NVSDK_NGX_PerfQuality_Value_Balanced: //UE5 ratio fix if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && - strlen(Config::Instance()->NVNGX_EngineVersion) > 0 && - Config::Instance()->NVNGX_EngineVersion[0] == '5' && + Config::Instance()->NVNGX_EngineVersion5 && Config::Instance()->Dx12Upscaler.value_or("xess") == "xess") { OutHeight = (unsigned int)((float)Height / 1.6666666667); @@ -111,8 +110,7 @@ inline NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_DLSS_GetOptimalSettingsCallback(NVS case NVSDK_NGX_PerfQuality_Value_MaxQuality: //UE5 ratio fix if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && - strlen(Config::Instance()->NVNGX_EngineVersion) > 0 && - Config::Instance()->NVNGX_EngineVersion[0] == '5' && + Config::Instance()->NVNGX_EngineVersion5 && Config::Instance()->Dx12Upscaler.value_or("xess") == "xess") { OutHeight = (unsigned int)((float)Height / 1.4285714286); @@ -131,8 +129,7 @@ inline NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_DLSS_GetOptimalSettingsCallback(NVS case NVSDK_NGX_PerfQuality_Value_UltraQuality: //UE5 ratio fix if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && - strlen(Config::Instance()->NVNGX_EngineVersion) > 0 && - Config::Instance()->NVNGX_EngineVersion[0] == '5' && + Config::Instance()->NVNGX_EngineVersion5 && Config::Instance()->Dx12Upscaler.value_or("xess") == "xess") { OutHeight = (unsigned int)((float)Height / 1.25); @@ -157,8 +154,7 @@ inline NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_DLSS_GetOptimalSettingsCallback(NVS default: //UE5 ratio fix if (Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL && - strlen(Config::Instance()->NVNGX_EngineVersion) > 0 && - Config::Instance()->NVNGX_EngineVersion[0] == '5' && + Config::Instance()->NVNGX_EngineVersion5 && Config::Instance()->Dx12Upscaler.value_or("xess") == "xess") { OutHeight = (unsigned int)((float)Height / 1.6666666667); diff --git a/CyberXeSS/Util.cpp b/CyberXeSS/Util.cpp index cd2a31b3..af36aeb2 100644 --- a/CyberXeSS/Util.cpp +++ b/CyberXeSS/Util.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "Util.h" diff --git a/CyberXeSS/XeSSFeature.cpp b/CyberXeSS/XeSSFeature.cpp index afdd991a..dffc63e4 100644 --- a/CyberXeSS/XeSSFeature.cpp +++ b/CyberXeSS/XeSSFeature.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "XeSSFeature.h" #include "Config.h" diff --git a/CyberXeSS/XeSSFeature.h b/CyberXeSS/XeSSFeature.h index b79d740b..fd068071 100644 --- a/CyberXeSS/XeSSFeature.h +++ b/CyberXeSS/XeSSFeature.h @@ -1,3 +1,4 @@ +#pragma once #include "IFeature.h" #include "xess_d3d12.h" #include "xess_debug.h" diff --git a/CyberXeSS/XeSSFeature_Dx11.cpp b/CyberXeSS/XeSSFeature_Dx11.cpp index c1693905..eae747aa 100644 --- a/CyberXeSS/XeSSFeature_Dx11.cpp +++ b/CyberXeSS/XeSSFeature_Dx11.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "XeSSFeature_Dx11.h" #include "Config.h" diff --git a/CyberXeSS/XeSSFeature_Dx12.cpp b/CyberXeSS/XeSSFeature_Dx12.cpp index 26406266..5ba44fb3 100644 --- a/CyberXeSS/XeSSFeature_Dx12.cpp +++ b/CyberXeSS/XeSSFeature_Dx12.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include "XeSSFeature_Dx12.h" #include "Config.h" @@ -49,7 +50,7 @@ bool XeSSFeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N 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; + Config::Instance()->ColorResourceBarrier = (int)D3D12_RESOURCE_STATE_RENDER_TARGET; ResourceBarrier(InCommandList, params.pColorTexture, D3D12_RESOURCE_STATE_RENDER_TARGET, @@ -184,7 +185,7 @@ bool XeSSFeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, const N } // restore resource states - if (params.pColorTexture && (Config::Instance()->ColorResourceBarrier.value_or(false) || Config::Instance()->NVNGX_Engine == NVNGX_ENGINE_TYPE_UNREAL)) + if (params.pColorTexture && Config::Instance()->ColorResourceBarrier.has_value()) ResourceBarrier(InCommandList, params.pColorTexture, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, (D3D12_RESOURCE_STATES)Config::Instance()->ColorResourceBarrier.value()); diff --git a/CyberXeSS/XeSSFeature_Dx12.h b/CyberXeSS/XeSSFeature_Dx12.h index 0ccb62b3..725a3a3f 100644 --- a/CyberXeSS/XeSSFeature_Dx12.h +++ b/CyberXeSS/XeSSFeature_Dx12.h @@ -1,3 +1,4 @@ +#pragma once #include "IFeature_Dx12.h" #include "XeSSFeature.h" #include diff --git a/CyberXeSS/dllmain.cpp b/CyberXeSS/dllmain.cpp index ad19ffbf..4470ea8d 100644 --- a/CyberXeSS/dllmain.cpp +++ b/CyberXeSS/dllmain.cpp @@ -1,3 +1,4 @@ +#pragma once #include "pch.h" #include diff --git a/CyberXeSS/fsr2/include/dx11/ffx_fsr2_dx11.h b/CyberXeSS/fsr2/include/dx11/ffx_fsr2_dx11.h index d708e4b2..7ff870d9 100644 --- a/CyberXeSS/fsr2/include/dx11/ffx_fsr2_dx11.h +++ b/CyberXeSS/fsr2/include/dx11/ffx_fsr2_dx11.h @@ -34,7 +34,7 @@ extern "C" { /// /// @returns /// The size (in bytes) of the required scratch memory buffer for the DX11 backend. -FFX_API size_t ffxFsr2GetScratchMemorySizeDX11(); +size_t ffxFsr2GetScratchMemorySizeDX11(); /// Populate an interface with pointers for the DX11 backend. /// @@ -49,7 +49,7 @@ FFX_API size_t ffxFsr2GetScratchMemorySizeDX11(); /// FFX_ERROR_CODE_INVALID_POINTER The interface pointer was NULL. /// /// @ingroup FSR2 DX11 -FFX_API FfxErrorCode ffxFsr2GetInterfaceDX11( +FfxErrorCode ffxFsr2GetInterfaceDX11( FfxFsr2Interface* fsr2Interface, ID3D11Device* device, void* scratchBuffer, @@ -63,7 +63,7 @@ FFX_API FfxErrorCode ffxFsr2GetInterfaceDX11( /// An abstract FidelityFX device. /// /// @ingroup FSR2 DX11 -FFX_API FfxDevice ffxGetDeviceDX11(ID3D11Device* device); +FfxDevice ffxGetDeviceDX11(ID3D11Device* device); /// Create a FfxResource from a ID3D11Resource. /// @@ -76,7 +76,7 @@ FFX_API FfxDevice ffxGetDeviceDX11(ID3D11Device* device); /// An abstract FidelityFX resources. /// /// @ingroup FSR2 DX11 -FFX_API FfxResource ffxGetResourceDX11( +FfxResource ffxGetResourceDX11( FfxFsr2Context* context, ID3D11Resource* resDx11, const wchar_t* name = nullptr, @@ -92,7 +92,7 @@ FFX_API FfxResource ffxGetResourceDX11( /// A ID3D11Resource pointer. /// /// @ingroup FSR2 DX11 -FFX_API ID3D11Resource* ffxGetDX11ResourcePtr(FfxFsr2Context* context, uint32_t resId); +ID3D11Resource* ffxGetDX11ResourcePtr(FfxFsr2Context* context, uint32_t resId); #if defined(__cplusplus) } diff --git a/CyberXeSS/fsr2/include/dx11/shaders/ffx_fsr2_shaders_dx11.h b/CyberXeSS/fsr2/include/dx11/shaders/ffx_fsr2_shaders_dx11.h index 5ab70390..b4255e37 100644 --- a/CyberXeSS/fsr2/include/dx11/shaders/ffx_fsr2_shaders_dx11.h +++ b/CyberXeSS/fsr2/include/dx11/shaders/ffx_fsr2_shaders_dx11.h @@ -22,7 +22,7 @@ #pragma once #include -#include "../../ffx_fsr2_interface.h" +#include #include #include diff --git a/CyberXeSS/fsr2/include/dx12/ffx_fsr2_dx12.h b/CyberXeSS/fsr2/include/dx12/ffx_fsr2_dx12.h index 762dd4a2..50ed4f74 100644 --- a/CyberXeSS/fsr2/include/dx12/ffx_fsr2_dx12.h +++ b/CyberXeSS/fsr2/include/dx12/ffx_fsr2_dx12.h @@ -37,7 +37,7 @@ extern "C" { /// /// @returns /// The size (in bytes) of the required scratch memory buffer for the DX12 backend. -FFX_API size_t ffxFsr2GetScratchMemorySizeDX12(); +size_t ffxFsr2GetScratchMemorySizeDX12(); /// Populate an interface with pointers for the DX12 backend. /// @@ -52,7 +52,7 @@ FFX_API size_t ffxFsr2GetScratchMemorySizeDX12(); /// FFX_ERROR_CODE_INVALID_POINTER The interface pointer was NULL. /// /// @ingroup FSR2 DX12 -FFX_API FfxErrorCode ffxFsr2GetInterfaceDX12( +FfxErrorCode ffxFsr2GetInterfaceDX12( FfxFsr2Interface* fsr2Interface, ID3D12Device* device, void* scratchBuffer, @@ -66,7 +66,7 @@ FFX_API FfxErrorCode ffxFsr2GetInterfaceDX12( /// An abstract FidelityFX device. /// /// @ingroup FSR2 DX12 -FFX_API FfxDevice ffxGetDeviceDX12(ID3D12Device* device); +FfxDevice ffxGetDeviceDX12(ID3D12Device* device); /// Create a FfxCommandList from a ID3D12CommandList. /// @@ -76,7 +76,7 @@ FFX_API FfxDevice ffxGetDeviceDX12(ID3D12Device* device); /// An abstract FidelityFX command list. /// /// @ingroup FSR2 DX12 -FFX_API FfxCommandList ffxGetCommandListDX12(ID3D12CommandList* cmdList); +FfxCommandList ffxGetCommandListDX12(ID3D12CommandList* cmdList); /// Create a FfxResource from a ID3D12Resource. /// @@ -90,7 +90,7 @@ FFX_API FfxCommandList ffxGetCommandListDX12(ID3D12CommandList* cmdList); /// An abstract FidelityFX resources. /// /// @ingroup FSR2 DX12 -FFX_API FfxResource ffxGetResourceDX12( +FfxResource ffxGetResourceDX12( FfxFsr2Context* context, ID3D12Resource* resDx12, const wchar_t* name = nullptr, @@ -107,7 +107,7 @@ FFX_API FfxResource ffxGetResourceDX12( /// A ID3D12Resource pointer. /// /// @ingroup FSR2 DX12 -FFX_API ID3D12Resource* ffxGetDX12ResourcePtr(FfxFsr2Context* context, uint32_t resId); +ID3D12Resource* ffxGetDX12ResourcePtr(FfxFsr2Context* context, uint32_t resId); #if defined(__cplusplus) } diff --git a/CyberXeSS/fsr2/include/dx12/shaders/ffx_fsr2_shaders_dx12.h b/CyberXeSS/fsr2/include/dx12/shaders/ffx_fsr2_shaders_dx12.h index 2097c509..f42a1c2b 100644 --- a/CyberXeSS/fsr2/include/dx12/shaders/ffx_fsr2_shaders_dx12.h +++ b/CyberXeSS/fsr2/include/dx12/shaders/ffx_fsr2_shaders_dx12.h @@ -22,7 +22,7 @@ #pragma once #include -#include "../../ffx_fsr2_interface.h" +#include #if defined(__cplusplus) extern "C" { diff --git a/CyberXeSS/fsr2/include/ffx_assert.h b/CyberXeSS/fsr2/include/ffx_assert.h index 483ed291..787f3e70 100644 --- a/CyberXeSS/fsr2/include/ffx_assert.h +++ b/CyberXeSS/fsr2/include/ffx_assert.h @@ -70,13 +70,13 @@ typedef void (*FfxAssertCallback)(const char* message); /// @returns /// Always returns true. /// -FFX_API bool ffxAssertReport(const char* file, int32_t line, const char* condition, const char* msg); +bool ffxAssertReport(const char* file, int32_t line, const char* condition, const char* msg); /// Provides the ability to set a callback for assert messages. /// /// @param [in] callback The callback function that will receive assert messages. /// -FFX_API void ffxAssertSetPrintingCallback(FfxAssertCallback callback); +void ffxAssertSetPrintingCallback(FfxAssertCallback callback); #ifdef _DEBUG /// Standard assert macro. diff --git a/CyberXeSS/fsr2/include/ffx_error.h b/CyberXeSS/fsr2/include/ffx_error.h index 7ba7d9c4..8eda6cf8 100644 --- a/CyberXeSS/fsr2/include/ffx_error.h +++ b/CyberXeSS/fsr2/include/ffx_error.h @@ -21,7 +21,7 @@ #pragma once -#include "ffx_types.h" +#include /// Typedef for error codes returned from functions in the FidelityFX SDK. typedef int32_t FfxErrorCode; diff --git a/CyberXeSS/fsr2/include/ffx_fsr2.h b/CyberXeSS/fsr2/include/ffx_fsr2.h index 2a1c74ab..31024195 100644 --- a/CyberXeSS/fsr2/include/ffx_fsr2.h +++ b/CyberXeSS/fsr2/include/ffx_fsr2.h @@ -225,7 +225,7 @@ typedef struct FfxFsr2Context { /// FFX_ERROR_BACKEND_API_ERROR The operation failed because of an error returned from the backend. /// /// @ingroup FSR2 -FFX_API FfxErrorCode ffxFsr2ContextCreate(FfxFsr2Context* context, const FfxFsr2ContextDescription* contextDescription); +FfxErrorCode ffxFsr2ContextCreate(FfxFsr2Context* context, const FfxFsr2ContextDescription* contextDescription); /// Dispatch the various passes that constitute FidelityFX Super Resolution 2. /// @@ -266,7 +266,7 @@ FFX_API FfxErrorCode ffxFsr2ContextCreate(FfxFsr2Context* context, const FfxFsr2 /// FFX_ERROR_BACKEND_API_ERROR The operation failed because of an error returned from the backend. /// /// @ingroup FSR2 -FFX_API FfxErrorCode ffxFsr2ContextDispatch(FfxFsr2Context* context, const FfxFsr2DispatchDescription* dispatchDescription); +FfxErrorCode ffxFsr2ContextDispatch(FfxFsr2Context* context, const FfxFsr2DispatchDescription* dispatchDescription); /// A helper function generate a Reactive mask from an opaque only texure and one containing translucent objects. /// @@ -277,7 +277,7 @@ FFX_API FfxErrorCode ffxFsr2ContextDispatch(FfxFsr2Context* context, const FfxFs /// FFX_OK The operation completed successfully. /// /// @ingroup FSR2 -FFX_API FfxErrorCode ffxFsr2ContextGenerateReactiveMask(FfxFsr2Context* context, const FfxFsr2GenerateReactiveDescription* params); +FfxErrorCode ffxFsr2ContextGenerateReactiveMask(FfxFsr2Context* context, const FfxFsr2GenerateReactiveDescription* params); /// Destroy the FidelityFX Super Resolution context. /// @@ -289,7 +289,7 @@ FFX_API FfxErrorCode ffxFsr2ContextGenerateReactiveMask(FfxFsr2Context* context, /// FFX_ERROR_CODE_NULL_POINTER The operation failed because either context was NULL. /// /// @ingroup FSR2 -FFX_API FfxErrorCode ffxFsr2ContextDestroy(FfxFsr2Context* context); +FfxErrorCode ffxFsr2ContextDestroy(FfxFsr2Context* context); /// Get the upscale ratio from the quality mode. /// @@ -312,7 +312,7 @@ FFX_API FfxErrorCode ffxFsr2ContextDestroy(FfxFsr2Context* context); /// qualityMode according to the table above. /// /// @ingroup FSR2 -FFX_API float ffxFsr2GetUpscaleRatioFromQualityMode(FfxFsr2QualityMode qualityMode); +float ffxFsr2GetUpscaleRatioFromQualityMode(FfxFsr2QualityMode qualityMode); /// A helper function to calculate the rendering resolution from a target /// resolution and desired quality level. @@ -334,7 +334,7 @@ FFX_API float ffxFsr2GetUpscaleRatioFromQualityMode(FfxFsr2QualityMode qualityMo /// FFX_ERROR_INVALID_ENUM An invalid quality mode was specified. /// /// @ingroup FSR2 -FFX_API FfxErrorCode ffxFsr2GetRenderResolutionFromQualityMode( +FfxErrorCode ffxFsr2GetRenderResolutionFromQualityMode( uint32_t* renderWidth, uint32_t* renderHeight, uint32_t displayWidth, @@ -366,7 +366,7 @@ FFX_API FfxErrorCode ffxFsr2GetRenderResolutionFromQualityMode( /// The jitter phase count for the scaling factor between renderWidth and displayWidth. /// /// @ingroup FSR2 -FFX_API int32_t ffxFsr2GetJitterPhaseCount(int32_t renderWidth, int32_t displayWidth); +int32_t ffxFsr2GetJitterPhaseCount(int32_t renderWidth, int32_t displayWidth); /// A helper function to calculate the subpixel jitter offset. /// @@ -434,7 +434,7 @@ FFX_API int32_t ffxFsr2GetJitterPhaseCount(int32_t renderWidth, int32_t displayW /// FFX_ERROR_INVALID_ARGUMENT Argument phaseCount must be greater than 0. /// /// @ingroup FSR2 -FFX_API FfxErrorCode ffxFsr2GetJitterOffset(float* outX, float* outY, int32_t index, int32_t phaseCount); +FfxErrorCode ffxFsr2GetJitterOffset(float* outX, float* outY, int32_t index, int32_t phaseCount); /// A helper function to check if a resource is /// FFX_FSR2_RESOURCE_IDENTIFIER_NULL. @@ -447,7 +447,7 @@ FFX_API FfxErrorCode ffxFsr2GetJitterOffset(float* outX, float* outY, int32_t in /// false The resource was FFX_FSR2_RESOURCE_IDENTIFIER_NULL. /// /// @ingroup FSR2 -FFX_API bool ffxFsr2ResourceIsNull(FfxResource resource); +bool ffxFsr2ResourceIsNull(FfxResource resource); #if defined(__cplusplus) } diff --git a/CyberXeSS/fsr2/include/ffx_fsr2_interface.h b/CyberXeSS/fsr2/include/ffx_fsr2_interface.h index b6be9760..ef5a7efc 100644 --- a/CyberXeSS/fsr2/include/ffx_fsr2_interface.h +++ b/CyberXeSS/fsr2/include/ffx_fsr2_interface.h @@ -21,14 +21,14 @@ #pragma once -#include "ffx_assert.h" -#include "ffx_types.h" -#include "ffx_error.h" +#include +#include +#include // Include the FSR2 resources defined in the HLSL code. This shared here to avoid getting out of sync. #define FFX_CPU -#include "shaders/ffx_fsr2_resources.h" -#include "shaders/ffx_fsr2_common.h" +#include +#include #if defined(__cplusplus) extern "C" { diff --git a/CyberXeSS/fsr2/include/ffx_util.h b/CyberXeSS/fsr2/include/ffx_util.h index ca4324ea..7c13eabe 100644 --- a/CyberXeSS/fsr2/include/ffx_util.h +++ b/CyberXeSS/fsr2/include/ffx_util.h @@ -21,7 +21,7 @@ #pragma once -#include "ffx_types.h" +#include /// The value of Pi. const float FFX_PI = 3.141592653589793f; diff --git a/CyberXeSS/fsr2/include/vk/ffx_fsr2_vk.h b/CyberXeSS/fsr2/include/vk/ffx_fsr2_vk.h index ddc20aa6..f1888fd9 100644 --- a/CyberXeSS/fsr2/include/vk/ffx_fsr2_vk.h +++ b/CyberXeSS/fsr2/include/vk/ffx_fsr2_vk.h @@ -34,7 +34,7 @@ extern "C" { /// /// @returns /// The size (in bytes) of the required scratch memory buffer for the VK backend. - FFX_API size_t ffxFsr2GetScratchMemorySizeVK(VkPhysicalDevice physicalDevice); + size_t ffxFsr2GetScratchMemorySizeVK(VkPhysicalDevice physicalDevice); /// Populate an interface with pointers for the VK backend. /// @@ -51,7 +51,7 @@ extern "C" { /// FFX_ERROR_CODE_INVALID_POINTER The interface pointer was NULL. /// /// @ingroup FSR2 VK - FFX_API FfxErrorCode ffxFsr2GetInterfaceVK( + FfxErrorCode ffxFsr2GetInterfaceVK( FfxFsr2Interface* outInterface, void* scratchBuffer, size_t scratchBufferSize, @@ -66,7 +66,7 @@ extern "C" { /// An abstract FidelityFX device. /// /// @ingroup FSR2 VK - FFX_API FfxDevice ffxGetDeviceVK(VkDevice device); + FfxDevice ffxGetDeviceVK(VkDevice device); /// Create a FfxCommandList from a VkCommandBuffer. /// @@ -76,7 +76,7 @@ extern "C" { /// An abstract FidelityFX command list. /// /// @ingroup FSR2 VK - FFX_API FfxCommandList ffxGetCommandListVK(VkCommandBuffer cmdBuf); + FfxCommandList ffxGetCommandListVK(VkCommandBuffer cmdBuf); /// Create a FfxResource from a VkImage. /// @@ -93,7 +93,7 @@ extern "C" { /// An abstract FidelityFX resources. /// /// @ingroup FSR2 VK - FFX_API FfxResource ffxGetTextureResourceVK(FfxFsr2Context* context, + FfxResource ffxGetTextureResourceVK(FfxFsr2Context* context, VkImage imgVk, VkImageView imageView, uint32_t width, @@ -114,7 +114,7 @@ extern "C" { /// An abstract FidelityFX resources. /// /// @ingroup FSR2 VK - FFX_API FfxResource ffxGetBufferResourceVK(FfxFsr2Context* context, + FfxResource ffxGetBufferResourceVK(FfxFsr2Context* context, VkBuffer bufVk, uint32_t size, const wchar_t* name = nullptr, @@ -129,7 +129,7 @@ extern "C" { /// A VkImage. /// /// @ingroup FSR2 VK - FFX_API VkImage ffxGetVkImage(FfxFsr2Context* context, uint32_t resId); + VkImage ffxGetVkImage(FfxFsr2Context* context, uint32_t resId); /// Convert a FfxResource value to a VkImageView. /// @@ -140,7 +140,7 @@ extern "C" { /// A VkImage. /// /// @ingroup FSR2 VK - FFX_API VkImageView ffxGetVkImageView(FfxFsr2Context* context, uint32_t resId); + VkImageView ffxGetVkImageView(FfxFsr2Context* context, uint32_t resId); /// Convert a FfxResource value to a VkImageLayout. /// @@ -151,7 +151,7 @@ extern "C" { /// A VkImage. /// /// @ingroup FSR2 VK - FFX_API VkImageLayout ffxGetVkImageLayout(FfxFsr2Context* context, uint32_t resId); + VkImageLayout ffxGetVkImageLayout(FfxFsr2Context* context, uint32_t resId); #if defined(__cplusplus) } diff --git a/CyberXeSS/fsr2/include/vk/shaders/ffx_fsr2_shaders_vk.h b/CyberXeSS/fsr2/include/vk/shaders/ffx_fsr2_shaders_vk.h index 80356577..444fac6e 100644 --- a/CyberXeSS/fsr2/include/vk/shaders/ffx_fsr2_shaders_vk.h +++ b/CyberXeSS/fsr2/include/vk/shaders/ffx_fsr2_shaders_vk.h @@ -22,7 +22,7 @@ #pragma once #include -#include "../../ffx_fsr2_interface.h" +#include #if defined(__cplusplus) extern "C" { diff --git a/CyberXeSS/fsr2/lib/ffx_fsr2_api_dx11_x64.lib b/CyberXeSS/fsr2/lib/ffx_fsr2_api_dx11_x64.lib index ae6dc83cb490cee9373e62ecec1471a2c88d2385..1bc51b5c235944913b2bbcf38ca412b5d1cee3d4 100644 GIT binary patch delta 5303 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�z2-V`lHgDVYucsXny*h%y1qY)T(EQ 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 dNA=8YG;^!{q~8wAPh^Cu{$*tXuP! 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 uzjX7-j+i%TT- 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 diff --git a/CyberXeSS/fsr2/lib/ffx_fsr2_api_dx12_x64.lib b/CyberXeSS/fsr2/lib/ffx_fsr2_api_dx12_x64.lib index 1ea7c2ffc9711e8a200dc0f3126a38879ae1dcda..b56baac176981978e742d97eca73d25a447bfcb2 100644 GIT binary patch delta 5657 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

;SXN%zg#C&&<_Bju`( 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 JtdpJN{{uD2DzX3o diff --git a/CyberXeSS/fsr2/lib/ffx_fsr2_api_vk_x64.lib b/CyberXeSS/fsr2/lib/ffx_fsr2_api_vk_x64.lib index 1abe9466eeed32eb2192c9e0ae1ad48d3fc9fc40..86cfcf94c8fab72ee081bb27b29959064e15f327 100644 GIT binary patch delta 5180 zcmZvgdr(wY62{LA%tZ!K3@Y&jI3U9qjTm&*N?b(O7|Rz#(Ijg5WLY;+@D;Rz1;!ZH zXi5l3$0$ML16@Txj~=x>kadQy$tIE>kI1#>kk_M^M?7rd|?A& zCYT@0A2tXUP%tand|=M+S1=M+(8qJ+@R7dwEHp0t^h@0^T*~twXo%I^S3g!qZ&}TQ z^*usqjny2WuMDL<_*SYyh0u*B-x{;GlB^fPXFUBZ^%H*);^T=l?!4LC*dT;>GEs<{ zH>Gb<#!nI=cal2BcwQ$&Bm7;HDN)9rPZr{vDRfH2rwDO!n)FSI^K>CRr_(|k zV#5&|0Dt-n3aUozvl&8EhS58cgTsZG5Kak_r-A2d90iUIrv|BS1b-dQwcbE~hv9!8 zE_*T=^luCCXY#2r`xplzG!O2Ewrao2iyiQo&6# z$-@TyK6u6~Io{i7z?dbog!tPmIkiby1>U5^b|XgcUyGn@8GA26h~*JH&J(eX@KYjE zYt1J8;Rw0PCZm*FAm5IlFzCt)@YvbBvLg_iJ6nhyvuUr4?FZkSP4^``%@Jba9Ofn9 zgUp7rU<2K&HTx-k?+6k34wtHQMwjs4nooF7UI%KnuKB_~G-ksd|Y!R|-E&MPo4 zK5q0N+2Umk#XhZqlp9S!b?Ce_TJ2nMgT5$+;_7f#K3FM)c@LR+4KlxJ z4d>UOq~BWVUyuB|YlW!zkUSa?cYH`6NbQFYg$R%38otPljzx>HR9=r3Gr~@QgVvrvd!Q)~60lRBaF2(P+-0*6+1u!TBYM2CO$h%Kxg$QV zSc35>LVU85#x)@{H5Io(sya-8EIf#|H<<(650DTK<)OjnB`UL<`zaZFu+n?zx*S#t zuHM5ZJQFF+@DtJ~s2NvwIE}mO0lhViSM_$95U0PUYzOY-VbBxPskRwcQkKrSUeMap zss9CNPgpblEbsWe*zElja{+a?98h!Bb6Iylh_(Y%4&CJrxaT2}JS=vAaWv|r9ulJN z5P3Mz=Oysl8N7lxXJTFk&2wOmg&ADywv!M`GjOLLmA#qtzQ?$qsmPstjGiIaedjSa zzketx#p0!Oft!1bj;B}xlwyRf$LRh|48N&qzdUEvTdiphXl+_vr>40a$J60B=M6v3bBu*H`8d~$VvQEJnEjQmXn2>F zbP!27T2j51q`zcdqh3{T7FT*bONdEXd{vQ}wjSE%EUvy^(~d$b&@_jpU4`~j7I)^7 z&GkI9v6I2QMzs=a|5?^Zsq#XZEHs`X4tp8_F97VtbX!3)50oi~6#*Yu;{f&xAljsmrY zp$*zy@@dDmxfS9mU&tjUg2M}`;g;FY0E}nZkOn?N(a6?Y3%NiGq;@KklCFsRaxW61 zPZ96MC`}82Hl;{CD#|kO<|5wX9pK$XyvIdat{qw{Yf1;$?G)$sI)x*4O0A&}ImL6$ zg%+i0n>B48w9Hd{oi1Bi6R`(~ z$p>Ti)2w-&#!)^^i9cXpf%8xEDtrXqa+<>Kv7D#L&5*C1=0$j}Rd6j6qE{K;Ji*{e zWn3Z>yb>%IatAoQjP_nfIbd}eU(YSDTe-HE<=D$|J`W+_xtbmcURlm-yaSv8miJmE zxUrn4y$5!xpzCcYUxCL(1ckz*3f# zE8tt4t~Z?H(!I`MQO=g|?}ZOYZ|$Xt~$GcQ{vZt-^g<#WhBOCsc9%BJf5{PX`~ZqU`U@e!40y-3sYu z6`wOFD{F36A-t@V{Sb>Z5XyuaIN2&T}-+PT?Hc6Ca9l3i_DcYuz{PV(*CyPakI4Yfpo{*gAUYaOpc z-#Whb!F7C%W8mYObz!va3Ccv)(LA{XAJ=hLvePuALUS*!!$Z0r0zPh3_6uIXH^NP- zPkn(+I9Sh{&>hi#*7GJ5)ypa`)AkqUZb~z9JL+jKl9gT!LRcCo%qbB6zJfy<=)Tk^ zgO@i@VkhqOjo^cn{sM>VEU-mQ@iz8E{Wkc&XlbsEc-YX6PNanbBO7^!O<-!IY&~Y! z2QF>g85C$TTmg1+wr3OGtC~1F0=%qA_P`UYhQFmr?L*lOF4MRf+@X!>)r@Os<{5&) zGn(ZL%5q>*GY>rou5PAs9rUYU=L-~M0C&59`|yH#$?ikIVKDh|ruY};eui~$_fVNG z&`-$*wrHc;z`tDJ2|L049O{H)9Qe!QNR>;u5=ai7V;?xr!Ao2QwmEo-9pK*_v{&Z4 zU&InzRPzm?;0T)Ggh>|w-@nM|Yr(rN(l}?NXM)=}UAY79yhw@A-CbMowgi(OgL(-{ z6x?ksyb9^yvn|wM2=q3FAf*ky?oll;g>(ZbGX=$mDng7=Sem0shA2p@ zY5h*iYF!fD-DxrFvZz<8Wo>~q)sp1Y#brW+_q|QyU(mv@Ea%bcsXTwbf~mVLsRo_# EKa3n?BLDyZ delta 5352 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 delta 13424 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 CFF_9g diff --git a/CyberXeSS/fsr2/lib/ffx_fsr2_api_x64.lib b/CyberXeSS/fsr2/lib/ffx_fsr2_api_x64.lib index 5b2d51f649574724920128a24b6498c7fa12a362..41e2be4fa36b0b2aa9ef75447821873e9ce61a5a 100644 GIT binary patch delta 9109 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