fix for Dx11 UE engine issues

This commit is contained in:
cdozdil
2024-11-07 17:45:46 +03:00
parent c4f03397e2
commit f20f944133
2 changed files with 63 additions and 4 deletions
+33 -3
View File
@@ -76,7 +76,8 @@ bool FSR2FeatureDx11::CopyTexture(ID3D11Resource* InResource, D3D11_TEXTURE2D_RE
OutTextureRes->usingOriginal = false;
ASSIGN_DESC(OutTextureRes->Desc, desc);
desc.BindFlags = bindFlags;
if (bindFlags != 9999)
desc.BindFlags = bindFlags;
result = Device->CreateTexture2D(&desc, nullptr, &OutTextureRes->Texture);
@@ -287,8 +288,27 @@ bool FSR2FeatureDx11::Evaluate(ID3D11DeviceContext* InContext, NVSDK_NGX_Paramet
if (!RCAS->IsInit())
Config::Instance()->RcasEnabled = false;
FfxFsr2DispatchDescription params{};
ID3D11ShaderResourceView* restoreSRVs[16] = { nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr,
nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr };
ID3D11SamplerState* restoreSamplerStates[16] = { nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr,
nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr };
ID3D11Buffer* restoreCBVs[16] = { nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr,
nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr };
ID3D11UnorderedAccessView* restoreUAVs[16] = { nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr,
nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr };
for (size_t i = 0; i < 16; i++)
{
InContext->CSGetShaderResources(i, 1, &restoreSRVs[i]);
InContext->CSGetSamplers(i, 1, &restoreSamplerStates[i]);
InContext->CSGetConstantBuffers(i, 1, &restoreCBVs[i]);
InContext->CSGetUnorderedAccessViews(i, 1, &restoreUAVs[i]);
}
FfxFsr2DispatchDescription params{};
params.commandList = InContext;
InParameters->Get(NVSDK_NGX_Parameter_Jitter_Offset_X, &params.jitterOffset.x);
@@ -306,7 +326,7 @@ bool FSR2FeatureDx11::Evaluate(ID3D11DeviceContext* InContext, NVSDK_NGX_Paramet
if (Config::Instance()->OverrideSharpness.value_or(false))
_sharpness = Config::Instance()->Sharpness.value_or(0.3);
else
else
_sharpness = GetSharpness(InParameters);
if (Config::Instance()->RcasEnabled.value_or(false))
@@ -380,11 +400,13 @@ bool FSR2FeatureDx11::Evaluate(ID3D11DeviceContext* InContext, NVSDK_NGX_Paramet
LOG_ERROR("MotionVectors not exist!!");
return false;
}
auto outIndex = _frameCount % 2;
ID3D11Resource* paramOutput;
if (InParameters->Get(NVSDK_NGX_Parameter_Output, &paramOutput) != NVSDK_NGX_Result_Success)
InParameters->Get(NVSDK_NGX_Parameter_Output, (void**)&paramOutput);
if (paramOutput)
{
LOG_DEBUG("Output exist..");
@@ -608,6 +630,14 @@ bool FSR2FeatureDx11::Evaluate(ID3D11DeviceContext* InContext, NVSDK_NGX_Paramet
}
}
for (size_t i = 0; i < 16; i++)
{
InContext->CSSetShaderResources(i, 1, &restoreSRVs[i]);
InContext->CSSetSamplers(i, 1, &restoreSamplerStates[i]);
InContext->CSSetConstantBuffers(i, 1, &restoreCBVs[i]);
InContext->CSSetUnorderedAccessViews(i, 1, &restoreUAVs[i], 0);
}
_frameCount++;
return true;
@@ -101,7 +101,8 @@ bool FSR31FeatureDx11::CopyTexture(ID3D11Resource* InResource, D3D11_TEXTURE2D_R
OutTextureRes->usingOriginal = false;
ASSIGN_DESC(OutTextureRes->Desc, desc);
desc.BindFlags = bindFlags;
if (bindFlags != 9999)
desc.BindFlags = bindFlags;
result = Device->CreateTexture2D(&desc, nullptr, &OutTextureRes->Texture);
@@ -141,6 +142,26 @@ bool FSR31FeatureDx11::Evaluate(ID3D11DeviceContext* DeviceContext, NVSDK_NGX_Pa
if (!OutputScaler->IsInit())
Config::Instance()->OutputScalingEnabled = false;
ID3D11ShaderResourceView* restoreSRVs[16] = { nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr,
nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr };
ID3D11SamplerState* restoreSamplerStates[16] = { nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr,
nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr };
ID3D11Buffer* restoreCBVs[16] = { nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr,
nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr };
ID3D11UnorderedAccessView* restoreUAVs[16] = { nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr,
nullptr, nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr ,nullptr };
for (size_t i = 0; i < 16; i++)
{
DeviceContext->CSGetShaderResources(i, 1, &restoreSRVs[i]);
DeviceContext->CSGetSamplers(i, 1, &restoreSamplerStates[i]);
DeviceContext->CSGetConstantBuffers(i, 1, &restoreCBVs[i]);
DeviceContext->CSGetUnorderedAccessViews(i, 1, &restoreUAVs[i]);
}
Fsr31::FfxFsr3DispatchUpscaleDescription params{};
if (Config::Instance()->FsrDebugView.value_or(false))
@@ -491,6 +512,14 @@ bool FSR31FeatureDx11::Evaluate(ID3D11DeviceContext* DeviceContext, NVSDK_NGX_Pa
}
}
for (size_t i = 0; i < 16; i++)
{
DeviceContext->CSSetShaderResources(i, 1, &restoreSRVs[i]);
DeviceContext->CSSetSamplers(i, 1, &restoreSamplerStates[i]);
DeviceContext->CSSetConstantBuffers(i, 1, &restoreCBVs[i]);
DeviceContext->CSSetUnorderedAccessViews(i, 1, &restoreUAVs[i], 0);
}
_frameCount++;
return true;