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