// // 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. // // Regardless of the shader type, the following AST transformations are applied: // - Add declaration of View_ID_OVR. // - Replace every occurrence of gl_ViewID_OVR with ViewID_OVR, mark ViewID_OVR as internal and // declare it as a flat varying. // // If the shader type is a vertex shader, the following AST transformations are applied: // - Replace every occurrence of gl_InstanceID with InstanceID, mark InstanceID as internal and set // its qualifier to EvqTemporary. // - Add initializers of ViewID_OVR and InstanceID to the beginning of the body of main. The pass // should be executed before any variables get collected so that usage of gl_InstanceID is recorded. // - If the output is ESSL or GLSL and the SH_SELECT_VIEW_IN_NV_GLSL_VERTEX_SHADER option is // enabled, the expression // "if (multiviewBaseViewLayerIndex < 0) { // gl_ViewportIndex = int(ViewID_OVR); // } else { // gl_Layer = int(ViewID_OVR) + multiviewBaseViewLayerIndex; // }" // is added after ViewID and InstanceID are initialized. Also, MultiviewRenderPath is added as a // uniform. // #ifndef COMPILER_TRANSLATOR_DECLAREANDINITBUILTINSFORINSTANCEDMULTIVIEW_H_ #define COMPILER_TRANSLATOR_DECLAREANDINITBUILTINSFORINSTANCEDMULTIVIEW_H_ #include "GLSLANG/ShaderLang.h" #include "angle_gl.h" namespace sh { class TIntermBlock; class TSymbolTable; void DeclareAndInitBuiltinsForInstancedMultiview(TIntermBlock *root, unsigned numberOfViews, GLenum shaderType, ShCompileOptions compileOptions, ShShaderOutput shaderOutput, TSymbolTable *symbolTable); } // namespace sh #endif // COMPILER_TRANSLATOR_DECLAREANDINITBUILTINSFORINSTANCEDMULTIVIEW_H_