gfx/angle/src/compiler/ValidateLimitations.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) 2010 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 #include "GLSLANG/ShaderLang.h"
     8 #include "compiler/intermediate.h"
    10 class TInfoSinkBase;
    12 struct TLoopInfo {
    13     struct TIndex {
    14         int id;  // symbol id.
    15     } index;
    16     TIntermLoop* loop;
    17 };
    18 typedef TVector<TLoopInfo> TLoopStack;
    20 // Traverses intermediate tree to ensure that the shader does not exceed the
    21 // minimum functionality mandated in GLSL 1.0 spec, Appendix A.
    22 class ValidateLimitations : public TIntermTraverser {
    23 public:
    24     ValidateLimitations(ShShaderType shaderType, TInfoSinkBase& sink);
    26     int numErrors() const { return mNumErrors; }
    28     virtual bool visitBinary(Visit, TIntermBinary*);
    29     virtual bool visitUnary(Visit, TIntermUnary*);
    30     virtual bool visitAggregate(Visit, TIntermAggregate*);
    31     virtual bool visitLoop(Visit, TIntermLoop*);
    33 private:
    34     void error(TSourceLoc loc, const char *reason, const char* token);
    36     bool withinLoopBody() const;
    37     bool isLoopIndex(const TIntermSymbol* symbol) const;
    38     bool validateLoopType(TIntermLoop* node);
    39     bool validateForLoopHeader(TIntermLoop* node, TLoopInfo* info);
    40     bool validateForLoopInit(TIntermLoop* node, TLoopInfo* info);
    41     bool validateForLoopCond(TIntermLoop* node, TLoopInfo* info);
    42     bool validateForLoopExpr(TIntermLoop* node, TLoopInfo* info);
    43     // Returns true if none of the loop indices is used as the argument to
    44     // the given function out or inout parameter.
    45     bool validateFunctionCall(TIntermAggregate* node);
    46     bool validateOperation(TIntermOperator* node, TIntermNode* operand);
    48     // Returns true if indexing does not exceed the minimum functionality
    49     // mandated in GLSL 1.0 spec, Appendix A, Section 5.
    50     bool isConstExpr(TIntermNode* node);
    51     bool isConstIndexExpr(TIntermNode* node);
    52     bool validateIndexing(TIntermBinary* node);
    54     ShShaderType mShaderType;
    55     TInfoSinkBase& mSink;
    56     int mNumErrors;
    57     TLoopStack mLoopStack;
    58 };

mercurial