37 const char*
kIntClampBegin =
"// BEGIN: Generated code for array bounds clamping\n\n";
38 const char*
kIntClampEnd =
"// END: Generated code for array bounds clamping\n\n";
39 const char*
kIntClampDefinition =
"int webgl_int_clamp(int value, int minValue, int maxValue) { return ((value < minValue) ? minValue : ((value > maxValue) ? maxValue : value)); }\n\n";
45 ArrayBoundsClamperMarker()
64 bool GetNeedsClamp() {
return mNeedsClamp; }
74 , mArrayBoundsClampDefinitionNeeded(
false)
80 mClampingStrategy = clampingStrategy;
87 ArrayBoundsClamperMarker clamper;
89 if (clamper.GetNeedsClamp())
91 SetArrayBoundsClampDefinitionNeeded();
97 if (!mArrayBoundsClampDefinitionNeeded)
void MarkIndirectArrayBoundsForClamping(TIntermNode *root)
const char * kIntClampBegin
const char * kIntClampDefinition
TIntermTyped * getLeft() const
void SetClampingStrategy(ShArrayIndexClampingStrategy clampingStrategy)
ShArrayIndexClampingStrategy
const char * kIntClampEnd
#define ASSERT(expression)
virtual bool visitBinary(Visit visit, TIntermBinary *)
virtual void traverse(TIntermTraverser *)=0
void OutputClampingFunctionDefinition(TInfoSinkBase &out) const