Skip to content

Commit 1c52403

Browse files
committed
Return UI when queried
1 parent ad4e1cd commit 1c52403

File tree

1 file changed

+56
-20
lines changed

1 file changed

+56
-20
lines changed

OptiScaler/inputs/FG/FfxApi_Dx12_FG.cpp

Lines changed: 56 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ ffxReturnCode_t ffxConfigure_Dx12FG(ffxContext* context, ffxConfigureDescHeader*
413413
else if (next->type == FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_REGISTERUIRESOURCE_DX12)
414414
{
415415
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);
417417

418418
if (fg->FrameGenerationContext() != nullptr && crDesc->uiResource.resource != nullptr)
419419
{
@@ -478,9 +478,53 @@ ffxReturnCode_t ffxConfigure_Dx12FG(ffxContext* context, ffxConfigureDescHeader*
478478

479479
if (cDesc->presentCallback != nullptr)
480480
{
481+
LOG_DEBUG("presentCallback exist");
482+
481483
_presentCallback = cDesc->presentCallback;
482484
_presentCallbackUserContext = cDesc->presentCallbackUserContext;
483485
_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(&currentBuffer));
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+
//}
484528
}
485529

486530
if (cDesc->allowAsyncWorkloads || cDesc->onlyPresentGenerated)
@@ -537,7 +581,7 @@ ffxReturnCode_t ffxConfigure_Dx12FG(ffxContext* context, ffxConfigureDescHeader*
537581
if (next->type == FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_REGISTERUIRESOURCE_DX12)
538582
{
539583
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);
541585

542586
if (fg->FrameGenerationContext() != nullptr && crDesc->uiResource.resource != nullptr)
543587
{
@@ -590,7 +634,7 @@ ffxReturnCode_t ffxConfigure_Dx12FG(ffxContext* context, ffxConfigureDescHeader*
590634
else if (desc->type == FFX_API_CONFIGURE_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_REGISTERUIRESOURCE_DX12)
591635
{
592636
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);
594638

595639
if (fg->FrameGenerationContext() != nullptr && crDesc->uiResource.resource != nullptr)
596640
{
@@ -704,24 +748,16 @@ ffxReturnCode_t ffxQuery_Dx12FG(ffxContext* context, ffxQueryDescHeader* desc)
704748
}
705749
else if (desc->type == FFX_API_QUERY_DESC_TYPE_FRAMEGENERATIONSWAPCHAIN_INTERPOLATIONTEXTURE_DX12)
706750
{
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(&currentBuffer));
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();
721756

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+
}
725761

726762
return FFX_API_RETURN_OK;
727763
}

0 commit comments

Comments
 (0)