Hash :
66ebd014
Author :
Date :
2012-05-30T22:18:11
Add the SH_TIMING_RESTRICTIONS compile flag and dependency graph implementation. Description of the algorithm: http://code.google.com/p/mvujovic/wiki/ShaderControlFlowAnalysis This flag is one potential solution to timing attacks on textures containing cross-domain content or user agent data. This kind of analysis could be useful for both WebGL and CSS Shaders. The SH_TIMING_RESTRICTIONS flag will reject a shader if it uses texture dependent data to affect control flow. Other ways of affecting shader timing such as using NaNs in basic arithmetic operations or using built-in functions (e.g. atan) with different inputs are still under investigation. Issue=329 Review URL: http://codereview.appspot.com/6195062/ git-svn-id: https://angleproject.googlecode.com/svn/trunk@1101 736b8ea6-26fd-11df-bfd4-992fa37f6226
//
// 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.
//
#include "compiler/timing/RestrictVertexShaderTiming.h"
void RestrictVertexShaderTiming::visitSymbol(TIntermSymbol* node)
{
if (node->getQualifier() == EvqUniform &&
node->getBasicType() == EbtSampler2D &&
node->getSymbol() == mRestrictedSymbol) {
mFoundRestrictedSymbol = true;
mSink.prefix(EPrefixError);
mSink.location(node->getLine());
mSink << "Definition of a uniform sampler2D by the name '" << mRestrictedSymbol
<< "' is not permitted in vertex shaders.\n";
}
}
bool RestrictVertexShaderTiming::visitAggregate(Visit visit, TIntermAggregate* node)
{
// Don't keep exploring if we've found the restricted symbol, and don't explore anything besides
// the global scope (i.e. don't explore function definitions).
if (mFoundRestrictedSymbol || node->getOp() == EOpFunction)
return false;
return true;
}