changed resource state parameter

added xess quality override
changed min render height and width
This commit is contained in:
cdozdil
2024-02-21 02:22:40 +03:00
parent 6ac621db04
commit 326bcfbfcd
5 changed files with 122 additions and 67 deletions
+1
View File
@@ -22,6 +22,7 @@ void Config::Reload()
DelayedInit = readBool("XeSS", "DelayedInit");
BuildPipelines = readBool("XeSS", "BuildPipelines");
NetworkModel = readInt("XeSS", "NetworkModel");
OverrideQuality = readInt("XeSS", "OverrideQuality");
LoggingEnabled = readBool("Log", "LoggingEnabled");
+7 -6
View File
@@ -29,6 +29,7 @@ public:
std::optional<bool> DelayedInit;
std::optional<bool> BuildPipelines;
std::optional<int32_t> NetworkModel;
std::optional<int32_t> OverrideQuality;
// CAS
std::optional<bool> CasEnabled;
@@ -51,12 +52,12 @@ public:
//Hotfixes
std::optional<bool> DisableReactiveMask;
std::optional<bool> ColorResourceBarrier;
std::optional<bool> MVResourceBarrier;
std::optional<bool> DepthResourceBarrier;
std::optional<bool> ExposureResourceBarrier;
std::optional<bool> MaskResourceBarrier;
std::optional<bool> OutputResourceBarrier;
std::optional<int32_t> ColorResourceBarrier;
std::optional<int32_t> MVResourceBarrier;
std::optional<int32_t> DepthResourceBarrier;
std::optional<int32_t> ExposureResourceBarrier;
std::optional<int32_t> MaskResourceBarrier;
std::optional<int32_t> OutputResourceBarrier;
void Reload();
+57 -45
View File
@@ -240,7 +240,7 @@ class FeatureContext
xess_context_handle_t xessContext = nullptr;
bool xessMaskEnabled = true;
bool xessInit = false;
// cas
FfxCasContext casContext;
bool casInit = false;
@@ -607,29 +607,36 @@ public:
int pqValue;
initParams->Get(NVSDK_NGX_Parameter_PerfQualityValue, &pqValue);
switch ((NVSDK_NGX_PerfQuality_Value)pqValue)
if (CyberXessContext::instance()->MyConfig->OverrideQuality.has_value())
{
case NVSDK_NGX_PerfQuality_Value_UltraPerformance:
xessParams.qualitySetting = XESS_QUALITY_SETTING_PERFORMANCE;
break;
case NVSDK_NGX_PerfQuality_Value_MaxPerf:
xessParams.qualitySetting = XESS_QUALITY_SETTING_PERFORMANCE;
break;
case NVSDK_NGX_PerfQuality_Value_Balanced:
xessParams.qualitySetting = XESS_QUALITY_SETTING_BALANCED;
break;
case NVSDK_NGX_PerfQuality_Value_MaxQuality:
xessParams.qualitySetting = XESS_QUALITY_SETTING_QUALITY;
break;
case NVSDK_NGX_PerfQuality_Value_UltraQuality:
xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_QUALITY;
break;
case NVSDK_NGX_PerfQuality_Value_DLAA:
xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_QUALITY;
break;
default:
xessParams.qualitySetting = XESS_QUALITY_SETTING_BALANCED; //Set out-of-range value for non-existing XESS_QUALITY_SETTING_BALANCED mode
break;
xessParams.qualitySetting = (xess_quality_settings_t)CyberXessContext::instance()->MyConfig->OverrideQuality.value();
}
else
{
switch ((NVSDK_NGX_PerfQuality_Value)pqValue)
{
case NVSDK_NGX_PerfQuality_Value_UltraPerformance:
xessParams.qualitySetting = XESS_QUALITY_SETTING_PERFORMANCE;
break;
case NVSDK_NGX_PerfQuality_Value_MaxPerf:
xessParams.qualitySetting = XESS_QUALITY_SETTING_PERFORMANCE;
break;
case NVSDK_NGX_PerfQuality_Value_Balanced:
xessParams.qualitySetting = XESS_QUALITY_SETTING_BALANCED;
break;
case NVSDK_NGX_PerfQuality_Value_MaxQuality:
xessParams.qualitySetting = XESS_QUALITY_SETTING_QUALITY;
break;
case NVSDK_NGX_PerfQuality_Value_UltraQuality:
xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_QUALITY;
break;
case NVSDK_NGX_PerfQuality_Value_DLAA:
xessParams.qualitySetting = XESS_QUALITY_SETTING_ULTRA_QUALITY;
break;
default:
xessParams.qualitySetting = XESS_QUALITY_SETTING_BALANCED; //Set out-of-range value for non-existing XESS_QUALITY_SETTING_BALANCED mode
break;
}
}
xessParams.initFlags = XESS_INIT_FLAG_NONE;
@@ -722,8 +729,12 @@ public:
return false;
}
CasInit();
CreateCasContext();
if (casActive)
CreateCasContext();
xessInit = true;
@@ -803,12 +814,12 @@ public:
{
spdlog::debug("FeatureContext::XeSSExecuteDx12 Color exist..");
if (instance->MyConfig->ColorResourceBarrier.value_or(false))
if (instance->MyConfig->ColorResourceBarrier.has_value())
{
D3D12_RESOURCE_BARRIER barrier = {};
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Transition.pResource = params.pColorTexture;
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
barrier.Transition.StateBefore = (D3D12_RESOURCE_STATES)instance->MyConfig->ColorResourceBarrier.value();
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
barrier.Transition.Subresource = 0;
commandList->ResourceBarrier(1, &barrier);
@@ -827,12 +838,12 @@ public:
{
spdlog::debug("FeatureContext::XeSSExecuteDx12 MotionVectors exist..");
if (instance->MyConfig->MVResourceBarrier.value_or(false))
if (instance->MyConfig->MVResourceBarrier.has_value())
{
D3D12_RESOURCE_BARRIER barrier = {};
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Transition.pResource = params.pVelocityTexture;
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;
barrier.Transition.StateBefore = (D3D12_RESOURCE_STATES)instance->MyConfig->MVResourceBarrier.value();
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
barrier.Transition.Subresource = 0;
commandList->ResourceBarrier(1, &barrier);
@@ -852,12 +863,12 @@ public:
{
spdlog::debug("FeatureContext::XeSSExecuteDx12 Output exist..");
if (instance->MyConfig->OutputResourceBarrier.value_or(false))
if (instance->MyConfig->OutputResourceBarrier.has_value())
{
D3D12_RESOURCE_BARRIER barrier = {};
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Transition.pResource = paramOutput;
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;
barrier.Transition.StateBefore = (D3D12_RESOURCE_STATES)instance->MyConfig->OutputResourceBarrier.value();
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_UNORDERED_ACCESS;
barrier.Transition.Subresource = 0;
commandList->ResourceBarrier(1, &barrier);
@@ -889,12 +900,12 @@ public:
{
spdlog::debug("FeatureContext::XeSSExecuteDx12 Depth exist..");
if (instance->MyConfig->DepthResourceBarrier.value_or(false))
if (instance->MyConfig->DepthResourceBarrier.has_value())
{
D3D12_RESOURCE_BARRIER barrier = {};
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Transition.pResource = params.pDepthTexture;
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;
barrier.Transition.StateBefore = (D3D12_RESOURCE_STATES)instance->MyConfig->DepthResourceBarrier.value();
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
barrier.Transition.Subresource = 0;
commandList->ResourceBarrier(1, &barrier);
@@ -915,12 +926,12 @@ public:
if (initParams->Get(NVSDK_NGX_Parameter_ExposureTexture, &params.pExposureScaleTexture) != NVSDK_NGX_Result_Success)
initParams->Get(NVSDK_NGX_Parameter_ExposureTexture, (void**)&params.pExposureScaleTexture);
if (instance->MyConfig->ExposureResourceBarrier.value_or(false))
if (instance->MyConfig->ExposureResourceBarrier.has_value())
{
D3D12_RESOURCE_BARRIER barrier = {};
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Transition.pResource = params.pExposureScaleTexture;
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;
barrier.Transition.StateBefore = (D3D12_RESOURCE_STATES)instance->MyConfig->ExposureResourceBarrier.value();
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
barrier.Transition.Subresource = 0;
commandList->ResourceBarrier(1, &barrier);
@@ -939,12 +950,12 @@ public:
if (initParams->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, &params.pResponsivePixelMaskTexture) != NVSDK_NGX_Result_Success)
initParams->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, (void**)&params.pResponsivePixelMaskTexture);
if (instance->MyConfig->MaskResourceBarrier.value_or(false))
if (instance->MyConfig->MaskResourceBarrier.has_value())
{
D3D12_RESOURCE_BARRIER barrier = {};
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
barrier.Transition.pResource = params.pResponsivePixelMaskTexture;
barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;
barrier.Transition.StateBefore = (D3D12_RESOURCE_STATES)instance->MyConfig->MaskResourceBarrier.value();
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
barrier.Transition.Subresource = 0;
commandList->ResourceBarrier(1, &barrier);
@@ -976,6 +987,16 @@ public:
spdlog::debug("FeatureContext::XeSSExecuteDx12 Executing!!");
xessResult = xessD3D12Execute(xessContext, commandList, &params);
if (xessResult != XESS_RESULT_SUCCESS)
{
spdlog::error("FeatureContext::XeSSExecuteDx12 xessD3D12Execute error: {0}", ResultToString(xessResult));
return false;
}
//apply cas
if (casActive && !CasDispatch(commandList, initParams, casBuffer, paramOutput))
return false;
if (params.pColorTexture && instance->MyConfig->ColorResourceBarrier.value_or(false))
{
D3D12_RESOURCE_BARRIER barrier = {};
@@ -987,15 +1008,6 @@ public:
commandList->ResourceBarrier(1, &barrier);
}
if (xessResult != XESS_RESULT_SUCCESS)
{
spdlog::error("FeatureContext::XeSSExecuteDx12 xessD3D12Execute error: {0}", ResultToString(xessResult));
return false;
}
//apply cas
if (casActive && !CasDispatch(commandList, initParams, casBuffer, paramOutput))
return false;
return true;
}
+8 -8
View File
@@ -83,9 +83,9 @@ inline NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_DLSS_GetOptimalSettingsCallback(NVS
scalingRatio = 0.5f;
break;
case NVSDK_NGX_PerfQuality_Value_Balanced:
OutHeight = (unsigned int)((float)Height / 1.699115044247788);
OutWidth = (unsigned int)((float)Width / 1.699115044247788);
scalingRatio = 0.58854167f;
OutHeight = (unsigned int)((float)Height / 1.699215044247788);
OutWidth = (unsigned int)((float)Width / 1.699215044247788);
scalingRatio = 0.58850703f;
break;
case NVSDK_NGX_PerfQuality_Value_MaxQuality:
OutHeight = (unsigned int)((float)Height / 1.5);
@@ -103,9 +103,9 @@ inline NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_DLSS_GetOptimalSettingsCallback(NVS
scalingRatio = 1.0f;
break;
default:
OutHeight = (unsigned int)((float)Height / 1.699115044247788);
OutWidth = (unsigned int)((float)Width / 1.699115044247788);
scalingRatio = 0.58854167f;
OutHeight = (unsigned int)((float)Height / 1.699215044247788);
OutWidth = (unsigned int)((float)Width / 1.699215044247788);
scalingRatio = 0.58850703f;
break;
}
}
@@ -120,10 +120,10 @@ inline NVSDK_NGX_Result NVSDK_CONV NVSDK_NGX_DLSS_GetOptimalSettingsCallback(NVS
InParams->Set(NVSDK_NGX_Parameter_Scale, scalingRatio);
InParams->Set(NVSDK_NGX_Parameter_OutWidth, OutWidth);
InParams->Set(NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Min_Render_Width, OutWidth);
InParams->Set(NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Min_Render_Width, (unsigned int)((float)Width / 2.5));
InParams->Set(NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Max_Render_Width, Width);
InParams->Set(NVSDK_NGX_Parameter_OutHeight, OutHeight);
InParams->Set(NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Min_Render_Height, OutHeight);
InParams->Set(NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Min_Render_Height, (unsigned int)((float)Height / 2.5));
InParams->Set(NVSDK_NGX_Parameter_DLSS_Get_Dynamic_Max_Render_Height, Height);
InParams->Set(NVSDK_NGX_Parameter_SizeInBytes, Width * Height * 31);
+49 -8
View File
@@ -43,6 +43,14 @@ BuildPipelines=auto
;Always returns unsupported when setting network model
;NetworkModel=0
;Override XeSS quality mode (will not change scale ratio, experimental)
; XESS_QUALITY_SETTING_PERFORMANCE = 101,
; XESS_QUALITY_SETTING_BALANCED = 102,
; XESS_QUALITY_SETTING_QUALITY = 103,
; XESS_QUALITY_SETTING_ULTRA_QUALITY = 104,
; Default (auto) is DLSS value
OverrideQuality=auto
[CAS]
;Enables CAS shapening - Default (auto) is false
Enabled=auto
@@ -87,7 +95,7 @@ UpscaleRatioOverrideEnabled=auto
;resolution values are calculated in this way:
;OutHeight = Height / ratio;
;OutWidth = Width / ratio;
;example ratios: Quality preset = 1.5; Ultra performance preset = 3.0 - Default (auto) is 1.3
;example ratios: Quality preset = 1.5; Ultra performance preset = 2.5 - Default (auto) is 1.3
UpscaleRatioOverrideValue=auto
[QualityOverrides]
@@ -101,7 +109,7 @@ QualityRatioOverrideEnabled=auto
; Quality : 1.5
; Balanced : 1.7
; Performance : 2.0
; Ultra Performance : 3.0
; Ultra Performance : 2.5
QualityRatioUltraQuality=auto
QualityRatioQuality=auto
QualityRatioBalanced=auto
@@ -113,15 +121,48 @@ QualityRatioUltraPerformance=auto
; You can enable and test if it fix or break something
; Default (auto) is false
DisableReactiveMask=auto
; Color texture resource barrier fix for rainbow colors on AMD cards (for mostly UE games) - Default (auto) is false
; Resource barrier values
; ----------------------------------------------------
; D3D12_RESOURCE_STATE_COMMON = 0,
; D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 1,
; D3D12_RESOURCE_STATE_INDEX_BUFFER = 2,
; D3D12_RESOURCE_STATE_RENDER_TARGET = 4,
; D3D12_RESOURCE_STATE_UNORDERED_ACCESS = 8,
; D3D12_RESOURCE_STATE_DEPTH_WRITE = 16,
; D3D12_RESOURCE_STATE_DEPTH_READ = 32,
; D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE = 64,
; D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE = 128,
; D3D12_RESOURCE_STATE_STREAM_OUT = 256,
; D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT = 512,
; D3D12_RESOURCE_STATE_COPY_DEST = 1024,
; D3D12_RESOURCE_STATE_COPY_SOURCE = 2048,
; D3D12_RESOURCE_STATE_RESOLVE_DEST = 4096,
; D3D12_RESOURCE_STATE_RESOLVE_SOURCE = 8192,
; D3D12_RESOURCE_STATE_RAYTRACING_ACCELERATION_STRUCTURE = 4194304,
; D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE = 16777216,
; D3D12_RESOURCE_STATE_GENERIC_READ = 2755,
; D3D12_RESOURCE_STATE_ALL_SHADER_RESOURCE = 192,
; D3D12_RESOURCE_STATE_PRESENT = 0,
; D3D12_RESOURCE_STATE_PREDICATION = 310,
; D3D12_RESOURCE_STATE_VIDEO_DECODE_READ = 65536,
; D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE = 131072,
; D3D12_RESOURCE_STATE_VIDEO_PROCESS_READ = 262144,
; D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE = 524288,
; D3D12_RESOURCE_STATE_VIDEO_ENCODE_READ = 2097152,
; D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE = 8388608
;------------------------------------------------------
;
; Color texture resource state to fix for rainbow colors on AMD cards (for mostly UE games) - Default (auto) is false
; For UE engine games on AMD, set it to D3D12_RESOURCE_STATE_RENDER_TARGET (4)
ColorResourceBarrier=auto
; MotionVector texture resource barrier to D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE (for mostly debugging) - Default (auto) is false
; MotionVector texture resource state, from this to D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE (for mostly debugging) - Default (auto) is false
MotionVectorResourceBarrier=auto
; Depth texture resource barrier to D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE (for mostly debugging) - Default (auto) is false
; Depth texture resource state, from this D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE (for mostly debugging) - Default (auto) is false
DepthResourceBarrier=auto
; Color mask texture resource barrier to D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE (for mostly debugging) - Default (auto) is false
; Color mask texture resource state, from this D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE (for mostly debugging) - Default (auto) is false
ColorMaskResourceBarrier=auto
; Exposure texture resource barrier to D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE (for mostly debugging) - Default (auto) is false
; Exposure texture resource state, from this D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE (for mostly debugging) - Default (auto) is false
ExposureResourceBarrier=auto
; Output texture resource barrier to D3D12_RESOURCE_STATE_UNORDERED_ACCESS (for mostly debugging) - Default (auto) is false
; Output texture resource state, from this D3D12_RESOURCE_STATE_UNORDERED_ACCESS (for mostly debugging) - Default (auto) is false
OutputResourceBarrier=auto