Skip to content

Commit c589c3b

Browse files
committed
fix: isolate exported NGX transitions from internal delegation
1 parent 0b96b32 commit c589c3b

10 files changed

Lines changed: 566 additions & 208 deletions

‎.github/workflows/just_build_no_signature.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ jobs:
133133
& $env:ComSpec /d /c $command
134134
if ($LASTEXITCODE) { throw "Compatibility guard test failed: $name" }
135135
}
136-
foreach ($script in @('test_shutdown_routing.py','test_provider_publication_routes.py','test_provider_dll_boundary.py','test_combo_release.py','test_combo_shutdown.py','test_native_operation_routes.py','test_native_module_publication.py','test_native_init_scopes.py','test_ngx_init_paths.py','test_ngx_init_metadata.py','test_provider_release_admission.py','test_provider_call_admission.py','test_provider_init_footprint.py','test_provider_handle_api.py','test_upstream_resource_guards.py','test_provider_settings.py','test_provider_shutdown_drain.py','test_ffx_release.py','test_ffx_create.py','test_combo_create.py','test_provider_init_allocation.py')) {
136+
foreach ($script in @('test_shutdown_routing.py','test_provider_publication_routes.py','test_provider_dll_boundary.py','test_combo_release.py','test_combo_shutdown.py','test_native_operation_routes.py','test_native_module_publication.py','test_native_init_scopes.py', 'test_exported_init_chains.py','test_ngx_init_paths.py','test_ngx_init_metadata.py','test_provider_release_admission.py','test_provider_call_admission.py','test_provider_init_footprint.py','test_provider_handle_api.py','test_upstream_resource_guards.py','test_provider_settings.py','test_provider_shutdown_drain.py','test_ffx_release.py','test_ffx_create.py','test_combo_create.py','test_provider_init_allocation.py')) {
137137
$command = 'call "' + $vcvars + '" && python tests\' + $script + ' --compiler cl'
138138
& $env:ComSpec /d /c $command
139139
if ($LASTEXITCODE) { throw "Compatibility routing test failed: $script" }

‎OptiScaler/inputs/NVNGX_DLSS_Dx11.cpp‎

Lines changed: 98 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "pch.h"
2+
#include <proxies/NgxExportLifecycle.h>
23

34
#include "Config.h"
45
#include "Util.h"
@@ -21,23 +22,6 @@ static ID3D11Device* D3D11Device = nullptr;
2122
static ankerl::unordered_dense::map<unsigned int, ContextData<IFeature_Dx11>> Dx11Contexts;
2223
static int evalCounter = 0;
2324
static bool shutdown = false;
24-
static thread_local bool _skipInit = false;
25-
26-
class ScopedInitDx11
27-
{
28-
private:
29-
bool previousState;
30-
31-
public:
32-
ScopedInitDx11()
33-
{
34-
previousState = _skipInit;
35-
_skipInit = true;
36-
}
37-
38-
~ScopedInitDx11() { _skipInit = previousState; }
39-
};
40-
4125
[[nodiscard]] static NgxPathSnapshot::Owner UpdateInitPaths(NVSDK_NGX_FeatureCommonInfo* InFeatureInfo)
4226
{
4327
std::vector<std::wstring> initPaths;
@@ -130,22 +114,21 @@ class ScopedInitDx11
130114

131115
#pragma region NVSDK_NGX_D3D11_Init
132116

133-
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_Ext(unsigned long long InApplicationId,
134-
const wchar_t* InApplicationDataPath, ID3D11Device* InDevice,
135-
NVSDK_NGX_Version InSDKVersion,
136-
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo)
117+
static NVSDK_NGX_Result NgxCore_D3D11_Init_Ext(unsigned long long InApplicationId, const wchar_t* InApplicationDataPath,
118+
ID3D11Device* InDevice, NVSDK_NGX_Version InSDKVersion,
119+
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, bool delegated)
137120
{
138121
NVSDK_NGX_FeatureCommonInfo localFeatureInfo = {};
139122

140123
if (InFeatureInfo != nullptr)
141124
std::memcpy(&localFeatureInfo, InFeatureInfo, sizeof(NVSDK_NGX_FeatureCommonInfo));
142125

143126
// A delegated call borrows its outer call's still-live snapshot.
144-
const auto initPaths = _skipInit ? NgxPathSnapshot::Owner {} : UpdateInitPaths(&localFeatureInfo);
127+
const auto initPaths = delegated ? NgxPathSnapshot::Owner {} : UpdateInitPaths(&localFeatureInfo);
145128

146129
State::Instance().NVNGX_Init.UpdateApplication(InApplicationId, InApplicationDataPath, InSDKVersion);
147130

148-
if (Config::Instance()->DLSSEnabled.value_or_default() && !_skipInit)
131+
if (Config::Instance()->DLSSEnabled.value_or_default() && !delegated)
149132
{
150133
if (Config::Instance()->UseGenericAppIdWithDlss.value_or_default())
151134
InApplicationId = app_id_override;
@@ -193,20 +176,32 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_Ext(unsigned long long InApp
193176
return NVSDK_NGX_Result_Success;
194177
}
195178

196-
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init(unsigned long long InApplicationId,
197-
const wchar_t* InApplicationDataPath, ID3D11Device* InDevice,
198-
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo,
199-
NVSDK_NGX_Version InSDKVersion)
179+
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_Ext(unsigned long long InApplicationId,
180+
const wchar_t* InApplicationDataPath, ID3D11Device* InDevice,
181+
NVSDK_NGX_Version InSDKVersion,
182+
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo)
183+
{
184+
return NgxExportLifecycle::Run(NVSDK_NGX_Result_FAIL_NotInitialized,
185+
[&]
186+
{
187+
return NgxCore_D3D11_Init_Ext(InApplicationId, InApplicationDataPath, InDevice,
188+
InSDKVersion, InFeatureInfo, false);
189+
});
190+
}
191+
192+
static NVSDK_NGX_Result NgxCore_D3D11_Init(unsigned long long InApplicationId, const wchar_t* InApplicationDataPath,
193+
ID3D11Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo,
194+
NVSDK_NGX_Version InSDKVersion, bool delegated)
200195
{
201196
NVSDK_NGX_FeatureCommonInfo localFeatureInfo = {};
202197

203198
if (InFeatureInfo != nullptr)
204199
std::memcpy(&localFeatureInfo, InFeatureInfo, sizeof(NVSDK_NGX_FeatureCommonInfo));
205200

206201
// A delegated call borrows its outer call's still-live snapshot.
207-
const auto initPaths = _skipInit ? NgxPathSnapshot::Owner {} : UpdateInitPaths(&localFeatureInfo);
202+
const auto initPaths = delegated ? NgxPathSnapshot::Owner {} : UpdateInitPaths(&localFeatureInfo);
208203

209-
if (Config::Instance()->DLSSEnabled.value_or_default() && !_skipInit)
204+
if (Config::Instance()->DLSSEnabled.value_or_default() && !delegated)
210205
{
211206
if (Config::Instance()->UseGenericAppIdWithDlss.value_or_default())
212207
InApplicationId = app_id_override;
@@ -228,28 +223,39 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init(unsigned long long InApplica
228223
}
229224
}
230225

231-
ScopedInitDx11 scopedInit {};
232-
auto result = NVSDK_NGX_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InSDKVersion, &localFeatureInfo);
226+
auto result =
227+
NgxCore_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InSDKVersion, &localFeatureInfo, true);
233228
LOG_DEBUG("was called NVSDK_NGX_D3D11_Init_Ext");
234229
return result;
235230
}
236231

237-
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_ProjectID(const char* InProjectId,
238-
NVSDK_NGX_EngineType InEngineType,
239-
const char* InEngineVersion,
240-
const wchar_t* InApplicationDataPath,
241-
ID3D11Device* InDevice, NVSDK_NGX_Version InSDKVersion,
242-
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo)
232+
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init(unsigned long long InApplicationId,
233+
const wchar_t* InApplicationDataPath, ID3D11Device* InDevice,
234+
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo,
235+
NVSDK_NGX_Version InSDKVersion)
236+
{
237+
return NgxExportLifecycle::Run(NVSDK_NGX_Result_FAIL_NotInitialized,
238+
[&]
239+
{
240+
return NgxCore_D3D11_Init(InApplicationId, InApplicationDataPath, InDevice,
241+
InFeatureInfo, InSDKVersion, false);
242+
});
243+
}
244+
245+
static NVSDK_NGX_Result NgxCore_D3D11_Init_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType,
246+
const char* InEngineVersion, const wchar_t* InApplicationDataPath,
247+
ID3D11Device* InDevice, NVSDK_NGX_Version InSDKVersion,
248+
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo, bool delegated)
243249
{
244250
NVSDK_NGX_FeatureCommonInfo localFeatureInfo = {};
245251

246252
if (InFeatureInfo != nullptr)
247253
std::memcpy(&localFeatureInfo, InFeatureInfo, sizeof(NVSDK_NGX_FeatureCommonInfo));
248254

249255
// A delegated call borrows its outer call's still-live snapshot.
250-
const auto initPaths = _skipInit ? NgxPathSnapshot::Owner {} : UpdateInitPaths(&localFeatureInfo);
256+
const auto initPaths = delegated ? NgxPathSnapshot::Owner {} : UpdateInitPaths(&localFeatureInfo);
251257

252-
if (Config::Instance()->DLSSEnabled.value_or_default() && !_skipInit)
258+
if (Config::Instance()->DLSSEnabled.value_or_default() && !delegated)
253259
{
254260
if (Config::Instance()->UseGenericAppIdWithDlss.value_or_default())
255261
InProjectId = project_id_override;
@@ -272,8 +278,8 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_ProjectID(const char* InProj
272278
}
273279
}
274280

275-
ScopedInitDx11 scopedInit {};
276-
auto result = NVSDK_NGX_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InSDKVersion, &localFeatureInfo);
281+
auto result =
282+
NgxCore_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InSDKVersion, &localFeatureInfo, true);
277283

278284
LOG_INFO("InProjectId: {0}", InProjectId);
279285
LOG_INFO("InEngineType: {0}", (int) InEngineType);
@@ -284,13 +290,31 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_ProjectID(const char* InProj
284290
return result;
285291
}
286292

293+
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_ProjectID(const char* InProjectId,
294+
NVSDK_NGX_EngineType InEngineType,
295+
const char* InEngineVersion,
296+
const wchar_t* InApplicationDataPath,
297+
ID3D11Device* InDevice, NVSDK_NGX_Version InSDKVersion,
298+
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo)
299+
{
300+
return NgxExportLifecycle::Run(NVSDK_NGX_Result_FAIL_NotInitialized,
301+
[&]
302+
{
303+
return NgxCore_D3D11_Init_ProjectID(InProjectId, InEngineType, InEngineVersion,
304+
InApplicationDataPath, InDevice,
305+
InSDKVersion, InFeatureInfo, false);
306+
});
307+
}
308+
287309
// Not sure about this one, original nvngx does not export this method
288-
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_with_ProjectID(
289-
const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion,
290-
const wchar_t* InApplicationDataPath, ID3D11Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo,
291-
NVSDK_NGX_Version InSDKVersion)
310+
static NVSDK_NGX_Result NgxCore_D3D11_Init_with_ProjectID(const char* InProjectId, NVSDK_NGX_EngineType InEngineType,
311+
const char* InEngineVersion,
312+
const wchar_t* InApplicationDataPath, ID3D11Device* InDevice,
313+
const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo,
314+
NVSDK_NGX_Version InSDKVersion, bool delegated)
292315
{
293-
auto result = NVSDK_NGX_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InSDKVersion, InFeatureInfo);
316+
auto result =
317+
NgxCore_D3D11_Init_Ext(0x1337, InApplicationDataPath, InDevice, InSDKVersion, InFeatureInfo, delegated);
294318

295319
LOG_INFO("InProjectId: {0}", InProjectId);
296320
LOG_INFO("InEngineType: {0}", (int) InEngineType);
@@ -301,11 +325,25 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_with_ProjectID(
301325
return result;
302326
}
303327

328+
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Init_with_ProjectID(
329+
const char* InProjectId, NVSDK_NGX_EngineType InEngineType, const char* InEngineVersion,
330+
const wchar_t* InApplicationDataPath, ID3D11Device* InDevice, const NVSDK_NGX_FeatureCommonInfo* InFeatureInfo,
331+
NVSDK_NGX_Version InSDKVersion)
332+
{
333+
return NgxExportLifecycle::Run(NVSDK_NGX_Result_FAIL_NotInitialized,
334+
[&]
335+
{
336+
return NgxCore_D3D11_Init_with_ProjectID(
337+
InProjectId, InEngineType, InEngineVersion, InApplicationDataPath, InDevice,
338+
InFeatureInfo, InSDKVersion, false);
339+
});
340+
}
341+
304342
#pragma endregion
305343

306344
#pragma region NVSDK_NGX_D3D11_Shutdown
307345

308-
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Shutdown()
346+
static NVSDK_NGX_Result NgxCore_D3D11_Shutdown()
309347
{
310348
shutdown = true;
311349

@@ -339,7 +377,12 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Shutdown()
339377
return NVSDK_NGX_Result_Success;
340378
}
341379

342-
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Shutdown1(ID3D11Device* InDevice)
380+
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Shutdown()
381+
{
382+
return NgxExportLifecycle::Run(NVSDK_NGX_Result_FAIL_NotInitialized, [&] { return NgxCore_D3D11_Shutdown(); });
383+
}
384+
385+
static NVSDK_NGX_Result NgxCore_D3D11_Shutdown1(ID3D11Device* InDevice)
343386
{
344387
shutdown = true;
345388

@@ -350,7 +393,13 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Shutdown1(ID3D11Device* InDevice)
350393
NVNGXProxy::SetDx11Inited(false);
351394
}
352395

353-
return NVSDK_NGX_D3D11_Shutdown();
396+
return NgxCore_D3D11_Shutdown();
397+
}
398+
399+
NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_Shutdown1(ID3D11Device* InDevice)
400+
{
401+
return NgxExportLifecycle::Run(NVSDK_NGX_Result_FAIL_NotInitialized,
402+
[&] { return NgxCore_D3D11_Shutdown1(InDevice); });
354403
}
355404

356405
#pragma endregion

0 commit comments

Comments
 (0)