blob: dae319c08f36279a93e2914957f9b337d6c072bd [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;
John Bauman18319182016-09-28 14:22:27 -0700281 case GL_TEXTURE_BINDING_EXTERNAL_OES:
282 if (!getExtensions().eglStreamConsumerExternal && !getExtensions().eglImageExternal)
283 {
284 return false;
285 }
286 *type = GL_INT;
287 *numParams = 1;
288 return true;
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700289 }
290
291 if (getExtensions().debug)
292 {
293 switch (pname)
294 {
295 case GL_DEBUG_LOGGED_MESSAGES:
296 case GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH:
297 case GL_DEBUG_GROUP_STACK_DEPTH:
298 case GL_MAX_DEBUG_MESSAGE_LENGTH:
299 case GL_MAX_DEBUG_LOGGED_MESSAGES:
300 case GL_MAX_DEBUG_GROUP_STACK_DEPTH:
301 case GL_MAX_LABEL_LENGTH:
302 *type = GL_INT;
303 *numParams = 1;
304 return true;
305
306 case GL_DEBUG_OUTPUT_SYNCHRONOUS:
307 case GL_DEBUG_OUTPUT:
308 *type = GL_BOOL;
309 *numParams = 1;
310 return true;
311 }
312 }
313
314 if (getExtensions().multisampleCompatibility)
315 {
316 switch (pname)
317 {
318 case GL_MULTISAMPLE_EXT:
319 case GL_SAMPLE_ALPHA_TO_ONE_EXT:
320 *type = GL_BOOL;
321 *numParams = 1;
322 return true;
323 }
324 }
325
Sami Väisänene45e53b2016-05-25 10:36:04 +0300326 if (getExtensions().pathRendering)
327 {
328 switch (pname)
329 {
330 case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
331 case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
332 *type = GL_FLOAT;
333 *numParams = 16;
334 return true;
335 }
336 }
337
Geoff Langf41a7152016-09-19 15:11:17 -0400338 if (getExtensions().bindGeneratesResource)
339 {
340 switch (pname)
341 {
342 case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
343 *type = GL_BOOL;
344 *numParams = 1;
345 return true;
346 }
347 }
348
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700349 // Check for ES3.0+ parameter names which are also exposed as ES2 extensions
350 switch (pname)
351 {
352 case GL_PACK_ROW_LENGTH:
353 case GL_PACK_SKIP_ROWS:
354 case GL_PACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300355 if ((getClientMajorVersion() < 3) && !getExtensions().packSubimage)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700356 {
357 return false;
358 }
359 *type = GL_INT;
360 *numParams = 1;
361 return true;
362 case GL_UNPACK_ROW_LENGTH:
363 case GL_UNPACK_SKIP_ROWS:
364 case GL_UNPACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300365 if ((getClientMajorVersion() < 3) && !getExtensions().unpackSubimage)
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_VERTEX_ARRAY_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300373 if ((getClientMajorVersion() < 3) && !getExtensions().vertexArrayObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700374 {
375 return false;
376 }
377 *type = GL_INT;
378 *numParams = 1;
379 return true;
380 case GL_PIXEL_PACK_BUFFER_BINDING:
381 case GL_PIXEL_UNPACK_BUFFER_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300382 if ((getClientMajorVersion() < 3) && !getExtensions().pixelBufferObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700383 {
384 return false;
385 }
386 *type = GL_INT;
387 *numParams = 1;
388 return true;
389 }
390
Martin Radev66fb8202016-07-28 11:45:20 +0300391 const GLVersion &glVersion = mState.getGLVersion();
392
393 if (!glVersion.isES3OrGreater())
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700394 {
395 return false;
396 }
397
398 // Check for ES3.0+ parameter names
399 switch (pname)
400 {
401 case GL_MAX_UNIFORM_BUFFER_BINDINGS:
402 case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
403 case GL_UNIFORM_BUFFER_BINDING:
404 case GL_TRANSFORM_FEEDBACK_BINDING:
405 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
406 case GL_COPY_READ_BUFFER_BINDING:
407 case GL_COPY_WRITE_BUFFER_BINDING:
408 case GL_SAMPLER_BINDING:
409 case GL_READ_BUFFER:
410 case GL_TEXTURE_BINDING_3D:
411 case GL_TEXTURE_BINDING_2D_ARRAY:
412 case GL_MAX_3D_TEXTURE_SIZE:
413 case GL_MAX_ARRAY_TEXTURE_LAYERS:
414 case GL_MAX_VERTEX_UNIFORM_BLOCKS:
415 case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
416 case GL_MAX_COMBINED_UNIFORM_BLOCKS:
417 case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
418 case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
419 case GL_MAX_VARYING_COMPONENTS:
420 case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
421 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
422 case GL_MIN_PROGRAM_TEXEL_OFFSET:
423 case GL_MAX_PROGRAM_TEXEL_OFFSET:
424 case GL_NUM_EXTENSIONS:
425 case GL_MAJOR_VERSION:
426 case GL_MINOR_VERSION:
427 case GL_MAX_ELEMENTS_INDICES:
428 case GL_MAX_ELEMENTS_VERTICES:
429 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
430 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
431 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
432 case GL_UNPACK_IMAGE_HEIGHT:
433 case GL_UNPACK_SKIP_IMAGES:
434 {
435 *type = GL_INT;
436 *numParams = 1;
437 return true;
438 }
439
440 case GL_MAX_ELEMENT_INDEX:
441 case GL_MAX_UNIFORM_BLOCK_SIZE:
442 case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
443 case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
444 case GL_MAX_SERVER_WAIT_TIMEOUT:
445 {
446 *type = GL_INT_64_ANGLEX;
447 *numParams = 1;
448 return true;
449 }
450
451 case GL_TRANSFORM_FEEDBACK_ACTIVE:
452 case GL_TRANSFORM_FEEDBACK_PAUSED:
453 case GL_PRIMITIVE_RESTART_FIXED_INDEX:
454 case GL_RASTERIZER_DISCARD:
455 {
456 *type = GL_BOOL;
457 *numParams = 1;
458 return true;
459 }
460
461 case GL_MAX_TEXTURE_LOD_BIAS:
462 {
463 *type = GL_FLOAT;
464 *numParams = 1;
465 return true;
466 }
467 }
468
Martin Radev66fb8202016-07-28 11:45:20 +0300469 if (!glVersion.isES31())
470 {
471 return false;
472 }
473
474 switch (pname)
475 {
476 case GL_MAX_FRAMEBUFFER_WIDTH:
477 case GL_MAX_FRAMEBUFFER_HEIGHT:
478 case GL_MAX_FRAMEBUFFER_SAMPLES:
479 case GL_MAX_SAMPLE_MASK_WORDS:
480 case GL_MAX_COLOR_TEXTURE_SAMPLES:
481 case GL_MAX_DEPTH_TEXTURE_SAMPLES:
482 case GL_MAX_INTEGER_SAMPLES:
483 case GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET:
484 case GL_MAX_VERTEX_ATTRIB_BINDINGS:
485 case GL_MAX_VERTEX_ATTRIB_STRIDE:
486 case GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS:
487 case GL_MAX_VERTEX_ATOMIC_COUNTERS:
488 case GL_MAX_VERTEX_IMAGE_UNIFORMS:
489 case GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS:
490 case GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS:
491 case GL_MAX_FRAGMENT_ATOMIC_COUNTERS:
492 case GL_MAX_FRAGMENT_IMAGE_UNIFORMS:
493 case GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS:
494 case GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET:
495 case GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET:
496 case GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS:
497 case GL_MAX_COMPUTE_UNIFORM_BLOCKS:
498 case GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS:
499 case GL_MAX_COMPUTE_SHARED_MEMORY_SIZE:
500 case GL_MAX_COMPUTE_UNIFORM_COMPONENTS:
501 case GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS:
502 case GL_MAX_COMPUTE_ATOMIC_COUNTERS:
503 case GL_MAX_COMPUTE_IMAGE_UNIFORMS:
504 case GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS:
505 case GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS:
506 case GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
507 case GL_MAX_UNIFORM_LOCATIONS:
508 case GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS:
509 case GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE:
510 case GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS:
511 case GL_MAX_COMBINED_ATOMIC_COUNTERS:
512 case GL_MAX_IMAGE_UNITS:
513 case GL_MAX_COMBINED_IMAGE_UNIFORMS:
514 case GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS:
515 case GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS:
516 case GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT:
517 *type = GL_INT;
518 *numParams = 1;
519 return true;
520 case GL_MAX_SHADER_STORAGE_BLOCK_SIZE:
521 *type = GL_INT_64_ANGLEX;
522 *numParams = 1;
523 return true;
524 }
525
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700526 return false;
527}
528
529bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
530 GLenum *type,
531 unsigned int *numParams)
532{
Martin Radev66fb8202016-07-28 11:45:20 +0300533
534 const GLVersion &glVersion = mState.getGLVersion();
535 if (!glVersion.isES3OrGreater())
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700536 {
537 return false;
538 }
539
540 switch (target)
541 {
542 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
543 case GL_UNIFORM_BUFFER_BINDING:
544 {
545 *type = GL_INT;
546 *numParams = 1;
547 return true;
548 }
549 case GL_TRANSFORM_FEEDBACK_BUFFER_START:
550 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
551 case GL_UNIFORM_BUFFER_START:
552 case GL_UNIFORM_BUFFER_SIZE:
553 {
554 *type = GL_INT_64_ANGLEX;
555 *numParams = 1;
556 return true;
557 }
558 }
559
Martin Radev66fb8202016-07-28 11:45:20 +0300560 if (!glVersion.isES31())
561 {
562 return false;
563 }
564
565 switch (target)
566 {
567 case GL_MAX_COMPUTE_WORK_GROUP_COUNT:
568 case GL_MAX_COMPUTE_WORK_GROUP_SIZE:
569 {
570 *type = GL_INT;
571 *numParams = 1;
572 return true;
573 }
574 }
575
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700576 return false;
577}
578
Jamie Madillef300b12016-10-07 15:12:09 -0400579Program *ValidationContext::getProgram(GLuint handle) const
580{
581 return mState.mResourceManager->getProgram(handle);
582}
583
584Shader *ValidationContext::getShader(GLuint handle) const
585{
586 return mState.mResourceManager->getShader(handle);
587}
588
Jamie Madill46e6c7a2016-01-18 14:42:30 -0500589} // namespace gl