blob: 375893c72b16442e70d69ae0e10a2c9ae9cd3b77 [file] [log] [blame]
Jamie Madill1e9ae072014-11-06 15:27:21 -05001//
2// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// Data.cpp: Container class for all GL relevant state, caps and objects
8
Jamie Madill9082b982016-04-27 15:21:51 -04009#include "libANGLE/ContextState.h"
Jamie Madill51f40ec2016-06-15 14:06:00 -040010
11#include "libANGLE/Framebuffer.h"
Geoff Lang2b5420c2014-11-19 14:20:15 -050012#include "libANGLE/ResourceManager.h"
Jamie Madill1e9ae072014-11-06 15:27:21 -050013
14namespace gl
15{
16
Jamie Madill9082b982016-04-27 15:21:51 -040017ContextState::ContextState(uintptr_t contextIn,
Martin Radev1be913c2016-07-11 17:59:16 +030018 GLint clientMajorVersionIn,
19 GLint clientMinorVersionIn,
Jamie Madilldfde6ab2016-06-09 07:07:18 -070020 State *stateIn,
Jamie Madill9082b982016-04-27 15:21:51 -040021 const Caps &capsIn,
22 const TextureCapsMap &textureCapsIn,
23 const Extensions &extensionsIn,
24 const ResourceManager *resourceManagerIn,
25 const Limitations &limitationsIn)
Martin Radev1be913c2016-07-11 17:59:16 +030026 : mGLVersion(clientMajorVersionIn, clientMinorVersionIn),
27 mContext(contextIn),
Jamie Madilldfde6ab2016-06-09 07:07:18 -070028 mState(stateIn),
29 mCaps(capsIn),
30 mTextureCaps(textureCapsIn),
31 mExtensions(extensionsIn),
32 mResourceManager(resourceManagerIn),
33 mLimitations(limitationsIn)
Jamie Madill9082b982016-04-27 15:21:51 -040034{
35}
Jamie Madill1e9ae072014-11-06 15:27:21 -050036
Jamie Madill9082b982016-04-27 15:21:51 -040037ContextState::~ContextState()
Jamie Madill1e9ae072014-11-06 15:27:21 -050038{
39}
40
Jamie Madilldfde6ab2016-06-09 07:07:18 -070041const TextureCaps &ContextState::getTextureCap(GLenum internalFormat) const
42{
43 return mTextureCaps.get(internalFormat);
44}
45
Martin Radev1be913c2016-07-11 17:59:16 +030046ValidationContext::ValidationContext(GLint clientMajorVersion,
47 GLint clientMinorVersion,
Jamie Madilldfde6ab2016-06-09 07:07:18 -070048 State *state,
Jamie Madillf25855c2015-11-03 11:06:18 -050049 const Caps &caps,
50 const TextureCapsMap &textureCaps,
51 const Extensions &extensions,
52 const ResourceManager *resourceManager,
Jamie Madill46e6c7a2016-01-18 14:42:30 -050053 const Limitations &limitations,
54 bool skipValidation)
Jamie Madilldfde6ab2016-06-09 07:07:18 -070055 : mState(reinterpret_cast<uintptr_t>(this),
Martin Radev1be913c2016-07-11 17:59:16 +030056 clientMajorVersion,
57 clientMinorVersion,
Jamie Madilldfde6ab2016-06-09 07:07:18 -070058 state,
59 caps,
60 textureCaps,
61 extensions,
62 resourceManager,
63 limitations),
Jamie Madill46e6c7a2016-01-18 14:42:30 -050064 mSkipValidation(skipValidation)
Jamie Madillf25855c2015-11-03 11:06:18 -050065{
66}
Jamie Madilldfde6ab2016-06-09 07:07:18 -070067
68bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams)
69{
70 if (pname >= GL_DRAW_BUFFER0_EXT && pname <= GL_DRAW_BUFFER15_EXT)
71 {
72 *type = GL_INT;
73 *numParams = 1;
74 return true;
75 }
76
77 // Please note: the query type returned for DEPTH_CLEAR_VALUE in this implementation
78 // is FLOAT rather than INT, as would be suggested by the GL ES 2.0 spec. This is due
79 // to the fact that it is stored internally as a float, and so would require conversion
80 // if returned from Context::getIntegerv. Since this conversion is already implemented
81 // in the case that one calls glGetIntegerv to retrieve a float-typed state variable, we
82 // place DEPTH_CLEAR_VALUE with the floats. This should make no difference to the calling
83 // application.
84 switch (pname)
85 {
86 case GL_COMPRESSED_TEXTURE_FORMATS:
87 {
88 *type = GL_INT;
89 *numParams = static_cast<unsigned int>(getCaps().compressedTextureFormats.size());
90 return true;
91 }
92 case GL_PROGRAM_BINARY_FORMATS_OES:
93 {
94 *type = GL_INT;
95 *numParams = static_cast<unsigned int>(getCaps().programBinaryFormats.size());
96 return true;
97 }
98 case GL_SHADER_BINARY_FORMATS:
99 {
100 *type = GL_INT;
101 *numParams = static_cast<unsigned int>(getCaps().shaderBinaryFormats.size());
102 return true;
103 }
104
105 case GL_MAX_VERTEX_ATTRIBS:
106 case GL_MAX_VERTEX_UNIFORM_VECTORS:
107 case GL_MAX_VARYING_VECTORS:
108 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
109 case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:
110 case GL_MAX_TEXTURE_IMAGE_UNITS:
111 case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
112 case GL_MAX_RENDERBUFFER_SIZE:
113 case GL_MAX_COLOR_ATTACHMENTS_EXT:
114 case GL_MAX_DRAW_BUFFERS_EXT:
115 case GL_NUM_SHADER_BINARY_FORMATS:
116 case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
117 case GL_ARRAY_BUFFER_BINDING:
118 // case GL_FRAMEBUFFER_BINDING: // equivalent to DRAW_FRAMEBUFFER_BINDING_ANGLE
119 case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE:
120 case GL_READ_FRAMEBUFFER_BINDING_ANGLE:
121 case GL_RENDERBUFFER_BINDING:
122 case GL_CURRENT_PROGRAM:
123 case GL_PACK_ALIGNMENT:
124 case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
125 case GL_UNPACK_ALIGNMENT:
126 case GL_GENERATE_MIPMAP_HINT:
127 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
128 case GL_RED_BITS:
129 case GL_GREEN_BITS:
130 case GL_BLUE_BITS:
131 case GL_ALPHA_BITS:
132 case GL_DEPTH_BITS:
133 case GL_STENCIL_BITS:
134 case GL_ELEMENT_ARRAY_BUFFER_BINDING:
135 case GL_CULL_FACE_MODE:
136 case GL_FRONT_FACE:
137 case GL_ACTIVE_TEXTURE:
138 case GL_STENCIL_FUNC:
139 case GL_STENCIL_VALUE_MASK:
140 case GL_STENCIL_REF:
141 case GL_STENCIL_FAIL:
142 case GL_STENCIL_PASS_DEPTH_FAIL:
143 case GL_STENCIL_PASS_DEPTH_PASS:
144 case GL_STENCIL_BACK_FUNC:
145 case GL_STENCIL_BACK_VALUE_MASK:
146 case GL_STENCIL_BACK_REF:
147 case GL_STENCIL_BACK_FAIL:
148 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
149 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
150 case GL_DEPTH_FUNC:
151 case GL_BLEND_SRC_RGB:
152 case GL_BLEND_SRC_ALPHA:
153 case GL_BLEND_DST_RGB:
154 case GL_BLEND_DST_ALPHA:
155 case GL_BLEND_EQUATION_RGB:
156 case GL_BLEND_EQUATION_ALPHA:
157 case GL_STENCIL_WRITEMASK:
158 case GL_STENCIL_BACK_WRITEMASK:
159 case GL_STENCIL_CLEAR_VALUE:
160 case GL_SUBPIXEL_BITS:
161 case GL_MAX_TEXTURE_SIZE:
162 case GL_MAX_CUBE_MAP_TEXTURE_SIZE:
163 case GL_SAMPLE_BUFFERS:
164 case GL_SAMPLES:
165 case GL_IMPLEMENTATION_COLOR_READ_TYPE:
166 case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
167 case GL_TEXTURE_BINDING_2D:
168 case GL_TEXTURE_BINDING_CUBE_MAP:
169 case GL_RESET_NOTIFICATION_STRATEGY_EXT:
170 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
171 {
172 *type = GL_INT;
173 *numParams = 1;
174 return true;
175 }
176 case GL_MAX_SAMPLES_ANGLE:
177 {
178 if (!getExtensions().framebufferMultisample)
179 {
180 return false;
181 }
182 *type = GL_INT;
183 *numParams = 1;
184 return true;
185 }
186 case GL_MAX_VIEWPORT_DIMS:
187 {
188 *type = GL_INT;
189 *numParams = 2;
190 return true;
191 }
192 case GL_VIEWPORT:
193 case GL_SCISSOR_BOX:
194 {
195 *type = GL_INT;
196 *numParams = 4;
197 return true;
198 }
199 case GL_SHADER_COMPILER:
200 case GL_SAMPLE_COVERAGE_INVERT:
201 case GL_DEPTH_WRITEMASK:
202 case GL_CULL_FACE: // CULL_FACE through DITHER are natural to IsEnabled,
203 case GL_POLYGON_OFFSET_FILL: // but can be retrieved through the Get{Type}v queries.
204 case GL_SAMPLE_ALPHA_TO_COVERAGE: // For this purpose, they are treated here as
205 // bool-natural
206 case GL_SAMPLE_COVERAGE:
207 case GL_SCISSOR_TEST:
208 case GL_STENCIL_TEST:
209 case GL_DEPTH_TEST:
210 case GL_BLEND:
211 case GL_DITHER:
212 case GL_CONTEXT_ROBUST_ACCESS_EXT:
213 {
214 *type = GL_BOOL;
215 *numParams = 1;
216 return true;
217 }
218 case GL_COLOR_WRITEMASK:
219 {
220 *type = GL_BOOL;
221 *numParams = 4;
222 return true;
223 }
224 case GL_POLYGON_OFFSET_FACTOR:
225 case GL_POLYGON_OFFSET_UNITS:
226 case GL_SAMPLE_COVERAGE_VALUE:
227 case GL_DEPTH_CLEAR_VALUE:
228 case GL_LINE_WIDTH:
229 {
230 *type = GL_FLOAT;
231 *numParams = 1;
232 return true;
233 }
234 case GL_ALIASED_LINE_WIDTH_RANGE:
235 case GL_ALIASED_POINT_SIZE_RANGE:
236 case GL_DEPTH_RANGE:
237 {
238 *type = GL_FLOAT;
239 *numParams = 2;
240 return true;
241 }
242 case GL_COLOR_CLEAR_VALUE:
243 case GL_BLEND_COLOR:
244 {
245 *type = GL_FLOAT;
246 *numParams = 4;
247 return true;
248 }
249 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
250 if (!getExtensions().maxTextureAnisotropy)
251 {
252 return false;
253 }
254 *type = GL_FLOAT;
255 *numParams = 1;
256 return true;
257 case GL_TIMESTAMP_EXT:
258 if (!getExtensions().disjointTimerQuery)
259 {
260 return false;
261 }
262 *type = GL_INT_64_ANGLEX;
263 *numParams = 1;
264 return true;
265 case GL_GPU_DISJOINT_EXT:
266 if (!getExtensions().disjointTimerQuery)
267 {
268 return false;
269 }
270 *type = GL_INT;
271 *numParams = 1;
272 return true;
273 case GL_COVERAGE_MODULATION_CHROMIUM:
274 if (!getExtensions().framebufferMixedSamples)
275 {
276 return false;
277 }
278 *type = GL_INT;
279 *numParams = 1;
280 return true;
281 }
282
283 if (getExtensions().debug)
284 {
285 switch (pname)
286 {
287 case GL_DEBUG_LOGGED_MESSAGES:
288 case GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH:
289 case GL_DEBUG_GROUP_STACK_DEPTH:
290 case GL_MAX_DEBUG_MESSAGE_LENGTH:
291 case GL_MAX_DEBUG_LOGGED_MESSAGES:
292 case GL_MAX_DEBUG_GROUP_STACK_DEPTH:
293 case GL_MAX_LABEL_LENGTH:
294 *type = GL_INT;
295 *numParams = 1;
296 return true;
297
298 case GL_DEBUG_OUTPUT_SYNCHRONOUS:
299 case GL_DEBUG_OUTPUT:
300 *type = GL_BOOL;
301 *numParams = 1;
302 return true;
303 }
304 }
305
306 if (getExtensions().multisampleCompatibility)
307 {
308 switch (pname)
309 {
310 case GL_MULTISAMPLE_EXT:
311 case GL_SAMPLE_ALPHA_TO_ONE_EXT:
312 *type = GL_BOOL;
313 *numParams = 1;
314 return true;
315 }
316 }
317
Sami Väisänene45e53b2016-05-25 10:36:04 +0300318 if (getExtensions().pathRendering)
319 {
320 switch (pname)
321 {
322 case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
323 case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
324 *type = GL_FLOAT;
325 *numParams = 16;
326 return true;
327 }
328 }
329
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700330 // Check for ES3.0+ parameter names which are also exposed as ES2 extensions
331 switch (pname)
332 {
333 case GL_PACK_ROW_LENGTH:
334 case GL_PACK_SKIP_ROWS:
335 case GL_PACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300336 if ((getClientMajorVersion() < 3) && !getExtensions().packSubimage)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700337 {
338 return false;
339 }
340 *type = GL_INT;
341 *numParams = 1;
342 return true;
343 case GL_UNPACK_ROW_LENGTH:
344 case GL_UNPACK_SKIP_ROWS:
345 case GL_UNPACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300346 if ((getClientMajorVersion() < 3) && !getExtensions().unpackSubimage)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700347 {
348 return false;
349 }
350 *type = GL_INT;
351 *numParams = 1;
352 return true;
353 case GL_VERTEX_ARRAY_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300354 if ((getClientMajorVersion() < 3) && !getExtensions().vertexArrayObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700355 {
356 return false;
357 }
358 *type = GL_INT;
359 *numParams = 1;
360 return true;
361 case GL_PIXEL_PACK_BUFFER_BINDING:
362 case GL_PIXEL_UNPACK_BUFFER_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300363 if ((getClientMajorVersion() < 3) && !getExtensions().pixelBufferObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700364 {
365 return false;
366 }
367 *type = GL_INT;
368 *numParams = 1;
369 return true;
370 }
371
Martin Radev66fb8202016-07-28 11:45:20 +0300372 const GLVersion &glVersion = mState.getGLVersion();
373
374 if (!glVersion.isES3OrGreater())
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700375 {
376 return false;
377 }
378
379 // Check for ES3.0+ parameter names
380 switch (pname)
381 {
382 case GL_MAX_UNIFORM_BUFFER_BINDINGS:
383 case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
384 case GL_UNIFORM_BUFFER_BINDING:
385 case GL_TRANSFORM_FEEDBACK_BINDING:
386 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
387 case GL_COPY_READ_BUFFER_BINDING:
388 case GL_COPY_WRITE_BUFFER_BINDING:
389 case GL_SAMPLER_BINDING:
390 case GL_READ_BUFFER:
391 case GL_TEXTURE_BINDING_3D:
392 case GL_TEXTURE_BINDING_2D_ARRAY:
393 case GL_MAX_3D_TEXTURE_SIZE:
394 case GL_MAX_ARRAY_TEXTURE_LAYERS:
395 case GL_MAX_VERTEX_UNIFORM_BLOCKS:
396 case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
397 case GL_MAX_COMBINED_UNIFORM_BLOCKS:
398 case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
399 case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
400 case GL_MAX_VARYING_COMPONENTS:
401 case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
402 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
403 case GL_MIN_PROGRAM_TEXEL_OFFSET:
404 case GL_MAX_PROGRAM_TEXEL_OFFSET:
405 case GL_NUM_EXTENSIONS:
406 case GL_MAJOR_VERSION:
407 case GL_MINOR_VERSION:
408 case GL_MAX_ELEMENTS_INDICES:
409 case GL_MAX_ELEMENTS_VERTICES:
410 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
411 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
412 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
413 case GL_UNPACK_IMAGE_HEIGHT:
414 case GL_UNPACK_SKIP_IMAGES:
415 {
416 *type = GL_INT;
417 *numParams = 1;
418 return true;
419 }
420
421 case GL_MAX_ELEMENT_INDEX:
422 case GL_MAX_UNIFORM_BLOCK_SIZE:
423 case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
424 case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
425 case GL_MAX_SERVER_WAIT_TIMEOUT:
426 {
427 *type = GL_INT_64_ANGLEX;
428 *numParams = 1;
429 return true;
430 }
431
432 case GL_TRANSFORM_FEEDBACK_ACTIVE:
433 case GL_TRANSFORM_FEEDBACK_PAUSED:
434 case GL_PRIMITIVE_RESTART_FIXED_INDEX:
435 case GL_RASTERIZER_DISCARD:
436 {
437 *type = GL_BOOL;
438 *numParams = 1;
439 return true;
440 }
441
442 case GL_MAX_TEXTURE_LOD_BIAS:
443 {
444 *type = GL_FLOAT;
445 *numParams = 1;
446 return true;
447 }
448 }
449
Martin Radev66fb8202016-07-28 11:45:20 +0300450 if (!glVersion.isES31())
451 {
452 return false;
453 }
454
455 switch (pname)
456 {
457 case GL_MAX_FRAMEBUFFER_WIDTH:
458 case GL_MAX_FRAMEBUFFER_HEIGHT:
459 case GL_MAX_FRAMEBUFFER_SAMPLES:
460 case GL_MAX_SAMPLE_MASK_WORDS:
461 case GL_MAX_COLOR_TEXTURE_SAMPLES:
462 case GL_MAX_DEPTH_TEXTURE_SAMPLES:
463 case GL_MAX_INTEGER_SAMPLES:
464 case GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET:
465 case GL_MAX_VERTEX_ATTRIB_BINDINGS:
466 case GL_MAX_VERTEX_ATTRIB_STRIDE:
467 case GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS:
468 case GL_MAX_VERTEX_ATOMIC_COUNTERS:
469 case GL_MAX_VERTEX_IMAGE_UNIFORMS:
470 case GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS:
471 case GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS:
472 case GL_MAX_FRAGMENT_ATOMIC_COUNTERS:
473 case GL_MAX_FRAGMENT_IMAGE_UNIFORMS:
474 case GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS:
475 case GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET:
476 case GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET:
477 case GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS:
478 case GL_MAX_COMPUTE_UNIFORM_BLOCKS:
479 case GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS:
480 case GL_MAX_COMPUTE_SHARED_MEMORY_SIZE:
481 case GL_MAX_COMPUTE_UNIFORM_COMPONENTS:
482 case GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS:
483 case GL_MAX_COMPUTE_ATOMIC_COUNTERS:
484 case GL_MAX_COMPUTE_IMAGE_UNIFORMS:
485 case GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS:
486 case GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS:
487 case GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
488 case GL_MAX_UNIFORM_LOCATIONS:
489 case GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS:
490 case GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE:
491 case GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS:
492 case GL_MAX_COMBINED_ATOMIC_COUNTERS:
493 case GL_MAX_IMAGE_UNITS:
494 case GL_MAX_COMBINED_IMAGE_UNIFORMS:
495 case GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS:
496 case GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS:
497 case GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT:
498 *type = GL_INT;
499 *numParams = 1;
500 return true;
501 case GL_MAX_SHADER_STORAGE_BLOCK_SIZE:
502 *type = GL_INT_64_ANGLEX;
503 *numParams = 1;
504 return true;
505 }
506
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700507 return false;
508}
509
510bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
511 GLenum *type,
512 unsigned int *numParams)
513{
Martin Radev66fb8202016-07-28 11:45:20 +0300514
515 const GLVersion &glVersion = mState.getGLVersion();
516 if (!glVersion.isES3OrGreater())
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700517 {
518 return false;
519 }
520
521 switch (target)
522 {
523 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
524 case GL_UNIFORM_BUFFER_BINDING:
525 {
526 *type = GL_INT;
527 *numParams = 1;
528 return true;
529 }
530 case GL_TRANSFORM_FEEDBACK_BUFFER_START:
531 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
532 case GL_UNIFORM_BUFFER_START:
533 case GL_UNIFORM_BUFFER_SIZE:
534 {
535 *type = GL_INT_64_ANGLEX;
536 *numParams = 1;
537 return true;
538 }
539 }
540
Martin Radev66fb8202016-07-28 11:45:20 +0300541 if (!glVersion.isES31())
542 {
543 return false;
544 }
545
546 switch (target)
547 {
548 case GL_MAX_COMPUTE_WORK_GROUP_COUNT:
549 case GL_MAX_COMPUTE_WORK_GROUP_SIZE:
550 {
551 *type = GL_INT;
552 *numParams = 1;
553 return true;
554 }
555 }
556
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700557 return false;
558}
559
Jamie Madill46e6c7a2016-01-18 14:42:30 -0500560} // namespace gl