17 mSamplingOps.insert(
"texture2D(s21;vf2;f1;");
18 mSamplingOps.insert(
"texture2DProj(s21;vf3;f1;");
19 mSamplingOps.insert(
"texture2DProj(s21;vf4;f1;");
20 mSamplingOps.insert(
"textureCube(sC1;vf3;f1;");
22 mSamplingOps.insert(
"texture2D(s21;vf2;");
23 mSamplingOps.insert(
"texture2DProj(s21;vf3;");
24 mSamplingOps.insert(
"texture2DProj(s21;vf4;");
25 mSamplingOps.insert(
"textureCube(sC1;vf3;");
27 mSamplingOps.insert(
"texture2D(1;vf2;");
28 mSamplingOps.insert(
"texture2DProj(1;vf3;");
29 mSamplingOps.insert(
"texture2DProj(1;vf4;");
31 mSamplingOps.insert(
"texture2DRect(1;vf2;");
32 mSamplingOps.insert(
"texture2DRectProj(1;vf3;");
33 mSamplingOps.insert(
"texture2DRectProj(1;vf4;");
44 validateUserDefinedFunctionCallUsage(graph);
58 void RestrictFragmentShaderTiming::validateUserDefinedFunctionCallUsage(
const TDependencyGraph& graph)
66 mSink <<
"A call to a user defined function is not permitted.\n";
70 void RestrictFragmentShaderTiming::beginError(
const TIntermNode* node)
77 bool RestrictFragmentShaderTiming::isSamplingOp(
const TIntermAggregate* intermFunctionCall)
const
80 mSamplingOps.find(intermFunctionCall->
getName()) != mSamplingOps.end();
93 mSink <<
"An expression dependent on a sampler is not permitted to be the"
94 <<
" coordinate argument of a sampling operation.\n";
99 mSink <<
"An expression dependent on a sampler is not permitted to be the"
100 <<
" bias argument of a sampling operation.\n";
112 mSink <<
"An expression dependent on a sampler is not permitted in a conditional statement.\n";
118 mSink <<
"An expression dependent on a sampler is not permitted in a loop condition.\n";
124 mSink <<
"An expression dependent on a sampler is not permitted on the left hand side of a logical "
bool isUserDefined() const
GLsizei GLenum GLboolean sink
RestrictFragmentShaderTiming(TInfoSinkBase &sink)
const TIntermSelection * getIntermSelection() const
TFunctionCallVector::const_iterator endUserDefinedFunctionCalls() const
const TIntermLoop * getIntermLoop() const
int getArgumentNumber() const
const TIntermAggregate * getIntermFunctionCall() const
virtual void traverse(TDependencyGraphTraverser *graphTraverser)
const TSourceLoc & getLine() const
const TString & getName() const
TGraphSymbolVector::const_iterator endSamplerSymbols() const
virtual void visitSelection(TGraphSelection *selection)
virtual void visitLogicalOp(TGraphLogicalOp *logicalOp)
virtual void visitArgument(TGraphArgument *parameter)
TGraphSymbolVector::const_iterator beginSamplerSymbols() const
const TIntermBinary * getIntermLogicalOp() const
const TIntermAggregate * getIntermFunctionCall() const
virtual void visitLoop(TGraphLoop *loop)
const char * getOpString() const
TFunctionCallVector::const_iterator beginUserDefinedFunctionCalls() const
void location(int file, int line)
void prefix(TPrefixType p)
void enforceRestrictions(const TDependencyGraph &graph)