gfx/angle/src/compiler/OutputGLSLBase.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 //
     2 // Copyright (c) 2002-2011 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 CROSSCOMPILERGLSL_OUTPUTGLSLBASE_H_
     8 #define CROSSCOMPILERGLSL_OUTPUTGLSLBASE_H_
    10 #include <set>
    12 #include "compiler/ForLoopUnroll.h"
    13 #include "compiler/intermediate.h"
    14 #include "compiler/ParseHelper.h"
    16 class TOutputGLSLBase : public TIntermTraverser
    17 {
    18 public:
    19     TOutputGLSLBase(TInfoSinkBase& objSink,
    20                     ShArrayIndexClampingStrategy clampingStrategy,
    21                     ShHashFunction64 hashFunction,
    22                     NameMap& nameMap,
    23                     TSymbolTable& symbolTable);
    25 protected:
    26     TInfoSinkBase& objSink() { return mObjSink; }
    27     void writeTriplet(Visit visit, const char* preStr, const char* inStr, const char* postStr);
    28     void writeVariableType(const TType& type);
    29     virtual bool writeVariablePrecision(TPrecision precision) = 0;
    30     void writeFunctionParameters(const TIntermSequence& args);
    31     const ConstantUnion* writeConstantUnion(const TType& type, const ConstantUnion* pConstUnion);
    32     TString getTypeName(const TType& type);
    34     virtual void visitSymbol(TIntermSymbol* node);
    35     virtual void visitConstantUnion(TIntermConstantUnion* node);
    36     virtual bool visitBinary(Visit visit, TIntermBinary* node);
    37     virtual bool visitUnary(Visit visit, TIntermUnary* node);
    38     virtual bool visitSelection(Visit visit, TIntermSelection* node);
    39     virtual bool visitAggregate(Visit visit, TIntermAggregate* node);
    40     virtual bool visitLoop(Visit visit, TIntermLoop* node);
    41     virtual bool visitBranch(Visit visit, TIntermBranch* node);
    43     void visitCodeBlock(TIntermNode* node);
    46     // Return the original name if hash function pointer is NULL;
    47     // otherwise return the hashed name.
    48     TString hashName(const TString& name);
    49     // Same as hashName(), but without hashing built-in variables.
    50     TString hashVariableName(const TString& name);
    51     // Same as hashName(), but without hashing built-in functions.
    52     TString hashFunctionName(const TString& mangled_name);
    54 private:
    55     bool structDeclared(const TStructure* structure) const;
    56     void declareStruct(const TStructure* structure);
    58     TInfoSinkBase& mObjSink;
    59     bool mDeclaringVariables;
    61     // Structs are declared as the tree is traversed. This set contains all
    62     // the structs already declared. It is maintained so that a struct is
    63     // declared only once.
    64     typedef std::set<TString> DeclaredStructs;
    65     DeclaredStructs mDeclaredStructs;
    67     ForLoopUnroll mLoopUnroll;
    69     ShArrayIndexClampingStrategy mClampingStrategy;
    71     // name hashing.
    72     ShHashFunction64 mHashFunction;
    74     NameMap& mNameMap;
    76     TSymbolTable& mSymbolTable;
    77 };
    79 #endif  // CROSSCOMPILERGLSL_OUTPUTGLSLBASE_H_

mercurial