Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 //
2 // Copyright (c) 2002-2013 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 //
7 #ifndef COMPILER_OUTPUTHLSL_H_
8 #define COMPILER_OUTPUTHLSL_H_
10 #include <list>
11 #include <set>
12 #include <map>
14 #define GL_APICALL
15 #include <GLES2/gl2.h>
17 #include "compiler/intermediate.h"
18 #include "compiler/ParseHelper.h"
19 #include "compiler/CompilerUniform.h"
21 namespace sh
22 {
23 class UnfoldShortCircuit;
25 class OutputHLSL : public TIntermTraverser
26 {
27 public:
28 OutputHLSL(TParseContext &context, const ShBuiltInResources& resources, ShShaderOutput outputType);
29 ~OutputHLSL();
31 void output();
33 TInfoSinkBase &getBodyStream();
34 const ActiveUniforms &getUniforms();
36 TString typeString(const TType &type);
37 TString textureString(const TType &type);
38 static TString qualifierString(TQualifier qualifier);
39 static TString arrayString(const TType &type);
40 static TString initializer(const TType &type);
41 static TString decorate(const TString &string); // Prepends an underscore to avoid naming clashes
42 static TString decorateUniform(const TString &string, const TType &type);
43 static TString decorateField(const TString &string, const TType &structure);
45 protected:
46 void header();
48 // Visit AST nodes and output their code to the body stream
49 void visitSymbol(TIntermSymbol*);
50 void visitConstantUnion(TIntermConstantUnion*);
51 bool visitBinary(Visit visit, TIntermBinary*);
52 bool visitUnary(Visit visit, TIntermUnary*);
53 bool visitSelection(Visit visit, TIntermSelection*);
54 bool visitAggregate(Visit visit, TIntermAggregate*);
55 bool visitLoop(Visit visit, TIntermLoop*);
56 bool visitBranch(Visit visit, TIntermBranch*);
58 void traverseStatements(TIntermNode *node);
59 bool isSingleStatement(TIntermNode *node);
60 bool handleExcessiveLoop(TIntermLoop *node);
61 void outputTriplet(Visit visit, const TString &preString, const TString &inString, const TString &postString);
62 void outputLineDirective(int line);
63 TString argumentString(const TIntermSymbol *symbol);
64 int vectorSize(const TType &type) const;
66 void addConstructor(const TType &type, const TString &name, const TIntermSequence *parameters);
67 const ConstantUnion *writeConstantUnion(const TType &type, const ConstantUnion *constUnion);
69 TString scopeString(unsigned int depthLimit);
70 TString scopedStruct(const TString &typeName);
71 TString structLookup(const TString &typeName);
73 TParseContext &mContext;
74 const ShShaderOutput mOutputType;
75 UnfoldShortCircuit *mUnfoldShortCircuit;
76 bool mInsideFunction;
78 // Output streams
79 TInfoSinkBase mHeader;
80 TInfoSinkBase mBody;
81 TInfoSinkBase mFooter;
83 typedef std::map<TString, TIntermSymbol*> ReferencedSymbols;
84 ReferencedSymbols mReferencedUniforms;
85 ReferencedSymbols mReferencedAttributes;
86 ReferencedSymbols mReferencedVaryings;
88 // Parameters determining what goes in the header output
89 bool mUsesTexture2D;
90 bool mUsesTexture2D_bias;
91 bool mUsesTexture2DLod;
92 bool mUsesTexture2DProj;
93 bool mUsesTexture2DProj_bias;
94 bool mUsesTexture2DProjLod;
95 bool mUsesTextureCube;
96 bool mUsesTextureCube_bias;
97 bool mUsesTextureCubeLod;
98 bool mUsesTexture2DLod0;
99 bool mUsesTexture2DLod0_bias;
100 bool mUsesTexture2DProjLod0;
101 bool mUsesTexture2DProjLod0_bias;
102 bool mUsesTextureCubeLod0;
103 bool mUsesTextureCubeLod0_bias;
104 bool mUsesFragColor;
105 bool mUsesFragData;
106 bool mUsesDepthRange;
107 bool mUsesFragCoord;
108 bool mUsesPointCoord;
109 bool mUsesFrontFacing;
110 bool mUsesPointSize;
111 bool mUsesFragDepth;
112 bool mUsesXor;
113 bool mUsesMod1;
114 bool mUsesMod2v;
115 bool mUsesMod2f;
116 bool mUsesMod3v;
117 bool mUsesMod3f;
118 bool mUsesMod4v;
119 bool mUsesMod4f;
120 bool mUsesFaceforward1;
121 bool mUsesFaceforward2;
122 bool mUsesFaceforward3;
123 bool mUsesFaceforward4;
124 bool mUsesAtan2_1;
125 bool mUsesAtan2_2;
126 bool mUsesAtan2_3;
127 bool mUsesAtan2_4;
129 int mNumRenderTargets;
131 typedef std::set<TString> Constructors;
132 Constructors mConstructors;
134 typedef std::set<TString> StructNames;
135 StructNames mStructNames;
137 typedef std::list<TString> StructDeclarations;
138 StructDeclarations mStructDeclarations;
140 typedef std::vector<int> ScopeBracket;
141 ScopeBracket mScopeBracket;
142 unsigned int mScopeDepth;
144 int mUniqueIndex; // For creating unique names
146 bool mContainsLoopDiscontinuity;
147 bool mOutputLod0Function;
148 bool mInsideDiscontinuousLoop;
150 TIntermSymbol *mExcessiveLoopIndex;
152 int mUniformRegister;
153 int mSamplerRegister;
155 TString registerString(TIntermSymbol *operand);
156 int samplerRegister(TIntermSymbol *sampler);
157 int uniformRegister(TIntermSymbol *uniform);
158 void declareUniform(const TType &type, const TString &name, int index);
159 static GLenum glVariableType(const TType &type);
160 static GLenum glVariablePrecision(const TType &type);
162 ActiveUniforms mActiveUniforms;
163 };
164 }
166 #endif // COMPILER_OUTPUTHLSL_H_