blob: 2a3b68ed4b5ad3583e8f7785c57cd8ea0014cb01 [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,
Geoff Langeb66a6e2016-10-31 13:06:12 -040018 const Version &clientVersion,
Jamie Madilldfde6ab2016-06-09 07:07:18 -070019 State *stateIn,
Jamie Madill9082b982016-04-27 15:21:51 -040020 const Caps &capsIn,
21 const TextureCapsMap &textureCapsIn,
22 const Extensions &extensionsIn,
23 const ResourceManager *resourceManagerIn,
24 const Limitations &limitationsIn)
Geoff Langeb66a6e2016-10-31 13:06:12 -040025 : mClientVersion(clientVersion),
Martin Radev1be913c2016-07-11 17:59:16 +030026 mContext(contextIn),
Jamie Madilldfde6ab2016-06-09 07:07:18 -070027 mState(stateIn),
28 mCaps(capsIn),
29 mTextureCaps(textureCapsIn),
30 mExtensions(extensionsIn),
31 mResourceManager(resourceManagerIn),
32 mLimitations(limitationsIn)
Jamie Madill9082b982016-04-27 15:21:51 -040033{
34}
Jamie Madill1e9ae072014-11-06 15:27:21 -050035
Jamie Madill9082b982016-04-27 15:21:51 -040036ContextState::~ContextState()
Jamie Madill1e9ae072014-11-06 15:27:21 -050037{
38}
39
Jamie Madilldfde6ab2016-06-09 07:07:18 -070040const TextureCaps &ContextState::getTextureCap(GLenum internalFormat) const
41{
42 return mTextureCaps.get(internalFormat);
43}
44
Geoff Langeb66a6e2016-10-31 13:06:12 -040045ValidationContext::ValidationContext(const Version &clientVersion,
Jamie Madilldfde6ab2016-06-09 07:07:18 -070046 State *state,
Jamie Madillf25855c2015-11-03 11:06:18 -050047 const Caps &caps,
48 const TextureCapsMap &textureCaps,
49 const Extensions &extensions,
50 const ResourceManager *resourceManager,
Jamie Madill46e6c7a2016-01-18 14:42:30 -050051 const Limitations &limitations,
52 bool skipValidation)
Jamie Madilldfde6ab2016-06-09 07:07:18 -070053 : mState(reinterpret_cast<uintptr_t>(this),
Geoff Langeb66a6e2016-10-31 13:06:12 -040054 clientVersion,
Jamie Madilldfde6ab2016-06-09 07:07:18 -070055 state,
56 caps,
57 textureCaps,
58 extensions,
59 resourceManager,
60 limitations),
Jamie Madill46e6c7a2016-01-18 14:42:30 -050061 mSkipValidation(skipValidation)
Jamie Madillf25855c2015-11-03 11:06:18 -050062{
63}
Jamie Madilldfde6ab2016-06-09 07:07:18 -070064
65bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *numParams)
66{
67 if (pname >= GL_DRAW_BUFFER0_EXT && pname <= GL_DRAW_BUFFER15_EXT)
68 {
69 *type = GL_INT;
70 *numParams = 1;
71 return true;
72 }
73
74 // Please note: the query type returned for DEPTH_CLEAR_VALUE in this implementation
75 // is FLOAT rather than INT, as would be suggested by the GL ES 2.0 spec. This is due
76 // to the fact that it is stored internally as a float, and so would require conversion
77 // if returned from Context::getIntegerv. Since this conversion is already implemented
78 // in the case that one calls glGetIntegerv to retrieve a float-typed state variable, we
79 // place DEPTH_CLEAR_VALUE with the floats. This should make no difference to the calling
80 // application.
81 switch (pname)
82 {
83 case GL_COMPRESSED_TEXTURE_FORMATS:
84 {
85 *type = GL_INT;
86 *numParams = static_cast<unsigned int>(getCaps().compressedTextureFormats.size());
87 return true;
88 }
89 case GL_PROGRAM_BINARY_FORMATS_OES:
90 {
91 *type = GL_INT;
92 *numParams = static_cast<unsigned int>(getCaps().programBinaryFormats.size());
93 return true;
94 }
95 case GL_SHADER_BINARY_FORMATS:
96 {
97 *type = GL_INT;
98 *numParams = static_cast<unsigned int>(getCaps().shaderBinaryFormats.size());
99 return true;
100 }
101
102 case GL_MAX_VERTEX_ATTRIBS:
103 case GL_MAX_VERTEX_UNIFORM_VECTORS:
104 case GL_MAX_VARYING_VECTORS:
105 case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
106 case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:
107 case GL_MAX_TEXTURE_IMAGE_UNITS:
108 case GL_MAX_FRAGMENT_UNIFORM_VECTORS:
109 case GL_MAX_RENDERBUFFER_SIZE:
110 case GL_MAX_COLOR_ATTACHMENTS_EXT:
111 case GL_MAX_DRAW_BUFFERS_EXT:
112 case GL_NUM_SHADER_BINARY_FORMATS:
113 case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
114 case GL_ARRAY_BUFFER_BINDING:
115 // case GL_FRAMEBUFFER_BINDING: // equivalent to DRAW_FRAMEBUFFER_BINDING_ANGLE
116 case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE:
117 case GL_READ_FRAMEBUFFER_BINDING_ANGLE:
118 case GL_RENDERBUFFER_BINDING:
119 case GL_CURRENT_PROGRAM:
120 case GL_PACK_ALIGNMENT:
121 case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
122 case GL_UNPACK_ALIGNMENT:
123 case GL_GENERATE_MIPMAP_HINT:
124 case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
125 case GL_RED_BITS:
126 case GL_GREEN_BITS:
127 case GL_BLUE_BITS:
128 case GL_ALPHA_BITS:
129 case GL_DEPTH_BITS:
130 case GL_STENCIL_BITS:
131 case GL_ELEMENT_ARRAY_BUFFER_BINDING:
132 case GL_CULL_FACE_MODE:
133 case GL_FRONT_FACE:
134 case GL_ACTIVE_TEXTURE:
135 case GL_STENCIL_FUNC:
136 case GL_STENCIL_VALUE_MASK:
137 case GL_STENCIL_REF:
138 case GL_STENCIL_FAIL:
139 case GL_STENCIL_PASS_DEPTH_FAIL:
140 case GL_STENCIL_PASS_DEPTH_PASS:
141 case GL_STENCIL_BACK_FUNC:
142 case GL_STENCIL_BACK_VALUE_MASK:
143 case GL_STENCIL_BACK_REF:
144 case GL_STENCIL_BACK_FAIL:
145 case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
146 case GL_STENCIL_BACK_PASS_DEPTH_PASS:
147 case GL_DEPTH_FUNC:
148 case GL_BLEND_SRC_RGB:
149 case GL_BLEND_SRC_ALPHA:
150 case GL_BLEND_DST_RGB:
151 case GL_BLEND_DST_ALPHA:
152 case GL_BLEND_EQUATION_RGB:
153 case GL_BLEND_EQUATION_ALPHA:
154 case GL_STENCIL_WRITEMASK:
155 case GL_STENCIL_BACK_WRITEMASK:
156 case GL_STENCIL_CLEAR_VALUE:
157 case GL_SUBPIXEL_BITS:
158 case GL_MAX_TEXTURE_SIZE:
159 case GL_MAX_CUBE_MAP_TEXTURE_SIZE:
160 case GL_SAMPLE_BUFFERS:
161 case GL_SAMPLES:
162 case GL_IMPLEMENTATION_COLOR_READ_TYPE:
163 case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
164 case GL_TEXTURE_BINDING_2D:
165 case GL_TEXTURE_BINDING_CUBE_MAP:
166 case GL_RESET_NOTIFICATION_STRATEGY_EXT:
167 case GL_NUM_PROGRAM_BINARY_FORMATS_OES:
168 {
169 *type = GL_INT;
170 *numParams = 1;
171 return true;
172 }
173 case GL_MAX_SAMPLES_ANGLE:
174 {
175 if (!getExtensions().framebufferMultisample)
176 {
177 return false;
178 }
179 *type = GL_INT;
180 *numParams = 1;
181 return true;
182 }
183 case GL_MAX_VIEWPORT_DIMS:
184 {
185 *type = GL_INT;
186 *numParams = 2;
187 return true;
188 }
189 case GL_VIEWPORT:
190 case GL_SCISSOR_BOX:
191 {
192 *type = GL_INT;
193 *numParams = 4;
194 return true;
195 }
196 case GL_SHADER_COMPILER:
197 case GL_SAMPLE_COVERAGE_INVERT:
198 case GL_DEPTH_WRITEMASK:
199 case GL_CULL_FACE: // CULL_FACE through DITHER are natural to IsEnabled,
200 case GL_POLYGON_OFFSET_FILL: // but can be retrieved through the Get{Type}v queries.
201 case GL_SAMPLE_ALPHA_TO_COVERAGE: // For this purpose, they are treated here as
202 // bool-natural
203 case GL_SAMPLE_COVERAGE:
204 case GL_SCISSOR_TEST:
205 case GL_STENCIL_TEST:
206 case GL_DEPTH_TEST:
207 case GL_BLEND:
208 case GL_DITHER:
209 case GL_CONTEXT_ROBUST_ACCESS_EXT:
210 {
211 *type = GL_BOOL;
212 *numParams = 1;
213 return true;
214 }
215 case GL_COLOR_WRITEMASK:
216 {
217 *type = GL_BOOL;
218 *numParams = 4;
219 return true;
220 }
221 case GL_POLYGON_OFFSET_FACTOR:
222 case GL_POLYGON_OFFSET_UNITS:
223 case GL_SAMPLE_COVERAGE_VALUE:
224 case GL_DEPTH_CLEAR_VALUE:
225 case GL_LINE_WIDTH:
226 {
227 *type = GL_FLOAT;
228 *numParams = 1;
229 return true;
230 }
231 case GL_ALIASED_LINE_WIDTH_RANGE:
232 case GL_ALIASED_POINT_SIZE_RANGE:
233 case GL_DEPTH_RANGE:
234 {
235 *type = GL_FLOAT;
236 *numParams = 2;
237 return true;
238 }
239 case GL_COLOR_CLEAR_VALUE:
240 case GL_BLEND_COLOR:
241 {
242 *type = GL_FLOAT;
243 *numParams = 4;
244 return true;
245 }
246 case GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT:
247 if (!getExtensions().maxTextureAnisotropy)
248 {
249 return false;
250 }
251 *type = GL_FLOAT;
252 *numParams = 1;
253 return true;
254 case GL_TIMESTAMP_EXT:
255 if (!getExtensions().disjointTimerQuery)
256 {
257 return false;
258 }
259 *type = GL_INT_64_ANGLEX;
260 *numParams = 1;
261 return true;
262 case GL_GPU_DISJOINT_EXT:
263 if (!getExtensions().disjointTimerQuery)
264 {
265 return false;
266 }
267 *type = GL_INT;
268 *numParams = 1;
269 return true;
270 case GL_COVERAGE_MODULATION_CHROMIUM:
271 if (!getExtensions().framebufferMixedSamples)
272 {
273 return false;
274 }
275 *type = GL_INT;
276 *numParams = 1;
277 return true;
John Bauman18319182016-09-28 14:22:27 -0700278 case GL_TEXTURE_BINDING_EXTERNAL_OES:
279 if (!getExtensions().eglStreamConsumerExternal && !getExtensions().eglImageExternal)
280 {
281 return false;
282 }
283 *type = GL_INT;
284 *numParams = 1;
285 return true;
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700286 }
287
288 if (getExtensions().debug)
289 {
290 switch (pname)
291 {
292 case GL_DEBUG_LOGGED_MESSAGES:
293 case GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH:
294 case GL_DEBUG_GROUP_STACK_DEPTH:
295 case GL_MAX_DEBUG_MESSAGE_LENGTH:
296 case GL_MAX_DEBUG_LOGGED_MESSAGES:
297 case GL_MAX_DEBUG_GROUP_STACK_DEPTH:
298 case GL_MAX_LABEL_LENGTH:
299 *type = GL_INT;
300 *numParams = 1;
301 return true;
302
303 case GL_DEBUG_OUTPUT_SYNCHRONOUS:
304 case GL_DEBUG_OUTPUT:
305 *type = GL_BOOL;
306 *numParams = 1;
307 return true;
308 }
309 }
310
311 if (getExtensions().multisampleCompatibility)
312 {
313 switch (pname)
314 {
315 case GL_MULTISAMPLE_EXT:
316 case GL_SAMPLE_ALPHA_TO_ONE_EXT:
317 *type = GL_BOOL;
318 *numParams = 1;
319 return true;
320 }
321 }
322
Sami Väisänene45e53b2016-05-25 10:36:04 +0300323 if (getExtensions().pathRendering)
324 {
325 switch (pname)
326 {
327 case GL_PATH_MODELVIEW_MATRIX_CHROMIUM:
328 case GL_PATH_PROJECTION_MATRIX_CHROMIUM:
329 *type = GL_FLOAT;
330 *numParams = 16;
331 return true;
332 }
333 }
334
Geoff Langf41a7152016-09-19 15:11:17 -0400335 if (getExtensions().bindGeneratesResource)
336 {
337 switch (pname)
338 {
339 case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
340 *type = GL_BOOL;
341 *numParams = 1;
342 return true;
343 }
344 }
345
Geoff Lang1d2c41d2016-10-19 16:14:46 -0700346 if (getExtensions().sRGBWriteControl)
347 {
348 switch (pname)
349 {
350 case GL_FRAMEBUFFER_SRGB_EXT:
351 *type = GL_BOOL;
352 *numParams = 1;
353 return true;
354 }
355 }
356
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700357 // Check for ES3.0+ parameter names which are also exposed as ES2 extensions
358 switch (pname)
359 {
360 case GL_PACK_ROW_LENGTH:
361 case GL_PACK_SKIP_ROWS:
362 case GL_PACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300363 if ((getClientMajorVersion() < 3) && !getExtensions().packSubimage)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700364 {
365 return false;
366 }
367 *type = GL_INT;
368 *numParams = 1;
369 return true;
370 case GL_UNPACK_ROW_LENGTH:
371 case GL_UNPACK_SKIP_ROWS:
372 case GL_UNPACK_SKIP_PIXELS:
Martin Radev1be913c2016-07-11 17:59:16 +0300373 if ((getClientMajorVersion() < 3) && !getExtensions().unpackSubimage)
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_VERTEX_ARRAY_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300381 if ((getClientMajorVersion() < 3) && !getExtensions().vertexArrayObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700382 {
383 return false;
384 }
385 *type = GL_INT;
386 *numParams = 1;
387 return true;
388 case GL_PIXEL_PACK_BUFFER_BINDING:
389 case GL_PIXEL_UNPACK_BUFFER_BINDING:
Martin Radev1be913c2016-07-11 17:59:16 +0300390 if ((getClientMajorVersion() < 3) && !getExtensions().pixelBufferObject)
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700391 {
392 return false;
393 }
394 *type = GL_INT;
395 *numParams = 1;
396 return true;
397 }
398
Geoff Langeb66a6e2016-10-31 13:06:12 -0400399 if (getClientVersion() < Version(3, 0))
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700400 {
401 return false;
402 }
403
404 // Check for ES3.0+ parameter names
405 switch (pname)
406 {
407 case GL_MAX_UNIFORM_BUFFER_BINDINGS:
408 case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
409 case GL_UNIFORM_BUFFER_BINDING:
410 case GL_TRANSFORM_FEEDBACK_BINDING:
411 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
412 case GL_COPY_READ_BUFFER_BINDING:
413 case GL_COPY_WRITE_BUFFER_BINDING:
414 case GL_SAMPLER_BINDING:
415 case GL_READ_BUFFER:
416 case GL_TEXTURE_BINDING_3D:
417 case GL_TEXTURE_BINDING_2D_ARRAY:
418 case GL_MAX_3D_TEXTURE_SIZE:
419 case GL_MAX_ARRAY_TEXTURE_LAYERS:
420 case GL_MAX_VERTEX_UNIFORM_BLOCKS:
421 case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
422 case GL_MAX_COMBINED_UNIFORM_BLOCKS:
423 case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
424 case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
425 case GL_MAX_VARYING_COMPONENTS:
426 case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
427 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
428 case GL_MIN_PROGRAM_TEXEL_OFFSET:
429 case GL_MAX_PROGRAM_TEXEL_OFFSET:
430 case GL_NUM_EXTENSIONS:
431 case GL_MAJOR_VERSION:
432 case GL_MINOR_VERSION:
433 case GL_MAX_ELEMENTS_INDICES:
434 case GL_MAX_ELEMENTS_VERTICES:
435 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
436 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
437 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
438 case GL_UNPACK_IMAGE_HEIGHT:
439 case GL_UNPACK_SKIP_IMAGES:
440 {
441 *type = GL_INT;
442 *numParams = 1;
443 return true;
444 }
445
446 case GL_MAX_ELEMENT_INDEX:
447 case GL_MAX_UNIFORM_BLOCK_SIZE:
448 case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
449 case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
450 case GL_MAX_SERVER_WAIT_TIMEOUT:
451 {
452 *type = GL_INT_64_ANGLEX;
453 *numParams = 1;
454 return true;
455 }
456
457 case GL_TRANSFORM_FEEDBACK_ACTIVE:
458 case GL_TRANSFORM_FEEDBACK_PAUSED:
459 case GL_PRIMITIVE_RESTART_FIXED_INDEX:
460 case GL_RASTERIZER_DISCARD:
461 {
462 *type = GL_BOOL;
463 *numParams = 1;
464 return true;
465 }
466
467 case GL_MAX_TEXTURE_LOD_BIAS:
468 {
469 *type = GL_FLOAT;
470 *numParams = 1;
471 return true;
472 }
473 }
474
Geoff Langeb66a6e2016-10-31 13:06:12 -0400475 if (getClientVersion() < Version(3, 1))
Martin Radev66fb8202016-07-28 11:45:20 +0300476 {
477 return false;
478 }
479
480 switch (pname)
481 {
482 case GL_MAX_FRAMEBUFFER_WIDTH:
483 case GL_MAX_FRAMEBUFFER_HEIGHT:
484 case GL_MAX_FRAMEBUFFER_SAMPLES:
485 case GL_MAX_SAMPLE_MASK_WORDS:
486 case GL_MAX_COLOR_TEXTURE_SAMPLES:
487 case GL_MAX_DEPTH_TEXTURE_SAMPLES:
488 case GL_MAX_INTEGER_SAMPLES:
489 case GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET:
490 case GL_MAX_VERTEX_ATTRIB_BINDINGS:
491 case GL_MAX_VERTEX_ATTRIB_STRIDE:
492 case GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS:
493 case GL_MAX_VERTEX_ATOMIC_COUNTERS:
494 case GL_MAX_VERTEX_IMAGE_UNIFORMS:
495 case GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS:
496 case GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS:
497 case GL_MAX_FRAGMENT_ATOMIC_COUNTERS:
498 case GL_MAX_FRAGMENT_IMAGE_UNIFORMS:
499 case GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS:
500 case GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET:
501 case GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET:
502 case GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS:
503 case GL_MAX_COMPUTE_UNIFORM_BLOCKS:
504 case GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS:
505 case GL_MAX_COMPUTE_SHARED_MEMORY_SIZE:
506 case GL_MAX_COMPUTE_UNIFORM_COMPONENTS:
507 case GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS:
508 case GL_MAX_COMPUTE_ATOMIC_COUNTERS:
509 case GL_MAX_COMPUTE_IMAGE_UNIFORMS:
510 case GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS:
511 case GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS:
512 case GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
513 case GL_MAX_UNIFORM_LOCATIONS:
514 case GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS:
515 case GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE:
516 case GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS:
517 case GL_MAX_COMBINED_ATOMIC_COUNTERS:
518 case GL_MAX_IMAGE_UNITS:
519 case GL_MAX_COMBINED_IMAGE_UNIFORMS:
520 case GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS:
521 case GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS:
522 case GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT:
523 *type = GL_INT;
524 *numParams = 1;
525 return true;
526 case GL_MAX_SHADER_STORAGE_BLOCK_SIZE:
527 *type = GL_INT_64_ANGLEX;
528 *numParams = 1;
529 return true;
530 }
531
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700532 return false;
533}
534
535bool ValidationContext::getIndexedQueryParameterInfo(GLenum target,
536 GLenum *type,
537 unsigned int *numParams)
538{
Geoff Langeb66a6e2016-10-31 13:06:12 -0400539 if (getClientVersion() < Version(3, 0))
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700540 {
541 return false;
542 }
543
544 switch (target)
545 {
546 case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
547 case GL_UNIFORM_BUFFER_BINDING:
548 {
549 *type = GL_INT;
550 *numParams = 1;
551 return true;
552 }
553 case GL_TRANSFORM_FEEDBACK_BUFFER_START:
554 case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
555 case GL_UNIFORM_BUFFER_START:
556 case GL_UNIFORM_BUFFER_SIZE:
557 {
558 *type = GL_INT_64_ANGLEX;
559 *numParams = 1;
560 return true;
561 }
562 }
563
Geoff Langeb66a6e2016-10-31 13:06:12 -0400564 if (getClientVersion() < Version(3, 1))
Martin Radev66fb8202016-07-28 11:45:20 +0300565 {
566 return false;
567 }
568
569 switch (target)
570 {
571 case GL_MAX_COMPUTE_WORK_GROUP_COUNT:
572 case GL_MAX_COMPUTE_WORK_GROUP_SIZE:
573 {
574 *type = GL_INT;
575 *numParams = 1;
576 return true;
577 }
578 }
579
Jamie Madilldfde6ab2016-06-09 07:07:18 -0700580 return false;
581}
582
Jamie Madillef300b12016-10-07 15:12:09 -0400583Program *ValidationContext::getProgram(GLuint handle) const
584{
585 return mState.mResourceManager->getProgram(handle);
586}
587
588Shader *ValidationContext::getShader(GLuint handle) const
589{
590 return mState.mResourceManager->getShader(handle);
591}
592
Jamie Madill46e6c7a2016-01-18 14:42:30 -0500593} // namespace gl