mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-05-04 16:50:37 +00:00
Prevented tracking of upscaler heaps
This commit is contained in:
@@ -362,8 +362,12 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Dx12(Fsr212::FfxFsr2Context* co
|
||||
if (contextDescription == nullptr || contextDescription->device == nullptr)
|
||||
return Fsr212::FFX_ERROR_INVALID_ARGUMENT;
|
||||
|
||||
auto& state = State::Instance();
|
||||
|
||||
_skipCreate = true;
|
||||
state.skipHeapCapture = true;
|
||||
auto ccResult = o_ffxFsr2ContextCreate_Dx12(context, contextDescription);
|
||||
state.skipHeapCapture = false;
|
||||
_skipCreate = false;
|
||||
|
||||
if (ccResult != Fsr212::FFX_OK)
|
||||
@@ -378,9 +382,9 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Dx12(Fsr212::FfxFsr2Context* co
|
||||
{
|
||||
auto bDevice = (ID3D12Device*) contextDescription->device;
|
||||
|
||||
for (size_t i = 0; i < State::Instance().d3d12Devices.size(); i++)
|
||||
for (size_t i = 0; i < state.d3d12Devices.size(); i++)
|
||||
{
|
||||
if (State::Instance().d3d12Devices[i] == bDevice)
|
||||
if (state.d3d12Devices[i] == bDevice)
|
||||
{
|
||||
_d3d12Device = bDevice;
|
||||
break;
|
||||
@@ -390,8 +394,8 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Dx12(Fsr212::FfxFsr2Context* co
|
||||
|
||||
// if still no device use latest created one
|
||||
// Might fixed TLOU but FMF2 still crashes
|
||||
if (_d3d12Device == nullptr && State::Instance().d3d12Devices.size() > 0)
|
||||
_d3d12Device = State::Instance().d3d12Devices[State::Instance().d3d12Devices.size() - 1];
|
||||
if (_d3d12Device == nullptr && state.d3d12Devices.size() > 0)
|
||||
_d3d12Device = state.d3d12Devices[state.d3d12Devices.size() - 1];
|
||||
|
||||
if (_d3d12Device == nullptr)
|
||||
{
|
||||
@@ -399,7 +403,7 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Dx12(Fsr212::FfxFsr2Context* co
|
||||
return ccResult;
|
||||
}
|
||||
|
||||
if (!State::Instance().NvngxDx12Inited)
|
||||
if (!state.NvngxDx12Inited)
|
||||
{
|
||||
NVSDK_NGX_FeatureCommonInfo fcInfo {};
|
||||
|
||||
@@ -435,8 +439,8 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Dx12(Fsr212::FfxFsr2Context* co
|
||||
fcInfo.PathListInfo.Length = (int) pathStorage.size();
|
||||
|
||||
auto nvResult = NVSDK_NGX_D3D12_Init_with_ProjectID(
|
||||
"OptiScaler", State::Instance().NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device,
|
||||
&fcInfo, State::Instance().NVNGX_Version == 0 ? NVSDK_NGX_Version_API : State::Instance().NVNGX_Version);
|
||||
"OptiScaler", state.NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device, &fcInfo,
|
||||
state.NVNGX_Version == 0 ? NVSDK_NGX_Version_API : state.NVNGX_Version);
|
||||
|
||||
if (nvResult != NVSDK_NGX_Result_Success)
|
||||
return Fsr212::FFX_ERROR_BACKEND_API_ERROR;
|
||||
@@ -470,8 +474,20 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Pattern_Dx12(Fsr212::FfxFsr2Con
|
||||
if (contextDescription == nullptr || contextDescription->device == nullptr)
|
||||
return Fsr212::FFX_ERROR_INVALID_ARGUMENT;
|
||||
|
||||
auto& state = State::Instance();
|
||||
|
||||
bool skip = false;
|
||||
if (!state.skipHeapCapture)
|
||||
{
|
||||
skip = true;
|
||||
state.skipHeapCapture = true;
|
||||
}
|
||||
|
||||
auto ccResult = o_ffxFsr2ContextCreate_Pattern_Dx12(context, contextDescription);
|
||||
|
||||
if (skip)
|
||||
state.skipHeapCapture = false;
|
||||
|
||||
if (_skipCreate)
|
||||
return ccResult;
|
||||
|
||||
@@ -487,9 +503,9 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Pattern_Dx12(Fsr212::FfxFsr2Con
|
||||
{
|
||||
auto bDevice = (ID3D12Device*) contextDescription->device;
|
||||
|
||||
for (size_t i = 0; i < State::Instance().d3d12Devices.size(); i++)
|
||||
for (size_t i = 0; i < state.d3d12Devices.size(); i++)
|
||||
{
|
||||
if (State::Instance().d3d12Devices[i] == bDevice)
|
||||
if (state.d3d12Devices[i] == bDevice)
|
||||
{
|
||||
_d3d12Device = bDevice;
|
||||
break;
|
||||
@@ -499,8 +515,8 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Pattern_Dx12(Fsr212::FfxFsr2Con
|
||||
|
||||
// if still no device use latest created one
|
||||
// Might fixed TLOU but FMF2 still crashes
|
||||
if (_d3d12Device == nullptr && State::Instance().d3d12Devices.size() > 0)
|
||||
_d3d12Device = State::Instance().d3d12Devices[State::Instance().d3d12Devices.size() - 1];
|
||||
if (_d3d12Device == nullptr && state.d3d12Devices.size() > 0)
|
||||
_d3d12Device = state.d3d12Devices[state.d3d12Devices.size() - 1];
|
||||
|
||||
if (_d3d12Device == nullptr)
|
||||
{
|
||||
@@ -508,7 +524,7 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Pattern_Dx12(Fsr212::FfxFsr2Con
|
||||
return ccResult;
|
||||
}
|
||||
|
||||
if (!State::Instance().NvngxDx12Inited)
|
||||
if (!state.NvngxDx12Inited)
|
||||
{
|
||||
NVSDK_NGX_FeatureCommonInfo fcInfo {};
|
||||
|
||||
@@ -544,8 +560,8 @@ static Fsr212::FfxErrorCode ffxFsr2ContextCreate_Pattern_Dx12(Fsr212::FfxFsr2Con
|
||||
fcInfo.PathListInfo.Length = (int) pathStorage.size();
|
||||
|
||||
auto nvResult = NVSDK_NGX_D3D12_Init_with_ProjectID(
|
||||
"OptiScaler", State::Instance().NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device,
|
||||
&fcInfo, State::Instance().NVNGX_Version == 0 ? NVSDK_NGX_Version_API : State::Instance().NVNGX_Version);
|
||||
"OptiScaler", state.NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device, &fcInfo,
|
||||
state.NVNGX_Version == 0 ? NVSDK_NGX_Version_API : state.NVNGX_Version);
|
||||
|
||||
if (nvResult != NVSDK_NGX_Result_Success)
|
||||
return Fsr212::FFX_ERROR_BACKEND_API_ERROR;
|
||||
|
||||
@@ -213,8 +213,12 @@ static Fsr3::FfxErrorCode ffxFsr3ContextCreate_Dx12(Fsr3::FfxFsr3UpscalerContext
|
||||
if (pContext == nullptr || pContextDescription->backendInterface.device == nullptr)
|
||||
return Fsr3::FFX_ERROR_INVALID_ARGUMENT;
|
||||
|
||||
auto& state = State::Instance();
|
||||
|
||||
_skipCreate = true;
|
||||
state.skipHeapCapture = true;
|
||||
auto ccResult = o_ffxFsr3UpscalerContextCreate_Dx12(pContext, pContextDescription);
|
||||
state.skipHeapCapture = false;
|
||||
_skipCreate = false;
|
||||
|
||||
if (ccResult != Fsr3::FFX_OK)
|
||||
@@ -229,9 +233,9 @@ static Fsr3::FfxErrorCode ffxFsr3ContextCreate_Dx12(Fsr3::FfxFsr3UpscalerContext
|
||||
{
|
||||
auto bDevice = (ID3D12Device*) pContextDescription->backendInterface.device;
|
||||
|
||||
for (size_t i = 0; i < State::Instance().d3d12Devices.size(); i++)
|
||||
for (size_t i = 0; i < state.d3d12Devices.size(); i++)
|
||||
{
|
||||
if (State::Instance().d3d12Devices[i] == bDevice)
|
||||
if (state.d3d12Devices[i] == bDevice)
|
||||
{
|
||||
_d3d12Device = bDevice;
|
||||
break;
|
||||
@@ -241,8 +245,8 @@ static Fsr3::FfxErrorCode ffxFsr3ContextCreate_Dx12(Fsr3::FfxFsr3UpscalerContext
|
||||
|
||||
// if still no device use latest created one
|
||||
// Might fixed TLOU but FMF2 still crashes
|
||||
if (_d3d12Device == nullptr && State::Instance().d3d12Devices.size() > 0)
|
||||
_d3d12Device = State::Instance().d3d12Devices[State::Instance().d3d12Devices.size() - 1];
|
||||
if (_d3d12Device == nullptr && state.d3d12Devices.size() > 0)
|
||||
_d3d12Device = state.d3d12Devices[state.d3d12Devices.size() - 1];
|
||||
|
||||
if (_d3d12Device == nullptr)
|
||||
{
|
||||
@@ -250,7 +254,7 @@ static Fsr3::FfxErrorCode ffxFsr3ContextCreate_Dx12(Fsr3::FfxFsr3UpscalerContext
|
||||
return ccResult;
|
||||
}
|
||||
|
||||
if (!State::Instance().NvngxDx12Inited)
|
||||
if (!state.NvngxDx12Inited)
|
||||
{
|
||||
NVSDK_NGX_FeatureCommonInfo fcInfo {};
|
||||
|
||||
@@ -286,8 +290,8 @@ static Fsr3::FfxErrorCode ffxFsr3ContextCreate_Dx12(Fsr3::FfxFsr3UpscalerContext
|
||||
fcInfo.PathListInfo.Length = (int) pathStorage.size();
|
||||
|
||||
auto nvResult = NVSDK_NGX_D3D12_Init_with_ProjectID(
|
||||
"OptiScaler", State::Instance().NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device,
|
||||
&fcInfo, State::Instance().NVNGX_Version == 0 ? NVSDK_NGX_Version_API : State::Instance().NVNGX_Version);
|
||||
"OptiScaler", state.NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device, &fcInfo,
|
||||
state.NVNGX_Version == 0 ? NVSDK_NGX_Version_API : state.NVNGX_Version);
|
||||
|
||||
if (nvResult != NVSDK_NGX_Result_Success)
|
||||
return Fsr3::FFX_ERROR_BACKEND_API_ERROR;
|
||||
@@ -436,8 +440,20 @@ ffxFsr3ContextCreate_Pattern_Dx12(Fsr3::FfxFsr3UpscalerContext* pContext,
|
||||
if (pContext == nullptr || pContextDescription->backendInterface.device == nullptr)
|
||||
return Fsr3::FFX_ERROR_INVALID_ARGUMENT;
|
||||
|
||||
auto& state = State::Instance();
|
||||
|
||||
bool skip = false;
|
||||
if (!state.skipHeapCapture)
|
||||
{
|
||||
skip = true;
|
||||
state.skipHeapCapture = true;
|
||||
}
|
||||
|
||||
auto ccResult = o_ffxFsr3UpscalerContextCreate_Pattern_Dx12(pContext, pContextDescription);
|
||||
|
||||
if (skip)
|
||||
state.skipHeapCapture = false;
|
||||
|
||||
if (_skipCreate)
|
||||
return ccResult;
|
||||
|
||||
@@ -453,9 +469,9 @@ ffxFsr3ContextCreate_Pattern_Dx12(Fsr3::FfxFsr3UpscalerContext* pContext,
|
||||
{
|
||||
auto bDevice = (ID3D12Device*) pContextDescription->backendInterface.device;
|
||||
|
||||
for (size_t i = 0; i < State::Instance().d3d12Devices.size(); i++)
|
||||
for (size_t i = 0; i < state.d3d12Devices.size(); i++)
|
||||
{
|
||||
if (State::Instance().d3d12Devices[i] == bDevice)
|
||||
if (state.d3d12Devices[i] == bDevice)
|
||||
{
|
||||
_d3d12Device = bDevice;
|
||||
break;
|
||||
@@ -465,8 +481,8 @@ ffxFsr3ContextCreate_Pattern_Dx12(Fsr3::FfxFsr3UpscalerContext* pContext,
|
||||
|
||||
// if still no device use latest created one
|
||||
// Might fixed TLOU but FMF2 still crashes
|
||||
if (_d3d12Device == nullptr && State::Instance().d3d12Devices.size() > 0)
|
||||
_d3d12Device = State::Instance().d3d12Devices[State::Instance().d3d12Devices.size() - 1];
|
||||
if (_d3d12Device == nullptr && state.d3d12Devices.size() > 0)
|
||||
_d3d12Device = state.d3d12Devices[state.d3d12Devices.size() - 1];
|
||||
|
||||
if (_d3d12Device == nullptr)
|
||||
{
|
||||
@@ -474,7 +490,7 @@ ffxFsr3ContextCreate_Pattern_Dx12(Fsr3::FfxFsr3UpscalerContext* pContext,
|
||||
return ccResult;
|
||||
}
|
||||
|
||||
if (!State::Instance().NvngxDx12Inited)
|
||||
if (!state.NvngxDx12Inited)
|
||||
{
|
||||
NVSDK_NGX_FeatureCommonInfo fcInfo {};
|
||||
|
||||
@@ -510,8 +526,8 @@ ffxFsr3ContextCreate_Pattern_Dx12(Fsr3::FfxFsr3UpscalerContext* pContext,
|
||||
fcInfo.PathListInfo.Length = (int) pathStorage.size();
|
||||
|
||||
auto nvResult = NVSDK_NGX_D3D12_Init_with_ProjectID(
|
||||
"OptiScaler", State::Instance().NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device,
|
||||
&fcInfo, State::Instance().NVNGX_Version == 0 ? NVSDK_NGX_Version_API : State::Instance().NVNGX_Version);
|
||||
"OptiScaler", state.NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device, &fcInfo,
|
||||
state.NVNGX_Version == 0 ? NVSDK_NGX_Version_API : state.NVNGX_Version);
|
||||
|
||||
if (nvResult != NVSDK_NGX_Result_Success)
|
||||
return Fsr3::FFX_ERROR_BACKEND_API_ERROR;
|
||||
|
||||
@@ -273,15 +273,16 @@ ffxReturnCode_t ffxCreateContext_Dx12(ffxContext* context, ffxCreateContextDescH
|
||||
|
||||
LOG_DEBUG("type: {}", FfxGetGetDescTypeName(desc->type));
|
||||
|
||||
auto& state = State::Instance();
|
||||
|
||||
// Extra checks added for Silent Hill f
|
||||
// Game is creating FSR-FG swapchain and calling present twice per frame
|
||||
// So when using OptiFG I am hijacking FSR-FG swapchain
|
||||
// It would crash the games which uses swapchain for FG
|
||||
if (IsFGType(desc->type) &&
|
||||
(State::Instance().activeFgInput == FGInput::FSRFG ||
|
||||
(Config::Instance()->FGAlwaysCaptureFSRFGSwapchain.value_or_default() &&
|
||||
State::Instance().activeFgOutput != FGOutput::NoFG && State::Instance().activeFgOutput != FGOutput::Nukems &&
|
||||
(desc->type == 0x30005 || desc->type == 0x30006))))
|
||||
if (IsFGType(desc->type) && (state.activeFgInput == FGInput::FSRFG ||
|
||||
(Config::Instance()->FGAlwaysCaptureFSRFGSwapchain.value_or_default() &&
|
||||
state.activeFgOutput != FGOutput::NoFG && state.activeFgOutput != FGOutput::Nukems &&
|
||||
(desc->type == 0x30005 || desc->type == 0x30006))))
|
||||
{
|
||||
auto result = ffxCreateContext_Dx12FG(context, desc, memCb);
|
||||
|
||||
@@ -314,7 +315,9 @@ ffxReturnCode_t ffxCreateContext_Dx12(ffxContext* context, ffxCreateContextDescH
|
||||
|
||||
if (!upscaleContext || Config::Instance()->EnableHotSwapping.value_or_default())
|
||||
{
|
||||
state.skipHeapCapture = true;
|
||||
auto ffxApiResult = FfxApiProxy::D3D12_CreateContext(context, desc, memCb);
|
||||
state.skipHeapCapture = false;
|
||||
|
||||
LOG_ERROR("D3D12_CreateContext result: {:X} ({}), context: {:X}", (UINT) ffxApiResult,
|
||||
FfxApiProxy::ReturnCodeToString(ffxApiResult), (size_t) *context);
|
||||
@@ -323,7 +326,7 @@ ffxReturnCode_t ffxCreateContext_Dx12(ffxContext* context, ffxCreateContextDescH
|
||||
return ffxApiResult;
|
||||
}
|
||||
|
||||
if (!State::Instance().NvngxDx12Inited)
|
||||
if (!state.NvngxDx12Inited)
|
||||
{
|
||||
NVSDK_NGX_FeatureCommonInfo fcInfo {};
|
||||
|
||||
@@ -359,8 +362,8 @@ ffxReturnCode_t ffxCreateContext_Dx12(ffxContext* context, ffxCreateContextDescH
|
||||
fcInfo.PathListInfo.Length = (int) pathStorage.size();
|
||||
|
||||
auto nvResult = NVSDK_NGX_D3D12_Init_with_ProjectID(
|
||||
"OptiScaler", State::Instance().NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device,
|
||||
&fcInfo, State::Instance().NVNGX_Version == 0 ? NVSDK_NGX_Version_API : State::Instance().NVNGX_Version);
|
||||
"OptiScaler", state.NVNGX_Engine, VER_PRODUCT_VERSION_STR, dllPath.c_str(), _d3d12Device, &fcInfo,
|
||||
state.NVNGX_Version == 0 ? NVSDK_NGX_Version_API : state.NVNGX_Version);
|
||||
|
||||
if (nvResult != NVSDK_NGX_Result_Success)
|
||||
return FFX_API_RETURN_ERROR_RUNTIME_ERROR;
|
||||
|
||||
@@ -45,8 +45,10 @@ bool DLSSFeatureDx12::Init(ID3D12Device* InDevice, ID3D12GraphicsCommandList* In
|
||||
ProcessInitParams(InParameters);
|
||||
|
||||
_p_dlssHandle = &_dlssHandle;
|
||||
State::Instance().skipHeapCapture = true;
|
||||
nvResult = NVNGXProxy::D3D12_CreateFeature()(InCommandList, NVSDK_NGX_Feature_SuperSampling, InParameters,
|
||||
&_p_dlssHandle);
|
||||
State::Instance().skipHeapCapture = false;
|
||||
|
||||
if (nvResult != NVSDK_NGX_Result_Success)
|
||||
{
|
||||
|
||||
@@ -45,8 +45,10 @@ bool DLSSDFeatureDx12::Init(ID3D12Device* InDevice, ID3D12GraphicsCommandList* I
|
||||
ProcessInitParams(InParameters);
|
||||
|
||||
_p_dlssdHandle = &_dlssdHandle;
|
||||
State::Instance().skipHeapCapture = true;
|
||||
nvResult = NVNGXProxy::D3D12_CreateFeature()(InCommandList, NVSDK_NGX_Feature_RayReconstruction,
|
||||
InParameters, &_p_dlssdHandle);
|
||||
State::Instance().skipHeapCapture = false;
|
||||
|
||||
if (nvResult != NVSDK_NGX_Result_Success)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user