Skip to content

Commit 60823ed

Browse files
HnMaterial: group shader variables into a struct
1 parent 47cbb7c commit 60823ed

File tree

2 files changed

+24
-22
lines changed

2 files changed

+24
-22
lines changed

Hydrogent/interface/HnMaterial.hpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,28 +87,28 @@ class HnMaterial final : public pxr::HdMaterial
8787
IShaderResourceBinding* GetSRB() const { return m_SRB; }
8888
IShaderResourceBinding* GetSRB(Uint32 PrimitiveAttribsOffset) const
8989
{
90-
VERIFY_EXPR(m_PrimitiveAttribsVar != nullptr);
91-
m_PrimitiveAttribsVar->SetBufferOffset(PrimitiveAttribsOffset);
90+
VERIFY_EXPR(m_SRBVars.PrimitiveAttribs != nullptr);
91+
m_SRBVars.PrimitiveAttribs->SetBufferOffset(PrimitiveAttribsOffset);
9292
return m_SRB;
9393
}
9494
void ApplyMaterialAttribsBufferOffset(Uint32& CurrentOffset) const
9595
{
96-
VERIFY_EXPR(m_MaterialAttribsVar != nullptr);
96+
VERIFY_EXPR(m_SRBVars.MaterialAttribs != nullptr);
9797
VERIFY_EXPR(m_PBRMaterialAttribsBufferOffset != ~0u);
9898
if (CurrentOffset != m_PBRMaterialAttribsBufferOffset)
9999
{
100-
m_MaterialAttribsVar->SetBufferOffset(m_PBRMaterialAttribsBufferOffset);
100+
m_SRBVars.MaterialAttribs->SetBufferOffset(m_PBRMaterialAttribsBufferOffset);
101101
CurrentOffset = m_PBRMaterialAttribsBufferOffset;
102102
}
103103
}
104104
void SetJointsBufferOffset(Uint32 Offset) const
105105
{
106-
if (m_JointTransformsVar == nullptr)
106+
if (m_SRBVars.JointTransforms == nullptr)
107107
{
108108
UNEXPECTED("Joint transforms variable is not initialized, which indicates that skinning is not enabled in the renderer.");
109109
return;
110110
}
111-
m_JointTransformsVar->SetBufferOffset(Offset);
111+
m_SRBVars.JointTransforms->SetBufferOffset(Offset);
112112
}
113113

114114
const GLTF::Material& GetMaterialData() const { return m_MaterialData; }
@@ -176,9 +176,13 @@ class HnMaterial final : public pxr::HdMaterial
176176
std::unordered_map<pxr::TfToken, HnTextureRegistry::TextureHandleSharedPtr, pxr::TfToken::HashFunctor> m_Textures;
177177

178178
RefCntAutoPtr<IShaderResourceBinding> m_SRB;
179-
IShaderResourceVariable* m_PrimitiveAttribsVar = nullptr; // cbPrimitiveAttribs
180-
IShaderResourceVariable* m_MaterialAttribsVar = nullptr; // cbMaterialAttribs
181-
IShaderResourceVariable* m_JointTransformsVar = nullptr; // cbJointTransforms
179+
struct SRBVariables
180+
{
181+
IShaderResourceVariable* PrimitiveAttribs = nullptr; // cbPrimitiveAttribs
182+
IShaderResourceVariable* MaterialAttribs = nullptr; // cbMaterialAttribs
183+
IShaderResourceVariable* JointTransforms = nullptr; // cbJointTransforms
184+
};
185+
SRBVariables m_SRBVars;
182186

183187
GLTF::Material m_MaterialData;
184188

Hydrogent/src/HnMaterial.cpp

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -995,9 +995,7 @@ bool HnMaterial::UpdateSRB(HnRenderDelegate& RenderDelegate)
995995
if (m_ResourceCacheVersion != ResourceCacheVersion)
996996
{
997997
m_SRB.Release();
998-
m_PrimitiveAttribsVar = nullptr;
999-
m_MaterialAttribsVar = nullptr;
1000-
m_JointTransformsVar = nullptr;
998+
m_SRBVars = {};
1001999
m_ResourceCacheVersion = ResourceCacheVersion;
10021000
}
10031001

@@ -1305,28 +1303,28 @@ bool HnMaterial::UpdateSRB(HnRenderDelegate& RenderDelegate)
13051303

13061304
if (m_SRB)
13071305
{
1308-
m_MaterialAttribsVar = m_SRB->GetVariableByName(SHADER_TYPE_PIXEL, "cbMaterialAttribs");
1309-
VERIFY_EXPR(m_MaterialAttribsVar != nullptr);
1310-
if (m_MaterialAttribsVar->Get() == nullptr)
1306+
m_SRBVars.MaterialAttribs = m_SRB->GetVariableByName(SHADER_TYPE_PIXEL, "cbMaterialAttribs");
1307+
VERIFY_EXPR(m_SRBVars.MaterialAttribs != nullptr);
1308+
if (m_SRBVars.MaterialAttribs->Get() == nullptr)
13111309
{
13121310
IBuffer* pMaterialAttribsBuffer = SRBCache->GetMaterialAttribsBuffer();
13131311
// Bind maximum possible buffer range
13141312
const Uint32 PBRMaterialAttribsMaxSize = SRBCache->GetMaxAttribsDataSize();
1315-
m_MaterialAttribsVar->SetBufferRange(pMaterialAttribsBuffer, 0, PBRMaterialAttribsMaxSize);
1313+
m_SRBVars.MaterialAttribs->SetBufferRange(pMaterialAttribsBuffer, 0, PBRMaterialAttribsMaxSize);
13161314
}
13171315

1318-
m_JointTransformsVar = m_SRB->GetVariableByName(SHADER_TYPE_VERTEX, UsdRenderer.GetJointTransformsVarName());
1319-
VERIFY_EXPR(m_JointTransformsVar != nullptr || RendererSettings.MaxJointCount == 0);
1316+
m_SRBVars.JointTransforms = m_SRB->GetVariableByName(SHADER_TYPE_VERTEX, UsdRenderer.GetJointTransformsVarName());
1317+
VERIFY_EXPR(m_SRBVars.JointTransforms != nullptr || RendererSettings.MaxJointCount == 0);
13201318

13211319
const Uint32 PBRPrimitiveAttribsSize = UsdRenderer.GetPBRPrimitiveAttribsSize(PBR_Renderer::PSO_FLAG_ALL);
13221320
const Uint32 PrimitiveArraySize = std::max(UsdRenderer.GetSettings().PrimitiveArraySize, 1u);
13231321
m_PBRPrimitiveAttribsBufferRange = PBRPrimitiveAttribsSize * PrimitiveArraySize;
13241322

1325-
m_PrimitiveAttribsVar = m_SRB->GetVariableByName(SHADER_TYPE_PIXEL, "cbPrimitiveAttribs");
1326-
VERIFY_EXPR(m_PrimitiveAttribsVar != nullptr);
1327-
if (m_PrimitiveAttribsVar->Get() == nullptr)
1323+
m_SRBVars.PrimitiveAttribs = m_SRB->GetVariableByName(SHADER_TYPE_PIXEL, "cbPrimitiveAttribs");
1324+
VERIFY_EXPR(m_SRBVars.PrimitiveAttribs != nullptr);
1325+
if (m_SRBVars.PrimitiveAttribs->Get() == nullptr)
13281326
{
1329-
m_PrimitiveAttribsVar->SetBufferRange(UsdRenderer.GetPBRPrimitiveAttribsCB(), 0, m_PBRPrimitiveAttribsBufferRange);
1327+
m_SRBVars.PrimitiveAttribs->SetBufferRange(UsdRenderer.GetPBRPrimitiveAttribsCB(), 0, m_PBRPrimitiveAttribsBufferRange);
13301328
}
13311329
}
13321330
else

0 commit comments

Comments
 (0)