From d6446efba961d9723446b7e889ca8d5a040308f0 Mon Sep 17 00:00:00 2001 From: sunag Date: Fri, 31 Jan 2025 23:10:06 -0300 Subject: [PATCH] StructTypeNode: Fix inclusion when added to the layout. (#30439) --- src/nodes/core/NodeBuilder.js | 18 +++++++++++++++++- src/nodes/core/StructTypeNode.js | 6 ++++++ src/nodes/tsl/TSLCore.js | 6 +----- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/nodes/core/NodeBuilder.js b/src/nodes/core/NodeBuilder.js index 0ec7cdc2054f21..84399cd53be449 100644 --- a/src/nodes/core/NodeBuilder.js +++ b/src/nodes/core/NodeBuilder.js @@ -1636,7 +1636,7 @@ class NodeBuilder { */ getStructTypeFromNode( node, membersLayout, name = null, shaderStage = this.shaderStage ) { - const nodeData = this.getDataFromNode( node, shaderStage ); + const nodeData = this.getDataFromNode( node, shaderStage, this.globalCache ); let structType = nodeData.structType; @@ -2047,6 +2047,22 @@ class NodeBuilder { } + /** + * Includes a node in the current function node. + * + * @param {Node} node - The node to include. + * @returns {void} + */ + addInclude( node ) { + + if ( this.currentFunctionNode !== null ) { + + this.currentFunctionNode.includes.push( node ); + + } + + } + /** * Returns the native shader operator name for a given generic name. * It is a similar type of method like {@link NodeBuilder#getMethod}. diff --git a/src/nodes/core/StructTypeNode.js b/src/nodes/core/StructTypeNode.js index 5672690188e084..0e362c39405850 100644 --- a/src/nodes/core/StructTypeNode.js +++ b/src/nodes/core/StructTypeNode.js @@ -116,6 +116,12 @@ class StructTypeNode extends Node { } + setup( builder ) { + + builder.addInclude( this ); + + } + generate( builder ) { return this.getNodeType( builder ); diff --git a/src/nodes/tsl/TSLCore.js b/src/nodes/tsl/TSLCore.js index 94f02a851d1e01..f6712271f30775 100644 --- a/src/nodes/tsl/TSLCore.js +++ b/src/nodes/tsl/TSLCore.js @@ -307,11 +307,7 @@ class ShaderCallNodeInternal extends Node { } - if ( builder.currentFunctionNode !== null ) { - - builder.currentFunctionNode.includes.push( functionNode ); - - } + builder.addInclude( functionNode ); result = nodeObject( functionNode.call( inputNodes ) );