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     };
123 
124     class TIntermAggregate;
125 
126     struct TAttributeArgs {
127         TAttributeType name;
128         const TIntermAggregate* args;
129 
130         // Obtain attribute as integer
131         // Return false if it cannot be obtained
132         bool getInt(int& value, int argNum = 0) const;
133 
134         // Obtain attribute as string, with optional to-lower transform
135         // Return false if it cannot be obtained
136         bool getString(TString& value, int argNum = 0, bool convertToLower = true) const;
137 
138         // How many arguments were provided to the attribute?
139         int size() const;
140 
141     protected:
142         const TConstUnion* getConstUnion(TBasicType basicType, int argNum) const;
143     };
144 
145     typedef TList<TAttributeArgs> TAttributes;
146 
147 } // end namespace glslang
148 
149 #endif // _ATTRIBUTE_INCLUDED_
150