1 // 2 // Copyright (C) 2017 LunarG, Inc. 3 // Copyright (C) 2018 Google, Inc. 4 // 5 // All rights reserved. 6 // 7 // Redistribution and use in source and binary forms, with or without 8 // modification, are permitted provided that the following conditions 9 // are met: 10 // 11 // Redistributions of source code must retain the above copyright 12 // notice, this list of conditions and the following disclaimer. 13 // 14 // Redistributions in binary form must reproduce the above 15 // copyright notice, this list of conditions and the following 16 // disclaimer in the documentation and/or other materials provided 17 // with the distribution. 18 // 19 // Neither the name of 3Dlabs Inc. Ltd. nor the names of its 20 // contributors may be used to endorse or promote products derived 21 // from this software without specific prior written permission. 22 // 23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 26 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 27 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 28 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 29 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 30 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 31 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 33 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 34 // POSSIBILITY OF SUCH DAMAGE. 35 // 36 37 #ifndef _ATTRIBUTE_INCLUDED_ 38 #define _ATTRIBUTE_INCLUDED_ 39 40 #include "../Include/Common.h" 41 #include "../Include/ConstantUnion.h" 42 43 namespace glslang { 44 45 enum TAttributeType { 46 EatNone, 47 EatAllow_uav_condition, 48 EatBranch, 49 EatCall, 50 EatDomain, 51 EatEarlyDepthStencil, 52 EatFastOpt, 53 EatFlatten, 54 EatForceCase, 55 EatInstance, 56 EatMaxTessFactor, 57 EatNumThreads, 58 EatMaxVertexCount, 59 EatOutputControlPoints, 60 EatOutputTopology, 61 EatPartitioning, 62 EatPatchConstantFunc, 63 EatPatchSize, 64 EatUnroll, 65 EatLoop, 66 EatBinding, 67 EatGlobalBinding, 68 EatLocation, 69 EatInputAttachment, 70 EatBuiltIn, 71 EatPushConstant, 72 EatConstantId, 73 EatDependencyInfinite, 74 EatDependencyLength, 75 EatMinIterations, 76 EatMaxIterations, 77 EatIterationMultiple, 78 EatPeelCount, 79 EatPartialCount, 80 EatFormatRgba32f, 81 EatFormatRgba16f, 82 EatFormatR32f, 83 EatFormatRgba8, 84 EatFormatRgba8Snorm, 85 EatFormatRg32f, 86 EatFormatRg16f, 87 EatFormatR11fG11fB10f, 88 EatFormatR16f, 89 EatFormatRgba16, 90 EatFormatRgb10A2, 91 EatFormatRg16, 92 EatFormatRg8, 93 EatFormatR16, 94 EatFormatR8, 95 EatFormatRgba16Snorm, 96 EatFormatRg16Snorm, 97 EatFormatRg8Snorm, 98 EatFormatR16Snorm, 99 EatFormatR8Snorm, 100 EatFormatRgba32i, 101 EatFormatRgba16i, 102 EatFormatRgba8i, 103 EatFormatR32i, 104 EatFormatRg32i, 105 EatFormatRg16i, 106 EatFormatRg8i, 107 EatFormatR16i, 108 EatFormatR8i, 109 EatFormatRgba32ui, 110 EatFormatRgba16ui, 111 EatFormatRgba8ui, 112 EatFormatR32ui, 113 EatFormatRgb10a2ui, 114 EatFormatRg32ui, 115 EatFormatRg16ui, 116 EatFormatRg8ui, 117 EatFormatR16ui, 118 EatFormatR8ui, 119 EatFormatUnknown, 120 EatNonWritable, 121 EatNonReadable, 122 EatSubgroupUniformControlFlow, 123 }; 124 125 class TIntermAggregate; 126 127 struct TAttributeArgs { 128 TAttributeType name; 129 const TIntermAggregate* args; 130 131 // Obtain attribute as integer 132 // Return false if it cannot be obtained 133 bool getInt(int& value, int argNum = 0) const; 134 135 // Obtain attribute as string, with optional to-lower transform 136 // Return false if it cannot be obtained 137 bool getString(TString& value, int argNum = 0, bool convertToLower = true) const; 138 139 // How many arguments were provided to the attribute? 140 int size() const; 141 142 protected: 143 const TConstUnion* getConstUnion(TBasicType basicType, int argNum) const; 144 }; 145 146 typedef TList<TAttributeArgs> TAttributes; 147 148 } // end namespace glslang 149 150 #endif // _ATTRIBUTE_INCLUDED_ 151