@@ -521,8 +521,9 @@ HnRenderPass::EXECUTE_RESULT HnRenderPass::Execute(HnRenderPassState& RPState, c
521521 const HnMesh::Components::Transform& Transform = std::get<0 >(MeshAttribs);
522522 const float4& DisplayColor = std::get<1 >(MeshAttribs).Val ;
523523 const bool MeshVisibile = std::get<2 >(MeshAttribs).Val ;
524+ const PBR_Renderer::PSO_FLAGS PSOFlags = m_UseFallbackPSO ? GetFallbackPSOFlags () : ListItem.PSOFlags ;
524525
525- const HnMesh::Components::Skinning* pSkinningData = ((ListItem. PSOFlags & PBR_Renderer::PSO_FLAG_USE_JOINTS) && pJointsCB != nullptr ) ?
526+ const HnMesh::Components::Skinning* pSkinningData = ((PSOFlags & PBR_Renderer::PSO_FLAG_USE_JOINTS) && pJointsCB != nullptr ) ?
526527 &MeshAttribsView.get <const HnMesh::Components::Skinning>(ListItem.MeshEntity ) :
527528 nullptr ;
528529
@@ -626,13 +627,13 @@ HnRenderPass::EXECUTE_RESULT HnRenderPass::Execute(HnRenderPassState& RPState, c
626627
627628 // Write new joint transforms
628629 const pxr::VtMatrix4fArray* PrevXforms = ListItem.PrevXforms != nullptr ? ListItem.PrevXforms : pSkinningData->Xforms ;
629- USD_Renderer::WriteSkinningDataAttribs WriteSkinningAttribs{ListItem. PSOFlags , JointCount};
630+ USD_Renderer::WriteSkinningDataAttribs WriteSkinningAttribs{PSOFlags, JointCount};
630631 WriteSkinningAttribs.JointMatrices = reinterpret_cast <const float4x4*>(pSkinningData->Xforms ->data ());
631632 WriteSkinningAttribs.PrevJointMatrices = reinterpret_cast <const float4x4*>(PrevXforms->data ());
632633
633634 void * pDataEnd = State.USDRenderer .WriteSkinningData (pJointsData, WriteSkinningAttribs);
634635 const Uint32 JointsDataSize = static_cast <Uint32>(reinterpret_cast <Uint8*>(pDataEnd) - reinterpret_cast <Uint8*>(pJointsData));
635- VERIFY_EXPR (JointsDataSize == State.USDRenderer .GetJointsDataSize (JointCount, ListItem. PSOFlags ));
636+ VERIFY_EXPR (JointsDataSize == State.USDRenderer .GetJointsDataSize (JointCount, PSOFlags));
636637 CurrJointsDataSize = AlignUp (JointsBufferOffset + JointsDataSize, JointsBufferOffsetAlignment);
637638
638639 XformsHash = pSkinningData->XformsHash ;
@@ -665,7 +666,7 @@ HnRenderPass::EXECUTE_RESULT HnRenderPass::Execute(HnRenderPassState& RPState, c
665666 0 ;
666667
667668 GLTF_PBR_Renderer::PBRPrimitiveShaderAttribsData AttribsData{
668- ListItem. PSOFlags ,
669+ PSOFlags,
669670 &Transform.Matrix ,
670671 &ListItem.PrevTransform ,
671672 JointCount,
@@ -674,23 +675,13 @@ HnRenderPass::EXECUTE_RESULT HnRenderPass::Execute(HnRenderPassState& RPState, c
674675 &Transform.PosBias ,
675676 pSkinningData ? reinterpret_cast <const float4x4*>(pSkinningData->GeomBindXform .Data ()) : nullptr ,
676677 pSkinningData ? reinterpret_cast <const float4x4*>(pSkinningData->GeomBindXform .Data ()) : nullptr ,
677- nullptr , // CustomData
678- 0 , // CustomDataSize
678+ &ListItem. MeshUID , // CustomData
679+ sizeof (ListItem. MeshUID ), // CustomDataSize
679680 };
680681 GLTF_PBR_Renderer::WritePBRPrimitiveShaderAttribs (pCurrPrimitive, AttribsData,
681682 /* TransposeMatrices = */ !PackMatrixRowMajor,
682683 State.RendererSettings .UseSkinPreTransform );
683684
684- // TODO:
685- #if 0
686- HLSL::PBRMaterialBasicAttribs* pDstMaterialBasicAttribs = nullptr;
687-
688- pDstMaterialBasicAttribs->BaseColorFactor = MaterialData.Attribs.BaseColorFactor * DisplayColor;
689- // Write Mesh ID to material custom data to make sure that selection works for fallback PSO.
690- // Using PBRPrimitiveShaderAttribs's CustomData will not work as fallback PSO uses different flags.
691- pDstMaterialBasicAttribs->CustomData.x = ListItem.MeshUID;
692- #endif
693-
694685 ListItem.PrevTransform = Transform.Matrix ;
695686
696687 m_PendingDrawItems.push_back (PendingDrawItem{
@@ -828,6 +819,14 @@ void HnRenderPass::UpdateDrawList(const pxr::TfTokenVector& RenderTags)
828819 m_GlobalAttribVersions.GeomSubsetDrawItems = GeomSubsetDrawItemsVersion;
829820}
830821
822+ PBR_Renderer::PSO_FLAGS HnRenderPass::GetFallbackPSOFlags () const
823+ {
824+ return (m_RenderMode == HN_RENDER_MODE_SOLID ?
825+ PBR_Renderer::PSO_FLAG_COMPUTE_MOTION_VECTORS :
826+ PBR_Renderer::PSO_FLAG_UNSHADED) |
827+ static_cast <PBR_Renderer::PSO_FLAGS>(m_Params.UsdPsoFlags );
828+ }
829+
831830void HnRenderPass::UpdateDrawListGPUResources (RenderState& State)
832831{
833832 if (m_DrawListItemsDirtyFlags & DRAW_LIST_ITEM_DIRTY_FLAG_PSO)
@@ -839,14 +838,8 @@ void HnRenderPass::UpdateDrawListGPUResources(RenderState& State)
839838 (m_Params.UsdPsoFlags & USD_Renderer::USD_PSO_FLAG_ENABLE_COLOR_OUTPUT) != 0 &&
840839 m_RenderMode == HN_RENDER_MODE_SOLID)
841840 {
842- const PBR_Renderer::PSO_FLAGS FallbackPSOFlags =
843- (m_RenderMode == HN_RENDER_MODE_SOLID ?
844- PBR_Renderer::PSO_FLAG_COMPUTE_MOTION_VECTORS :
845- PBR_Renderer::PSO_FLAG_UNSHADED) |
846- static_cast <PBR_Renderer::PSO_FLAGS>(m_Params.UsdPsoFlags );
847-
848841 const PBR_Renderer::PSOKey FallbackPSOKey{
849- FallbackPSOFlags ,
842+ GetFallbackPSOFlags () ,
850843 PBR_Renderer::ALPHA_MODE_OPAQUE,
851844 CULL_MODE_NONE,
852845 PBR_Renderer::DebugViewType::None,
0 commit comments