| // |
| // Copyright (c) 2017 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // IntermNode_util.h: High-level utilities for creating AST nodes and node hierarchies. Mostly meant |
| // to be used in AST transforms. |
| |
| #ifndef COMPILER_TRANSLATOR_INTERMNODEUTIL_H_ |
| #define COMPILER_TRANSLATOR_INTERMNODEUTIL_H_ |
| |
| #include "compiler/translator/IntermNode.h" |
| |
| namespace sh |
| { |
| |
| TIntermFunctionPrototype *CreateInternalFunctionPrototypeNode(const TType &returnType, |
| const char *name, |
| const TSymbolUniqueId &functionId); |
| TIntermFunctionDefinition *CreateInternalFunctionDefinitionNode(const TType &returnType, |
| const char *name, |
| TIntermBlock *functionBody, |
| const TSymbolUniqueId &functionId); |
| TIntermAggregate *CreateInternalFunctionCallNode(const TType &returnType, |
| const char *name, |
| const TSymbolUniqueId &functionId, |
| TIntermSequence *arguments); |
| |
| TIntermTyped *CreateZeroNode(const TType &type); |
| TIntermConstantUnion *CreateIndexNode(int index); |
| TIntermConstantUnion *CreateBoolNode(bool value); |
| |
| TIntermSymbol *CreateTempSymbolNode(const TSymbolUniqueId &id, |
| const TType &type, |
| TQualifier qualifier); |
| TIntermDeclaration *CreateTempInitDeclarationNode(const TSymbolUniqueId &id, |
| TIntermTyped *initializer, |
| TQualifier qualifier); |
| |
| // If the input node is nullptr, return nullptr. |
| // If the input node is a block node, return it. |
| // If the input node is not a block node, put it inside a block node and return that. |
| TIntermBlock *EnsureBlock(TIntermNode *node); |
| |
| // Should be called from inside Compiler::compileTreeImpl() where the global level is in scope. |
| TIntermSymbol *ReferenceGlobalVariable(const TString &name, const TSymbolTable &symbolTable); |
| |
| // Note: this can access desktop GLSL built-ins that are hidden from the parser. |
| TIntermSymbol *ReferenceBuiltInVariable(const TString &name, |
| const TSymbolTable &symbolTable, |
| int shaderVersion); |
| |
| TIntermTyped *CreateBuiltInFunctionCallNode(const TString &name, |
| TIntermSequence *arguments, |
| const TSymbolTable &symbolTable, |
| int shaderVersion); |
| |
| } // namespace sh |
| |
| #endif // COMPILER_TRANSLATOR_INTERMNODEUTIL_H_ |