14167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com/* 24167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * Copyright (C) 2012 Apple Inc. All rights reserved. 34167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * 44167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * Redistribution and use in source and binary forms, with or without 54167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * modification, are permitted provided that the following conditions 64167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * are met: 74167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * 1. Redistributions of source code must retain the above copyright 84167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * notice, this list of conditions and the following disclaimer. 94167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * 2. Redistributions in binary form must reproduce the above copyright 104167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * notice, this list of conditions and the following disclaimer in the 114167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * documentation and/or other materials provided with the distribution. 124167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * 134167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``AS IS'' AND ANY 144167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 154167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 164167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, INC. OR 174167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 184167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 194167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 204167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 214167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 224167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 234167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 244167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com */ 254167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com 26da1ed36a3ba807337ec1d5a2009238c00ce4caabshannon.woods@transgaming.com#ifndef THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_ 27da1ed36a3ba807337ec1d5a2009238c00ce4caabshannon.woods@transgaming.com#define THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_ 284167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com 2917732823f9c21bdba9cc51ffaceb545ce3857a8cGeoff Lang#include "compiler/translator/InfoSink.h" 30b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill#include "compiler/translator/IntermNode.h" 314167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com 324167cc910276be723901f187dec45d04275abb7edaniel@transgaming.comclass ArrayBoundsClamper { 334167cc910276be723901f187dec45d04275abb7edaniel@transgaming.compublic: 344167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com ArrayBoundsClamper(); 354167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com 361d432bb570bd175c3cdc51629a386e324e98b95bshannon.woods@transgaming.com // Must be set before compiling any shaders to ensure consistency 371d432bb570bd175c3cdc51629a386e324e98b95bshannon.woods@transgaming.com // between the translated shaders and any necessary prequel. 381d432bb570bd175c3cdc51629a386e324e98b95bshannon.woods@transgaming.com void SetClampingStrategy(ShArrayIndexClampingStrategy clampingStrategy); 394167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com 404167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com // Marks nodes in the tree that index arrays indirectly as 414167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com // requiring clamping. 424167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com void MarkIndirectArrayBoundsForClamping(TIntermNode* root); 434167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com 441d432bb570bd175c3cdc51629a386e324e98b95bshannon.woods@transgaming.com // If necessary, output array clamp function source into the shader source. 451d432bb570bd175c3cdc51629a386e324e98b95bshannon.woods@transgaming.com void OutputClampingFunctionDefinition(TInfoSinkBase& out) const; 461d432bb570bd175c3cdc51629a386e324e98b95bshannon.woods@transgaming.com 474167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com void Cleanup() 484167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com { 494167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com mArrayBoundsClampDefinitionNeeded = false; 504167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com } 514167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com 524167cc910276be723901f187dec45d04275abb7edaniel@transgaming.comprivate: 534167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com bool GetArrayBoundsClampDefinitionNeeded() const { return mArrayBoundsClampDefinitionNeeded; } 544167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com void SetArrayBoundsClampDefinitionNeeded() { mArrayBoundsClampDefinitionNeeded = true; } 551d432bb570bd175c3cdc51629a386e324e98b95bshannon.woods@transgaming.com 561d432bb570bd175c3cdc51629a386e324e98b95bshannon.woods@transgaming.com ShArrayIndexClampingStrategy mClampingStrategy; 574167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com bool mArrayBoundsClampDefinitionNeeded; 584167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com}; 594167cc910276be723901f187dec45d04275abb7edaniel@transgaming.com 60da1ed36a3ba807337ec1d5a2009238c00ce4caabshannon.woods@transgaming.com#endif // THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_ 61