| // | |
| // Copyright 2002 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. | |
| // | |
| #ifndef COMPILER_TRANSLATOR_TREEOPS_INITIALIZEVARIABLES_H_ | |
| #define COMPILER_TRANSLATOR_TREEOPS_INITIALIZEVARIABLES_H_ | |
| #include <GLSLANG/ShaderLang.h> | |
| #include "compiler/translator/ExtensionBehavior.h" | |
| #include "compiler/translator/IntermNode.h" | |
| namespace sh | |
| { | |
| class TCompiler; | |
| class TSymbolTable; | |
| typedef std::vector<sh::ShaderVariable> InitVariableList; | |
| // For all of the functions below: If canUseLoopsToInitialize is set, for loops are used instead of | |
| // a large number of initializers where it can make sense, such as for initializing large arrays. | |
| // Return a sequence of assignment operations to initialize "initializedSymbol". initializedSymbol | |
| // may be an array, struct or any combination of these, as long as it contains only basic types. | |
| TIntermSequence *CreateInitCode(const TIntermTyped *initializedSymbol, | |
| bool canUseLoopsToInitialize, | |
| bool highPrecisionSupported, | |
| TSymbolTable *symbolTable); | |
| // Initialize all uninitialized local variables, so that undefined behavior is avoided. | |
| ANGLE_NO_DISCARD bool InitializeUninitializedLocals(TCompiler *compiler, | |
| TIntermBlock *root, | |
| int shaderVersion, | |
| bool canUseLoopsToInitialize, | |
| bool highPrecisionSupported, | |
| TSymbolTable *symbolTable); | |
| // This function can initialize all the types that CreateInitCode is able to initialize. All | |
| // variables must be globals which can be found in the symbol table. For now it is used for the | |
| // following two scenarios: | |
| // 1. Initializing gl_Position; | |
| // 2. Initializing output variables referred to in the shader source. | |
| // Note: The type of each lvalue in an initializer is retrieved from the symbol table. gl_FragData | |
| // requires special handling because the number of indices which can be initialized is determined by | |
| // enabled extensions. | |
| ANGLE_NO_DISCARD bool InitializeVariables(TCompiler *compiler, | |
| TIntermBlock *root, | |
| const InitVariableList &vars, | |
| TSymbolTable *symbolTable, | |
| int shaderVersion, | |
| const TExtensionBehavior &extensionBehavior, | |
| bool canUseLoopsToInitialize, | |
| bool highPrecisionSupported); | |
| } // namespace sh | |
| #endif // COMPILER_TRANSLATOR_TREEOPS_INITIALIZEVARIABLES_H_ |