Skip to content

Commit 86bd62a

Browse files
Hydrogent: pass mesh UID through primitive custom data
1 parent b90a562 commit 86bd62a

File tree

3 files changed

+19
-24
lines changed

3 files changed

+19
-24
lines changed

Hydrogent/interface/HnRenderPass.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ class HnRenderPass final : public pxr::HdRenderPass
197197

198198
GraphicsPipelineDesc GetGraphicsDesc(const HnRenderPassState& RPState, bool UseStripTopology) const;
199199

200+
PBR_Renderer::PSO_FLAGS GetFallbackPSOFlags() const;
201+
200202
private:
201203
HnRenderPassParams m_Params;
202204

Hydrogent/src/HnRenderPass.cpp

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
831830
void 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,

PBR/src/USD_Renderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ USD_Renderer::CreateInfo::PSMainSourceInfo USD_Renderer::GetUsdPbrPSMainSource(U
9393
float4 BaseColor = float4(0.0, 0.0, 0.0, 0.0);
9494
float2 MotionVector = float2(0.0, 0.0);
9595
#else
96-
MeshId = PRIMITIVE.Material.Basic.CustomData.x;
96+
MeshId = PRIMITIVE.CustomData.x;
9797
Normal = Shading.BaseLayer.Normal.xyz;
9898
MaterialData = float2(Shading.BaseLayer.Srf.PerceptualRoughness, Shading.BaseLayer.Metallic);
9999
IBL = GetBaseLayerSpecularIBL(Shading, SrfLighting);

0 commit comments

Comments
 (0)