1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/angle/src/third_party/compiler/ArrayBoundsClamper.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,62 @@ 1.4 +/* 1.5 + * Copyright (C) 2012 Apple Inc. All rights reserved. 1.6 + * 1.7 + * Redistribution and use in source and binary forms, with or without 1.8 + * modification, are permitted provided that the following conditions 1.9 + * are met: 1.10 + * 1. Redistributions of source code must retain the above copyright 1.11 + * notice, this list of conditions and the following disclaimer. 1.12 + * 2. Redistributions in binary form must reproduce the above copyright 1.13 + * notice, this list of conditions and the following disclaimer in the 1.14 + * documentation and/or other materials provided with the distribution. 1.15 + * 1.16 + * THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``AS IS'' AND ANY 1.17 + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.18 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1.19 + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, INC. OR 1.20 + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 1.21 + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 1.22 + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 1.23 + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 1.24 + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1.25 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1.26 + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1.27 + */ 1.28 + 1.29 +#ifndef THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_ 1.30 +#define THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_ 1.31 + 1.32 +#include "GLSLANG/ShaderLang.h" 1.33 + 1.34 +#include "compiler/InfoSink.h" 1.35 +#include "compiler/intermediate.h" 1.36 + 1.37 +class ArrayBoundsClamper { 1.38 +public: 1.39 + ArrayBoundsClamper(); 1.40 + 1.41 + // Must be set before compiling any shaders to ensure consistency 1.42 + // between the translated shaders and any necessary prequel. 1.43 + void SetClampingStrategy(ShArrayIndexClampingStrategy clampingStrategy); 1.44 + 1.45 + // Marks nodes in the tree that index arrays indirectly as 1.46 + // requiring clamping. 1.47 + void MarkIndirectArrayBoundsForClamping(TIntermNode* root); 1.48 + 1.49 + // If necessary, output array clamp function source into the shader source. 1.50 + void OutputClampingFunctionDefinition(TInfoSinkBase& out) const; 1.51 + 1.52 + void Cleanup() 1.53 + { 1.54 + mArrayBoundsClampDefinitionNeeded = false; 1.55 + } 1.56 + 1.57 +private: 1.58 + bool GetArrayBoundsClampDefinitionNeeded() const { return mArrayBoundsClampDefinitionNeeded; } 1.59 + void SetArrayBoundsClampDefinitionNeeded() { mArrayBoundsClampDefinitionNeeded = true; } 1.60 + 1.61 + ShArrayIndexClampingStrategy mClampingStrategy; 1.62 + bool mArrayBoundsClampDefinitionNeeded; 1.63 +}; 1.64 + 1.65 +#endif // THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_