// // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. // Copyright (C) 2016 LunarG, Inc. // Copyright (C) 2017 ARM Limited. // Copyright (C) 2015-2018 Google, Inc. // // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. // // Neither the name of 3Dlabs Inc. Ltd. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // #ifndef _LOCAL_INTERMEDIATE_INCLUDED_ #define _LOCAL_INTERMEDIATE_INCLUDED_ #include "../Include/intermediate.h" #include "../Public/ShaderLang.h" #include "Versions.h" #include <algorithm> #include <array> #include <functional> #include <set> #include <string> #include <vector> class TInfoSink; namespace glslang { struct TMatrixSelector { … }; TVectorSelector; const int MaxSwizzleSelectors = …; template<typename selectorType> class TSwizzleSelectors { … }; // // Some helper structures for TIntermediate. Their contents are encapsulated // by TIntermediate. // // Used for call-graph algorithms for detecting recursion, missing bodies, and dead bodies. // A "call" is a pair: <caller, callee>. // There can be duplicates. General assumption is the list is small. struct TCall { … }; // A generic 1-D range. struct TRange { … }; // An IO range is a 3-D rectangle; the set of (location, component, index) triples all lying // within the same location range, component range, and index value. Locations don't alias unless // all other dimensions of their range overlap. struct TIoRange { … }; // An offset range is a 2-D rectangle; the set of (binding, offset) pairs all lying // within the same binding and offset range. struct TOffsetRange { … }; // Things that need to be tracked per xfb buffer. struct TXfbBuffer { … }; // Track a set of strings describing how the module was processed. // This includes command line options, transforms, etc., ideally inclusive enough // to reproduce the steps used to transform the input source to the output. // E.g., see SPIR-V OpModuleProcessed. // Each "process" or "transform" uses is expressed in the form: // process arg0 arg1 arg2 ... // process arg0 arg1 arg2 ... // where everything is textual, and there can be zero or more arguments class TProcesses { … }; class TSymbolTable; class TSymbol; class TVariable; // // Texture and Sampler transformation mode. // enum ComputeDerivativeMode { … }; // // Status type on AST level. Some uncalled status or functions would be reset in call graph. // Currently we will keep status set by explicitly declared layout or variable decl. // enum AstRefType { … }; class TIdMaps { … }; class TNumericFeatures { … }; // MustBeAssigned wraps a T, asserting that it has been assigned with // operator =() before attempting to read with operator T() or operator ->(). // Used to catch cases where fields are read before they have been assigned. template<typename T> class MustBeAssigned { … }; // // Set of helper functions to help parse and build the tree. // class TIntermediate { … }; } // end namespace glslang #endif // _LOCAL_INTERMEDIATE_INCLUDED_