Edit

kc3-lang/angle/src/compiler/translator/ValidateLimitations.h

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2014-11-19 16:18:08
    Hash : 0a73dd85
    Message : Fix include guards. BUG=angle:733 Change-Id: I08b2c11c4831f1161c178c1842b10e807185aced Reviewed-on: https://chromium-review.googlesource.com/230831 Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Geoff Lang <geofflang@chromium.org>

  • src/compiler/translator/ValidateLimitations.h
  • //
    // Copyright (c) 2010 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #ifndef COMPILER_TRANSLATOR_VALIDATELIMITATIONS_H_
    #define COMPILER_TRANSLATOR_VALIDATELIMITATIONS_H_
    
    #include "compiler/translator/IntermNode.h"
    #include "compiler/translator/LoopInfo.h"
    
    class TInfoSinkBase;
    
    // Traverses intermediate tree to ensure that the shader does not exceed the
    // minimum functionality mandated in GLSL 1.0 spec, Appendix A.
    class ValidateLimitations : public TIntermTraverser
    {
      public:
        ValidateLimitations(sh::GLenum shaderType, TInfoSinkBase &sink);
    
        int numErrors() const { return mNumErrors; }
    
        virtual bool visitBinary(Visit, TIntermBinary *);
        virtual bool visitUnary(Visit, TIntermUnary *);
        virtual bool visitAggregate(Visit, TIntermAggregate *);
        virtual bool visitLoop(Visit, TIntermLoop *);
    
      private:
        void error(TSourceLoc loc, const char *reason, const char *token);
    
        bool withinLoopBody() const;
        bool isLoopIndex(TIntermSymbol *symbol);
        bool validateLoopType(TIntermLoop *node);
    
        bool validateForLoopHeader(TIntermLoop *node);
        // If valid, return the index symbol id; Otherwise, return -1.
        int validateForLoopInit(TIntermLoop *node);
        bool validateForLoopCond(TIntermLoop *node, int indexSymbolId);
        bool validateForLoopExpr(TIntermLoop *node, int indexSymbolId);
    
        // Returns true if none of the loop indices is used as the argument to
        // the given function out or inout parameter.
        bool validateFunctionCall(TIntermAggregate *node);
        bool validateOperation(TIntermOperator *node, TIntermNode *operand);
    
        // Returns true if indexing does not exceed the minimum functionality
        // mandated in GLSL 1.0 spec, Appendix A, Section 5.
        bool isConstExpr(TIntermNode *node);
        bool isConstIndexExpr(TIntermNode *node);
        bool validateIndexing(TIntermBinary *node);
    
        sh::GLenum mShaderType;
        TInfoSinkBase &mSink;
        int mNumErrors;
        TLoopStack mLoopStack;
    };
    
    #endif // COMPILER_TRANSLATOR_VALIDATELIMITATIONS_H_