1 // 2 // Copyright 2002 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #ifndef COMPILER_TRANSLATOR_TREEOPS_INITIALIZEVARIABLES_H_ 8 #define COMPILER_TRANSLATOR_TREEOPS_INITIALIZEVARIABLES_H_ 9 10 #include <GLSLANG/ShaderLang.h> 11 12 #include "compiler/translator/ExtensionBehavior.h" 13 #include "compiler/translator/IntermNode.h" 14 15 namespace sh 16 { 17 class TCompiler; 18 class TSymbolTable; 19 20 typedef std::vector<sh::ShaderVariable> InitVariableList; 21 22 // For all of the functions below: If canUseLoopsToInitialize is set, for loops are used instead of 23 // a large number of initializers where it can make sense, such as for initializing large arrays. 24 25 // Populate a sequence of assignment operations to initialize "initializedSymbol". initializedSymbol 26 // may be an array, struct or any combination of these, as long as it contains only basic types. 27 void CreateInitCode(const TIntermTyped *initializedSymbol, 28 bool canUseLoopsToInitialize, 29 bool highPrecisionSupported, 30 TIntermSequence *initCode, 31 TSymbolTable *symbolTable); 32 33 // Initialize all uninitialized local variables, so that undefined behavior is avoided. 34 ANGLE_NO_DISCARD bool InitializeUninitializedLocals(TCompiler *compiler, 35 TIntermBlock *root, 36 int shaderVersion, 37 bool canUseLoopsToInitialize, 38 bool highPrecisionSupported, 39 TSymbolTable *symbolTable); 40 41 // This function can initialize all the types that CreateInitCode is able to initialize. All 42 // variables must be globals which can be found in the symbol table. For now it is used for the 43 // following two scenarios: 44 // 1. Initializing gl_Position; 45 // 2. Initializing output variables referred to in the shader source. 46 // Note: The type of each lvalue in an initializer is retrieved from the symbol table. gl_FragData 47 // requires special handling because the number of indices which can be initialized is determined by 48 // enabled extensions. 49 ANGLE_NO_DISCARD bool InitializeVariables(TCompiler *compiler, 50 TIntermBlock *root, 51 const InitVariableList &vars, 52 TSymbolTable *symbolTable, 53 int shaderVersion, 54 const TExtensionBehavior &extensionBehavior, 55 bool canUseLoopsToInitialize, 56 bool highPrecisionSupported); 57 58 } // namespace sh 59 60 #endif // COMPILER_TRANSLATOR_TREEOPS_INITIALIZEVARIABLES_H_ 61