1 //
2 // Copyright 2020 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 // ReplaceClipCullDistanceVariable.h: Find any references to gl_ClipDistance or gl_CullDistance and
7 // replace it with ANGLEClipDistance or ANGLECullDistance.
8 //
9 
10 #ifndef COMPILER_TRANSLATOR_TREEUTIL_REPLACECLIPCULLDISTANCEVARIABLE_H_
11 #define COMPILER_TRANSLATOR_TREEUTIL_REPLACECLIPCULLDISTANCEVARIABLE_H_
12 
13 #include "GLSLANG/ShaderLang.h"
14 #include "common/angleutils.h"
15 
16 namespace sh
17 {
18 
19 struct InterfaceBlock;
20 class TCompiler;
21 class TIntermBlock;
22 class TSymbolTable;
23 class TIntermTyped;
24 
25 // Replace every gl_ClipDistance assignment with assignment to "ANGLEClipDistance",
26 // then at the end of shader re-assign the values of this global variable to gl_ClipDistance.
27 // This to solve some complex usages such as user passing gl_ClipDistance as output reference
28 // to a function.
29 // Furthermore, at the end shader, some disabled gl_ClipDistance[i] can be skipped from the
30 // assignment.
31 ANGLE_NO_DISCARD bool ReplaceClipDistanceAssignments(TCompiler *compiler,
32                                                      TIntermBlock *root,
33                                                      TSymbolTable *symbolTable,
34                                                      const GLenum shaderType,
35                                                      const TIntermTyped *clipDistanceEnableFlags);
36 
37 ANGLE_NO_DISCARD bool ReplaceCullDistanceAssignments(TCompiler *compiler,
38                                                      TIntermBlock *root,
39                                                      TSymbolTable *symbolTable,
40                                                      const GLenum shaderType);
41 }  // namespace sh
42 
43 #endif
44