Home | History | Annotate | Download | only in timing
      1 //
      2 // Copyright (c) 2012 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 //
      6 
      7 #ifndef COMPILER_TIMING_RESTRICT_FRAGMENT_SHADER_TIMING_H_
      8 #define COMPILER_TIMING_RESTRICT_FRAGMENT_SHADER_TIMING_H_
      9 
     10 #include "GLSLANG/ShaderLang.h"
     11 
     12 #include "compiler/intermediate.h"
     13 #include "compiler/depgraph/DependencyGraph.h"
     14 
     15 class TInfoSinkBase;
     16 
     17 class RestrictFragmentShaderTiming : TDependencyGraphTraverser {
     18 public:
     19     RestrictFragmentShaderTiming(TInfoSinkBase& sink);
     20     void enforceRestrictions(const TDependencyGraph& graph);
     21     int numErrors() const { return mNumErrors; }
     22 
     23     virtual void visitArgument(TGraphArgument* parameter);
     24     virtual void visitSelection(TGraphSelection* selection);
     25     virtual void visitLoop(TGraphLoop* loop);
     26     virtual void visitLogicalOp(TGraphLogicalOp* logicalOp);
     27 
     28 private:
     29     void beginError(const TIntermNode* node);
     30     void validateUserDefinedFunctionCallUsage(const TDependencyGraph& graph);
     31     bool isSamplingOp(const TIntermAggregate* intermFunctionCall) const;
     32 
     33     TInfoSinkBase& mSink;
     34     int mNumErrors;
     35 
     36     typedef std::set<TString> StringSet;
     37     StringSet mSamplingOps;
     38 };
     39 
     40 #endif  // COMPILER_TIMING_RESTRICT_FRAGMENT_SHADER_TIMING_H_
     41