• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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);
numErrors()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