| // |
| // Copyright (c) 2012 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_TIMING_RESTRICT_FRAGMENT_SHADER_TIMING_H_ |
| #define COMPILER_TIMING_RESTRICT_FRAGMENT_SHADER_TIMING_H_ |
| |
| #include "GLSLANG/ShaderLang.h" |
| |
| #include "compiler/intermediate.h" |
| #include "compiler/depgraph/DependencyGraph.h" |
| |
| class TInfoSinkBase; |
| |
| class RestrictFragmentShaderTiming : TDependencyGraphTraverser { |
| public: |
| RestrictFragmentShaderTiming(TInfoSinkBase& sink); |
| void enforceRestrictions(const TDependencyGraph& graph); |
| int numErrors() const { return mNumErrors; } |
| |
| virtual void visitArgument(TGraphArgument* parameter); |
| virtual void visitSelection(TGraphSelection* selection); |
| virtual void visitLoop(TGraphLoop* loop); |
| virtual void visitLogicalOp(TGraphLogicalOp* logicalOp); |
| |
| private: |
| void beginError(const TIntermNode* node); |
| void validateUserDefinedFunctionCallUsage(const TDependencyGraph& graph); |
| bool isSamplingOp(const TIntermAggregate* intermFunctionCall) const; |
| |
| TInfoSinkBase& mSink; |
| int mNumErrors; |
| |
| typedef std::set<TString> StringSet; |
| StringSet mSamplingOps; |
| }; |
| |
| #endif // COMPILER_TIMING_RESTRICT_FRAGMENT_SHADER_TIMING_H_ |