gfx/angle/src/compiler/OutputHLSL.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

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_

mercurial