@@ -413,7 +413,7 @@ ffxReturnCode_t ffxConfigure_Dx12FG(ffxContext* context, ffxConfigureDescHeader*
413
413
else if (next->type == FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_REGISTERUIRESOURCE_DX12)
414
414
{
415
415
auto crDesc = (ffxConfigureDescFrameGenerationSwapChainRegisterUiResourceDX12*) next;
416
- LOG_DEBUG (" UiResource found: {:X}" , (size_t ) crDesc->uiResource .resource );
416
+ LOG_DEBUG (" UiResource found 1 : {:X}" , (size_t ) crDesc->uiResource .resource );
417
417
418
418
if (fg->FrameGenerationContext () != nullptr && crDesc->uiResource .resource != nullptr )
419
419
{
@@ -478,9 +478,53 @@ ffxReturnCode_t ffxConfigure_Dx12FG(ffxContext* context, ffxConfigureDescHeader*
478
478
479
479
if (cDesc->presentCallback != nullptr )
480
480
{
481
+ LOG_DEBUG (" presentCallback exist" );
482
+
481
483
_presentCallback = cDesc->presentCallback ;
482
484
_presentCallbackUserContext = cDesc->presentCallbackUserContext ;
483
485
_presentCallbackFrameId = cDesc->frameID ;
486
+
487
+ // Probably because of queue can't capture at correct state
488
+ // if (fg->GetResource(FG_ResourceType::HudlessColor) == nullptr)
489
+ // {
490
+ // LOG_DEBUG("Trying to copy current swapchain buffer as hudless");
491
+
492
+ // IDXGISwapChain3* sc = (IDXGISwapChain3*) State::Instance().currentFGSwapchain;
493
+ // auto scIndex = sc->GetCurrentBackBufferIndex();
494
+
495
+ // ID3D12Resource* currentBuffer = nullptr;
496
+ // auto hr = sc->GetBuffer(scIndex, IID_PPV_ARGS(¤tBuffer));
497
+ // if (hr != S_OK)
498
+ // {
499
+ // LOG_ERROR("sc->GetBuffer error: {:X}", (UINT) hr);
500
+ // }
501
+
502
+ // auto cmdList = fg->GetUICommandList();
503
+
504
+ // auto hDesc = currentBuffer->GetDesc();
505
+ // Dx12Resource hudless {};
506
+ // hudless.cmdList = cmdList;
507
+ // hudless.height = hDesc.Height;
508
+ // hudless.resource = currentBuffer;
509
+ // hudless.state = D3D12_RESOURCE_STATE_PRESENT;
510
+ // hudless.type = FG_ResourceType::HudlessColor;
511
+ // hudless.validity = FG_ResourceValidity::ValidNow;
512
+ // hudless.width = hDesc.Width;
513
+ // fg->SetResource(&hudless);
514
+
515
+ // hr = cmdList->Close();
516
+ // if (hr == S_OK)
517
+ // {
518
+ // ID3D12CommandList* cmdLists[1] = { cmdList };
519
+ // fg->GetCommandQueue()->ExecuteCommandLists(1, cmdLists);
520
+ // }
521
+ // else
522
+ // {
523
+ // LOG_ERROR("cmdList->Close() error: {:X}", (UINT) hr);
524
+ // }
525
+
526
+ // currentBuffer->Release();
527
+ // }
484
528
}
485
529
486
530
if (cDesc->allowAsyncWorkloads || cDesc->onlyPresentGenerated )
@@ -537,7 +581,7 @@ ffxReturnCode_t ffxConfigure_Dx12FG(ffxContext* context, ffxConfigureDescHeader*
537
581
if (next->type == FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_REGISTERUIRESOURCE_DX12)
538
582
{
539
583
auto crDesc = (ffxConfigureDescFrameGenerationSwapChainRegisterUiResourceDX12*) next;
540
- LOG_DEBUG (" UiResource found: {:X}" , (size_t ) crDesc->uiResource .resource );
584
+ LOG_DEBUG (" UiResource found 2 : {:X}" , (size_t ) crDesc->uiResource .resource );
541
585
542
586
if (fg->FrameGenerationContext () != nullptr && crDesc->uiResource .resource != nullptr )
543
587
{
@@ -590,7 +634,7 @@ ffxReturnCode_t ffxConfigure_Dx12FG(ffxContext* context, ffxConfigureDescHeader*
590
634
else if (desc->type == FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_REGISTERUIRESOURCE_DX12)
591
635
{
592
636
auto crDesc = (ffxConfigureDescFrameGenerationSwapChainRegisterUiResourceDX12*) desc;
593
- LOG_DEBUG (" UiResource found: {:X}" , (size_t ) crDesc->uiResource .resource );
637
+ LOG_DEBUG (" UiResource found 3 : {:X}" , (size_t ) crDesc->uiResource .resource );
594
638
595
639
if (fg->FrameGenerationContext () != nullptr && crDesc->uiResource .resource != nullptr )
596
640
{
@@ -704,24 +748,16 @@ ffxReturnCode_t ffxQuery_Dx12FG(ffxContext* context, ffxQueryDescHeader* desc)
704
748
}
705
749
else if (desc->type == FFX_API_QUERY_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_INTERPOLATIONTEXTURE_DX12)
706
750
{
707
- // auto fg = State::Instance().currentFG;
708
- // if (fg != nullptr)
709
- // {
710
- // IDXGISwapChain3* sc = (IDXGISwapChain3*) State::Instance().currentFGSwapchain;
711
- // auto scIndex = sc->GetCurrentBackBufferIndex();
712
-
713
- // ID3D12Resource* currentBuffer = nullptr;
714
- // sc->GetBuffer(scIndex, IID_PPV_ARGS(¤tBuffer));
715
- // currentBuffer->SetName(std::format(L"currentBuffer[{}]", scIndex).c_str());
716
-
717
- // auto fIndex = fg->GetIndex();
718
- // if (_ui[fIndex] == nullptr)
719
- // {
720
- // CreateBufferResource(_device, currentBuffer, D3D12_RESOURCE_STATE_RENDER_TARGET, &_ui[fIndex]);
751
+ auto fg = State::Instance ().currentFG ;
752
+ if (fg != nullptr )
753
+ {
754
+ auto cDesc = (ffxQueryDescFrameGenerationSwapChainInterpolationTextureDX12*) desc;
755
+ auto fIndex = fg->GetIndex ();
721
756
722
- // _ui[fIndex]->SetName(std::format(L"_ui[{}]", fIndex).c_str());
723
- // }
724
- // }
757
+ if (_uiRes[fIndex ].resource != nullptr )
758
+ *cDesc->pOutTexture =
759
+ ffxApiGetResourceDX12 (_uiRes[fIndex ].resource , GetFfxApiState (_uiRes[fIndex ].state ));
760
+ }
725
761
726
762
return FFX_API_RETURN_OK;
727
763
}
0 commit comments