• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# -*- coding: utf-8 -*-
2
3#-------------------------------------------------------------------------
4# drawElements Quality Program utilities
5# --------------------------------------
6#
7# Copyright 2015 The Android Open Source Project
8#
9# Licensed under the Apache License, Version 2.0 (the "License");
10# you may not use this file except in compliance with the License.
11# You may obtain a copy of the License at
12#
13#      http://www.apache.org/licenses/LICENSE-2.0
14#
15# Unless required by applicable law or agreed to in writing, software
16# distributed under the License is distributed on an "AS IS" BASIS,
17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18# See the License for the specific language governing permissions and
19# limitations under the License.
20#
21#-------------------------------------------------------------------------
22
23import os
24import string
25
26# TODO remove
27import sys
28sys.path.append(os.path.dirname(os.path.dirname(__file__)))
29
30from src_util import *
31from khr_util.gen_str_util import addValuePrefix, genStrUtilProtos, genStrUtilImpls
32
33# Bitfield mapping
34BITFIELD_GROUPS = [
35	# ClearBufferMask
36	("BufferMask",		["DEPTH_BUFFER_BIT", "STENCIL_BUFFER_BIT", "COLOR_BUFFER_BIT"]),
37	# MapBufferUsageMask
38	("BufferMapFlags",	[
39		"MAP_READ_BIT",
40		"MAP_WRITE_BIT",
41		"MAP_INVALIDATE_RANGE_BIT",
42		"MAP_INVALIDATE_BUFFER_BIT",
43		"MAP_FLUSH_EXPLICIT_BIT",
44		"MAP_UNSYNCHRONIZED_BIT"
45		]),
46	# MemoryBarrierMask
47	("MemoryBarrierFlags", [
48		"VERTEX_ATTRIB_ARRAY_BARRIER_BIT",
49		"ELEMENT_ARRAY_BARRIER_BIT",
50		"UNIFORM_BARRIER_BIT",
51		"TEXTURE_FETCH_BARRIER_BIT",
52		"SHADER_IMAGE_ACCESS_BARRIER_BIT",
53		"COMMAND_BARRIER_BIT",
54		"PIXEL_BUFFER_BARRIER_BIT",
55		"TEXTURE_UPDATE_BARRIER_BIT",
56		"BUFFER_UPDATE_BARRIER_BIT",
57		"FRAMEBUFFER_BARRIER_BIT",
58		"TRANSFORM_FEEDBACK_BARRIER_BIT",
59		"ATOMIC_COUNTER_BARRIER_BIT"
60		]),
61	# ShaderTypeMask
62	("ShaderTypeMask",	[
63		"VERTEX_SHADER_BIT",
64		"FRAGMENT_SHADER_BIT",
65		"COMPUTE_SHADER_BIT",
66		"GEOMETRY_SHADER_BIT",
67		"TESS_CONTROL_SHADER_BIT",
68		"TESS_EVALUATION_SHADER_BIT"
69		]),
70]
71
72# Enum mapping
73ENUM_GROUPS = [
74	# Common enums
75
76	# ErrorCode
77	("Error",				["NO_ERROR", "INVALID_ENUM", "INVALID_VALUE", "INVALID_OPERATION", "OUT_OF_MEMORY",
78							 "INVALID_FRAMEBUFFER_OPERATION", "CONTEXT_LOST"]),
79	# PixelType, partially
80	("Type", [
81		# GLES2 types
82		"BYTE",
83		"UNSIGNED_BYTE",
84		"SHORT",
85		"UNSIGNED_SHORT",
86		"INT",
87		"UNSIGNED_INT",
88		"FLOAT",
89		"FIXED",
90		"UNSIGNED_SHORT_5_6_5",
91		"UNSIGNED_SHORT_4_4_4_4",
92		"UNSIGNED_SHORT_5_5_5_1",
93
94		# GLES3 types
95		"HALF_FLOAT",
96		"INT_2_10_10_10_REV",
97		"UNSIGNED_INT_2_10_10_10_REV",
98		"UNSIGNED_INT_10F_11F_11F_REV",
99		"UNSIGNED_INT_5_9_9_9_REV",
100		"UNSIGNED_INT_24_8",
101		"FLOAT_32_UNSIGNED_INT_24_8_REV",
102		"SIGNED_NORMALIZED",
103		"UNSIGNED_NORMALIZED",
104
105		# Extension types
106		"HALF_FLOAT_OES",
107		]),
108
109	# GetPName, also GettableState below
110	("ParamQuery", [
111		# Generic
112		"LINE_WIDTH",
113		"ALIASED_POINT_SIZE_RANGE",
114		"ALIASED_LINE_WIDTH_RANGE",
115		"CULL_FACE_MODE",
116		"FRONT_FACE",
117		"DEPTH_RANGE",
118		"DEPTH_WRITEMASK",
119		"DEPTH_CLEAR_VALUE",
120		"DEPTH_FUNC",
121		"STENCIL_CLEAR_VALUE",
122		"STENCIL_FUNC",
123		"STENCIL_FAIL",
124		"STENCIL_PASS_DEPTH_FAIL",
125		"STENCIL_PASS_DEPTH_PASS",
126		"STENCIL_REF",
127		"STENCIL_VALUE_MASK",
128		"STENCIL_WRITEMASK",
129		"STENCIL_BACK_FUNC",
130		"STENCIL_BACK_FAIL",
131		"STENCIL_BACK_PASS_DEPTH_FAIL",
132		"STENCIL_BACK_PASS_DEPTH_PASS",
133		"STENCIL_BACK_REF",
134		"STENCIL_BACK_VALUE_MASK",
135		"STENCIL_BACK_WRITEMASK",
136		"VIEWPORT",
137		"SCISSOR_BOX",
138		"SCISSOR_TEST",
139		"COLOR_CLEAR_VALUE",
140		"COLOR_WRITEMASK",
141		"UNPACK_ALIGNMENT",
142		"PACK_ALIGNMENT",
143		"MAX_TEXTURE_SIZE",
144		"MAX_VIEWPORT_DIMS",
145		"SUBPIXEL_BITS",
146		"RED_BITS",
147		"GREEN_BITS",
148		"BLUE_BITS",
149		"ALPHA_BITS",
150		"DEPTH_BITS",
151		"STENCIL_BITS",
152		"POLYGON_OFFSET_UNITS",
153		"POLYGON_OFFSET_FILL",
154        "POLYGON_OFFSET_FACTOR",
155		"TEXTURE_BINDING_2D",
156		"SAMPLE_BUFFERS",
157		"SAMPLES",
158		"SAMPLE_COVERAGE_VALUE",
159		"SAMPLE_COVERAGE_INVERT",
160
161		"MAX_CUBE_MAP_TEXTURE_SIZE",
162		"MAX_RENDERBUFFER_SIZE",
163
164		# Program-related
165		"MAX_VERTEX_ATTRIBS",
166		"MAX_VERTEX_UNIFORM_VECTORS",
167		"MAX_VARYING_VECTORS",
168		"MAX_COMBINED_TEXTURE_IMAGE_UNITS",
169		"MAX_VERTEX_TEXTURE_IMAGE_UNITS",
170		"MAX_TEXTURE_IMAGE_UNITS",
171		"MAX_FRAGMENT_UNIFORM_VECTORS"
172		]),
173
174	# *missing*
175	# Program query
176	("ProgramParam", [
177		"ACTIVE_ATTRIBUTES",
178		"ACTIVE_ATTRIBUTE_MAX_LENGTH",
179		"ACTIVE_UNIFORMS",
180		"ACTIVE_UNIFORM_BLOCKS",
181		"ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH",
182		"ACTIVE_UNIFORM_MAX_LENGTH",
183		"ATTACHED_SHADERS",
184		"DELETE_STATUS",
185		"INFO_LOG_LENGTH",
186		"LINK_STATUS",
187		"PROGRAM_BINARY_RETRIEVABLE_HINT",
188		"TRANSFORM_FEEDBACK_BUFFER_MODE",
189		"TRANSFORM_FEEDBACK_VARYINGS",
190		"TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH",
191		"VALIDATE_STATUS",
192		"GEOMETRY_INPUT_TYPE",
193		"GEOMETRY_OUTPUT_TYPE",
194		"GEOMETRY_VERTICES_OUT",
195		"GEOMETRY_SHADER_INVOCATIONS",
196		"PROGRAM_SEPARABLE",
197		"COMPUTE_WORK_GROUP_SIZE",
198		"ACTIVE_ATOMIC_COUNTER_BUFFERS",
199		"TESS_CONTROL_OUTPUT_VERTICES",
200		"TESS_GEN_MODE",
201		"TESS_GEN_SPACING",
202		"TESS_GEN_VERTEX_ORDER",
203		"TESS_GEN_POINT_MODE",
204		]),
205
206	# *missing*
207	# Uniform query
208	("UniformParam", [
209		"UNIFORM_TYPE",
210		"UNIFORM_SIZE",
211		"UNIFORM_NAME_LENGTH",
212		"UNIFORM_BLOCK_INDEX",
213		"UNIFORM_OFFSET",
214		"UNIFORM_ARRAY_STRIDE",
215		"UNIFORM_MATRIX_STRIDE",
216		"UNIFORM_IS_ROW_MAJOR"
217		]),
218
219	# *missing*
220	# Framebuffers
221	("FramebufferAttachment",			["COLOR_ATTACHMENT0", "COLOR_ATTACHMENT1", "COLOR_ATTACHMENT2", "COLOR_ATTACHMENT3",
222										 "COLOR_ATTACHMENT4", "COLOR_ATTACHMENT5", "COLOR_ATTACHMENT6", "COLOR_ATTACHMENT7",
223										 "COLOR_ATTACHMENT8", "COLOR_ATTACHMENT9", "COLOR_ATTACHMENT10", "COLOR_ATTACHMENT11",
224										 "COLOR_ATTACHMENT12", "COLOR_ATTACHMENT13", "COLOR_ATTACHMENT14", "COLOR_ATTACHMENT15",
225										 "DEPTH_ATTACHMENT", "STENCIL_ATTACHMENT", "DEPTH_STENCIL_ATTACHMENT",
226										 "BACK", "FRONT_LEFT", "FRONT_RIGHT", "BACK_LEFT", "BACK_RIGHT",
227										 "DEPTH", "STENCIL"]),
228	# *missing*
229	("FramebufferAttachmentParameter",	["FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",
230										 "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",
231										 "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER", "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",
232										 "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING", "FRAMEBUFFER_ATTACHMENT_RED_SIZE",
233										 "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE", "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",
234										 "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE", "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",
235										 "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE", "FRAMEBUFFER_ATTACHMENT_LAYERED"]),
236	("FramebufferTarget",				["FRAMEBUFFER", "RENDERBUFFER", "DRAW_FRAMEBUFFER", "READ_FRAMEBUFFER"]),
237	("FramebufferStatus",				["FRAMEBUFFER_COMPLETE", "FRAMEBUFFER_INCOMPLETE_ATTACHMENT", "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",
238										 "FRAMEBUFFER_INCOMPLETE_DIMENSIONS", "FRAMEBUFFER_UNSUPPORTED", "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",
239										 "FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS"]),
240	("FramebufferAttachmentType",		["NONE", "FRAMEBUFFER_DEFAULT", "TEXTURE", "RENDERBUFFER"]),
241	("FramebufferColorEncoding",		["LINEAR", "SRGB"]),
242
243	("FramebufferParameter", [
244		"FRAMEBUFFER_DEFAULT_WIDTH",
245		"FRAMEBUFFER_DEFAULT_HEIGHT",
246		"FRAMEBUFFER_DEFAULT_SAMPLES",
247		"FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS",
248		"FRAMEBUFFER_DEFAULT_LAYERS",
249		]),
250
251	# Renderbuffers
252	("RenderbufferParameter",			["RENDERBUFFER_WIDTH", "RENDERBUFFER_HEIGHT", "RENDERBUFFER_INTERNAL_FORMAT", "RENDERBUFFER_RED_SIZE",
253										"RENDERBUFFER_GREEN_SIZE", "RENDERBUFFER_BLUE_SIZE", "RENDERBUFFER_ALPHA_SIZE", "RENDERBUFFER_DEPTH_SIZE",
254										"RENDERBUFFER_STENCIL_SIZE", "RENDERBUFFER_SAMPLES"]),
255
256	# Primitives
257	("PrimitiveType",		["POINTS", "LINES", "LINE_STRIP", "LINE_LOOP", "TRIANGLES", "TRIANGLE_STRIP", "TRIANGLE_FAN", "LINES_ADJACENCY", "LINE_STRIP_ADJACENCY", "TRIANGLES_ADJACENCY", "TRIANGLE_STRIP_ADJACENCY"]),
258
259	# Blending
260	("BlendFactor",			["ZERO", "ONE", "SRC_ALPHA_SATURATE",
261							 "SRC_COLOR", "ONE_MINUS_SRC_COLOR", "SRC_ALPHA", "ONE_MINUS_SRC_ALPHA",
262							 "SRC1_COLOR", "ONE_MINUS_SRC1_COLOR", "SRC1_ALPHA", "ONE_MINUS_SRC1_ALPHA",
263							 "DST_COLOR", "ONE_MINUS_DST_COLOR", "DST_ALPHA", "ONE_MINUS_DST_ALPHA",
264							 "CONSTANT_COLOR", "ONE_MINUS_CONSTANT_COLOR", "CONSTANT_ALPHA", "ONE_MINUS_CONSTANT_ALPHA"]),
265	("BlendEquation",		[
266		"FUNC_ADD",
267		"FUNC_SUBTRACT",
268		"FUNC_REVERSE_SUBTRACT",
269		"MIN",
270		"MAX",
271		"MULTIPLY_KHR",
272		"SCREEN_KHR",
273		"OVERLAY_KHR",
274		"DARKEN_KHR",
275		"LIGHTEN_KHR",
276		"COLORDODGE_KHR",
277		"COLORBURN_KHR",
278		"HARDLIGHT_KHR",
279		"SOFTLIGHT_KHR",
280		"DIFFERENCE_KHR",
281		"EXCLUSION_KHR",
282		"HSL_HUE_KHR",
283		"HSL_SATURATION_KHR",
284		"HSL_COLOR_KHR",
285		"HSL_LUMINOSITY_KHR",
286		]),
287
288	# Buffer Objects
289	("BufferTarget",		[
290		"ARRAY_BUFFER",
291		"ELEMENT_ARRAY_BUFFER",
292		"COPY_READ_BUFFER",
293		"COPY_WRITE_BUFFER",
294		"PIXEL_PACK_BUFFER",
295		"PIXEL_UNPACK_BUFFER",
296		"TRANSFORM_FEEDBACK_BUFFER",
297		"UNIFORM_BUFFER",
298		"DRAW_INDIRECT_BUFFER",
299		"SHADER_STORAGE_BUFFER",
300		"TEXTURE_BUFFER",
301		"DISPATCH_INDIRECT_BUFFER",
302		"ATOMIC_COUNTER_BUFFER",
303		]),
304	("BufferBinding",		["ARRAY_BUFFER_BINDING", "ELEMENT_ARRAY_BUFFER_BINDING"]),
305	("Usage",				[
306		"STREAM_DRAW",
307		"STREAM_READ",
308		"STREAM_COPY",
309		"STATIC_DRAW",
310		"STATIC_READ",
311		"STATIC_COPY",
312		"DYNAMIC_DRAW",
313		"DYNAMIC_READ",
314		"DYNAMIC_COPY"]),
315	("BufferQuery",			["BUFFER_SIZE", "BUFFER_USAGE", "BUFFER_ACCESS_FLAGS", "BUFFER_MAPPED", "BUFFER_MAP_OFFSET", "BUFFER_MAP_LENGTH"]),
316
317	# Culling
318	("Face",				["FRONT", "BACK", "FRONT_AND_BACK"]),
319
320	# Comparison function
321	("CompareFunc",			["NEVER", "LESS", "LEQUAL", "GREATER", "EQUAL", "NOTEQUAL", "GEQUAL", "ALWAYS"]),
322
323	# Enable-disable bit
324	("EnableCap",			["TEXTURE_2D", "CULL_FACE", "BLEND", "DITHER", "STENCIL_TEST", "DEPTH_TEST", "SCISSOR_TEST",
325							 "POLYGON_OFFSET_FILL", "SAMPLE_ALPHA_TO_COVERAGE", "SAMPLE_COVERAGE",
326							 "PRIMITIVE_RESTART_FIXED_INDEX", "RASTERIZER_DISCARD",
327							 "FRAMEBUFFER_SRGB", "SAMPLE_SHADING", "DEPTH_CLAMP",
328							 "PRIMITIVE_RESTART", "SAMPLE_MASK", "DEBUG_OUTPUT", "DEBUG_OUTPUT_SYNCHRONOUS",
329							 "BLEND_ADVANCED_COHERENT_KHR"]),
330
331	# Indexed enable-disable bit
332	("IndexedEnableCap",	["BLEND"]),
333
334	# Polygon winding
335	("Winding",				["CW", "CCW"]),
336
337	# Hints
338	("HintMode",			["DONT_CARE", "FASTEST", "NICEST"]),
339	("Hint",				["GENERATE_MIPMAP_HINT"]),
340
341	# Stencil ops
342	("StencilOp",			["ZERO", "KEEP", "REPLACE", "INCR", "DECR", "INVERT", "INCR_WRAP", "DECR_WRAP"]),
343
344	# Shader type
345	("ShaderType",	[
346		"VERTEX_SHADER",
347		"FRAGMENT_SHADER",
348		"COMPUTE_SHADER",
349		"TESS_CONTROL_SHADER",
350		"TESS_EVALUATION_SHADER",
351		"GEOMETRY_SHADER",
352		]),
353
354	# Buffers
355	("Buffer",				["COLOR", "DEPTH", "STENCIL", "DEPTH_STENCIL"]),
356
357	# Invalidate buffer target
358	("InvalidateAttachment",["COLOR", "DEPTH", "STENCIL",
359							 "COLOR_ATTACHMENT0",
360							 "COLOR_ATTACHMENT1",
361							 "COLOR_ATTACHMENT2",
362							 "COLOR_ATTACHMENT3",
363							 "COLOR_ATTACHMENT4",
364							 "COLOR_ATTACHMENT5",
365							 "COLOR_ATTACHMENT6",
366							 "COLOR_ATTACHMENT7",
367							 "DEPTH_ATTACHMENT",
368							 "STENCIL_ATTACHMENT",
369							 "DEPTH_STENCIL_ATTACHMENT"]),
370
371	# Draw/ReadBuffer attachment
372	("DrawReadBuffer",		["COLOR", "DEPTH", "STENCIL", "BACK", "NONE",
373							 "COLOR_ATTACHMENT0",
374							 "COLOR_ATTACHMENT1",
375							 "COLOR_ATTACHMENT2",
376							 "COLOR_ATTACHMENT3",
377							 "COLOR_ATTACHMENT4",
378							 "COLOR_ATTACHMENT5",
379							 "COLOR_ATTACHMENT6",
380							 "COLOR_ATTACHMENT7",
381							 "DEPTH_ATTACHMENT",
382							 "STENCIL_ATTACHMENT",
383							 "DEPTH_STENCIL_ATTACHMENT"]),
384
385	# Textures
386	("TextureTarget",		["TEXTURE_1D",
387							 "TEXTURE_2D", "TEXTURE_CUBE_MAP",
388							 "TEXTURE_CUBE_MAP_POSITIVE_X", "TEXTURE_CUBE_MAP_NEGATIVE_X",
389							 "TEXTURE_CUBE_MAP_POSITIVE_Y", "TEXTURE_CUBE_MAP_NEGATIVE_Y",
390							 "TEXTURE_CUBE_MAP_POSITIVE_Z", "TEXTURE_CUBE_MAP_NEGATIVE_Z",
391							 "TEXTURE_3D", "TEXTURE_2D_ARRAY", "TEXTURE_2D_MULTISAMPLE",
392							 "TEXTURE_2D_MULTISAMPLE_ARRAY",
393							 "TEXTURE_BUFFER",
394							 "TEXTURE_CUBE_MAP_ARRAY"]),
395	("TextureParameter", [
396		"TEXTURE_WRAP_S",
397		"TEXTURE_WRAP_T",
398		"TEXTURE_WRAP_R",
399		"TEXTURE_BASE_LEVEL",
400		"TEXTURE_MAX_LEVEL",
401		"TEXTURE_COMPARE_MODE",
402		"TEXTURE_COMPARE_FUNC",
403		"TEXTURE_MAX_LOD",
404		"TEXTURE_MIN_LOD",
405		"TEXTURE_SWIZZLE_R",
406		"TEXTURE_SWIZZLE_G",
407		"TEXTURE_SWIZZLE_B",
408		"TEXTURE_SWIZZLE_A",
409		"TEXTURE_MIN_FILTER",
410		"TEXTURE_MAG_FILTER",
411		"DEPTH_STENCIL_TEXTURE_MODE",
412		"TEXTURE_SRGB_DECODE_EXT",
413		"TEXTURE_BORDER_COLOR",
414
415		# Gettable only
416		"TEXTURE_IMMUTABLE_LEVELS",
417		"TEXTURE_IMMUTABLE_FORMAT",
418		]),
419	("TextureLevelParameter", [
420		"TEXTURE_SAMPLES",
421		"TEXTURE_FIXED_SAMPLE_LOCATIONS",
422		"TEXTURE_WIDTH",
423		"TEXTURE_HEIGHT",
424		"TEXTURE_DEPTH",
425		"TEXTURE_INTERNAL_FORMAT",
426		"TEXTURE_RED_SIZE",
427		"TEXTURE_GREEN_SIZE",
428		"TEXTURE_BLUE_SIZE",
429		"TEXTURE_ALPHA_SIZE",
430		"TEXTURE_DEPTH_SIZE",
431		"TEXTURE_STENCIL_SIZE",
432		"TEXTURE_SHARED_SIZE",
433		"TEXTURE_RED_TYPE",
434		"TEXTURE_GREEN_TYPE",
435		"TEXTURE_BLUE_TYPE",
436		"TEXTURE_ALPHA_TYPE",
437		"TEXTURE_DEPTH_TYPE",
438		"TEXTURE_COMPRESSED",
439		"TEXTURE_BUFFER_DATA_STORE_BINDING",
440		"TEXTURE_BUFFER_OFFSET",
441		"TEXTURE_BUFFER_SIZE",
442		]),
443	("RepeatMode",			["REPEAT", "CLAMP_TO_EDGE", "MIRRORED_REPEAT", "CLAMP_TO_BORDER"]),
444	("TextureFilter",		["NEAREST", "LINEAR", "NEAREST_MIPMAP_NEAREST", "LINEAR_MIPMAP_NEAREST",
445							 "NEAREST_MIPMAP_LINEAR", "LINEAR_MIPMAP_LINEAR"]),
446	("TextureWrapMode",		["REPEAT", "CLAMP_TO_EDGE", "MIRRORED_REPEAT"]),
447	("TextureSwizzle",		["RED", "GREEN", "BLUE", "ALPHA", "ZERO", "ONE"]),
448	("TextureCompareMode",	["NONE", "COMPARE_REF_TO_TEXTURE"]),
449	("CubeMapFace",			["TEXTURE_CUBE_MAP_POSITIVE_X", "TEXTURE_CUBE_MAP_NEGATIVE_X",
450							 "TEXTURE_CUBE_MAP_POSITIVE_Y", "TEXTURE_CUBE_MAP_NEGATIVE_Y",
451							 "TEXTURE_CUBE_MAP_POSITIVE_Z", "TEXTURE_CUBE_MAP_NEGATIVE_Z"]),
452	("TextureDepthStencilMode",	["DEPTH_COMPONENT", "STENCIL_INDEX"]),
453	("PixelStoreParameter",	[
454		"UNPACK_ALIGNMENT",
455		"UNPACK_IMAGE_HEIGHT",
456		"UNPACK_ROW_LENGTH",
457		"UNPACK_SKIP_IMAGES",
458		"UNPACK_SKIP_ROWS",
459		"UNPACK_SKIP_PIXELS",
460		"PACK_ROW_LENGTH",
461		"PACK_SKIP_ROWS",
462		"PACK_SKIP_PIXELS"]),
463	("UncompressedTextureFormat", [
464		# GLES2 unsized formats
465		"LUMINANCE",
466		"LUMINANCE_ALPHA",
467		"ALPHA",
468		"RGB",
469		"RGBA",
470
471		# GLES2 sized formats
472		"RGBA4",
473		"RGB5_A1",
474		"RGB565",
475		"DEPTH_COMPONENT16",
476		"STENCIL_INDEX8",
477
478		# GLES3 unsized formats
479		"RG",
480		"RED",
481		"RGBA_INTEGER",
482		"RGB_INTEGER",
483		"RG_INTEGER",
484		"RED_INTEGER",
485		"DEPTH_COMPONENT",
486		"DEPTH_STENCIL",
487
488		# GLES3 sized formats
489		"RGBA32F",
490		"RGBA32I",
491		"RGBA32UI",
492		"RGBA16",
493		"RGBA16_SNORM",
494		"RGBA16F",
495		"RGBA16I",
496		"RGBA16UI",
497		"RGBA8",
498		"RGBA8I",
499		"RGBA8UI",
500		"SRGB8_ALPHA8",
501		"RGB10_A2",
502		"RGB10_A2UI",
503		"RGBA8_SNORM",
504		"RGB8",
505		"R11F_G11F_B10F",
506		"RGB32F",
507		"RGB32I",
508		"RGB32UI",
509		"RGB16",
510		"RGB16_SNORM",
511		"RGB16F",
512		"RGB16I",
513		"RGB16UI",
514		"RGB8_SNORM",
515		"RGB8I",
516		"RGB8UI",
517		"SRGB8",
518		"RGB9_E5",
519		"RG32F",
520		"RG32I",
521		"RG32UI",
522		"RG16",
523		"RG16_SNORM",
524		"RG16F",
525		"RG16I",
526		"RG16UI",
527		"RG8",
528		"RG8I",
529		"RG8UI",
530		"RG8_SNORM",
531		"R32F",
532		"R32I",
533		"R32UI",
534		"R16",
535		"R16_SNORM",
536		"R16F",
537		"R16I",
538		"R16UI",
539		"R8",
540		"R8I",
541		"R8UI",
542		"R8_SNORM",
543		"DEPTH_COMPONENT32F",
544		"DEPTH_COMPONENT24",
545		"DEPTH32F_STENCIL8",
546		"DEPTH24_STENCIL8",
547
548		# OES_required_internalformat
549		"RGB10",
550
551		# OES_depth32
552		"DEPTH_COMPONENT32",
553
554		# EXT_sRGB
555		"SRGB",
556		"SRGB_ALPHA",
557
558		# GL_EXT_texture_sRGB_R8 & RG8
559		"SR8_EXT",
560		"SRG8_EXT",
561
562		# GL_EXT_read_format_bgra
563		"BGRA",
564		]),
565
566	("CompressedTextureFormat", [
567		# ETC2/EAC formats
568		"COMPRESSED_R11_EAC",
569		"COMPRESSED_SIGNED_R11_EAC",
570		"COMPRESSED_RG11_EAC",
571		"COMPRESSED_SIGNED_RG11_EAC",
572		"COMPRESSED_RGB8_ETC2",
573		"COMPRESSED_SRGB8_ETC2",
574		"COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",
575		"COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",
576		"COMPRESSED_RGBA8_ETC2_EAC",
577		"COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",
578
579		# ASTC formats
580		"COMPRESSED_RGBA_ASTC_4x4_KHR",
581		"COMPRESSED_RGBA_ASTC_5x4_KHR",
582		"COMPRESSED_RGBA_ASTC_5x5_KHR",
583		"COMPRESSED_RGBA_ASTC_6x5_KHR",
584		"COMPRESSED_RGBA_ASTC_6x6_KHR",
585		"COMPRESSED_RGBA_ASTC_8x5_KHR",
586		"COMPRESSED_RGBA_ASTC_8x6_KHR",
587		"COMPRESSED_RGBA_ASTC_8x8_KHR",
588		"COMPRESSED_RGBA_ASTC_10x5_KHR",
589		"COMPRESSED_RGBA_ASTC_10x6_KHR",
590		"COMPRESSED_RGBA_ASTC_10x8_KHR",
591		"COMPRESSED_RGBA_ASTC_10x10_KHR",
592		"COMPRESSED_RGBA_ASTC_12x10_KHR",
593		"COMPRESSED_RGBA_ASTC_12x12_KHR",
594		"COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR",
595		"COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR",
596		"COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR",
597		"COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR",
598		"COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR",
599		"COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR",
600		"COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR",
601		"COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR",
602		"COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR",
603		"COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR",
604		"COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR",
605		"COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR",
606		"COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR",
607		"COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR",
608
609		# EXT_texture_compression_s3tc
610		"COMPRESSED_RGB_S3TC_DXT1_EXT",
611		"COMPRESSED_RGBA_S3TC_DXT1_EXT",
612		"COMPRESSED_RGBA_S3TC_DXT3_EXT",
613		"COMPRESSED_RGBA_S3TC_DXT5_EXT",
614
615		# IMG_texture_compression_pvrtc
616		"COMPRESSED_RGB_PVRTC_4BPPV1_IMG",
617		"COMPRESSED_RGB_PVRTC_2BPPV1_IMG",
618		"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",
619		"COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",
620		]),
621
622	# Shader var type
623	("ShaderVarType", [
624		"FLOAT",
625		"FLOAT_VEC2",
626		"FLOAT_VEC3",
627		"FLOAT_VEC4",
628		"INT",
629		"INT_VEC2",
630		"INT_VEC3",
631		"INT_VEC4",
632		"UNSIGNED_INT",
633		"UNSIGNED_INT_VEC2",
634		"UNSIGNED_INT_VEC3",
635		"UNSIGNED_INT_VEC4",
636		"BOOL",
637		"BOOL_VEC2",
638		"BOOL_VEC3",
639		"BOOL_VEC4",
640		"FLOAT_MAT2",
641		"FLOAT_MAT3",
642		"FLOAT_MAT4",
643		"FLOAT_MAT2x3",
644		"FLOAT_MAT2x4",
645		"FLOAT_MAT3x2",
646		"FLOAT_MAT3x4",
647		"FLOAT_MAT4x2",
648		"FLOAT_MAT4x3",
649		"SAMPLER_2D",
650		"SAMPLER_3D",
651		"SAMPLER_CUBE",
652		"SAMPLER_2D_SHADOW",
653		"SAMPLER_2D_ARRAY",
654		"SAMPLER_2D_ARRAY_SHADOW",
655		"SAMPLER_CUBE_SHADOW",
656		"INT_SAMPLER_2D",
657		"INT_SAMPLER_3D",
658		"INT_SAMPLER_CUBE",
659		"INT_SAMPLER_2D_ARRAY",
660		"UNSIGNED_INT_SAMPLER_2D",
661		"UNSIGNED_INT_SAMPLER_3D",
662		"UNSIGNED_INT_SAMPLER_CUBE",
663		"UNSIGNED_INT_SAMPLER_2D_ARRAY",
664		"SAMPLER_2D_MULTISAMPLE",
665		"INT_SAMPLER_2D_MULTISAMPLE",
666		"UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE",
667		"IMAGE_2D",
668		"IMAGE_3D",
669		"IMAGE_CUBE",
670		"IMAGE_2D_ARRAY",
671		"INT_IMAGE_2D",
672		"INT_IMAGE_3D",
673		"INT_IMAGE_CUBE",
674		"INT_IMAGE_2D_ARRAY",
675		"UNSIGNED_INT_IMAGE_2D",
676		"UNSIGNED_INT_IMAGE_3D",
677		"UNSIGNED_INT_IMAGE_CUBE",
678		"UNSIGNED_INT_IMAGE_2D_ARRAY",
679		"UNSIGNED_INT_ATOMIC_COUNTER",
680		"SAMPLER_2D_MULTISAMPLE_ARRAY",
681		"INT_SAMPLER_2D_MULTISAMPLE_ARRAY",
682		"UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY",
683		"SAMPLER_BUFFER",
684		"INT_SAMPLER_BUFFER",
685		"UNSIGNED_INT_SAMPLER_BUFFER",
686		"IMAGE_BUFFER",
687		"INT_IMAGE_BUFFER",
688		"UNSIGNED_INT_IMAGE_BUFFER",
689		"SAMPLER_CUBE_MAP_ARRAY",
690		"SAMPLER_CUBE_MAP_ARRAY_SHADOW",
691		"INT_SAMPLER_CUBE_MAP_ARRAY",
692		"UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY",
693		"IMAGE_CUBE_MAP_ARRAY",
694		"INT_IMAGE_CUBE_MAP_ARRAY",
695		"UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY",
696	]),
697
698	# Shader params
699	("ShaderParam", [ "SHADER_TYPE", "DELETE_STATUS", "COMPILE_STATUS", "INFO_LOG_LENGTH", "SHADER_SOURCE_LENGTH"]),
700
701	# Vertex attribute queries
702	("VertexAttribParameterName", [
703		"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",
704		"VERTEX_ATTRIB_ARRAY_ENABLED",
705		"VERTEX_ATTRIB_ARRAY_SIZE",
706		"VERTEX_ATTRIB_ARRAY_STRIDE",
707		"VERTEX_ATTRIB_ARRAY_TYPE",
708		"VERTEX_ATTRIB_ARRAY_NORMALIZED",
709		"VERTEX_ATTRIB_ARRAY_INTEGER",
710		"VERTEX_ATTRIB_ARRAY_DIVISOR",
711		"CURRENT_VERTEX_ATTRIB",
712		"VERTEX_ATTRIB_BINDING",
713		"VERTEX_ATTRIB_RELATIVE_OFFSET",
714	]),
715
716	("Boolean", ["FALSE", "TRUE"]),
717
718	# GetPName
719	("GettableState", [
720		"ELEMENT_ARRAY_BUFFER_BINDING",				"ARRAY_BUFFER_BINDING",						"VERTEX_ARRAY_BINDING",								"VIEWPORT",									"DEPTH_RANGE",
721		"TRANSFORM_FEEDBACK_BINDING",				"LINE_WIDTH",								"CULL_FACE_MODE",									"FRONT_FACE",								"POLYGON_OFFSET_FACTOR",
722		"POLYGON_OFFSET_UNITS",						"SAMPLE_COVERAGE_VALUE",					"SAMPLE_COVERAGE_INVERT",							"ACTIVE_TEXTURE",							"TEXTURE_BINDING_1D",
723		"TEXTURE_BINDING_2D",						"TEXTURE_BINDING_3D",						"TEXTURE_BINDING_2D_ARRAY",
724		"TEXTURE_BINDING_CUBE_MAP",					"SAMPLER_BINDING",							"SCISSOR_BOX",										"STENCIL_FUNC",								"STENCIL_VALUE_MASK",
725		"STENCIL_REF",								"STENCIL_FAIL",								"STENCIL_PASS_DEPTH_FAIL",							"STENCIL_PASS_DEPTH_PASS",					"STENCIL_BACK_FUNC",
726		"STENCIL_BACK_VALUE_MASK",					"STENCIL_BACK_REF",							"STENCIL_BACK_FAIL",								"STENCIL_BACK_PASS_DEPTH_FAIL",				"STENCIL_BACK_PASS_DEPTH_PASS",
727		"DEPTH_FUNC",								"BLEND_SRC_RGB",							"BLEND_SRC_ALPHA",									"BLEND_DST_RGB",							"BLEND_DST_ALPHA",
728		"BLEND_EQUATION_RGB",						"BLEND_EQUATION_ALPHA",						"BLEND_COLOR",										"COLOR_WRITEMASK",							"DEPTH_WRITEMASK",
729		"STENCIL_WRITEMASK",						"STENCIL_BACK_WRITEMASK",					"COLOR_CLEAR_VALUE",								"DEPTH_CLEAR_VALUE",						"STENCIL_CLEAR_VALUE",
730		"DRAW_FRAMEBUFFER_BINDING",					"READ_FRAMEBUFFER_BINDING",					"RENDERBUFFER_BINDING",								"DRAW_BUFFER0",								"DRAW_BUFFER1",
731		"DRAW_BUFFER2",								"DRAW_BUFFER3",								"DRAW_BUFFER4",										"DRAW_BUFFER5",								"DRAW_BUFFER6",
732		"DRAW_BUFFER7",								"DRAW_BUFFER8",								"DRAW_BUFFER9",										"DRAW_BUFFER10",							"DRAW_BUFFER11",
733		"DRAW_BUFFER12",							"DRAW_BUFFER13",							"DRAW_BUFFER14",									"DRAW_BUFFER15",							"READ_BUFFER",
734		"UNPACK_IMAGE_HEIGHT",						"UNPACK_SKIP_IMAGES",						"UNPACK_ROW_LENGTH",								"UNPACK_SKIP_ROWS",							"UNPACK_SKIP_PIXELS",
735		"UNPACK_ALIGNMENT",							"PACK_ROW_LENGTH",							"PACK_SKIP_ROWS",									"PACK_SKIP_PIXELS",							"PACK_ALIGNMENT",
736		"PIXEL_PACK_BUFFER_BINDING",				"PIXEL_UNPACK_BUFFER_BINDING",				"CURRENT_PROGRAM",									"TRANSFORM_FEEDBACK_BUFFER_BINDING",		"TRANSFORM_FEEDBACK_PAUSED",
737		"TRANSFORM_FEEDBACK_ACTIVE",				"UNIFORM_BUFFER_BINDING",					"GENERATE_MIPMAP_HINT",								"FRAGMENT_SHADER_DERIVATIVE_HINT",			"MAX_ELEMENT_INDEX",
738		"SUBPIXEL_BITS",							"MAX_3D_TEXTURE_SIZE",						"MAX_TEXTURE_SIZE",									"MAX_ARRAY_TEXTURE_LAYERS",					"MAX_TEXTURE_LOD_BIAS",
739		"MAX_CUBE_MAP_TEXTURE_SIZE",				"MAX_RENDERBUFFER_SIZE",					"MAX_DRAW_BUFFERS",									"MAX_COLOR_ATTACHMENTS",					"MAX_VIEWPORT_DIMS",
740		"ALIASED_POINT_SIZE_RANGE",					"ALIASED_LINE_WIDTH_RANGE",					"MAX_ELEMENTS_INDICES",								"MAX_ELEMENTS_VERTICES",					"COMPRESSED_TEXTURE_FORMATS",
741		"NUM_COMPRESSED_TEXTURE_FORMATS",			"PROGRAM_BINARY_FORMATS",					"NUM_PROGRAM_BINARY_FORMATS",						"SHADER_BINARY_FORMATS",					"NUM_SHADER_BINARY_FORMATS",
742		"SHADER_COMPILER",							"MAX_SERVER_WAIT_TIMEOUT",					"NUM_EXTENSIONS",									"MAJOR_VERSION",							"MINOR_VERSION",
743		"MAX_VERTEX_ATTRIBS",						"MAX_VERTEX_UNIFORM_COMPONENTS",			"MAX_VERTEX_UNIFORM_VECTORS",						"MAX_VERTEX_UNIFORM_BLOCKS",				"MAX_VERTEX_OUTPUT_COMPONENTS",
744		"MAX_VERTEX_TEXTURE_IMAGE_UNITS",			"MAX_FRAGMENT_UNIFORM_COMPONENTS",			"MAX_FRAGMENT_UNIFORM_VECTORS",						"MAX_FRAGMENT_UNIFORM_BLOCKS",				"MAX_FRAGMENT_INPUT_COMPONENTS",
745		"MAX_TEXTURE_IMAGE_UNITS",					"MIN_PROGRAM_TEXEL_OFFSET",					"MAX_PROGRAM_TEXEL_OFFSET",							"MAX_UNIFORM_BUFFER_BINDINGS",				"MAX_UNIFORM_BLOCK_SIZE",
746		"UNIFORM_BUFFER_OFFSET_ALIGNMENT",			"MAX_COMBINED_UNIFORM_BLOCKS",				"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",			"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",	"MAX_VARYING_COMPONENTS",
747		"MAX_VARYING_VECTORS",						"MAX_COMBINED_TEXTURE_IMAGE_UNITS",			"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",	"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",	"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",
748		"SAMPLE_BUFFERS",							"SAMPLES",									"MAX_SAMPLES",										"DEPTH_BITS",								"STENCIL_BITS",
749		"IMPLEMENTATION_COLOR_READ_TYPE",			"IMPLEMENTATION_COLOR_READ_FORMAT",			"COPY_READ_BUFFER_BINDING",							"COPY_WRITE_BUFFER_BINDING",				"RED_BITS",
750		"GREEN_BITS",								"BLUE_BITS",								"ALPHA_BITS",										"MAX_COLOR_TEXTURE_SAMPLES",				"TIMESTAMP",
751		"MAX_DEPTH_TEXTURE_SAMPLES",				"MAX_INTEGER_SAMPLES",						"TEXTURE_BINDING_2D_MULTISAMPLE",					"TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY",		"MAX_VERTEX_ATTRIB_STRIDE",
752		"MAX_VERTEX_ATTRIB_BINDINGS",				"MAX_VERTEX_ATTRIB_RELATIVE_OFFSET",		"MIN_SAMPLE_SHADING_VALUE",							"FRAGMENT_INTERPOLATION_OFFSET_BITS",		"MAX_FRAGMENT_INTERPOLATION_OFFSET",
753		"MIN_FRAGMENT_INTERPOLATION_OFFSET",		"MAX_GEOMETRY_SHADER_INVOCATIONS",			"LAYER_PROVOKING_VERTEX",							"MAX_GEOMETRY_UNIFORM_COMPONENTS",			"MAX_GEOMETRY_SHADER_STORAGE_BLOCKS",
754		"MAX_GEOMETRY_UNIFORM_BLOCKS",				"MAX_GEOMETRY_INPUT_COMPONENTS",			"MAX_GEOMETRY_OUTPUT_COMPONENTS",					"MAX_GEOMETRY_IMAGE_UNIFORMS",				"MAX_GEOMETRY_TEXTURE_IMAGE_UNITS",
755		"MAX_GEOMETRY_OUTPUT_VERTICES",				"MAX_GEOMETRY_ATOMIC_COUNTERS",				"MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS",				"MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS",		"MAX_FRAMEBUFFER_LAYERS",
756		"PROVOKING_VERTEX",							"PRIMITIVE_RESTART_INDEX",					"MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS",				"MAX_FRAGMENT_ATOMIC_COUNTERS",				"MAX_FRAGMENT_IMAGE_UNIFORMS",
757		"MAX_COMPUTE_UNIFORM_BLOCKS",				"MAX_COMPUTE_TEXTURE_IMAGE_UNITS",			"MAX_COMPUTE_UNIFORM_COMPONENTS",					"MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS",		"MAX_COMPUTE_ATOMIC_COUNTERS",
758		"MAX_COMPUTE_IMAGE_UNIFORMS",				"MAX_COMPUTE_SHADER_STORAGE_BLOCKS",		"MAX_FRAGMENT_SHADER_STORAGE_BLOCKS",				"MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS",	"MAX_VERTEX_ATOMIC_COUNTER_BUFFERS",
759		"MAX_VERTEX_ATOMIC_COUNTERS",				"MAX_VERTEX_IMAGE_UNIFORMS",				"MAX_VERTEX_SHADER_STORAGE_BLOCKS",					"MAX_COMBINED_SHADER_OUTPUT_RESOURCES",		"MAX_ATOMIC_COUNTER_BUFFER_BINDINGS",
760		"MAX_ATOMIC_COUNTER_BUFFER_SIZE",			"MAX_IMAGE_UNITS",							"MAX_COMBINED_ATOMIC_COUNTER_BUFFERS",				"MAX_COMBINED_IMAGE_UNIFORMS",				"MAX_SHADER_STORAGE_BUFFER_BINDINGS",
761		"MAX_SHADER_STORAGE_BLOCK_SIZE",			"MAX_COMBINED_ATOMIC_COUNTERS",				"MAX_COMBINED_SHADER_STORAGE_BLOCKS",				"SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT",	"PRIMITIVE_BOUNDING_BOX_EXT",
762		"DRAW_INDIRECT_BUFFER_BINDING",				"MAX_SAMPLE_MASK_WORDS",					"PROGRAM_PIPELINE_BINDING",							"ATOMIC_COUNTER_BUFFER_BINDING",			"SHADER_STORAGE_BUFFER_BINDING",
763		"DISPATCH_INDIRECT_BUFFER_BINDING",			"MAX_FRAMEBUFFER_WIDTH",					"MAX_FRAMEBUFFER_HEIGHT",							"MAX_FRAMEBUFFER_SAMPLES",					"MAX_COMPUTE_SHARED_MEMORY_SIZE",
764		"MIN_PROGRAM_TEXTURE_GATHER_OFFSET",		"MAX_PROGRAM_TEXTURE_GATHER_OFFSET",		"MAX_COMPUTE_WORK_GROUP_INVOCATIONS",				"MAX_UNIFORM_LOCATIONS",					"MAX_DEBUG_MESSAGE_LENGTH",
765		"MAX_DEBUG_LOGGED_MESSAGES",				"MAX_DEBUG_GROUP_STACK_DEPTH",				"MAX_LABEL_LENGTH",									"CONTEXT_FLAGS",							"DEBUG_LOGGED_MESSAGES",
766		"DEBUG_NEXT_LOGGED_MESSAGE_LENGTH",			"DEBUG_GROUP_STACK_DEPTH",					"MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS",			"TEXTURE_BUFFER_OFFSET_ALIGNMENT",			"TEXTURE_BUFFER_BINDING",
767		"TEXTURE_BINDING_BUFFER",					"MAX_TEXTURE_BUFFER_SIZE",					"MAX_PATCH_VERTICES",								"MAX_TESS_GEN_LEVEL",						"MAX_TESS_CONTROL_UNIFORM_COMPONENTS",
768		"MAX_TESS_EVALUATION_UNIFORM_COMPONENTS",	"MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS",		"MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS",			"MAX_TESS_CONTROL_OUTPUT_COMPONENTS",		"MAX_TESS_PATCH_COMPONENTS",
769		"MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS",	"MAX_TESS_EVALUATION_OUTPUT_COMPONENTS",	"MAX_TESS_CONTROL_UNIFORM_BLOCKS",					"MAX_TESS_EVALUATION_UNIFORM_BLOCKS",		"MAX_TESS_CONTROL_INPUT_COMPONENTS",
770		"MAX_TESS_EVALUATION_INPUT_COMPONENTS",		"MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS",	"MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS",		"MAX_TESS_CONTROL_ATOMIC_COUNTERS",			"MAX_TESS_EVALUATION_ATOMIC_COUNTERS",
771		"MAX_TESS_CONTROL_IMAGE_UNIFORMS",			"MAX_TESS_EVALUATION_IMAGE_UNIFORMS",		"MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS",	"MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS","MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS",
772		"MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS",	"PATCH_VERTICES",							"PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED"
773	]),
774
775	("GettableIndexedState", [
776		"TRANSFORM_FEEDBACK_BUFFER_BINDING",
777		"UNIFORM_BUFFER_BINDING",
778		"TRANSFORM_FEEDBACK_BUFFER_START",
779		"TRANSFORM_FEEDBACK_BUFFER_SIZE",
780		"UNIFORM_BUFFER_START",
781		"UNIFORM_BUFFER_SIZE",
782		"SAMPLE_MASK_VALUE",
783		"VERTEX_BINDING_OFFSET",
784		"VERTEX_BINDING_STRIDE",
785		"VERTEX_BINDING_DIVISOR",
786		"VERTEX_BINDING_BUFFER",
787		"MAX_COMPUTE_WORK_GROUP_COUNT",
788		"MAX_COMPUTE_WORK_GROUP_SIZE",
789		"ATOMIC_COUNTER_BUFFER_BINDING",
790		"ATOMIC_COUNTER_BUFFER_START",
791		"ATOMIC_COUNTER_BUFFER_SIZE",
792		"SHADER_STORAGE_BUFFER_BINDING",
793		"SHADER_STORAGE_BUFFER_START",
794		"SHADER_STORAGE_BUFFER_SIZE",
795		"IMAGE_BINDING_NAME",
796		"IMAGE_BINDING_LEVEL",
797		"IMAGE_BINDING_LAYERED",
798		"IMAGE_BINDING_LAYER",
799		"IMAGE_BINDING_ACCESS",
800		"IMAGE_BINDING_FORMAT",
801		"BLEND_EQUATION_RGB",
802		"BLEND_EQUATION_ALPHA",
803		"BLEND_SRC_RGB",
804		"BLEND_SRC_ALPHA",
805		"BLEND_DST_RGB",
806		"BLEND_DST_ALPHA",
807		"COLOR_WRITEMASK",
808	]),
809
810	("GettableString", [
811		"EXTENSIONS",
812		"RENDERER",
813		"SHADING_LANGUAGE_VERSION",
814		"VENDOR",
815		"VERSION"
816	]),
817
818	("PointerState", [
819		"DEBUG_CALLBACK_FUNCTION",
820		"DEBUG_CALLBACK_USER_PARAM",
821	]),
822
823	("InternalFormatParameter", ["NUM_SAMPLE_COUNTS", "SAMPLES"]),
824	("InternalFormatTarget", [
825		"RENDERBUFFER",
826		"TEXTURE_2D_MULTISAMPLE",
827		"TEXTURE_2D_MULTISAMPLE_ARRAY",
828		"TEXTURE_2D",
829		"TEXTURE_3D",
830		"TEXTURE_2D_ARRAY",
831		"TEXTURE_CUBE_MAP",
832	]),
833
834	("MultisampleParameter", ["SAMPLE_POSITION"]),
835
836	# Occlusion and timer queries
837	("QueryTarget", [
838		"SAMPLES_PASSED",
839		"ANY_SAMPLES_PASSED",
840		"PRIMITIVES_GENERATED",
841		"TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",
842		"TIME_ELAPSED",
843	]),
844
845	("QueryParam",			["CURRENT_QUERY", "QUERY_COUNTER_BITS"]),
846	("QueryObjectParam",	["QUERY_RESULT", "QUERY_RESULT_AVAILABLE"]),
847
848	("ImageAccess", ["READ_ONLY", "WRITE_ONLY", "READ_WRITE"]),
849
850	("ProgramInterface", [
851		"UNIFORM",
852		"UNIFORM_BLOCK",
853		"ATOMIC_COUNTER_BUFFER",
854		"PROGRAM_INPUT",
855		"PROGRAM_OUTPUT",
856		"TRANSFORM_FEEDBACK_VARYING",
857		"BUFFER_VARIABLE",
858		"SHADER_STORAGE_BLOCK",
859	]),
860
861	("ProgramResourceProperty", [
862		"ACTIVE_VARIABLES",
863		"BUFFER_BINDING",
864		"NUM_ACTIVE_VARIABLES",
865		"ARRAY_SIZE",
866		"ARRAY_STRIDE",
867		"BLOCK_INDEX",
868		"IS_ROW_MAJOR",
869		"MATRIX_STRIDE",
870		"ATOMIC_COUNTER_BUFFER_INDEX",
871		"BUFFER_DATA_SIZE",
872		"LOCATION",
873		"NAME_LENGTH",
874		"OFFSET",
875		"REFERENCED_BY_VERTEX_SHADER",
876		"REFERENCED_BY_FRAGMENT_SHADER",
877		"REFERENCED_BY_COMPUTE_SHADER",
878		"REFERENCED_BY_GEOMETRY_SHADER",
879		"REFERENCED_BY_TESS_CONTROL_SHADER",
880		"REFERENCED_BY_TESS_EVALUATION_SHADER",
881		"TOP_LEVEL_ARRAY_SIZE",
882		"TOP_LEVEL_ARRAY_STRIDE",
883		"TYPE",
884		"IS_PER_PATCH",
885	]),
886
887	("PrecisionFormatType", ["LOW_FLOAT", "MEDIUM_FLOAT", "HIGH_FLOAT", "LOW_INT", "MEDIUM_INT", "HIGH_INT"]),
888
889	("TransformFeedbackTarget", ["TRANSFORM_FEEDBACK"]),
890
891	("ProvokingVertex", ["FIRST_VERTEX_CONVENTION", "LAST_VERTEX_CONVENTION", "UNDEFINED_VERTEX"]),
892
893	("DebugMessageSource", [
894		"DEBUG_SOURCE_API",
895		"DEBUG_SOURCE_WINDOW_SYSTEM",
896		"DEBUG_SOURCE_SHADER_COMPILER",
897		"DEBUG_SOURCE_THIRD_PARTY",
898		"DEBUG_SOURCE_APPLICATION",
899		"DEBUG_SOURCE_OTHER", "DONT_CARE"
900	]),
901	("DebugMessageType", [
902		"DEBUG_TYPE_ERROR",
903		"DEBUG_TYPE_DEPRECATED_BEHAVIOR",
904		"DEBUG_TYPE_UNDEFINED_BEHAVIOR",
905		"DEBUG_TYPE_PORTABILITY",
906		"DEBUG_TYPE_PERFORMANCE",
907		"DEBUG_TYPE_OTHER",
908		"DEBUG_TYPE_MARKER",
909		"DEBUG_TYPE_PUSH_GROUP",
910		"DEBUG_TYPE_POP_GROUP",
911		"DONT_CARE"
912	]),
913	("DebugMessageSeverity", [
914		"DEBUG_SEVERITY_HIGH",
915		"DEBUG_SEVERITY_MEDIUM",
916		"DEBUG_SEVERITY_LOW",
917		"DEBUG_SEVERITY_NOTIFICATION",
918		"DONT_CARE"
919	]),
920
921	# Pipeline query
922	("PipelineParam", [
923		"ACTIVE_PROGRAM",
924		"INFO_LOG_LENGTH",
925		"VALIDATE_STATUS",
926		"VERTEX_SHADER",
927		"FRAGMENT_SHADER",
928		"COMPUTE_SHADER",
929		"GEOMETRY_SHADER",
930		"TESS_CONTROL_SHADER",
931		"TESS_EVALUATION_SHADER",
932	]),
933
934	("PatchParam", [
935		"PATCH_VERTICES",
936	]),
937
938	("TextureFormat", [
939		# generated: UncompressedTextureFormat + CompressedTextureFormat
940	]),
941
942	# GraphicsResetStatus
943	("GraphicsResetStatus", [
944		"NO_ERROR",
945		"GUILTY_CONTEXT_RESET",
946		"INNOCENT_CONTEXT_RESET",
947		"UNKNOWN_CONTEXT_RESET",
948	]),
949]
950
951def getEnumGroupByName (name):
952	# \note: will raise an (index out of bounds) error if no such group
953	return [x for x in ENUM_GROUPS if x[0]==name][0][1]
954
955# EnableCap EnumGroups are also GettableState EnumGroups
956getEnumGroupByName("GettableState").extend(getEnumGroupByName("EnableCap"))
957
958# TextureFormat = UncompressedTextureFormat + CompressedTextureFormat
959getEnumGroupByName("TextureFormat").extend(getEnumGroupByName("UncompressedTextureFormat") + getEnumGroupByName("CompressedTextureFormat"))
960
961def genStrUtil (iface):
962	enumGroups		= addValuePrefix(ENUM_GROUPS, "GL_")
963	bitfieldGroups	= addValuePrefix(BITFIELD_GROUPS, "GL_")
964	prototypeFile	= os.path.join(OPENGL_DIR, "gluStrUtilPrototypes.inl")
965	implFile		= os.path.join(OPENGL_DIR, "gluStrUtil.inl")
966
967	writeInlFile(prototypeFile, indentLines(genStrUtilProtos(iface, enumGroups, bitfieldGroups)))
968	writeInlFile(implFile, genStrUtilImpls(iface, enumGroups, bitfieldGroups))
969
970if __name__ == "__main__":
971	genStrUtil(getHybridInterface())
972