|
2 | 2 |
|
3 | 3 | #include <NVNGX_Parameter.h> |
4 | 4 | #include "Nvngx_FG.h" |
| 5 | +#include <framegen/ProviderHandleCreation.h> |
5 | 6 |
|
6 | 7 | #include "proxies/NVNGX_Proxy.h" |
7 | 8 | #include "proxies/Ntdll_Proxy.h" |
@@ -267,26 +268,16 @@ NVSDK_NGX_Result Nvngx_FG::D3D12_GetScratchBufferSize(NVSDK_NGX_Feature InFeatur |
267 | 268 | NVSDK_NGX_Result Nvngx_FG::D3D12_CreateFeature(ID3D12GraphicsCommandList* InCmdList, NVSDK_NGX_Feature InFeatureID, |
268 | 269 | NVSDK_NGX_Parameter* InParameters, NVSDK_NGX_Handle** OutHandle) |
269 | 270 | { |
270 | | - auto* provider = getProvider(); |
271 | | - |
272 | | - if (!provider) |
273 | | - return NVSDK_NGX_Result_Fail; |
274 | | - |
275 | | - if (!OutHandle) |
276 | | - return NVSDK_NGX_Result_FAIL_InvalidParameter; |
277 | | - |
278 | | - auto pending = _handles.Prepare({ lastIdCreated++ + NVNGX_PROVIDER_ID_OFFSET }); |
279 | | - auto* proxyHandle = &pending->value; |
280 | | - *OutHandle = nullptr; |
281 | | - |
282 | | - auto result = provider->D3D12_CreateFeature(InCmdList, InFeatureID, InParameters, &proxyHandle->nativeHandle); |
283 | | - |
284 | | - if (result == NVSDK_NGX_Result_Success) |
285 | | - *OutHandle = reinterpret_cast<NVSDK_NGX_Handle*>(_handles.Publish(pending)); |
286 | | - |
287 | | - // LOG_TRACE("Handle given to the game: {:X}", (uint64_t) *OutHandle); |
288 | | - |
289 | | - return result; |
| 271 | + return CreateProviderHandle(_handles, OutHandle, Nvngx_FG_Handle { lastIdCreated++ + NVNGX_PROVIDER_ID_OFFSET }, |
| 272 | + NVSDK_NGX_Result_Success, NVSDK_NGX_Result_FAIL_InvalidParameter, NVSDK_NGX_Result_Fail, |
| 273 | + [&](Nvngx_FG_Handle& handle) |
| 274 | + { |
| 275 | + auto* provider = getProvider(); |
| 276 | + if (!provider) |
| 277 | + return NVSDK_NGX_Result_Fail; |
| 278 | + return provider->D3D12_CreateFeature(InCmdList, InFeatureID, InParameters, |
| 279 | + &handle.nativeHandle); |
| 280 | + }); |
290 | 281 | } |
291 | 282 |
|
292 | 283 | NVSDK_NGX_Result Nvngx_FG::D3D12_ReleaseFeature(NVSDK_NGX_Handle* InHandle) |
@@ -476,51 +467,32 @@ NVSDK_NGX_Result Nvngx_FG::VULKAN_GetScratchBufferSize(NVSDK_NGX_Feature InFeatu |
476 | 467 | NVSDK_NGX_Result Nvngx_FG::VULKAN_CreateFeature(VkCommandBuffer InCmdBuffer, NVSDK_NGX_Feature InFeatureID, |
477 | 468 | NVSDK_NGX_Parameter* InParameters, NVSDK_NGX_Handle** OutHandle) |
478 | 469 | { |
479 | | - auto* provider = getProvider(); |
480 | | - |
481 | | - if (!provider) |
482 | | - return NVSDK_NGX_Result_Fail; |
483 | | - |
484 | | - if (!OutHandle) |
485 | | - return NVSDK_NGX_Result_FAIL_InvalidParameter; |
486 | | - |
487 | | - auto pending = _handles.Prepare({ lastIdCreated++ + NVNGX_PROVIDER_ID_OFFSET }); |
488 | | - auto* proxyHandle = &pending->value; |
489 | | - *OutHandle = nullptr; |
490 | | - auto result = provider->VULKAN_CreateFeature(InCmdBuffer, InFeatureID, InParameters, &proxyHandle->nativeHandle); |
491 | | - |
492 | | - if (result == NVSDK_NGX_Result_Success) |
493 | | - *OutHandle = reinterpret_cast<NVSDK_NGX_Handle*>(_handles.Publish(pending)); |
494 | | - |
495 | | - // LOG_TRACE("Handle given to the game: {:X}", (uint64_t) *OutHandle); |
496 | | - |
497 | | - return result; |
| 470 | + return CreateProviderHandle(_handles, OutHandle, Nvngx_FG_Handle { lastIdCreated++ + NVNGX_PROVIDER_ID_OFFSET }, |
| 471 | + NVSDK_NGX_Result_Success, NVSDK_NGX_Result_FAIL_InvalidParameter, NVSDK_NGX_Result_Fail, |
| 472 | + [&](Nvngx_FG_Handle& handle) |
| 473 | + { |
| 474 | + auto* provider = getProvider(); |
| 475 | + if (!provider) |
| 476 | + return NVSDK_NGX_Result_Fail; |
| 477 | + return provider->VULKAN_CreateFeature(InCmdBuffer, InFeatureID, InParameters, |
| 478 | + &handle.nativeHandle); |
| 479 | + }); |
498 | 480 | } |
499 | 481 |
|
500 | 482 | NVSDK_NGX_Result Nvngx_FG::VULKAN_CreateFeature1(VkDevice InDevice, VkCommandBuffer InCmdList, |
501 | 483 | NVSDK_NGX_Feature InFeatureID, NVSDK_NGX_Parameter* InParameters, |
502 | 484 | NVSDK_NGX_Handle** OutHandle) |
503 | 485 | { |
504 | | - auto* provider = getProvider(); |
505 | | - |
506 | | - if (!provider) |
507 | | - return NVSDK_NGX_Result_Fail; |
508 | | - |
509 | | - if (!OutHandle) |
510 | | - return NVSDK_NGX_Result_FAIL_InvalidParameter; |
511 | | - |
512 | | - auto pending = _handles.Prepare({ lastIdCreated++ + NVNGX_PROVIDER_ID_OFFSET }); |
513 | | - auto* proxyHandle = &pending->value; |
514 | | - *OutHandle = nullptr; |
515 | | - auto result = |
516 | | - provider->VULKAN_CreateFeature1(InDevice, InCmdList, InFeatureID, InParameters, &proxyHandle->nativeHandle); |
517 | | - |
518 | | - if (result == NVSDK_NGX_Result_Success) |
519 | | - *OutHandle = reinterpret_cast<NVSDK_NGX_Handle*>(_handles.Publish(pending)); |
520 | | - |
521 | | - // LOG_TRACE("Handle given to the game: {:X}", (uint64_t) *OutHandle); |
522 | | - |
523 | | - return result; |
| 486 | + return CreateProviderHandle(_handles, OutHandle, Nvngx_FG_Handle { lastIdCreated++ + NVNGX_PROVIDER_ID_OFFSET }, |
| 487 | + NVSDK_NGX_Result_Success, NVSDK_NGX_Result_FAIL_InvalidParameter, NVSDK_NGX_Result_Fail, |
| 488 | + [&](Nvngx_FG_Handle& handle) |
| 489 | + { |
| 490 | + auto* provider = getProvider(); |
| 491 | + if (!provider) |
| 492 | + return NVSDK_NGX_Result_Fail; |
| 493 | + return provider->VULKAN_CreateFeature1(InDevice, InCmdList, InFeatureID, |
| 494 | + InParameters, &handle.nativeHandle); |
| 495 | + }); |
524 | 496 | } |
525 | 497 |
|
526 | 498 | NVSDK_NGX_Result Nvngx_FG::VULKAN_ReleaseFeature(NVSDK_NGX_Handle* InHandle) |
|
0 commit comments