blob: 18a7510916dd343d92f952761190e803cbbe8f21 [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
Geoff Lang1d2c41d2016-10-19 16:14:46 -0700349 if (getExtensions().sRGBWriteControl)
350 {
351 switch (pname)
352 {
353 case GL_FRAMEBUFFER_SRGB_EXT:
354 *type = GL_BOOL;
355 *numParams = 1;
356 return true;
357 }
358 }
359
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700360 // Check for ES3.0+ parameter names which are also exposed as ES2 extensions
361 switch (pname)
362 {
363 case GL_PACK_ROW_LENGTH:
364 case GL_PACK_SKIP_ROWS:
365 case GL_PACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300366 if ((getClientMajorVersion() < 3) && !getExtensions().packSubimage)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700367 {
368 return false;
369 }
370 *type = GL_INT;
371 *numParams = 1;
372 return true;
373 case GL_UNPACK_ROW_LENGTH:
374 case GL_UNPACK_SKIP_ROWS:
375 case GL_UNPACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300376 if ((getClientMajorVersion() < 3) && !getExtensions().unpackSubimage)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700377 {
378 return false;
379 }
380 *type = GL_INT;
381 *numParams = 1;
382 return true;
383 case GL_VERTEX_ARRAY_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300384 if ((getClientMajorVersion() < 3) && !getExtensions().vertexArrayObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700385 {
386 return false;
387 }
388 *type = GL_INT;
389 *numParams = 1;
390 return true;
391 case GL_PIXEL_PACK_BUFFER_BINDING:
392 case GL_PIXEL_UNPACK_BUFFER_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300393 if ((getClientMajorVersion() < 3) && !getExtensions().pixelBufferObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700394 {
395 return false;
396 }
397 *type = GL_INT;
398 *numParams = 1;
399 return true;
400 }
401
Martin Radev66fb8202016-07-28 11:45:20 +0300402 const GLVersion &glVersion = mState.getGLVersion();
403
404 if (!glVersion.isES3OrGreater())
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700405 {
406 return false;
407 }
408
409 // Check for ES3.0+ parameter names
410 switch (pname)
411 {
412 case GL_MAX_UNIFORM_BUFFER_BINDINGS:
413 case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
414 case GL_UNIFORM_BUFFER_BINDING:
415 case GL_TRANSFORM_FEEDBACK_BINDING:
416 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
417 case GL_COPY_READ_BUFFER_BINDING:
418 case GL_COPY_WRITE_BUFFER_BINDING:
419 case GL_SAMPLER_BINDING:
420 case GL_READ_BUFFER:
421 case GL_TEXTURE_BINDING_3D:
422 case GL_TEXTURE_BINDING_2D_ARRAY:
423 case GL_MAX_3D_TEXTURE_SIZE:
424 case GL_MAX_ARRAY_TEXTURE_LAYERS:
425 case GL_MAX_VERTEX_UNIFORM_BLOCKS:
426 case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
427 case GL_MAX_COMBINED_UNIFORM_BLOCKS:
428 case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
429 case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
430 case GL_MAX_VARYING_COMPONENTS:
431 case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
432 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
433 case GL_MIN_PROGRAM_TEXEL_OFFSET:
434 case GL_MAX_PROGRAM_TEXEL_OFFSET:
435 case GL_NUM_EXTENSIONS:
436 case GL_MAJOR_VERSION:
437 case GL_MINOR_VERSION:
438 case GL_MAX_ELEMENTS_INDICES:
439 case GL_MAX_ELEMENTS_VERTICES:
440 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
441 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
442 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
443 case GL_UNPACK_IMAGE_HEIGHT:
444 case GL_UNPACK_SKIP_IMAGES:
445 {
446 *type = GL_INT;
447 *numParams = 1;
448 return true;
449 }
450
451 case GL_MAX_ELEMENT_INDEX:
452 case GL_MAX_UNIFORM_BLOCK_SIZE:
453 case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
454 case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
455 case GL_MAX_SERVER_WAIT_TIMEOUT:
456 {
457 *type = GL_INT_64_ANGLEX;
458 *numParams = 1;
459 return true;
460 }
461
462 case GL_TRANSFORM_FEEDBACK_ACTIVE:
463 case GL_TRANSFORM_FEEDBACK_PAUSED:
464 case GL_PRIMITIVE_RESTART_FIXED_INDEX:
465 case GL_RASTERIZER_DISCARD:
466 {
467 *type = GL_BOOL;
468 *numParams = 1;
469 return true;
470 }
471
472 case GL_MAX_TEXTURE_LOD_BIAS:
473 {
474 *type = GL_FLOAT;
475 *numParams = 1;
476 return true;
477 }
478 }
479
Martin Radev66fb8202016-07-28 11:45:20 +0300480 if (!glVersion.isES31())
481 {
482 return false;
483 }
484
485 switch (pname)
486 {
487 case GL_MAX_FRAMEBUFFER_WIDTH:
488 case GL_MAX_FRAMEBUFFER_HEIGHT:
489 case GL_MAX_FRAMEBUFFER_SAMPLES:
490 case GL_MAX_SAMPLE_MASK_WORDS:
491 case GL_MAX_COLOR_TEXTURE_SAMPLES:
492 case GL_MAX_DEPTH_TEXTURE_SAMPLES:
493 case GL_MAX_INTEGER_SAMPLES:
494 case GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET:
495 case GL_MAX_VERTEX_ATTRIB_BINDINGS:
496 case GL_MAX_VERTEX_ATTRIB_STRIDE:
497 case GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS:
498 case GL_MAX_VERTEX_ATOMIC_COUNTERS:
499 case GL_MAX_VERTEX_IMAGE_UNIFORMS:
500 case GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS:
501 case GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS:
502 case GL_MAX_FRAGMENT_ATOMIC_COUNTERS:
503 case GL_MAX_FRAGMENT_IMAGE_UNIFORMS:
504 case GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS:
505 case GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET:
506 case GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET:
507 case GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS:
508 case GL_MAX_COMPUTE_UNIFORM_BLOCKS:
509 case GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS:
510 case GL_MAX_COMPUTE_SHARED_MEMORY_SIZE:
511 case GL_MAX_COMPUTE_UNIFORM_COMPONENTS:
512 case GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS:
513 case GL_MAX_COMPUTE_ATOMIC_COUNTERS:
514 case GL_MAX_COMPUTE_IMAGE_UNIFORMS:
515 case GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS:
516 case GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS:
517 case GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
518 case GL_MAX_UNIFORM_LOCATIONS:
519 case GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS:
520 case GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE:
521 case GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS:
522 case GL_MAX_COMBINED_ATOMIC_COUNTERS:
523 case GL_MAX_IMAGE_UNITS:
524 case GL_MAX_COMBINED_IMAGE_UNIFORMS:
525 case GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS:
526 case GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS:
527 case GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT:
528 *type = GL_INT;
529 *numParams = 1;
530 return true;
531 case GL_MAX_SHADER_STORAGE_BLOCK_SIZE:
532 *type = GL_INT_64_ANGLEX;
533 *numParams = 1;
534 return true;
535 }
536
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700537 return false;
538}
539
540bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
541 GLenum *type,
542 unsigned int *numParams)
543{
Martin Radev66fb8202016-07-28 11:45:20 +0300544
545 const GLVersion &glVersion = mState.getGLVersion();
546 if (!glVersion.isES3OrGreater())
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700547 {
548 return false;
549 }
550
551 switch (target)
552 {
553 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
554 case GL_UNIFORM_BUFFER_BINDING:
555 {
556 *type = GL_INT;
557 *numParams = 1;
558 return true;
559 }
560 case GL_TRANSFORM_FEEDBACK_BUFFER_START:
561 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
562 case GL_UNIFORM_BUFFER_START:
563 case GL_UNIFORM_BUFFER_SIZE:
564 {
565 *type = GL_INT_64_ANGLEX;
566 *numParams = 1;
567 return true;
568 }
569 }
570
Martin Radev66fb8202016-07-28 11:45:20 +0300571 if (!glVersion.isES31())
572 {
573 return false;
574 }
575
576 switch (target)
577 {
578 case GL_MAX_COMPUTE_WORK_GROUP_COUNT:
579 case GL_MAX_COMPUTE_WORK_GROUP_SIZE:
580 {
581 *type = GL_INT;
582 *numParams = 1;
583 return true;
584 }
585 }
586
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700587 return false;
588}
589
Jamie Madillef300b12016-10-07 15:12:09 -0400590Program *ValidationContext::getProgram(GLuint handle) const
591{
592 return mState.mResourceManager->getProgram(handle);
593}
594
595Shader *ValidationContext::getShader(GLuint handle) const
596{
597 return mState.mResourceManager->getShader(handle);
598}
599
Jamie Madill46e6c7a2016-01-18 14:42:30 -0500600} // namespace gl