| 664 | } |
| 665 | |
| 666 | void HnRenderPass::UpdateDrawListGPUResources(RenderState& State) |
| 667 | { |
| 668 | if (m_DrawListItemsDirtyFlags & DRAW_LIST_ITEM_DIRTY_FLAG_PSO) |
| 669 | { |
| 670 | m_PendingPSOs.clear(); |
| 671 | } |
| 672 | |
| 673 | if (State.RenderParam.GetAsyncShaderCompilation() && |
| 674 | m_FallbackPSO == nullptr && |
| 675 | (m_Params.UsdPsoFlags & USD_Renderer::USD_PSO_FLAG_ENABLE_COLOR_OUTPUT) != 0 && |
| 676 | m_RenderMode == HN_RENDER_MODE_SOLID) |
| 677 | { |
| 678 | const PBR_Renderer::PSO_FLAGS FallbackPSOFlags = |
| 679 | (m_RenderMode == HN_RENDER_MODE_SOLID ? |
| 680 | PBR_Renderer::PSO_FLAG_COMPUTE_MOTION_VECTORS : |
| 681 | PBR_Renderer::PSO_FLAG_UNSHADED) | |
| 682 | static_cast<PBR_Renderer::PSO_FLAGS>(m_Params.UsdPsoFlags); |
| 683 | |
| 684 | const PBR_Renderer::PSOKey FallbackPSOKey{ |
| 685 | FallbackPSOFlags, |
| 686 | PBR_Renderer::ALPHA_MODE_OPAQUE, |
| 687 | CULL_MODE_NONE, |
| 688 | PBR_Renderer::DebugViewType::None, |
| 689 | PBR_Renderer::LoadingAnimationMode::Always, |
| 690 | }; |
| 691 | m_FallbackPSO = State.GePsoCache().Get(FallbackPSOKey, PBR_Renderer::PsoCacheAccessor::GET_FLAG_CREATE_IF_NULL); |
| 692 | } |
| 693 | |
| 694 | if (State.RenderParam.GetFrameNumber() <= 1) |
| 695 | { |
| 696 | // Do not initialize draw items on the first frame to allow |
| 697 | // post-processing shaders to be compiled first. |
| 698 | return; |
| 699 | } |
| 700 | |
| 701 | struct DrawListItemRenderState |
| 702 | { |
| 703 | const DrawListItem& Item; |
| 704 | mutable size_t Hash = 0; |
| 705 | |
| 706 | struct Hasher |
| 707 | { |
| 708 | size_t operator()(const DrawListItemRenderState& State) const |
| 709 | { |
| 710 | if (State.Hash == 0) |
| 711 | { |
| 712 | State.Hash = ComputeHash(State.Item.pPSO, |
| 713 | State.Item.IndexBuffer, |
| 714 | State.Item.NumVertexBuffers, |
| 715 | State.Item.Material.GetSRB()); |
| 716 | for (Uint32 i = 0; i < State.Item.NumVertexBuffers; ++i) |
| 717 | { |
| 718 | HashCombine(State.Hash, State.Item.VertexBuffers[i]); |
| 719 | } |
| 720 | } |
| 721 | return State.Hash; |
| 722 | } |
| 723 | }; |
nothing calls this directly
no test coverage detected