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;
2122static ankerl::unordered_dense::map<unsigned int , ContextData<IFeature_Dx11>> Dx11Contexts;
2223static int evalCounter = 0 ;
2324static 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