blob: 30bb7e3b94d8e8a0d7e3f2b3d9843c302af572b0 [file] [log] [blame]
daniel@transgaming.com4167cc92013-01-11 04:11:53 +00001/*
2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
shannon.woods@transgaming.comda1ed362013-01-25 21:54:57 +000026#ifndef THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_
27#define THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_
daniel@transgaming.com4167cc92013-01-11 04:11:53 +000028
Geoff Lang17732822013-08-29 13:46:49 -040029#include "compiler/translator/InfoSink.h"
Jamie Madillb1a85f42014-08-19 15:23:24 -040030#include "compiler/translator/IntermNode.h"
daniel@transgaming.com4167cc92013-01-11 04:11:53 +000031
32class ArrayBoundsClamper {
33public:
34 ArrayBoundsClamper();
35
shannon.woods@transgaming.com1d432bb2013-01-25 21:57:28 +000036 // Must be set before compiling any shaders to ensure consistency
37 // between the translated shaders and any necessary prequel.
38 void SetClampingStrategy(ShArrayIndexClampingStrategy clampingStrategy);
daniel@transgaming.com4167cc92013-01-11 04:11:53 +000039
40 // Marks nodes in the tree that index arrays indirectly as
41 // requiring clamping.
42 void MarkIndirectArrayBoundsForClamping(TIntermNode* root);
43
shannon.woods@transgaming.com1d432bb2013-01-25 21:57:28 +000044 // If necessary, output array clamp function source into the shader source.
45 void OutputClampingFunctionDefinition(TInfoSinkBase& out) const;
46
daniel@transgaming.com4167cc92013-01-11 04:11:53 +000047 void Cleanup()
48 {
49 mArrayBoundsClampDefinitionNeeded = false;
50 }
51
52private:
53 bool GetArrayBoundsClampDefinitionNeeded() const { return mArrayBoundsClampDefinitionNeeded; }
54 void SetArrayBoundsClampDefinitionNeeded() { mArrayBoundsClampDefinitionNeeded = true; }
shannon.woods@transgaming.com1d432bb2013-01-25 21:57:28 +000055
56 ShArrayIndexClampingStrategy mClampingStrategy;
daniel@transgaming.com4167cc92013-01-11 04:11:53 +000057 bool mArrayBoundsClampDefinitionNeeded;
58};
59
shannon.woods@transgaming.comda1ed362013-01-25 21:54:57 +000060#endif // THIRD_PARTY_COMPILER_ARRAY_BOUNDS_CLAMPER_H_