blob: ef9b23409e99516cda8b7c27c04e46d646bb1b7d [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
Geoff Langf41a7152016-09-19 15:11:17 -0400330 if (getExtensions().bindGeneratesResource)
331 {
332 switch (pname)
333 {
334 case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
335 *type = GL_BOOL;
336 *numParams = 1;
337 return true;
338 }
339 }
340
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700341 // Check for ES3.0+ parameter names which are also exposed as ES2 extensions
342 switch (pname)
343 {
344 case GL_PACK_ROW_LENGTH:
345 case GL_PACK_SKIP_ROWS:
346 case GL_PACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300347 if ((getClientMajorVersion() < 3) && !getExtensions().packSubimage)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700348 {
349 return false;
350 }
351 *type = GL_INT;
352 *numParams = 1;
353 return true;
354 case GL_UNPACK_ROW_LENGTH:
355 case GL_UNPACK_SKIP_ROWS:
356 case GL_UNPACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300357 if ((getClientMajorVersion() < 3) && !getExtensions().unpackSubimage)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700358 {
359 return false;
360 }
361 *type = GL_INT;
362 *numParams = 1;
363 return true;
364 case GL_VERTEX_ARRAY_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300365 if ((getClientMajorVersion() < 3) && !getExtensions().vertexArrayObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700366 {
367 return false;
368 }
369 *type = GL_INT;
370 *numParams = 1;
371 return true;
372 case GL_PIXEL_PACK_BUFFER_BINDING:
373 case GL_PIXEL_UNPACK_BUFFER_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300374 if ((getClientMajorVersion() < 3) && !getExtensions().pixelBufferObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700375 {
376 return false;
377 }
378 *type = GL_INT;
379 *numParams = 1;
380 return true;
381 }
382
Martin Radev66fb8202016-07-28 11:45:20 +0300383 const GLVersion &glVersion = mState.getGLVersion();
384
385 if (!glVersion.isES3OrGreater())
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700386 {
387 return false;
388 }
389
390 // Check for ES3.0+ parameter names
391 switch (pname)
392 {
393 case GL_MAX_UNIFORM_BUFFER_BINDINGS:
394 case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
395 case GL_UNIFORM_BUFFER_BINDING:
396 case GL_TRANSFORM_FEEDBACK_BINDING:
397 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
398 case GL_COPY_READ_BUFFER_BINDING:
399 case GL_COPY_WRITE_BUFFER_BINDING:
400 case GL_SAMPLER_BINDING:
401 case GL_READ_BUFFER:
402 case GL_TEXTURE_BINDING_3D:
403 case GL_TEXTURE_BINDING_2D_ARRAY:
404 case GL_MAX_3D_TEXTURE_SIZE:
405 case GL_MAX_ARRAY_TEXTURE_LAYERS:
406 case GL_MAX_VERTEX_UNIFORM_BLOCKS:
407 case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
408 case GL_MAX_COMBINED_UNIFORM_BLOCKS:
409 case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
410 case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
411 case GL_MAX_VARYING_COMPONENTS:
412 case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
413 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
414 case GL_MIN_PROGRAM_TEXEL_OFFSET:
415 case GL_MAX_PROGRAM_TEXEL_OFFSET:
416 case GL_NUM_EXTENSIONS:
417 case GL_MAJOR_VERSION:
418 case GL_MINOR_VERSION:
419 case GL_MAX_ELEMENTS_INDICES:
420 case GL_MAX_ELEMENTS_VERTICES:
421 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
422 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
423 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
424 case GL_UNPACK_IMAGE_HEIGHT:
425 case GL_UNPACK_SKIP_IMAGES:
426 {
427 *type = GL_INT;
428 *numParams = 1;
429 return true;
430 }
431
432 case GL_MAX_ELEMENT_INDEX:
433 case GL_MAX_UNIFORM_BLOCK_SIZE:
434 case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
435 case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
436 case GL_MAX_SERVER_WAIT_TIMEOUT:
437 {
438 *type = GL_INT_64_ANGLEX;
439 *numParams = 1;
440 return true;
441 }
442
443 case GL_TRANSFORM_FEEDBACK_ACTIVE:
444 case GL_TRANSFORM_FEEDBACK_PAUSED:
445 case GL_PRIMITIVE_RESTART_FIXED_INDEX:
446 case GL_RASTERIZER_DISCARD:
447 {
448 *type = GL_BOOL;
449 *numParams = 1;
450 return true;
451 }
452
453 case GL_MAX_TEXTURE_LOD_BIAS:
454 {
455 *type = GL_FLOAT;
456 *numParams = 1;
457 return true;
458 }
459 }
460
Martin Radev66fb8202016-07-28 11:45:20 +0300461 if (!glVersion.isES31())
462 {
463 return false;
464 }
465
466 switch (pname)
467 {
468 case GL_MAX_FRAMEBUFFER_WIDTH:
469 case GL_MAX_FRAMEBUFFER_HEIGHT:
470 case GL_MAX_FRAMEBUFFER_SAMPLES:
471 case GL_MAX_SAMPLE_MASK_WORDS:
472 case GL_MAX_COLOR_TEXTURE_SAMPLES:
473 case GL_MAX_DEPTH_TEXTURE_SAMPLES:
474 case GL_MAX_INTEGER_SAMPLES:
475 case GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET:
476 case GL_MAX_VERTEX_ATTRIB_BINDINGS:
477 case GL_MAX_VERTEX_ATTRIB_STRIDE:
478 case GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS:
479 case GL_MAX_VERTEX_ATOMIC_COUNTERS:
480 case GL_MAX_VERTEX_IMAGE_UNIFORMS:
481 case GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS:
482 case GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS:
483 case GL_MAX_FRAGMENT_ATOMIC_COUNTERS:
484 case GL_MAX_FRAGMENT_IMAGE_UNIFORMS:
485 case GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS:
486 case GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET:
487 case GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET:
488 case GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS:
489 case GL_MAX_COMPUTE_UNIFORM_BLOCKS:
490 case GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS:
491 case GL_MAX_COMPUTE_SHARED_MEMORY_SIZE:
492 case GL_MAX_COMPUTE_UNIFORM_COMPONENTS:
493 case GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS:
494 case GL_MAX_COMPUTE_ATOMIC_COUNTERS:
495 case GL_MAX_COMPUTE_IMAGE_UNIFORMS:
496 case GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS:
497 case GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS:
498 case GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
499 case GL_MAX_UNIFORM_LOCATIONS:
500 case GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS:
501 case GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE:
502 case GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS:
503 case GL_MAX_COMBINED_ATOMIC_COUNTERS:
504 case GL_MAX_IMAGE_UNITS:
505 case GL_MAX_COMBINED_IMAGE_UNIFORMS:
506 case GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS:
507 case GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS:
508 case GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT:
509 *type = GL_INT;
510 *numParams = 1;
511 return true;
512 case GL_MAX_SHADER_STORAGE_BLOCK_SIZE:
513 *type = GL_INT_64_ANGLEX;
514 *numParams = 1;
515 return true;
516 }
517
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700518 return false;
519}
520
521bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
522 GLenum *type,
523 unsigned int *numParams)
524{
Martin Radev66fb8202016-07-28 11:45:20 +0300525
526 const GLVersion &glVersion = mState.getGLVersion();
527 if (!glVersion.isES3OrGreater())
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700528 {
529 return false;
530 }
531
532 switch (target)
533 {
534 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
535 case GL_UNIFORM_BUFFER_BINDING:
536 {
537 *type = GL_INT;
538 *numParams = 1;
539 return true;
540 }
541 case GL_TRANSFORM_FEEDBACK_BUFFER_START:
542 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
543 case GL_UNIFORM_BUFFER_START:
544 case GL_UNIFORM_BUFFER_SIZE:
545 {
546 *type = GL_INT_64_ANGLEX;
547 *numParams = 1;
548 return true;
549 }
550 }
551
Martin Radev66fb8202016-07-28 11:45:20 +0300552 if (!glVersion.isES31())
553 {
554 return false;
555 }
556
557 switch (target)
558 {
559 case GL_MAX_COMPUTE_WORK_GROUP_COUNT:
560 case GL_MAX_COMPUTE_WORK_GROUP_SIZE:
561 {
562 *type = GL_INT;
563 *numParams = 1;
564 return true;
565 }
566 }
567
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700568 return false;
569}
570
Jamie Madill46e6c7a2016-01-18 14:42:30 -0500571} // namespace gl