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