blob: e649ba7a385f49004649f36d697eb2fdf3074864 [file] [log] [blame]
Geoff Langff5b2d52016-09-07 11:32:23 -04001//
2// Copyright (c) 2016 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// queryutils.cpp: Utilities for querying values from GL objects
8
9#include "libANGLE/queryutils.h"
10
Geoff Langc1984ed2016-10-07 12:41:00 -040011#include "common/utilities.h"
12
Geoff Langff5b2d52016-09-07 11:32:23 -040013#include "libANGLE/Buffer.h"
Geoff Lang65603eb2017-01-12 16:48:03 -050014#include "libANGLE/Config.h"
Jamie Madill4e0e6f82017-02-17 11:06:03 -050015#include "libANGLE/Context.h"
Geoff Lang38f2cfb2017-04-11 15:23:08 -040016#include "libANGLE/Fence.h"
Geoff Langff5b2d52016-09-07 11:32:23 -040017#include "libANGLE/Framebuffer.h"
18#include "libANGLE/Program.h"
Geoff Lang740d9022016-10-07 11:20:52 -040019#include "libANGLE/Renderbuffer.h"
Geoff Langc1984ed2016-10-07 12:41:00 -040020#include "libANGLE/Sampler.h"
Geoff Langd7d0ed32016-10-07 11:33:51 -040021#include "libANGLE/Shader.h"
Geoff Langc1984ed2016-10-07 12:41:00 -040022#include "libANGLE/Texture.h"
Geoff Lang6899b872016-10-14 11:30:13 -040023#include "libANGLE/Uniform.h"
Geoff Lang0b031062016-10-13 14:30:04 -040024#include "libANGLE/VertexAttribute.h"
Geoff Langff5b2d52016-09-07 11:32:23 -040025
26namespace gl
27{
Geoff Langc1984ed2016-10-07 12:41:00 -040028
29namespace
30{
31template <typename ParamType>
He Yunchao11b038b2016-11-22 21:24:04 +080032void QueryTexLevelParameterBase(const Texture *texture,
33 GLenum target,
34 GLint level,
35 GLenum pname,
36 ParamType *params)
37{
38 ASSERT(texture != nullptr);
39 const InternalFormat *info = texture->getTextureState().getImageDesc(target, level).format.info;
40
41 switch (pname)
42 {
43 case GL_TEXTURE_RED_TYPE:
44 *params = ConvertFromGLenum<ParamType>(info->redBits ? info->componentType : GL_NONE);
45 break;
46 case GL_TEXTURE_GREEN_TYPE:
47 *params = ConvertFromGLenum<ParamType>(info->greenBits ? info->componentType : GL_NONE);
48 break;
49 case GL_TEXTURE_BLUE_TYPE:
50 *params = ConvertFromGLenum<ParamType>(info->blueBits ? info->componentType : GL_NONE);
51 break;
52 case GL_TEXTURE_ALPHA_TYPE:
53 *params = ConvertFromGLenum<ParamType>(info->alphaBits ? info->componentType : GL_NONE);
54 break;
55 case GL_TEXTURE_DEPTH_TYPE:
56 *params = ConvertFromGLenum<ParamType>(info->depthBits ? info->componentType : GL_NONE);
57 break;
58 case GL_TEXTURE_RED_SIZE:
59 *params = ConvertFromGLuint<ParamType>(info->redBits);
60 break;
61 case GL_TEXTURE_GREEN_SIZE:
62 *params = ConvertFromGLuint<ParamType>(info->greenBits);
63 break;
64 case GL_TEXTURE_BLUE_SIZE:
65 *params = ConvertFromGLuint<ParamType>(info->blueBits);
66 break;
67 case GL_TEXTURE_ALPHA_SIZE:
68 *params = ConvertFromGLuint<ParamType>(info->alphaBits);
69 break;
70 case GL_TEXTURE_DEPTH_SIZE:
71 *params = ConvertFromGLuint<ParamType>(info->depthBits);
72 break;
73 case GL_TEXTURE_STENCIL_SIZE:
74 *params = ConvertFromGLuint<ParamType>(info->stencilBits);
75 break;
76 case GL_TEXTURE_SHARED_SIZE:
77 *params = ConvertFromGLuint<ParamType>(info->sharedBits);
78 break;
79 case GL_TEXTURE_INTERNAL_FORMAT:
80 *params =
81 ConvertFromGLenum<ParamType>(info->internalFormat ? info->internalFormat : GL_RGBA);
82 break;
83 case GL_TEXTURE_WIDTH:
84 *params =
85 ConvertFromGLint<ParamType>(static_cast<GLint>(texture->getWidth(target, level)));
86 break;
87 case GL_TEXTURE_HEIGHT:
88 *params =
89 ConvertFromGLint<ParamType>(static_cast<GLint>(texture->getHeight(target, level)));
90 break;
91 case GL_TEXTURE_DEPTH:
92 *params =
93 ConvertFromGLint<ParamType>(static_cast<GLint>(texture->getDepth(target, level)));
94 break;
95 case GL_TEXTURE_SAMPLES:
96 *params = ConvertFromGLint<ParamType>(texture->getSamples(target, level));
97 break;
98 case GL_TEXTURE_FIXED_SAMPLE_LOCATIONS:
99 *params =
100 ConvertFromGLboolean<ParamType>(texture->getFixedSampleLocations(target, level));
101 break;
102 case GL_TEXTURE_COMPRESSED:
103 *params = ConvertFromGLboolean<ParamType>(info->compressed);
104 break;
105 default:
106 UNREACHABLE();
107 break;
108 }
109}
110
111template <typename ParamType>
Geoff Langc1984ed2016-10-07 12:41:00 -0400112void QueryTexParameterBase(const Texture *texture, GLenum pname, ParamType *params)
113{
114 ASSERT(texture != nullptr);
115
116 switch (pname)
117 {
118 case GL_TEXTURE_MAG_FILTER:
119 *params = ConvertFromGLenum<ParamType>(texture->getMagFilter());
120 break;
121 case GL_TEXTURE_MIN_FILTER:
122 *params = ConvertFromGLenum<ParamType>(texture->getMinFilter());
123 break;
124 case GL_TEXTURE_WRAP_S:
125 *params = ConvertFromGLenum<ParamType>(texture->getWrapS());
126 break;
127 case GL_TEXTURE_WRAP_T:
128 *params = ConvertFromGLenum<ParamType>(texture->getWrapT());
129 break;
130 case GL_TEXTURE_WRAP_R:
131 *params = ConvertFromGLenum<ParamType>(texture->getWrapR());
132 break;
133 case GL_TEXTURE_IMMUTABLE_FORMAT:
134 *params = ConvertFromGLboolean<ParamType>(texture->getImmutableFormat());
135 break;
136 case GL_TEXTURE_IMMUTABLE_LEVELS:
137 *params = ConvertFromGLuint<ParamType>(texture->getImmutableLevels());
138 break;
139 case GL_TEXTURE_USAGE_ANGLE:
140 *params = ConvertFromGLenum<ParamType>(texture->getUsage());
141 break;
142 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
143 *params = ConvertFromGLfloat<ParamType>(texture->getMaxAnisotropy());
144 break;
145 case GL_TEXTURE_SWIZZLE_R:
146 *params = ConvertFromGLenum<ParamType>(texture->getSwizzleRed());
147 break;
148 case GL_TEXTURE_SWIZZLE_G:
149 *params = ConvertFromGLenum<ParamType>(texture->getSwizzleGreen());
150 break;
151 case GL_TEXTURE_SWIZZLE_B:
152 *params = ConvertFromGLenum<ParamType>(texture->getSwizzleBlue());
153 break;
154 case GL_TEXTURE_SWIZZLE_A:
155 *params = ConvertFromGLenum<ParamType>(texture->getSwizzleAlpha());
156 break;
157 case GL_TEXTURE_BASE_LEVEL:
158 *params = ConvertFromGLuint<ParamType>(texture->getBaseLevel());
159 break;
160 case GL_TEXTURE_MAX_LEVEL:
161 *params = ConvertFromGLuint<ParamType>(texture->getMaxLevel());
162 break;
163 case GL_TEXTURE_MIN_LOD:
164 *params = ConvertFromGLfloat<ParamType>(texture->getSamplerState().minLod);
165 break;
166 case GL_TEXTURE_MAX_LOD:
167 *params = ConvertFromGLfloat<ParamType>(texture->getSamplerState().maxLod);
168 break;
169 case GL_TEXTURE_COMPARE_MODE:
170 *params = ConvertFromGLenum<ParamType>(texture->getCompareMode());
171 break;
172 case GL_TEXTURE_COMPARE_FUNC:
173 *params = ConvertFromGLenum<ParamType>(texture->getCompareFunc());
174 break;
Geoff Lang81c6b572016-10-19 14:07:52 -0700175 case GL_TEXTURE_SRGB_DECODE_EXT:
176 *params = ConvertFromGLenum<ParamType>(texture->getSRGBDecode());
177 break;
Geoff Langc1984ed2016-10-07 12:41:00 -0400178 default:
179 UNREACHABLE();
180 break;
181 }
182}
183
184template <typename ParamType>
185void SetTexParameterBase(Texture *texture, GLenum pname, const ParamType *params)
186{
187 ASSERT(texture != nullptr);
188
189 switch (pname)
190 {
191 case GL_TEXTURE_WRAP_S:
192 texture->setWrapS(ConvertToGLenum(params[0]));
193 break;
194 case GL_TEXTURE_WRAP_T:
195 texture->setWrapT(ConvertToGLenum(params[0]));
196 break;
197 case GL_TEXTURE_WRAP_R:
198 texture->setWrapR(ConvertToGLenum(params[0]));
199 break;
200 case GL_TEXTURE_MIN_FILTER:
201 texture->setMinFilter(ConvertToGLenum(params[0]));
202 break;
203 case GL_TEXTURE_MAG_FILTER:
204 texture->setMagFilter(ConvertToGLenum(params[0]));
205 break;
206 case GL_TEXTURE_USAGE_ANGLE:
207 texture->setUsage(ConvertToGLenum(params[0]));
208 break;
209 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
210 texture->setMaxAnisotropy(ConvertToGLfloat(params[0]));
211 break;
212 case GL_TEXTURE_COMPARE_MODE:
213 texture->setCompareMode(ConvertToGLenum(params[0]));
214 break;
215 case GL_TEXTURE_COMPARE_FUNC:
216 texture->setCompareFunc(ConvertToGLenum(params[0]));
217 break;
218 case GL_TEXTURE_SWIZZLE_R:
219 texture->setSwizzleRed(ConvertToGLenum(params[0]));
220 break;
221 case GL_TEXTURE_SWIZZLE_G:
222 texture->setSwizzleGreen(ConvertToGLenum(params[0]));
223 break;
224 case GL_TEXTURE_SWIZZLE_B:
225 texture->setSwizzleBlue(ConvertToGLenum(params[0]));
226 break;
227 case GL_TEXTURE_SWIZZLE_A:
228 texture->setSwizzleAlpha(ConvertToGLenum(params[0]));
229 break;
230 case GL_TEXTURE_BASE_LEVEL:
231 texture->setBaseLevel(ConvertToGLuint(params[0]));
232 break;
233 case GL_TEXTURE_MAX_LEVEL:
234 texture->setMaxLevel(ConvertToGLuint(params[0]));
235 break;
236 case GL_TEXTURE_MIN_LOD:
237 texture->setMinLod(ConvertToGLfloat(params[0]));
238 break;
239 case GL_TEXTURE_MAX_LOD:
240 texture->setMaxLod(ConvertToGLfloat(params[0]));
241 break;
Geoff Lang3b573612016-10-31 14:08:10 -0400242 case GL_DEPTH_STENCIL_TEXTURE_MODE:
Geoff Lang9f090372016-12-02 10:20:43 -0500243 texture->setDepthStencilTextureMode(ConvertToGLenum(params[0]));
Geoff Lang3b573612016-10-31 14:08:10 -0400244 break;
Geoff Lang81c6b572016-10-19 14:07:52 -0700245 case GL_TEXTURE_SRGB_DECODE_EXT:
246 texture->setSRGBDecode(ConvertToGLenum(params[0]));
247 break;
Geoff Langc1984ed2016-10-07 12:41:00 -0400248 default:
249 UNREACHABLE();
250 break;
251 }
252}
253
254template <typename ParamType>
255void QuerySamplerParameterBase(const Sampler *sampler, GLenum pname, ParamType *params)
256{
257 switch (pname)
258 {
259 case GL_TEXTURE_MIN_FILTER:
260 *params = ConvertFromGLenum<ParamType>(sampler->getMinFilter());
261 break;
262 case GL_TEXTURE_MAG_FILTER:
263 *params = ConvertFromGLenum<ParamType>(sampler->getMagFilter());
264 break;
265 case GL_TEXTURE_WRAP_S:
266 *params = ConvertFromGLenum<ParamType>(sampler->getWrapS());
267 break;
268 case GL_TEXTURE_WRAP_T:
269 *params = ConvertFromGLenum<ParamType>(sampler->getWrapT());
270 break;
271 case GL_TEXTURE_WRAP_R:
272 *params = ConvertFromGLenum<ParamType>(sampler->getWrapR());
273 break;
274 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
275 *params = ConvertFromGLfloat<ParamType>(sampler->getMaxAnisotropy());
276 break;
277 case GL_TEXTURE_MIN_LOD:
278 *params = ConvertFromGLfloat<ParamType>(sampler->getMinLod());
279 break;
280 case GL_TEXTURE_MAX_LOD:
281 *params = ConvertFromGLfloat<ParamType>(sampler->getMaxLod());
282 break;
283 case GL_TEXTURE_COMPARE_MODE:
284 *params = ConvertFromGLenum<ParamType>(sampler->getCompareMode());
285 break;
286 case GL_TEXTURE_COMPARE_FUNC:
287 *params = ConvertFromGLenum<ParamType>(sampler->getCompareFunc());
288 break;
Geoff Lang81c6b572016-10-19 14:07:52 -0700289 case GL_TEXTURE_SRGB_DECODE_EXT:
290 *params = ConvertFromGLenum<ParamType>(sampler->getSRGBDecode());
291 break;
Geoff Langc1984ed2016-10-07 12:41:00 -0400292 default:
293 UNREACHABLE();
294 break;
295 }
296}
297
298template <typename ParamType>
299void SetSamplerParameterBase(Sampler *sampler, GLenum pname, const ParamType *params)
300{
301 switch (pname)
302 {
303 case GL_TEXTURE_WRAP_S:
304 sampler->setWrapS(ConvertToGLenum(params[0]));
305 break;
306 case GL_TEXTURE_WRAP_T:
307 sampler->setWrapT(ConvertToGLenum(params[0]));
308 break;
309 case GL_TEXTURE_WRAP_R:
310 sampler->setWrapR(ConvertToGLenum(params[0]));
311 break;
312 case GL_TEXTURE_MIN_FILTER:
313 sampler->setMinFilter(ConvertToGLenum(params[0]));
314 break;
315 case GL_TEXTURE_MAG_FILTER:
316 sampler->setMagFilter(ConvertToGLenum(params[0]));
317 break;
318 case GL_TEXTURE_MAX_ANISOTROPY_EXT:
319 sampler->setMaxAnisotropy(ConvertToGLfloat(params[0]));
320 break;
321 case GL_TEXTURE_COMPARE_MODE:
322 sampler->setCompareMode(ConvertToGLenum(params[0]));
323 break;
324 case GL_TEXTURE_COMPARE_FUNC:
325 sampler->setCompareFunc(ConvertToGLenum(params[0]));
326 break;
327 case GL_TEXTURE_MIN_LOD:
328 sampler->setMinLod(ConvertToGLfloat(params[0]));
329 break;
330 case GL_TEXTURE_MAX_LOD:
331 sampler->setMaxLod(ConvertToGLfloat(params[0]));
332 break;
Geoff Lang81c6b572016-10-19 14:07:52 -0700333 case GL_TEXTURE_SRGB_DECODE_EXT:
334 sampler->setSRGBDecode(ConvertToGLenum(params[0]));
335 break;
Geoff Langc1984ed2016-10-07 12:41:00 -0400336 default:
337 UNREACHABLE();
338 break;
339 }
340}
341
Geoff Lang0b031062016-10-13 14:30:04 -0400342template <typename ParamType, typename CurrentDataType>
343ParamType ConvertCurrentValue(CurrentDataType currentValue)
344{
345 return static_cast<ParamType>(currentValue);
346}
347
348template <>
349GLint ConvertCurrentValue(GLfloat currentValue)
350{
351 return iround<GLint>(currentValue);
352}
353
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800354// Warning: you should ensure binding really matches attrib.bindingIndex before using this function.
Geoff Lang0b031062016-10-13 14:30:04 -0400355template <typename ParamType, typename CurrentDataType, size_t CurrentValueCount>
356void QueryVertexAttribBase(const VertexAttribute &attrib,
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800357 const VertexBinding &binding,
Geoff Lang0b031062016-10-13 14:30:04 -0400358 const CurrentDataType (&currentValueData)[CurrentValueCount],
359 GLenum pname,
360 ParamType *params)
361{
362 switch (pname)
363 {
364 case GL_CURRENT_VERTEX_ATTRIB:
365 for (size_t i = 0; i < CurrentValueCount; ++i)
366 {
367 params[i] = ConvertCurrentValue<ParamType>(currentValueData[i]);
368 }
369 break;
370 case GL_VERTEX_ATTRIB_ARRAY_ENABLED:
371 *params = ConvertFromGLboolean<ParamType>(attrib.enabled);
372 break;
373 case GL_VERTEX_ATTRIB_ARRAY_SIZE:
374 *params = ConvertFromGLuint<ParamType>(attrib.size);
375 break;
376 case GL_VERTEX_ATTRIB_ARRAY_STRIDE:
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800377 *params = ConvertFromGLuint<ParamType>(attrib.vertexAttribArrayStride);
Geoff Lang0b031062016-10-13 14:30:04 -0400378 break;
379 case GL_VERTEX_ATTRIB_ARRAY_TYPE:
380 *params = ConvertFromGLenum<ParamType>(attrib.type);
381 break;
382 case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED:
383 *params = ConvertFromGLboolean<ParamType>(attrib.normalized);
384 break;
385 case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:
Martin Radevdd5f27e2017-06-07 10:17:09 +0300386 *params = ConvertFromGLuint<ParamType>(binding.getBuffer().id());
Geoff Lang0b031062016-10-13 14:30:04 -0400387 break;
388 case GL_VERTEX_ATTRIB_ARRAY_DIVISOR:
Martin Radevdd5f27e2017-06-07 10:17:09 +0300389 *params = ConvertFromGLuint<ParamType>(binding.getDivisor());
Geoff Lang0b031062016-10-13 14:30:04 -0400390 break;
391 case GL_VERTEX_ATTRIB_ARRAY_INTEGER:
392 *params = ConvertFromGLboolean<ParamType>(attrib.pureInteger);
393 break;
Shao80957d92017-02-20 21:25:59 +0800394 case GL_VERTEX_ATTRIB_BINDING:
395 *params = ConvertFromGLuint<ParamType>(attrib.bindingIndex);
396 break;
397 case GL_VERTEX_ATTRIB_RELATIVE_OFFSET:
398 // attrib.relativeOffset should not be negative or greater than max GLint
399 ASSERT(attrib.relativeOffset >= 0 &&
400 attrib.relativeOffset <= std::numeric_limits<GLint>::max());
401 *params = ConvertFromGLint<ParamType>(static_cast<GLint>(attrib.relativeOffset));
402 break;
Geoff Lang0b031062016-10-13 14:30:04 -0400403 default:
404 UNREACHABLE();
405 break;
406 }
407}
408
Geoff Langebebe1c2016-10-14 12:01:31 -0400409template <typename ParamType>
410void QueryBufferParameterBase(const Buffer *buffer, GLenum pname, ParamType *params)
411{
412 ASSERT(buffer != nullptr);
413
414 switch (pname)
415 {
416 case GL_BUFFER_USAGE:
417 *params = ConvertFromGLenum<ParamType>(buffer->getUsage());
418 break;
419 case GL_BUFFER_SIZE:
420 *params = ConvertFromGLint64<ParamType>(buffer->getSize());
421 break;
422 case GL_BUFFER_ACCESS_FLAGS:
423 *params = ConvertFromGLuint<ParamType>(buffer->getAccessFlags());
424 break;
425 case GL_BUFFER_ACCESS_OES:
426 *params = ConvertFromGLenum<ParamType>(buffer->getAccess());
427 break;
428 case GL_BUFFER_MAPPED:
429 *params = ConvertFromGLboolean<ParamType>(buffer->isMapped());
430 break;
431 case GL_BUFFER_MAP_OFFSET:
432 *params = ConvertFromGLint64<ParamType>(buffer->getMapOffset());
433 break;
434 case GL_BUFFER_MAP_LENGTH:
435 *params = ConvertFromGLint64<ParamType>(buffer->getMapLength());
436 break;
437 default:
438 UNREACHABLE();
439 break;
440 }
441}
442
Geoff Langc1984ed2016-10-07 12:41:00 -0400443} // anonymous namespace
444
Geoff Langff5b2d52016-09-07 11:32:23 -0400445void QueryFramebufferAttachmentParameteriv(const Framebuffer *framebuffer,
446 GLenum attachment,
447 GLenum pname,
448 GLint *params)
449{
450 ASSERT(framebuffer);
451
452 const FramebufferAttachment *attachmentObject = framebuffer->getAttachment(attachment);
453 if (attachmentObject == nullptr)
454 {
455 // ES 2.0.25 spec pg 127 states that if the value of FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
456 // is NONE, then querying any other pname will generate INVALID_ENUM.
457
458 // ES 3.0.2 spec pg 235 states that if the attachment type is none,
459 // GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero and be an
460 // INVALID_OPERATION for all other pnames
461
462 switch (pname)
463 {
464 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
465 *params = GL_NONE;
466 break;
467
468 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
469 *params = 0;
470 break;
471
472 default:
473 UNREACHABLE();
474 break;
475 }
476
477 return;
478 }
479
480 switch (pname)
481 {
482 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
483 *params = attachmentObject->type();
484 break;
485
486 case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:
487 *params = attachmentObject->id();
488 break;
489
490 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:
491 *params = attachmentObject->mipLevel();
492 break;
493
494 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
495 *params = attachmentObject->cubeMapFace();
496 break;
497
498 case GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE:
499 *params = attachmentObject->getRedSize();
500 break;
501
502 case GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:
503 *params = attachmentObject->getGreenSize();
504 break;
505
506 case GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:
507 *params = attachmentObject->getBlueSize();
508 break;
509
510 case GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:
511 *params = attachmentObject->getAlphaSize();
512 break;
513
514 case GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:
515 *params = attachmentObject->getDepthSize();
516 break;
517
518 case GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:
519 *params = attachmentObject->getStencilSize();
520 break;
521
522 case GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:
523 *params = attachmentObject->getComponentType();
524 break;
525
526 case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
527 *params = attachmentObject->getColorEncoding();
528 break;
529
530 case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:
531 *params = attachmentObject->layer();
532 break;
533
534 default:
535 UNREACHABLE();
536 break;
537 }
538}
539
540void QueryBufferParameteriv(const Buffer *buffer, GLenum pname, GLint *params)
541{
Geoff Langebebe1c2016-10-14 12:01:31 -0400542 QueryBufferParameterBase(buffer, pname, params);
543}
Geoff Langff5b2d52016-09-07 11:32:23 -0400544
Geoff Langebebe1c2016-10-14 12:01:31 -0400545void QueryBufferParameteri64v(const Buffer *buffer, GLenum pname, GLint64 *params)
546{
547 QueryBufferParameterBase(buffer, pname, params);
Geoff Langff5b2d52016-09-07 11:32:23 -0400548}
549
Geoff Lang496c02d2016-10-20 11:38:11 -0700550void QueryBufferPointerv(const Buffer *buffer, GLenum pname, void **params)
551{
552 switch (pname)
553 {
554 case GL_BUFFER_MAP_POINTER:
555 *params = buffer->getMapPointer();
556 break;
557
558 default:
559 UNREACHABLE();
560 break;
561 }
562}
563
Geoff Langff5b2d52016-09-07 11:32:23 -0400564void QueryProgramiv(const Program *program, GLenum pname, GLint *params)
565{
566 ASSERT(program != nullptr);
567
568 switch (pname)
569 {
570 case GL_DELETE_STATUS:
571 *params = program->isFlaggedForDeletion();
572 return;
573 case GL_LINK_STATUS:
574 *params = program->isLinked();
575 return;
576 case GL_VALIDATE_STATUS:
577 *params = program->isValidated();
578 return;
579 case GL_INFO_LOG_LENGTH:
580 *params = program->getInfoLogLength();
581 return;
582 case GL_ATTACHED_SHADERS:
583 *params = program->getAttachedShadersCount();
584 return;
585 case GL_ACTIVE_ATTRIBUTES:
586 *params = program->getActiveAttributeCount();
587 return;
588 case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
589 *params = program->getActiveAttributeMaxLength();
590 return;
591 case GL_ACTIVE_UNIFORMS:
592 *params = program->getActiveUniformCount();
593 return;
594 case GL_ACTIVE_UNIFORM_MAX_LENGTH:
595 *params = program->getActiveUniformMaxLength();
596 return;
597 case GL_PROGRAM_BINARY_LENGTH_OES:
598 *params = program->getBinaryLength();
599 return;
600 case GL_ACTIVE_UNIFORM_BLOCKS:
601 *params = program->getActiveUniformBlockCount();
602 return;
603 case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH:
604 *params = program->getActiveUniformBlockMaxLength();
605 break;
606 case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
607 *params = program->getTransformFeedbackBufferMode();
608 break;
609 case GL_TRANSFORM_FEEDBACK_VARYINGS:
610 *params = program->getTransformFeedbackVaryingCount();
611 break;
612 case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
613 *params = program->getTransformFeedbackVaryingMaxLength();
614 break;
615 case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
616 *params = program->getBinaryRetrievableHint();
617 break;
Yunchao He61afff12017-03-14 15:34:03 +0800618 case GL_PROGRAM_SEPARABLE:
619 *params = program->isSeparable();
620 break;
Geoff Langff5b2d52016-09-07 11:32:23 -0400621 default:
622 UNREACHABLE();
623 break;
624 }
625}
Geoff Lang740d9022016-10-07 11:20:52 -0400626
Jamie Madill4e0e6f82017-02-17 11:06:03 -0500627void QueryRenderbufferiv(const Context *context,
628 const Renderbuffer *renderbuffer,
629 GLenum pname,
630 GLint *params)
Geoff Lang740d9022016-10-07 11:20:52 -0400631{
632 ASSERT(renderbuffer != nullptr);
633
634 switch (pname)
635 {
636 case GL_RENDERBUFFER_WIDTH:
637 *params = renderbuffer->getWidth();
638 break;
639 case GL_RENDERBUFFER_HEIGHT:
640 *params = renderbuffer->getHeight();
641 break;
642 case GL_RENDERBUFFER_INTERNAL_FORMAT:
Jamie Madill4e0e6f82017-02-17 11:06:03 -0500643 // Special case the WebGL 1 DEPTH_STENCIL format.
Jamie Madilla02315b2017-02-23 14:14:47 -0500644 if (context->isWebGL1() &&
Jamie Madill4e0e6f82017-02-17 11:06:03 -0500645 renderbuffer->getFormat().info->internalFormat == GL_DEPTH24_STENCIL8)
646 {
647 *params = GL_DEPTH_STENCIL;
648 }
649 else
650 {
651 *params = renderbuffer->getFormat().info->internalFormat;
652 }
Geoff Lang740d9022016-10-07 11:20:52 -0400653 break;
654 case GL_RENDERBUFFER_RED_SIZE:
655 *params = renderbuffer->getRedSize();
656 break;
657 case GL_RENDERBUFFER_GREEN_SIZE:
658 *params = renderbuffer->getGreenSize();
659 break;
660 case GL_RENDERBUFFER_BLUE_SIZE:
661 *params = renderbuffer->getBlueSize();
662 break;
663 case GL_RENDERBUFFER_ALPHA_SIZE:
664 *params = renderbuffer->getAlphaSize();
665 break;
666 case GL_RENDERBUFFER_DEPTH_SIZE:
667 *params = renderbuffer->getDepthSize();
668 break;
669 case GL_RENDERBUFFER_STENCIL_SIZE:
670 *params = renderbuffer->getStencilSize();
671 break;
672 case GL_RENDERBUFFER_SAMPLES_ANGLE:
673 *params = renderbuffer->getSamples();
674 break;
675 default:
676 UNREACHABLE();
677 break;
678 }
679}
Geoff Langd7d0ed32016-10-07 11:33:51 -0400680
Jamie Madillbd044ed2017-06-05 12:59:21 -0400681void QueryShaderiv(const Context *context, Shader *shader, GLenum pname, GLint *params)
Geoff Langd7d0ed32016-10-07 11:33:51 -0400682{
683 ASSERT(shader != nullptr);
684
685 switch (pname)
686 {
687 case GL_SHADER_TYPE:
688 *params = shader->getType();
689 return;
690 case GL_DELETE_STATUS:
691 *params = shader->isFlaggedForDeletion();
692 return;
693 case GL_COMPILE_STATUS:
Jamie Madillbd044ed2017-06-05 12:59:21 -0400694 *params = shader->isCompiled(context) ? GL_TRUE : GL_FALSE;
Geoff Langd7d0ed32016-10-07 11:33:51 -0400695 return;
696 case GL_INFO_LOG_LENGTH:
Jamie Madillbd044ed2017-06-05 12:59:21 -0400697 *params = shader->getInfoLogLength(context);
Geoff Langd7d0ed32016-10-07 11:33:51 -0400698 return;
699 case GL_SHADER_SOURCE_LENGTH:
700 *params = shader->getSourceLength();
701 return;
702 case GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE:
Jamie Madillbd044ed2017-06-05 12:59:21 -0400703 *params = shader->getTranslatedSourceWithDebugInfoLength(context);
Geoff Langd7d0ed32016-10-07 11:33:51 -0400704 return;
705 default:
706 UNREACHABLE();
707 break;
708 }
709}
Geoff Langc1984ed2016-10-07 12:41:00 -0400710
He Yunchao11b038b2016-11-22 21:24:04 +0800711void QueryTexLevelParameterfv(const Texture *texture,
712 GLenum target,
713 GLint level,
714 GLenum pname,
715 GLfloat *params)
716{
717 QueryTexLevelParameterBase(texture, target, level, pname, params);
718}
719
720void QueryTexLevelParameteriv(const Texture *texture,
721 GLenum target,
722 GLint level,
723 GLenum pname,
724 GLint *params)
725{
726 QueryTexLevelParameterBase(texture, target, level, pname, params);
727}
728
Geoff Langc1984ed2016-10-07 12:41:00 -0400729void QueryTexParameterfv(const Texture *texture, GLenum pname, GLfloat *params)
730{
731 QueryTexParameterBase(texture, pname, params);
732}
733
734void QueryTexParameteriv(const Texture *texture, GLenum pname, GLint *params)
735{
736 QueryTexParameterBase(texture, pname, params);
737}
738
739void QuerySamplerParameterfv(const Sampler *sampler, GLenum pname, GLfloat *params)
740{
741 QuerySamplerParameterBase(sampler, pname, params);
742}
743
744void QuerySamplerParameteriv(const Sampler *sampler, GLenum pname, GLint *params)
745{
746 QuerySamplerParameterBase(sampler, pname, params);
747}
748
Geoff Lang0b031062016-10-13 14:30:04 -0400749void QueryVertexAttribfv(const VertexAttribute &attrib,
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800750 const VertexBinding &binding,
Geoff Lang0b031062016-10-13 14:30:04 -0400751 const VertexAttribCurrentValueData &currentValueData,
752 GLenum pname,
753 GLfloat *params)
754{
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800755 QueryVertexAttribBase(attrib, binding, currentValueData.FloatValues, pname, params);
Geoff Lang0b031062016-10-13 14:30:04 -0400756}
757
758void QueryVertexAttribiv(const VertexAttribute &attrib,
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800759 const VertexBinding &binding,
Geoff Lang0b031062016-10-13 14:30:04 -0400760 const VertexAttribCurrentValueData &currentValueData,
761 GLenum pname,
762 GLint *params)
763{
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800764 QueryVertexAttribBase(attrib, binding, currentValueData.FloatValues, pname, params);
Geoff Lang0b031062016-10-13 14:30:04 -0400765}
766
Jamie Madill876429b2017-04-20 15:46:24 -0400767void QueryVertexAttribPointerv(const VertexAttribute &attrib, GLenum pname, void **pointer)
Geoff Lang0b031062016-10-13 14:30:04 -0400768{
769 switch (pname)
770 {
771 case GL_VERTEX_ATTRIB_ARRAY_POINTER:
Jamie Madill876429b2017-04-20 15:46:24 -0400772 *pointer = const_cast<void *>(attrib.pointer);
Geoff Lang0b031062016-10-13 14:30:04 -0400773 break;
774
775 default:
776 UNREACHABLE();
777 break;
778 }
779}
780
781void QueryVertexAttribIiv(const VertexAttribute &attrib,
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800782 const VertexBinding &binding,
Geoff Lang0b031062016-10-13 14:30:04 -0400783 const VertexAttribCurrentValueData &currentValueData,
784 GLenum pname,
785 GLint *params)
786{
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800787 QueryVertexAttribBase(attrib, binding, currentValueData.IntValues, pname, params);
Geoff Lang0b031062016-10-13 14:30:04 -0400788}
789
790void QueryVertexAttribIuiv(const VertexAttribute &attrib,
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800791 const VertexBinding &binding,
Geoff Lang0b031062016-10-13 14:30:04 -0400792 const VertexAttribCurrentValueData &currentValueData,
793 GLenum pname,
794 GLuint *params)
795{
Jiawei-Shao2597fb62016-12-09 16:38:02 +0800796 QueryVertexAttribBase(attrib, binding, currentValueData.UnsignedIntValues, pname, params);
Geoff Lang0b031062016-10-13 14:30:04 -0400797}
798
Geoff Lang6899b872016-10-14 11:30:13 -0400799void QueryActiveUniformBlockiv(const Program *program,
800 GLuint uniformBlockIndex,
801 GLenum pname,
802 GLint *params)
803{
804 const UniformBlock &uniformBlock = program->getUniformBlockByIndex(uniformBlockIndex);
805 switch (pname)
806 {
807 case GL_UNIFORM_BLOCK_BINDING:
808 *params = ConvertToGLint(program->getUniformBlockBinding(uniformBlockIndex));
809 break;
810 case GL_UNIFORM_BLOCK_DATA_SIZE:
811 *params = ConvertToGLint(uniformBlock.dataSize);
812 break;
813 case GL_UNIFORM_BLOCK_NAME_LENGTH:
814 *params = ConvertToGLint(uniformBlock.nameWithArrayIndex().size() + 1);
815 break;
816 case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
817 *params = ConvertToGLint(uniformBlock.memberUniformIndexes.size());
818 break;
819 case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
820 for (size_t blockMemberIndex = 0;
821 blockMemberIndex < uniformBlock.memberUniformIndexes.size(); blockMemberIndex++)
822 {
823 params[blockMemberIndex] =
824 ConvertToGLint(uniformBlock.memberUniformIndexes[blockMemberIndex]);
825 }
826 break;
827 case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
828 *params = ConvertToGLint(uniformBlock.vertexStaticUse);
829 break;
830 case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
831 *params = ConvertToGLint(uniformBlock.fragmentStaticUse);
832 break;
833 default:
834 UNREACHABLE();
835 break;
836 }
837}
838
Geoff Lang0a9661f2016-10-20 10:59:20 -0700839void QueryInternalFormativ(const TextureCaps &format, GLenum pname, GLsizei bufSize, GLint *params)
840{
841 switch (pname)
842 {
843 case GL_NUM_SAMPLE_COUNTS:
844 if (bufSize != 0)
845 {
846 *params = static_cast<GLint>(format.sampleCounts.size());
847 }
848 break;
849
850 case GL_SAMPLES:
851 {
852 size_t returnCount = std::min<size_t>(bufSize, format.sampleCounts.size());
853 auto sampleReverseIt = format.sampleCounts.rbegin();
854 for (size_t sampleIndex = 0; sampleIndex < returnCount; ++sampleIndex)
855 {
856 params[sampleIndex] = *sampleReverseIt++;
857 }
858 }
859 break;
860
861 default:
862 UNREACHABLE();
863 break;
864 }
865}
866
JiangYizhouf7bbc8a2016-11-16 09:57:22 +0800867void QueryFramebufferParameteriv(const Framebuffer *framebuffer, GLenum pname, GLint *params)
868{
869 ASSERT(framebuffer);
870
871 switch (pname)
872 {
873 case GL_FRAMEBUFFER_DEFAULT_WIDTH:
874 *params = framebuffer->getDefaultWidth();
875 break;
876 case GL_FRAMEBUFFER_DEFAULT_HEIGHT:
877 *params = framebuffer->getDefaultHeight();
878 break;
879 case GL_FRAMEBUFFER_DEFAULT_SAMPLES:
880 *params = framebuffer->getDefaultSamples();
881 break;
882 case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
883 *params = framebuffer->getDefaultFixedSampleLocations();
884 break;
885 default:
886 UNREACHABLE();
887 break;
888 }
889}
890
Geoff Lang82483b92017-04-11 15:33:00 -0400891Error QuerySynciv(const FenceSync *sync,
892 GLenum pname,
893 GLsizei bufSize,
894 GLsizei *length,
895 GLint *values)
Geoff Lang38f2cfb2017-04-11 15:23:08 -0400896{
897 ASSERT(sync);
898
Geoff Lang82483b92017-04-11 15:33:00 -0400899 // All queries return one value, exit early if the buffer can't fit anything.
900 if (bufSize < 1)
901 {
902 if (length != nullptr)
903 {
904 *length = 0;
905 }
906 return NoError();
907 }
908
Geoff Lang38f2cfb2017-04-11 15:23:08 -0400909 switch (pname)
910 {
911 case GL_OBJECT_TYPE:
912 *values = ConvertToGLint(GL_SYNC_FENCE);
913 break;
914 case GL_SYNC_CONDITION:
915 *values = ConvertToGLint(sync->getCondition());
916 break;
917 case GL_SYNC_FLAGS:
918 *values = ConvertToGLint(sync->getFlags());
919 break;
920 case GL_SYNC_STATUS:
921 ANGLE_TRY(sync->getStatus(values));
922 break;
923
924 default:
925 UNREACHABLE();
926 break;
927 }
928
Geoff Lang82483b92017-04-11 15:33:00 -0400929 if (length != nullptr)
930 {
931 *length = 1;
932 }
933
Geoff Lang38f2cfb2017-04-11 15:23:08 -0400934 return NoError();
935}
936
Geoff Langc1984ed2016-10-07 12:41:00 -0400937void SetTexParameterf(Texture *texture, GLenum pname, GLfloat param)
938{
939 SetTexParameterBase(texture, pname, &param);
940}
941
942void SetTexParameterfv(Texture *texture, GLenum pname, const GLfloat *params)
943{
944 SetTexParameterBase(texture, pname, params);
945}
946
947void SetTexParameteri(Texture *texture, GLenum pname, GLint param)
948{
949 SetTexParameterBase(texture, pname, &param);
950}
951
952void SetTexParameteriv(Texture *texture, GLenum pname, const GLint *params)
953{
954 SetTexParameterBase(texture, pname, params);
955}
956
957void SetSamplerParameterf(Sampler *sampler, GLenum pname, GLfloat param)
958{
959 SetSamplerParameterBase(sampler, pname, &param);
960}
961
962void SetSamplerParameterfv(Sampler *sampler, GLenum pname, const GLfloat *params)
963{
964 SetSamplerParameterBase(sampler, pname, params);
965}
966
967void SetSamplerParameteri(Sampler *sampler, GLenum pname, GLint param)
968{
969 SetSamplerParameterBase(sampler, pname, &param);
970}
971
972void SetSamplerParameteriv(Sampler *sampler, GLenum pname, const GLint *params)
973{
974 SetSamplerParameterBase(sampler, pname, params);
975}
Geoff Lang65603eb2017-01-12 16:48:03 -0500976
JiangYizhouf7bbc8a2016-11-16 09:57:22 +0800977void SetFramebufferParameteri(Framebuffer *framebuffer, GLenum pname, GLint param)
978{
979 ASSERT(framebuffer);
980
981 switch (pname)
982 {
983 case GL_FRAMEBUFFER_DEFAULT_WIDTH:
984 framebuffer->setDefaultWidth(param);
985 break;
986 case GL_FRAMEBUFFER_DEFAULT_HEIGHT:
987 framebuffer->setDefaultHeight(param);
988 break;
989 case GL_FRAMEBUFFER_DEFAULT_SAMPLES:
990 framebuffer->setDefaultSamples(param);
991 break;
992 case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
993 framebuffer->setDefaultFixedSampleLocations(static_cast<GLboolean>(param));
994 break;
995 default:
996 UNREACHABLE();
997 break;
998 }
999}
1000
Yunchao He61afff12017-03-14 15:34:03 +08001001void SetProgramParameteri(Program *program, GLenum pname, GLint value)
1002{
1003 ASSERT(program);
1004
1005 switch (pname)
1006 {
1007 case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
1008 program->setBinaryRetrievableHint(value != GL_FALSE);
1009 break;
1010 case GL_PROGRAM_SEPARABLE:
1011 program->setSeparable(value != GL_FALSE);
1012 break;
1013 default:
1014 UNREACHABLE();
1015 break;
1016 }
1017}
1018
jchen1015015f72017-03-16 13:54:21 +08001019GLuint QueryProgramResourceIndex(const Program *program,
1020 GLenum programInterface,
1021 const GLchar *name)
1022{
1023 switch (programInterface)
1024 {
1025 case GL_PROGRAM_INPUT:
1026 return program->getInputResourceIndex(name);
1027
1028 case GL_PROGRAM_OUTPUT:
1029 return program->getOutputResourceIndex(name);
1030
1031 // TODO(Jie): more interfaces.
1032 case GL_UNIFORM:
1033 case GL_UNIFORM_BLOCK:
1034 case GL_TRANSFORM_FEEDBACK_VARYING:
1035 case GL_BUFFER_VARIABLE:
1036 case GL_SHADER_STORAGE_BLOCK:
1037 UNIMPLEMENTED();
1038 return GL_INVALID_INDEX;
1039
1040 default:
1041 UNREACHABLE();
1042 return GL_INVALID_INDEX;
1043 }
1044}
1045
jchen10fd7c3b52017-03-21 15:36:03 +08001046void QueryProgramResourceName(const Program *program,
1047 GLenum programInterface,
1048 GLuint index,
1049 GLsizei bufSize,
1050 GLsizei *length,
1051 GLchar *name)
1052{
1053 switch (programInterface)
1054 {
1055 case GL_PROGRAM_INPUT:
1056 program->getInputResourceName(index, bufSize, length, name);
1057 break;
1058
1059 case GL_PROGRAM_OUTPUT:
1060 program->getOutputResourceName(index, bufSize, length, name);
1061 break;
1062
1063 // TODO(Jie): more interfaces.
1064 case GL_UNIFORM:
1065 case GL_UNIFORM_BLOCK:
1066 case GL_TRANSFORM_FEEDBACK_VARYING:
1067 case GL_BUFFER_VARIABLE:
1068 case GL_SHADER_STORAGE_BLOCK:
1069 UNIMPLEMENTED();
1070 break;
1071
1072 default:
1073 UNREACHABLE();
1074 }
1075}
1076
Geoff Lang65603eb2017-01-12 16:48:03 -05001077} // namespace gl
1078
1079namespace egl
1080{
1081
1082void QueryConfigAttrib(const Config *config, EGLint attribute, EGLint *value)
1083{
1084 ASSERT(config != nullptr);
1085 switch (attribute)
1086 {
1087 case EGL_BUFFER_SIZE:
1088 *value = config->bufferSize;
1089 break;
1090 case EGL_ALPHA_SIZE:
1091 *value = config->alphaSize;
1092 break;
1093 case EGL_BLUE_SIZE:
1094 *value = config->blueSize;
1095 break;
1096 case EGL_GREEN_SIZE:
1097 *value = config->greenSize;
1098 break;
1099 case EGL_RED_SIZE:
1100 *value = config->redSize;
1101 break;
1102 case EGL_DEPTH_SIZE:
1103 *value = config->depthSize;
1104 break;
1105 case EGL_STENCIL_SIZE:
1106 *value = config->stencilSize;
1107 break;
1108 case EGL_CONFIG_CAVEAT:
1109 *value = config->configCaveat;
1110 break;
1111 case EGL_CONFIG_ID:
1112 *value = config->configID;
1113 break;
1114 case EGL_LEVEL:
1115 *value = config->level;
1116 break;
1117 case EGL_NATIVE_RENDERABLE:
1118 *value = config->nativeRenderable;
1119 break;
1120 case EGL_NATIVE_VISUAL_ID:
1121 *value = config->nativeVisualID;
1122 break;
1123 case EGL_NATIVE_VISUAL_TYPE:
1124 *value = config->nativeVisualType;
1125 break;
1126 case EGL_SAMPLES:
1127 *value = config->samples;
1128 break;
1129 case EGL_SAMPLE_BUFFERS:
1130 *value = config->sampleBuffers;
1131 break;
1132 case EGL_SURFACE_TYPE:
1133 *value = config->surfaceType;
1134 break;
1135 case EGL_TRANSPARENT_TYPE:
1136 *value = config->transparentType;
1137 break;
1138 case EGL_TRANSPARENT_BLUE_VALUE:
1139 *value = config->transparentBlueValue;
1140 break;
1141 case EGL_TRANSPARENT_GREEN_VALUE:
1142 *value = config->transparentGreenValue;
1143 break;
1144 case EGL_TRANSPARENT_RED_VALUE:
1145 *value = config->transparentRedValue;
1146 break;
1147 case EGL_BIND_TO_TEXTURE_RGB:
1148 *value = config->bindToTextureRGB;
1149 break;
1150 case EGL_BIND_TO_TEXTURE_RGBA:
1151 *value = config->bindToTextureRGBA;
1152 break;
1153 case EGL_MIN_SWAP_INTERVAL:
1154 *value = config->minSwapInterval;
1155 break;
1156 case EGL_MAX_SWAP_INTERVAL:
1157 *value = config->maxSwapInterval;
1158 break;
1159 case EGL_LUMINANCE_SIZE:
1160 *value = config->luminanceSize;
1161 break;
1162 case EGL_ALPHA_MASK_SIZE:
1163 *value = config->alphaMaskSize;
1164 break;
1165 case EGL_COLOR_BUFFER_TYPE:
1166 *value = config->colorBufferType;
1167 break;
1168 case EGL_RENDERABLE_TYPE:
1169 *value = config->renderableType;
1170 break;
1171 case EGL_MATCH_NATIVE_PIXMAP:
1172 *value = false;
1173 UNIMPLEMENTED();
1174 break;
1175 case EGL_CONFORMANT:
1176 *value = config->conformant;
1177 break;
1178 case EGL_MAX_PBUFFER_WIDTH:
1179 *value = config->maxPBufferWidth;
1180 break;
1181 case EGL_MAX_PBUFFER_HEIGHT:
1182 *value = config->maxPBufferHeight;
1183 break;
1184 case EGL_MAX_PBUFFER_PIXELS:
1185 *value = config->maxPBufferPixels;
1186 break;
1187 case EGL_OPTIMAL_SURFACE_ORIENTATION_ANGLE:
1188 *value = config->optimalOrientation;
1189 break;
Geoff Langc5a2a172017-01-13 15:55:07 -05001190 case EGL_COLOR_COMPONENT_TYPE_EXT:
1191 *value = config->colorComponentType;
1192 break;
Geoff Lang65603eb2017-01-12 16:48:03 -05001193 default:
1194 UNREACHABLE();
1195 break;
1196 }
Geoff Langff5b2d52016-09-07 11:32:23 -04001197}
Geoff Lang65603eb2017-01-12 16:48:03 -05001198
1199} // namespace egl