diff --git a/OptiScaler/upscalers/fsr2/FSR2Feature_Dx12.cpp b/OptiScaler/upscalers/fsr2/FSR2Feature_Dx12.cpp index c7ae2547..17bde796 100644 --- a/OptiScaler/upscalers/fsr2/FSR2Feature_Dx12.cpp +++ b/OptiScaler/upscalers/fsr2/FSR2Feature_Dx12.cpp @@ -240,17 +240,13 @@ bool FSR2FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_N } ID3D12Resource* paramTransparency = nullptr; - if (InParameters->Get("FSR.transparencyAndComposition", ¶mTransparency) == NVSDK_NGX_Result_Success) - InParameters->Get("FSR.transparencyAndComposition", (void**) ¶mTransparency); + InParameters->Get("FSR.transparencyAndComposition", (void**) ¶mTransparency); ID3D12Resource* paramReactiveMask = nullptr; - if (InParameters->Get("FSR.reactive", ¶mReactiveMask) == NVSDK_NGX_Result_Success) - InParameters->Get("FSR.reactive", (void**) ¶mReactiveMask); + InParameters->Get("FSR.reactive", (void**) ¶mReactiveMask); ID3D12Resource* paramReactiveMask2 = nullptr; - if (InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, ¶mReactiveMask2) != - NVSDK_NGX_Result_Success) - InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, (void**) ¶mReactiveMask2); + InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, (void**) ¶mReactiveMask2); if (!Config::Instance()->DisableReactiveMask.value_or(paramReactiveMask == nullptr && paramReactiveMask2 == nullptr)) diff --git a/OptiScaler/upscalers/fsr2/FSR2Feature_Vk.cpp b/OptiScaler/upscalers/fsr2/FSR2Feature_Vk.cpp index 0a55427b..736e1fd8 100644 --- a/OptiScaler/upscalers/fsr2/FSR2Feature_Vk.cpp +++ b/OptiScaler/upscalers/fsr2/FSR2Feature_Vk.cpp @@ -241,45 +241,75 @@ bool FSR2FeatureVk::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* I } } + void* paramTransparency = nullptr; + InParameters->Get("FSR.transparencyAndComposition", ¶mTransparency); + void* paramReactiveMask = nullptr; - if (InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, ¶mReactiveMask) != - NVSDK_NGX_Result_Success) - InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, (void**) ¶mReactiveMask); + InParameters->Get("FSR.reactive", ¶mReactiveMask); - if (paramReactiveMask && Config::Instance()->FsrUseMaskForTransparency.value_or_default()) - { - params.transparencyAndComposition = ffxGetTextureResourceVK( - &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.ImageView, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Width, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Height, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Format, - (wchar_t*) L"FSR2_Transparency", FFX_RESOURCE_STATE_COMPUTE_READ); - } + void* paramReactiveMask2 = nullptr; + InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, ¶mReactiveMask2); - if (!Config::Instance()->DisableReactiveMask.value_or(paramReactiveMask == nullptr)) + if (!Config::Instance()->DisableReactiveMask.value_or(paramReactiveMask == nullptr && + paramReactiveMask2 == nullptr)) { - if (paramReactiveMask) + if (paramTransparency != nullptr) { - LOG_DEBUG("Bias mask exist.."); + LOG_DEBUG("Using FSR transparency mask.."); + params.transparencyAndComposition = ffxGetTextureResourceVK( + &_context, ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Image, + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.ImageView, + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Width, + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Height, + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Format, + (wchar_t*) L"FSR2_Reactive", FFX_RESOURCE_STATE_COMPUTE_READ); + } - if (Config::Instance()->DlssReactiveMaskBias.value_or_default() > 0.0f) - { - params.reactive = ffxGetTextureResourceVK( - &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.ImageView, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Width, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Height, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Format, - (wchar_t*) L"FSR2_Reactive", FFX_RESOURCE_STATE_COMPUTE_READ); - } + if (paramReactiveMask != nullptr) + { + LOG_DEBUG("Using FSR reactive mask.."); + params.reactive = ffxGetTextureResourceVK( + &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.ImageView, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Width, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Height, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Format, + (wchar_t*) L"FSR2_Reactive", FFX_RESOURCE_STATE_COMPUTE_READ); } else { - LOG_DEBUG("Bias mask not exist and its enabled in config, it may cause problems!!"); - Config::Instance()->DisableReactiveMask.set_volatile_value(true); - State::Instance().changeBackend[Handle()->Id] = true; - return true; + if (paramReactiveMask2 != nullptr) + { + LOG_DEBUG("Bias mask exist.."); + if (Config::Instance()->FsrUseMaskForTransparency.value_or_default()) + { + params.transparencyAndComposition = ffxGetTextureResourceVK( + &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Image, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.ImageView, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Width, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Height, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Format, + (wchar_t*) L"FSR2_Transparency", FFX_RESOURCE_STATE_COMPUTE_READ); + } + + + if (Config::Instance()->DlssReactiveMaskBias.value_or_default() > 0.0f) + { + params.reactive = ffxGetTextureResourceVK( + &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Image, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.ImageView, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Width, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Height, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Format, + (wchar_t*) L"FSR2_Reactive", FFX_RESOURCE_STATE_COMPUTE_READ); + } + } + else + { + LOG_DEBUG("Bias mask not exist and its enabled in config, it may cause problems!!"); + Config::Instance()->DisableReactiveMask.set_volatile_value(true); + return true; + } } } @@ -288,7 +318,7 @@ bool FSR2FeatureVk::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* I _hasMV = params.motionVectors.resource != nullptr; _hasExposure = params.exposure.resource != nullptr; _hasTM = params.transparencyAndComposition.resource != nullptr; - _accessToReactiveMask = paramReactiveMask != nullptr; + _accessToReactiveMask = paramReactiveMask != nullptr || paramReactiveMask2 != nullptr; _hasOutput = params.output.resource != nullptr; float MVScaleX = 1.0f; diff --git a/OptiScaler/upscalers/fsr2_212/FSR2Feature_Vk_212.cpp b/OptiScaler/upscalers/fsr2_212/FSR2Feature_Vk_212.cpp index 454d2982..92905951 100644 --- a/OptiScaler/upscalers/fsr2_212/FSR2Feature_Vk_212.cpp +++ b/OptiScaler/upscalers/fsr2_212/FSR2Feature_Vk_212.cpp @@ -283,45 +283,74 @@ bool FSR2FeatureVk212::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter } } + void* paramTransparency = nullptr; + InParameters->Get("FSR.transparencyAndComposition", ¶mTransparency); + void* paramReactiveMask = nullptr; - if (InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, ¶mReactiveMask) != - NVSDK_NGX_Result_Success) - InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, (void**) ¶mReactiveMask); + InParameters->Get("FSR.reactive", ¶mReactiveMask); - if (paramReactiveMask && Config::Instance()->FsrUseMaskForTransparency.value_or_default()) - { - params.transparencyAndComposition = Fsr212::ffxGetTextureResourceVK212( - &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.ImageView, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Width, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Height, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Format, - (wchar_t*) L"FSR2_Transparency", Fsr212::FFX_RESOURCE_STATE_COMPUTE_READ); - } + void* paramReactiveMask2 = nullptr; + InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, ¶mReactiveMask2); - if (!Config::Instance()->DisableReactiveMask.value_or(paramReactiveMask == nullptr)) + if (!Config::Instance()->DisableReactiveMask.value_or(paramReactiveMask == nullptr && + paramReactiveMask2 == nullptr)) { - if (paramReactiveMask) + if (paramTransparency != nullptr) { - LOG_DEBUG("Bias mask exist.."); + LOG_DEBUG("Using FSR transparency mask.."); + params.transparencyAndComposition = Fsr212::ffxGetTextureResourceVK212( + &_context, ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Image, + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.ImageView, + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Width, + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Height, + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Format, + (wchar_t*) L"FSR2_Reactive", Fsr212::FFX_RESOURCE_STATE_COMPUTE_READ); + } - if (Config::Instance()->DlssReactiveMaskBias.value_or_default() > 0.0f) - { - params.reactive = Fsr212::ffxGetTextureResourceVK212( - &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.ImageView, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Width, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Height, - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Format, - (wchar_t*) L"FSR2_Reactive", Fsr212::FFX_RESOURCE_STATE_COMPUTE_READ); - } + if (paramReactiveMask != nullptr) + { + LOG_DEBUG("Using FSR reactive mask.."); + params.reactive = Fsr212::ffxGetTextureResourceVK212( + &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.ImageView, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Width, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Height, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Format, + (wchar_t*) L"FSR2_Reactive", Fsr212::FFX_RESOURCE_STATE_COMPUTE_READ); } else { - LOG_DEBUG("Bias mask not exist and its enabled in config, it may cause problems!!"); - Config::Instance()->DisableReactiveMask.set_volatile_value(true); - State::Instance().changeBackend[Handle()->Id] = true; - return true; + if (paramReactiveMask2 != nullptr) + { + LOG_DEBUG("Bias mask exist.."); + if (Config::Instance()->FsrUseMaskForTransparency.value_or_default()) + { + params.transparencyAndComposition = Fsr212::ffxGetTextureResourceVK212( + &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Image, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.ImageView, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Width, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Height, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Format, + (wchar_t*) L"FSR2_Transparency", Fsr212::FFX_RESOURCE_STATE_COMPUTE_READ); + } + + if (Config::Instance()->DlssReactiveMaskBias.value_or_default() > 0.0f) + { + params.reactive = Fsr212::ffxGetTextureResourceVK212( + &_context, ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Image, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.ImageView, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Width, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Height, + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Format, + (wchar_t*) L"FSR2_Reactive", Fsr212::FFX_RESOURCE_STATE_COMPUTE_READ); + } + } + else + { + LOG_DEBUG("Bias mask not exist and its enabled in config, it may cause problems!!"); + Config::Instance()->DisableReactiveMask.set_volatile_value(true); + return true; + } } } @@ -330,7 +359,7 @@ bool FSR2FeatureVk212::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter _hasMV = params.motionVectors.resource != nullptr; _hasExposure = params.exposure.resource != nullptr; _hasTM = params.transparencyAndComposition.resource != nullptr; - _accessToReactiveMask = paramReactiveMask != nullptr; + _accessToReactiveMask = paramReactiveMask != nullptr || paramReactiveMask2 != nullptr; _hasOutput = params.output.resource != nullptr; float MVScaleX = 1.0f; diff --git a/OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp b/OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp index e099cf69..6ef4ed5b 100644 --- a/OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp +++ b/OptiScaler/upscalers/fsr31/FSR31Feature_Vk.cpp @@ -397,41 +397,63 @@ bool FSR31FeatureVk::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* } } + void* paramTransparency = nullptr; + InParameters->Get("FSR.transparencyAndComposition", ¶mTransparency); + void* paramReactiveMask = nullptr; - if (InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, ¶mReactiveMask) != - NVSDK_NGX_Result_Success) - InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, (void**) ¶mReactiveMask); + InParameters->Get("FSR.reactive", ¶mReactiveMask); - if (paramReactiveMask && Config::Instance()->FsrUseMaskForTransparency.value_or_default()) + void* paramReactiveMask2 = nullptr; + InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, ¶mReactiveMask2); + + if (!Config::Instance()->DisableReactiveMask.value_or(paramReactiveMask == nullptr && + paramReactiveMask2 == nullptr)) { - params.transparencyAndComposition = - ffxApiGetResourceVK(((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, - ffxApiGetImageResourceDescriptionVKLocal((NVSDK_NGX_Resource_VK*) paramReactiveMask), - FFX_API_RESOURCE_STATE_COMPUTE_READ); - } - - if (!Config::Instance()->DisableReactiveMask.value_or(paramReactiveMask == nullptr)) - { - InParameters->Get(NVSDK_NGX_Parameter_DLSS_Input_Bias_Current_Color_Mask, ¶mReactiveMask); - - if (paramReactiveMask) + if (paramTransparency != nullptr) { - LOG_DEBUG("Bias mask exist.."); + LOG_DEBUG("Using FSR transparency mask.."); + params.transparencyAndComposition = ffxApiGetResourceVK( + ((NVSDK_NGX_Resource_VK*) paramTransparency)->Resource.ImageViewInfo.Image, + ffxApiGetImageResourceDescriptionVKLocal((NVSDK_NGX_Resource_VK*) paramTransparency), + FFX_API_RESOURCE_STATE_COMPUTE_READ); + } - if (Config::Instance()->DlssReactiveMaskBias.value_or_default() > 0.0f) - { - params.reactive = ffxApiGetResourceVK( - ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, - ffxApiGetImageResourceDescriptionVKLocal((NVSDK_NGX_Resource_VK*) paramReactiveMask), - FFX_API_RESOURCE_STATE_COMPUTE_READ); - } + if (paramReactiveMask != nullptr) + { + LOG_DEBUG("Using FSR reactive mask.."); + params.reactive = ffxApiGetResourceVK( + ((NVSDK_NGX_Resource_VK*) paramReactiveMask)->Resource.ImageViewInfo.Image, + ffxApiGetImageResourceDescriptionVKLocal((NVSDK_NGX_Resource_VK*) paramReactiveMask), + FFX_API_RESOURCE_STATE_COMPUTE_READ); } else { - LOG_DEBUG("Bias mask not exist and its enabled in config, it may cause problems!!"); - Config::Instance()->DisableReactiveMask.set_volatile_value(true); - State::Instance().changeBackend[Handle()->Id] = true; - return true; + if (paramReactiveMask2 != nullptr) + { + if (Config::Instance()->FsrUseMaskForTransparency.value_or_default()) + { + params.transparencyAndComposition = ffxApiGetResourceVK( + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Image, + ffxApiGetImageResourceDescriptionVKLocal((NVSDK_NGX_Resource_VK*) paramReactiveMask2), + FFX_API_RESOURCE_STATE_COMPUTE_READ); + } + + LOG_DEBUG("Bias mask exist.."); + + if (Config::Instance()->DlssReactiveMaskBias.value_or_default() > 0.0f) + { + params.reactive = ffxApiGetResourceVK( + ((NVSDK_NGX_Resource_VK*) paramReactiveMask2)->Resource.ImageViewInfo.Image, + ffxApiGetImageResourceDescriptionVKLocal((NVSDK_NGX_Resource_VK*) paramReactiveMask2), + FFX_API_RESOURCE_STATE_COMPUTE_READ); + } + } + else + { + LOG_DEBUG("Bias mask not exist and its enabled in config, it may cause problems!!"); + Config::Instance()->DisableReactiveMask.set_volatile_value(true); + return true; + } } } @@ -440,7 +462,7 @@ bool FSR31FeatureVk::Evaluate(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Parameter* _hasMV = params.motionVectors.resource != nullptr; _hasExposure = params.exposure.resource != nullptr; _hasTM = params.transparencyAndComposition.resource != nullptr; - _accessToReactiveMask = paramReactiveMask != nullptr; + _accessToReactiveMask = paramReactiveMask != nullptr || paramReactiveMask2 != nullptr; _hasOutput = params.output.resource != nullptr; float MVScaleX = 1.0f;