Skip to content

Commit 7c9a709

Browse files
authored
Deterministic code generation (#1376)
These changes make code generation deterministic by changing std::set to std::vector when removing unused nodes
1 parent d7b6129 commit 7c9a709

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

source/MaterialXGenShader/ShaderGraph.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,8 @@ void ShaderGraph::optimize(GenContext& context)
10731073

10741074
if (numEdits > 0)
10751075
{
1076-
std::set<ShaderNode*> usedNodes;
1076+
std::set<ShaderNode*> usedNodesSet;
1077+
std::vector<ShaderNode*> usedNodesVec;
10771078

10781079
// Traverse the graph to find nodes still in use
10791080
for (ShaderGraphOutputSocket* outputSocket : getOutputSockets())
@@ -1084,15 +1085,20 @@ void ShaderGraph::optimize(GenContext& context)
10841085
{
10851086
for (ShaderGraphEdge edge : ShaderGraph::traverseUpstream(upstreamPort))
10861087
{
1087-
usedNodes.insert(edge.upstream->getNode());
1088+
ShaderNode* node = edge.upstream->getNode();
1089+
if (usedNodesSet.count(node) == 0)
1090+
{
1091+
usedNodesSet.insert(node);
1092+
usedNodesVec.push_back(node);
1093+
}
10881094
}
10891095
}
10901096
}
10911097

10921098
// Remove any unused nodes
10931099
for (ShaderNode* node : _nodeOrder)
10941100
{
1095-
if (usedNodes.count(node) == 0)
1101+
if (usedNodesSet.count(node) == 0)
10961102
{
10971103
// Break all connections
10981104
disconnect(node);
@@ -1102,8 +1108,7 @@ void ShaderGraph::optimize(GenContext& context)
11021108
}
11031109
}
11041110

1105-
_nodeOrder.resize(usedNodes.size());
1106-
_nodeOrder.assign(usedNodes.begin(), usedNodes.end());
1111+
_nodeOrder = usedNodesVec;
11071112
}
11081113
}
11091114

0 commit comments

Comments
 (0)