Subversion Repositories Kolibri OS

Rev

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
/** @} */