unreal engine auto fix implementation

This commit is contained in:
cdozdil
2024-03-09 18:42:19 +03:00
parent 48614189ff
commit 52d7aa269e
7 changed files with 110 additions and 41 deletions
+17 -10
View File
@@ -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;
}
}
}
+28 -11
View File
@@ -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());
+17 -10
View File
@@ -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;
}
}
}
+14 -3
View File
@@ -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);
}
+9 -3
View File
@@ -1,6 +1,7 @@
#include "pch.h"
#include <ankerl/unordered_dense.h>
#include <dxgi1_4.h>
#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);
}
+16 -3
View File
@@ -15,7 +15,8 @@ PFN_vkGetDeviceProcAddr vkGDPA;
static inline ankerl::unordered_dense::map <unsigned int, std::unique_ptr<IFeature_Vk>> 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);
}
+9 -1
View File
@@ -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());