Skip to content

Commit

Permalink
changed resource state parameter
Browse files Browse the repository at this point in the history
added xess quality override
changed min render height and width
  • Loading branch information
cdozdil committed Feb 20, 2024
1 parent 6ac621d commit 326bcfb
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 68 deletions.
1 change: 1 addition & 0 deletions CyberXeSS/Config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand Down
13 changes: 7 additions & 6 deletions CyberXeSS/Config.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class Config
std::optional<bool> DelayedInit;
std::optional<bool> BuildPipelines;
std::optional<int32_t> NetworkModel;
std::optional<int32_t> OverrideQuality;

// CAS
std::optional<bool> CasEnabled;
Expand All @@ -51,12 +52,12 @@ class Config

//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();

Expand Down
104 changes: 58 additions & 46 deletions CyberXeSS/CyberXess.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ class FeatureContext
xess_context_handle_t xessContext = nullptr;
bool xessMaskEnabled = true;
bool xessInit = false;

// cas
FfxCasContext casContext;
bool casInit = false;
Expand Down Expand Up @@ -607,29 +607,36 @@ class FeatureContext
int pqValue;
initParams->Get(NVSDK_NGX_Parameter_PerfQualityValue, &pqValue);

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;
if (CyberXessContext::instance()->MyConfig->OverrideQuality.has_value())
{
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;
Expand Down Expand Up @@ -722,8 +729,12 @@ class FeatureContext
return false;
}



CasInit();
CreateCasContext();

if (casActive)
CreateCasContext();

xessInit = true;

Expand Down Expand Up @@ -803,12 +814,12 @@ class FeatureContext
{
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);
Expand All @@ -827,12 +838,12 @@ class FeatureContext
{
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);
Expand All @@ -852,12 +863,12 @@ class FeatureContext
{
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);
Expand Down Expand Up @@ -889,12 +900,12 @@ class FeatureContext
{
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);
Expand All @@ -915,12 +926,12 @@ class FeatureContext
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);
Expand All @@ -939,12 +950,12 @@ class FeatureContext
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);
Expand Down Expand Up @@ -976,6 +987,16 @@ class FeatureContext
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 = {};
Expand All @@ -987,15 +1008,6 @@ class FeatureContext
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;
}
Expand Down
16 changes: 8 additions & 8 deletions CyberXeSS/NGXParameter.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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;
}
}
Expand All @@ -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);

Expand Down
57 changes: 49 additions & 8 deletions nvngx.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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]
Expand All @@ -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
Expand All @@ -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

0 comments on commit 326bcfb

Please sign in to comment.