MCPcopy Create free account
hub / github.com/DiligentGraphics/DiligentFX / Execute

Method Execute

Hydrogent/src/Tasks/HnBeginFrameTask.cpp:671–724  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

669}
670
671void HnBeginFrameTask::Execute(pxr::HdTaskContext* TaskCtx)
672{
673 if (m_RenderIndex == nullptr)
674 {
675 UNEXPECTED("Render index is null. This likely indicates that Prepare() has not been called.");
676 return;
677 }
678
679 HnRenderDelegate* RenderDelegate = static_cast<HnRenderDelegate*>(m_RenderIndex->GetRenderDelegate());
680 IDeviceContext* pCtx = RenderDelegate->GetDeviceContext();
681
682 // NB: we can't move the buffer update to Prepare() because we need TAA parameters
683 // that are set by HnPostProcessTask::Prepare().
684 if (IBuffer* pFrameAttribsCB = RenderDelegate->GetFrameAttribsCB())
685 {
686 float2 JitterOffsets{0, 0};
687 bool UseTAA = false;
688 // Set by HnPostProcessTask::Prepare()
689 GetTaskContextData(TaskCtx, HnRenderResourceTokens->taaJitterOffsets, JitterOffsets);
690 GetTaskContextData(TaskCtx, HnRenderResourceTokens->useTaa, UseTAA);
691
692 bool FallBackPsoInUse = false;
693 if (GetTaskContextData(TaskCtx, HnRenderResourceTokens->fallBackPsoInUse, FallBackPsoInUse, /*Required = */ false))
694 {
695 if (FallBackPsoInUse)
696 {
697 if (m_FallBackPsoUseStartTime < 0)
698 {
699 // Fallback PSO is in use for the first time
700 m_FallBackPsoUseStartTime = m_CurrFrameTime;
701 m_FallBackPsoUseEndTime = -1;
702 }
703 }
704 else if (m_FallBackPsoUseEndTime < 0)
705 {
706 // First frame after fallback PSO was used
707 m_FallBackPsoUseEndTime = m_CurrFrameTime;
708 }
709 }
710 // Reset the fallBackPsoInUse flag.
711 // HnRenderRprimsTask::Execute sets it to true if the fallback PSO was used.
712 (*TaskCtx)[HnRenderResourceTokens->fallBackPsoInUse] = pxr::VtValue{false};
713
714 bool CameraTransformDirty = false;
715 UpdateFrameConstants(pCtx, pFrameAttribsCB, UseTAA, JitterOffsets, CameraTransformDirty);
716 (*TaskCtx)[HnRenderResourceTokens->frameShaderAttribs] = pxr::VtValue{reinterpret_cast<HLSL::PBRFrameAttribs*>(m_FrameAttribsData.data())};
717 // Will be used by HnPostProcessTask::Execute()
718 (*TaskCtx)[HnRenderResourceTokens->cameraTransformDirty] = pxr::VtValue{CameraTransformDirty};
719 }
720 else
721 {
722 UNEXPECTED("Frame attribs constant buffer is null");
723 }
724}
725
726} // namespace USD
727

Callers

nothing calls this directly

Calls 2

GetDeviceContextMethod · 0.80
GetFrameAttribsCBMethod · 0.80

Tested by

no test coverage detected