mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-08-24 23:26:50 +00:00
unreal engine auto fix implementation
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user