Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5564 | serge | 1 | /* |
2 | * Copyright © 2013 Intel Corporation |
||
3 | * |
||
4 | * Permission is hereby granted, free of charge, to any person obtaining a |
||
5 | * copy of this software and associated documentation files (the "Software"), |
||
6 | * to deal in the Software without restriction, including without limitation |
||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||
8 | * and/or sell copies of the Software, and to permit persons to whom the |
||
9 | * Software is furnished to do so, subject to the following conditions: |
||
10 | * |
||
11 | * The above copyright notice and this permission notice (including the next |
||
12 | * paragraph) shall be included in all copies or substantial portions of the |
||
13 | * Software. |
||
14 | * |
||
15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||
16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||
17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||
18 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||
19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||
20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||
21 | * DEALINGS IN THE SOFTWARE. |
||
22 | */ |
||
23 | |||
24 | /** |
||
25 | * \file builtin_types.cpp |
||
26 | * |
||
27 | * The glsl_type class has static members to represent all the built-in types |
||
28 | * (such as the glsl_type::_float_type flyweight) as well as convenience pointer |
||
29 | * accessors (such as glsl_type::float_type). Those global variables are |
||
30 | * declared and initialized in this file. |
||
31 | * |
||
32 | * This also contains _mesa_glsl_initialize_types(), a function which populates |
||
33 | * a symbol table with the available built-in types for a particular language |
||
34 | * version and set of enabled extensions. |
||
35 | */ |
||
36 | |||
37 | #include "glsl_types.h" |
||
38 | #include "glsl_parser_extras.h" |
||
39 | #include "util/macros.h" |
||
40 | |||
41 | /** |
||
42 | * Declarations of type flyweights (glsl_type::_foo_type) and |
||
43 | * convenience pointers (glsl_type::foo_type). |
||
44 | * @{ |
||
45 | */ |
||
46 | #define DECL_TYPE(NAME, ...) \ |
||
47 | const glsl_type glsl_type::_##NAME##_type = glsl_type(__VA_ARGS__, #NAME); \ |
||
48 | const glsl_type *const glsl_type::NAME##_type = &glsl_type::_##NAME##_type; |
||
49 | |||
50 | #define STRUCT_TYPE(NAME) \ |
||
51 | const glsl_type glsl_type::_struct_##NAME##_type = \ |
||
52 | glsl_type(NAME##_fields, ARRAY_SIZE(NAME##_fields), #NAME); \ |
||
53 | const glsl_type *const glsl_type::struct_##NAME##_type = \ |
||
54 | &glsl_type::_struct_##NAME##_type; |
||
55 | |||
56 | static const struct glsl_struct_field gl_DepthRangeParameters_fields[] = { |
||
57 | { glsl_type::float_type, "near", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
58 | { glsl_type::float_type, "far", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
59 | { glsl_type::float_type, "diff", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
60 | }; |
||
61 | |||
62 | static const struct glsl_struct_field gl_PointParameters_fields[] = { |
||
63 | { glsl_type::float_type, "size", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
64 | { glsl_type::float_type, "sizeMin", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
65 | { glsl_type::float_type, "sizeMax", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
66 | { glsl_type::float_type, "fadeThresholdSize", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
67 | { glsl_type::float_type, "distanceConstantAttenuation", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
68 | { glsl_type::float_type, "distanceLinearAttenuation", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
69 | { glsl_type::float_type, "distanceQuadraticAttenuation", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
70 | }; |
||
71 | |||
72 | static const struct glsl_struct_field gl_MaterialParameters_fields[] = { |
||
73 | { glsl_type::vec4_type, "emission", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
74 | { glsl_type::vec4_type, "ambient", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
75 | { glsl_type::vec4_type, "diffuse", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
76 | { glsl_type::vec4_type, "specular", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
77 | { glsl_type::float_type, "shininess", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
78 | }; |
||
79 | |||
80 | static const struct glsl_struct_field gl_LightSourceParameters_fields[] = { |
||
81 | { glsl_type::vec4_type, "ambient", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
82 | { glsl_type::vec4_type, "diffuse", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
83 | { glsl_type::vec4_type, "specular", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
84 | { glsl_type::vec4_type, "position", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
85 | { glsl_type::vec4_type, "halfVector", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
86 | { glsl_type::vec3_type, "spotDirection", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
87 | { glsl_type::float_type, "spotExponent", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
88 | { glsl_type::float_type, "spotCutoff", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
89 | { glsl_type::float_type, "spotCosCutoff", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
90 | { glsl_type::float_type, "constantAttenuation", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
91 | { glsl_type::float_type, "linearAttenuation", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
92 | { glsl_type::float_type, "quadraticAttenuation", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
93 | }; |
||
94 | |||
95 | static const struct glsl_struct_field gl_LightModelParameters_fields[] = { |
||
96 | { glsl_type::vec4_type, "ambient", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
97 | }; |
||
98 | |||
99 | static const struct glsl_struct_field gl_LightModelProducts_fields[] = { |
||
100 | { glsl_type::vec4_type, "sceneColor", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
101 | }; |
||
102 | |||
103 | static const struct glsl_struct_field gl_LightProducts_fields[] = { |
||
104 | { glsl_type::vec4_type, "ambient", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
105 | { glsl_type::vec4_type, "diffuse", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
106 | { glsl_type::vec4_type, "specular", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
107 | }; |
||
108 | |||
109 | static const struct glsl_struct_field gl_FogParameters_fields[] = { |
||
110 | { glsl_type::vec4_type, "color", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
111 | { glsl_type::float_type, "density", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
112 | { glsl_type::float_type, "start", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
113 | { glsl_type::float_type, "end", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
114 | { glsl_type::float_type, "scale", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0 }, |
||
115 | }; |
||
116 | |||
117 | #include "builtin_type_macros.h" |
||
118 | /** @} */ |
||
119 | |||
120 | /** |
||
121 | * Code to populate a symbol table with the built-in types available in a |
||
122 | * particular shading language version. The table below contains tags every |
||
123 | * type with the GLSL/GLSL ES versions where it was introduced. |
||
124 | * |
||
125 | * @{ |
||
126 | */ |
||
127 | #define T(TYPE, MIN_GL, MIN_ES) \ |
||
128 | { glsl_type::TYPE##_type, MIN_GL, MIN_ES }, |
||
129 | |||
130 | const static struct builtin_type_versions { |
||
131 | const glsl_type *const type; |
||
132 | int min_gl; |
||
133 | int min_es; |
||
134 | } builtin_type_versions[] = { |
||
135 | T(void, 110, 100) |
||
136 | T(bool, 110, 100) |
||
137 | T(bvec2, 110, 100) |
||
138 | T(bvec3, 110, 100) |
||
139 | T(bvec4, 110, 100) |
||
140 | T(int, 110, 100) |
||
141 | T(ivec2, 110, 100) |
||
142 | T(ivec3, 110, 100) |
||
143 | T(ivec4, 110, 100) |
||
144 | T(uint, 130, 300) |
||
145 | T(uvec2, 130, 300) |
||
146 | T(uvec3, 130, 300) |
||
147 | T(uvec4, 130, 300) |
||
148 | T(float, 110, 100) |
||
149 | T(vec2, 110, 100) |
||
150 | T(vec3, 110, 100) |
||
151 | T(vec4, 110, 100) |
||
152 | T(mat2, 110, 100) |
||
153 | T(mat3, 110, 100) |
||
154 | T(mat4, 110, 100) |
||
155 | T(mat2x3, 120, 300) |
||
156 | T(mat2x4, 120, 300) |
||
157 | T(mat3x2, 120, 300) |
||
158 | T(mat3x4, 120, 300) |
||
159 | T(mat4x2, 120, 300) |
||
160 | T(mat4x3, 120, 300) |
||
161 | |||
162 | T(double, 400, 999) |
||
163 | T(dvec2, 400, 999) |
||
164 | T(dvec3, 400, 999) |
||
165 | T(dvec4, 400, 999) |
||
166 | T(dmat2, 400, 999) |
||
167 | T(dmat3, 400, 999) |
||
168 | T(dmat4, 400, 999) |
||
169 | T(dmat2x3, 400, 999) |
||
170 | T(dmat2x4, 400, 999) |
||
171 | T(dmat3x2, 400, 999) |
||
172 | T(dmat3x4, 400, 999) |
||
173 | T(dmat4x2, 400, 999) |
||
174 | T(dmat4x3, 400, 999) |
||
175 | |||
176 | T(sampler1D, 110, 999) |
||
177 | T(sampler2D, 110, 100) |
||
178 | T(sampler3D, 110, 300) |
||
179 | T(samplerCube, 110, 100) |
||
180 | T(sampler1DArray, 130, 999) |
||
181 | T(sampler2DArray, 130, 300) |
||
182 | T(samplerCubeArray, 400, 999) |
||
183 | T(sampler2DRect, 140, 999) |
||
184 | T(samplerBuffer, 140, 999) |
||
185 | T(sampler2DMS, 150, 999) |
||
186 | T(sampler2DMSArray, 150, 999) |
||
187 | |||
188 | T(isampler1D, 130, 999) |
||
189 | T(isampler2D, 130, 300) |
||
190 | T(isampler3D, 130, 300) |
||
191 | T(isamplerCube, 130, 300) |
||
192 | T(isampler1DArray, 130, 999) |
||
193 | T(isampler2DArray, 130, 300) |
||
194 | T(isamplerCubeArray, 400, 999) |
||
195 | T(isampler2DRect, 140, 999) |
||
196 | T(isamplerBuffer, 140, 999) |
||
197 | T(isampler2DMS, 150, 999) |
||
198 | T(isampler2DMSArray, 150, 999) |
||
199 | |||
200 | T(usampler1D, 130, 999) |
||
201 | T(usampler2D, 130, 300) |
||
202 | T(usampler3D, 130, 300) |
||
203 | T(usamplerCube, 130, 300) |
||
204 | T(usampler1DArray, 130, 999) |
||
205 | T(usampler2DArray, 130, 300) |
||
206 | T(usamplerCubeArray, 400, 999) |
||
207 | T(usampler2DRect, 140, 999) |
||
208 | T(usamplerBuffer, 140, 999) |
||
209 | T(usampler2DMS, 150, 999) |
||
210 | T(usampler2DMSArray, 150, 999) |
||
211 | |||
212 | T(sampler1DShadow, 110, 999) |
||
213 | T(sampler2DShadow, 110, 300) |
||
214 | T(samplerCubeShadow, 130, 300) |
||
215 | T(sampler1DArrayShadow, 130, 999) |
||
216 | T(sampler2DArrayShadow, 130, 300) |
||
217 | T(samplerCubeArrayShadow, 400, 999) |
||
218 | T(sampler2DRectShadow, 140, 999) |
||
219 | |||
220 | T(struct_gl_DepthRangeParameters, 110, 100) |
||
221 | |||
222 | T(image1D, 420, 999) |
||
223 | T(image2D, 420, 999) |
||
224 | T(image3D, 420, 999) |
||
225 | T(image2DRect, 420, 999) |
||
226 | T(imageCube, 420, 999) |
||
227 | T(imageBuffer, 420, 999) |
||
228 | T(image1DArray, 420, 999) |
||
229 | T(image2DArray, 420, 999) |
||
230 | T(imageCubeArray, 420, 999) |
||
231 | T(image2DMS, 420, 999) |
||
232 | T(image2DMSArray, 420, 999) |
||
233 | T(iimage1D, 420, 999) |
||
234 | T(iimage2D, 420, 999) |
||
235 | T(iimage3D, 420, 999) |
||
236 | T(iimage2DRect, 420, 999) |
||
237 | T(iimageCube, 420, 999) |
||
238 | T(iimageBuffer, 420, 999) |
||
239 | T(iimage1DArray, 420, 999) |
||
240 | T(iimage2DArray, 420, 999) |
||
241 | T(iimageCubeArray, 420, 999) |
||
242 | T(iimage2DMS, 420, 999) |
||
243 | T(iimage2DMSArray, 420, 999) |
||
244 | T(uimage1D, 420, 999) |
||
245 | T(uimage2D, 420, 999) |
||
246 | T(uimage3D, 420, 999) |
||
247 | T(uimage2DRect, 420, 999) |
||
248 | T(uimageCube, 420, 999) |
||
249 | T(uimageBuffer, 420, 999) |
||
250 | T(uimage1DArray, 420, 999) |
||
251 | T(uimage2DArray, 420, 999) |
||
252 | T(uimageCubeArray, 420, 999) |
||
253 | T(uimage2DMS, 420, 999) |
||
254 | T(uimage2DMSArray, 420, 999) |
||
255 | |||
256 | T(atomic_uint, 420, 999) |
||
257 | }; |
||
258 | |||
259 | static const glsl_type *const deprecated_types[] = { |
||
260 | glsl_type::struct_gl_PointParameters_type, |
||
261 | glsl_type::struct_gl_MaterialParameters_type, |
||
262 | glsl_type::struct_gl_LightSourceParameters_type, |
||
263 | glsl_type::struct_gl_LightModelParameters_type, |
||
264 | glsl_type::struct_gl_LightModelProducts_type, |
||
265 | glsl_type::struct_gl_LightProducts_type, |
||
266 | glsl_type::struct_gl_FogParameters_type, |
||
267 | }; |
||
268 | |||
269 | static inline void |
||
270 | add_type(glsl_symbol_table *symbols, const glsl_type *const type) |
||
271 | { |
||
272 | symbols->add_type(type->name, type); |
||
273 | } |
||
274 | |||
275 | /** |
||
276 | * Populate the symbol table with available built-in types. |
||
277 | */ |
||
278 | void |
||
279 | _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state) |
||
280 | { |
||
281 | struct glsl_symbol_table *symbols = state->symbols; |
||
282 | |||
283 | for (unsigned i = 0; i < ARRAY_SIZE(builtin_type_versions); i++) { |
||
284 | const struct builtin_type_versions *const t = &builtin_type_versions[i]; |
||
285 | if (state->is_version(t->min_gl, t->min_es)) { |
||
286 | add_type(symbols, t->type); |
||
287 | } |
||
288 | } |
||
289 | |||
290 | /* Add deprecated structure types. While these were deprecated in 1.30, |
||
291 | * they're still present. We've removed them in 1.40+ (OpenGL 3.1+). |
||
292 | */ |
||
293 | if (!state->es_shader && state->language_version < 140) { |
||
294 | for (unsigned i = 0; i < ARRAY_SIZE(deprecated_types); i++) { |
||
295 | add_type(symbols, deprecated_types[i]); |
||
296 | } |
||
297 | } |
||
298 | |||
299 | /* Add types for enabled extensions. They may have already been added |
||
300 | * by the version-based loop, but attempting to add them a second time |
||
301 | * is harmless. |
||
302 | */ |
||
303 | if (state->ARB_texture_cube_map_array_enable) { |
||
304 | add_type(symbols, glsl_type::samplerCubeArray_type); |
||
305 | add_type(symbols, glsl_type::samplerCubeArrayShadow_type); |
||
306 | add_type(symbols, glsl_type::isamplerCubeArray_type); |
||
307 | add_type(symbols, glsl_type::usamplerCubeArray_type); |
||
308 | } |
||
309 | |||
310 | if (state->ARB_texture_multisample_enable) { |
||
311 | add_type(symbols, glsl_type::sampler2DMS_type); |
||
312 | add_type(symbols, glsl_type::isampler2DMS_type); |
||
313 | add_type(symbols, glsl_type::usampler2DMS_type); |
||
314 | add_type(symbols, glsl_type::sampler2DMSArray_type); |
||
315 | add_type(symbols, glsl_type::isampler2DMSArray_type); |
||
316 | add_type(symbols, glsl_type::usampler2DMSArray_type); |
||
317 | } |
||
318 | |||
319 | if (state->ARB_texture_rectangle_enable) { |
||
320 | add_type(symbols, glsl_type::sampler2DRect_type); |
||
321 | add_type(symbols, glsl_type::sampler2DRectShadow_type); |
||
322 | } |
||
323 | |||
324 | if (state->EXT_texture_array_enable) { |
||
325 | add_type(symbols, glsl_type::sampler1DArray_type); |
||
326 | add_type(symbols, glsl_type::sampler2DArray_type); |
||
327 | add_type(symbols, glsl_type::sampler1DArrayShadow_type); |
||
328 | add_type(symbols, glsl_type::sampler2DArrayShadow_type); |
||
329 | } |
||
330 | |||
331 | if (state->OES_EGL_image_external_enable) { |
||
332 | add_type(symbols, glsl_type::samplerExternalOES_type); |
||
333 | } |
||
334 | |||
335 | if (state->OES_texture_3D_enable) { |
||
336 | add_type(symbols, glsl_type::sampler3D_type); |
||
337 | } |
||
338 | |||
339 | if (state->ARB_shader_image_load_store_enable) { |
||
340 | add_type(symbols, glsl_type::image1D_type); |
||
341 | add_type(symbols, glsl_type::image2D_type); |
||
342 | add_type(symbols, glsl_type::image3D_type); |
||
343 | add_type(symbols, glsl_type::image2DRect_type); |
||
344 | add_type(symbols, glsl_type::imageCube_type); |
||
345 | add_type(symbols, glsl_type::imageBuffer_type); |
||
346 | add_type(symbols, glsl_type::image1DArray_type); |
||
347 | add_type(symbols, glsl_type::image2DArray_type); |
||
348 | add_type(symbols, glsl_type::imageCubeArray_type); |
||
349 | add_type(symbols, glsl_type::image2DMS_type); |
||
350 | add_type(symbols, glsl_type::image2DMSArray_type); |
||
351 | add_type(symbols, glsl_type::iimage1D_type); |
||
352 | add_type(symbols, glsl_type::iimage2D_type); |
||
353 | add_type(symbols, glsl_type::iimage3D_type); |
||
354 | add_type(symbols, glsl_type::iimage2DRect_type); |
||
355 | add_type(symbols, glsl_type::iimageCube_type); |
||
356 | add_type(symbols, glsl_type::iimageBuffer_type); |
||
357 | add_type(symbols, glsl_type::iimage1DArray_type); |
||
358 | add_type(symbols, glsl_type::iimage2DArray_type); |
||
359 | add_type(symbols, glsl_type::iimageCubeArray_type); |
||
360 | add_type(symbols, glsl_type::iimage2DMS_type); |
||
361 | add_type(symbols, glsl_type::iimage2DMSArray_type); |
||
362 | add_type(symbols, glsl_type::uimage1D_type); |
||
363 | add_type(symbols, glsl_type::uimage2D_type); |
||
364 | add_type(symbols, glsl_type::uimage3D_type); |
||
365 | add_type(symbols, glsl_type::uimage2DRect_type); |
||
366 | add_type(symbols, glsl_type::uimageCube_type); |
||
367 | add_type(symbols, glsl_type::uimageBuffer_type); |
||
368 | add_type(symbols, glsl_type::uimage1DArray_type); |
||
369 | add_type(symbols, glsl_type::uimage2DArray_type); |
||
370 | add_type(symbols, glsl_type::uimageCubeArray_type); |
||
371 | add_type(symbols, glsl_type::uimage2DMS_type); |
||
372 | add_type(symbols, glsl_type::uimage2DMSArray_type); |
||
373 | } |
||
374 | |||
375 | if (state->has_atomic_counters()) { |
||
376 | add_type(symbols, glsl_type::atomic_uint_type); |
||
377 | } |
||
378 | |||
379 | if (state->ARB_gpu_shader_fp64_enable) { |
||
380 | add_type(symbols, glsl_type::double_type); |
||
381 | add_type(symbols, glsl_type::dvec2_type); |
||
382 | add_type(symbols, glsl_type::dvec3_type); |
||
383 | add_type(symbols, glsl_type::dvec4_type); |
||
384 | add_type(symbols, glsl_type::dmat2_type); |
||
385 | add_type(symbols, glsl_type::dmat3_type); |
||
386 | add_type(symbols, glsl_type::dmat4_type); |
||
387 | add_type(symbols, glsl_type::dmat2x3_type); |
||
388 | add_type(symbols, glsl_type::dmat2x4_type); |
||
389 | add_type(symbols, glsl_type::dmat3x2_type); |
||
390 | add_type(symbols, glsl_type::dmat3x4_type); |
||
391 | add_type(symbols, glsl_type::dmat4x2_type); |
||
392 | add_type(symbols, glsl_type::dmat4x3_type); |
||
393 | } |
||
394 | } |
||
395 | /** @} */>>> |