[Piglit] [PATCH 3/6] util: Generate piglit_get_gl_enum_name() and friends

Chad Versace chad.versace at linux.intel.com
Fri Jun 13 07:44:34 PDT 2014


This patch removes the files piglit-util-gl*-enum.c and instead replaces
them with a single piglit-util-gl-enum-gen.c generated from the Khronos
XML.

The two functions now generated are:
    piglit_get_gl_enum_name(GLenum param)
    piglit_get_prim_name(GLenum prim)

Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
---
 cmake/piglit_dispatch.cmake         |   1 +
 tests/util/.gitignore               |   1 +
 tests/util/CMakeLists.gl.txt        |   3 +-
 tests/util/CMakeLists.gles1.txt     |   1 -
 tests/util/CMakeLists.gles2.txt     |   1 -
 tests/util/CMakeLists.gles3.txt     |   1 -
 tests/util/CMakeLists.txt           |   8 +
 tests/util/gen_dispatch.py          |  82 ++++
 tests/util/piglit-util-gl-enum.c    |   1 -
 tests/util/piglit-util-gles3-enum.c | 728 ------------------------------------
 10 files changed, 93 insertions(+), 734 deletions(-)
 delete mode 100644 tests/util/piglit-util-gl-enum.c
 delete mode 100644 tests/util/piglit-util-gles3-enum.c

diff --git a/cmake/piglit_dispatch.cmake b/cmake/piglit_dispatch.cmake
index b4ff2cf..2ef6a85 100644
--- a/cmake/piglit_dispatch.cmake
+++ b/cmake/piglit_dispatch.cmake
@@ -27,6 +27,7 @@ file(MAKE_DIRECTORY ${piglit_dispatch_gen_output_dir})
 set(piglit_dispatch_gen_outputs
 	${piglit_dispatch_gen_output_dir}/generated_dispatch.c
 	${piglit_dispatch_gen_output_dir}/generated_dispatch.h
+	${piglit_dispatch_gen_output_dir}/piglit-util-gl-enum-gen.c
 	)
 
 set(piglit_dispatch_gen_inputs
diff --git a/tests/util/.gitignore b/tests/util/.gitignore
index 8fbd235..03b680d 100644
--- a/tests/util/.gitignore
+++ b/tests/util/.gitignore
@@ -1,3 +1,4 @@
 config.h
 generated_dispatch.c
 generated_dispatch.h
+piglit-util-gl-enum-gen.c
diff --git a/tests/util/CMakeLists.gl.txt b/tests/util/CMakeLists.gl.txt
index 0a2cc25..d414dd9 100644
--- a/tests/util/CMakeLists.gl.txt
+++ b/tests/util/CMakeLists.gl.txt
@@ -5,7 +5,6 @@ set(UTIL_GL_SOURCES
 	piglit-matrix.c
 	piglit-shader.c
 	piglit-shader-gl.c
-	piglit-util-gl-enum.c
 	piglit-util-gl.c
 	piglit-test-pattern.cpp
 	piglit-fbo.cpp
@@ -34,12 +33,12 @@ IF(PIGLIT_BUILD_GLX_TESTS)
 		    piglit-shader.c
 		    piglit-shader-gl.c
 		    piglit-util-gl-common.c
-		    piglit-util-gl-enum.c
 		    piglit-util-gl.c
 		    piglit-glx-framework.c
 		    piglit-glx-util.c
 		    piglit-dispatch.c
 		    piglit-dispatch-init.c
+		    ${piglit_dispatch_gen_output_dir}/piglit-util-gl-enum-gen.c
 	)
 	target_link_libraries(piglitglxutil
 		piglitutil_${piglit_target_api}
diff --git a/tests/util/CMakeLists.gles1.txt b/tests/util/CMakeLists.gles1.txt
index 58cc67a..09dff85 100644
--- a/tests/util/CMakeLists.gles1.txt
+++ b/tests/util/CMakeLists.gles1.txt
@@ -1,6 +1,5 @@
 set(UTIL_GL_SOURCES
 	${UTIL_GL_SOURCES}
-	piglit-util-gl-enum.c
 	piglit-util-gles.c
 	)
 
diff --git a/tests/util/CMakeLists.gles2.txt b/tests/util/CMakeLists.gles2.txt
index d2501e3..a174112 100644
--- a/tests/util/CMakeLists.gles2.txt
+++ b/tests/util/CMakeLists.gles2.txt
@@ -5,7 +5,6 @@ set(UTIL_GL_SOURCES
 	piglit-dispatch-init.c
 	piglit-shader.c
 	piglit-shader-gles2.c
-	piglit-util-gl-enum.c
 	piglit-util-gles.c
 	minmax-test.c
 	)
diff --git a/tests/util/CMakeLists.gles3.txt b/tests/util/CMakeLists.gles3.txt
index 1cb591f..59a4de7 100644
--- a/tests/util/CMakeLists.gles3.txt
+++ b/tests/util/CMakeLists.gles3.txt
@@ -5,7 +5,6 @@ list(APPEND UTIL_GL_SOURCES
 	piglit-shader.c
 	piglit-shader-gles2.c # Compatible with gles3.
 	piglit-util-gles.c
-	piglit-util-gles3-enum.c
 	piglit-vbo.cpp
 	)
 
diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt
index 3a97daf..cf0aa6b 100644
--- a/tests/util/CMakeLists.txt
+++ b/tests/util/CMakeLists.txt
@@ -4,6 +4,13 @@ if(PIGLIT_HAS_POSIX_CLOCK_MONOTONIC AND HAVE_LIBRT)
     link_libraries(rt)
 endif()
 
+# CMake requires that source file properties be set in the same directory where
+# the property is used.
+set_source_files_properties(
+	${piglit_dispatch_gen_outputs}
+	PROPERTIES GENERATED 1
+	)
+
 set(UTIL_INCLUDES
 	${CMAKE_CURRENT_BINARY_DIR}
 	${CMAKE_CURRENT_SOURCE_DIR}
@@ -28,6 +35,7 @@ set(UTIL_GL_SOURCES
 	piglit_ktx.c
 	rgb9e5.c
 	r11g11b10f.c
+        ${CMAKE_BINARY_DIR}/tests/util/piglit-util-gl-enum-gen.c
 	)
 
 if(PIGLIT_USE_WAFFLE)
diff --git a/tests/util/gen_dispatch.py b/tests/util/gen_dispatch.py
index d445932..d1fcdec 100644
--- a/tests/util/gen_dispatch.py
+++ b/tests/util/gen_dispatch.py
@@ -63,6 +63,10 @@ def main():
     dispatch_h.close()
     dispatch_c.close()
 
+    enum_c = open(os.path.join(args.out_dir, 'piglit-util-gl-enum-gen.c'), 'w')
+    EnumCode(gl_registry).emit(enum_c)
+    enum_c.close()
+
 def log_debug(msg):
     if debug:
         sys.stderr.write('debug: {0}: {1}\n'.format(PROG_NAME, msg))
@@ -304,5 +308,83 @@ class DispatchCode(object):
             )
             template.render_context(ctx)
 
+class EnumCode(object):
+
+    c_template = Template(dedent('''\
+        ${copyright}
+
+        #include "piglit-util-gl-common.h"
+
+        const char*
+        piglit_get_gl_enum_name(GLenum param)
+        {
+            switch (param) {
+        % for enum in unique_default_namespace_enums:
+            case ${enum.c_num_literal}: return "${enum.name}";
+        % endfor
+            default: return "(unrecognized enum)";
+            }
+        }
+
+        const char*
+        piglit_get_prim_name(GLenum prim)
+        {
+        <% gl_patches = gl_registry.enums['GL_PATCHES'] %>\\
+            switch (prim) {
+        % for enum in unique_default_namespace_enums:
+        %     if enum.num_value <= gl_patches.num_value:
+            case ${enum.c_num_literal}: return "${enum.name}";
+        %     endif
+        % endfor
+            default: return "(unrecognized enum)";
+            }
+        }'''
+    ))
+
+    def __init__(self, gl_registry):
+        self.gl_registry = gl_registry
+        self.unique_default_namespace_enums = None
+        self.__gather_unique_default_namespace_enums()
+
+    def __gather_unique_default_namespace_enums(self):
+        duplicate_enums = [
+            enum
+            for enum_group in self.gl_registry.enum_groups
+            if enum_group.type == 'default_namespace'
+            for enum in enum_group.enums
+            if not enum.is_collider
+        ]
+
+        # Sort enums by numerical value then by name. This ensures that
+        # non-suffixed variants of an enum name precede the suffixed variant.
+        # For example, GL_RED will precede GL_RED_EXT.
+        def enum_cmp(x, y):
+            c = cmp(x.num_value, y.num_value)
+            if c != 0: return c
+            c = cmp(x.name, y.name)
+            if c != 0: return c
+            return 0
+
+        duplicate_enums.sort(enum_cmp)
+
+        # Copy duplicate_enums into unique_enums, filtering out duplicate
+        # values. The algorithm requires that dupliate_enums be sorted by
+        # value.
+        unique_enums = [duplicate_enums[0]]
+        for enum in duplicate_enums[1:]:
+            if enum.num_value > unique_enums[-1].num_value:
+                unique_enums.append(enum)
+
+        self.unique_default_namespace_enums = unique_enums
+
+    def emit(self, c_buf):
+        ctx = mako.runtime.Context(
+            buffer=c_buf,
+            copyright=copyright_block,
+            gl_registry=self.gl_registry,
+            unique_default_namespace_enums=self.unique_default_namespace_enums,
+        )
+        EnumCode.c_template.render_context(ctx)
+
 if __name__ == '__main__':
     main()
diff --git a/tests/util/piglit-util-gl-enum.c b/tests/util/piglit-util-gl-enum.c
deleted file mode 100644
index 07d34af..0000000
--- a/tests/util/piglit-util-gl-enum.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "piglit-util-gl-enum-gen.c"
diff --git a/tests/util/piglit-util-gles3-enum.c b/tests/util/piglit-util-gles3-enum.c
deleted file mode 100644
index 8b0fcdc..0000000
--- a/tests/util/piglit-util-gles3-enum.c
+++ /dev/null
@@ -1,728 +0,0 @@
-/*
- * Copyright 2012 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/* TODO: Automatically generate this file. */
-
-#include "piglit-util-gl-common.h"
-
-const char *
-piglit_get_gl_enum_name(GLenum param)
-{
-#define CASE(x) case x: return #x;
-
-	switch (param) {
-
-	/* <GLES3/gl3.h> */
-
-	/* BlendingFactorDest */
-	CASE(GL_SRC_COLOR)                                      // 0x0300
-	CASE(GL_ONE_MINUS_SRC_COLOR)                            // 0x0301
-	CASE(GL_SRC_ALPHA)                                      // 0x0302
-	CASE(GL_ONE_MINUS_SRC_ALPHA)                            // 0x0303
-	CASE(GL_DST_ALPHA)                                      // 0x0304
-	CASE(GL_ONE_MINUS_DST_ALPHA)                            // 0x0305
-
-	/* BlendingFactorSrc */
-	CASE(GL_DST_COLOR)                                      // 0x0306
-	CASE(GL_ONE_MINUS_DST_COLOR)                            // 0x0307
-	CASE(GL_SRC_ALPHA_SATURATE)                             // 0x0308
-
-	/* BlendEquationSeparate */
-	CASE(GL_FUNC_ADD)                                       // 0x8006
-	CASE(GL_BLEND_EQUATION)                                 // 0x8009
-	CASE(GL_BLEND_EQUATION_ALPHA)                           // 0x883D
-
-	/* BlendSubtract */
-	CASE(GL_FUNC_SUBTRACT)                                  // 0x800A
-	CASE(GL_FUNC_REVERSE_SUBTRACT)                          // 0x800B
-
-	/* Separate Blend Functions */
-	CASE(GL_BLEND_DST_RGB)                                  // 0x80C8
-	CASE(GL_BLEND_SRC_RGB)                                  // 0x80C9
-	CASE(GL_BLEND_DST_ALPHA)                                // 0x80CA
-	CASE(GL_BLEND_SRC_ALPHA)                                // 0x80CB
-	CASE(GL_CONSTANT_COLOR)                                 // 0x8001
-	CASE(GL_ONE_MINUS_CONSTANT_COLOR)                       // 0x8002
-	CASE(GL_CONSTANT_ALPHA)                                 // 0x8003
-	CASE(GL_ONE_MINUS_CONSTANT_ALPHA)                       // 0x8004
-	CASE(GL_BLEND_COLOR)                                    // 0x8005
-
-	/* Buffer Objects */
-	CASE(GL_ARRAY_BUFFER)                                   // 0x8892
-	CASE(GL_ELEMENT_ARRAY_BUFFER)                           // 0x8893
-	CASE(GL_ARRAY_BUFFER_BINDING)                           // 0x8894
-	CASE(GL_ELEMENT_ARRAY_BUFFER_BINDING)                   // 0x8895
-
-	CASE(GL_STREAM_DRAW)                                    // 0x88E0
-	CASE(GL_STATIC_DRAW)                                    // 0x88E4
-	CASE(GL_DYNAMIC_DRAW)                                   // 0x88E8
-
-	CASE(GL_BUFFER_SIZE)                                    // 0x8764
-	CASE(GL_BUFFER_USAGE)                                   // 0x8765
-
-	CASE(GL_CURRENT_VERTEX_ATTRIB)                          // 0x8626
-
-	/* CullFaceMode */
-	CASE(GL_FRONT)                                          // 0x0404
-	CASE(GL_BACK)                                           // 0x0405
-	CASE(GL_FRONT_AND_BACK)                                 // 0x0408
-
-	/* EnableCap */
-	CASE(GL_TEXTURE_2D)                                     // 0x0DE1
-	CASE(GL_CULL_FACE)                                      // 0x0B44
-	CASE(GL_BLEND)                                          // 0x0BE2
-	CASE(GL_DITHER)                                         // 0x0BD0
-	CASE(GL_STENCIL_TEST)                                   // 0x0B90
-	CASE(GL_DEPTH_TEST)                                     // 0x0B71
-	CASE(GL_SCISSOR_TEST)                                   // 0x0C11
-	CASE(GL_POLYGON_OFFSET_FILL)                            // 0x8037
-	CASE(GL_SAMPLE_ALPHA_TO_COVERAGE)                       // 0x809E
-	CASE(GL_SAMPLE_COVERAGE)                                // 0x80A0
-
-	/* ErrorCode */
-	CASE(GL_INVALID_ENUM)                                   // 0x0500
-	CASE(GL_INVALID_VALUE)                                  // 0x0501
-	CASE(GL_INVALID_OPERATION)                              // 0x0502
-	CASE(GL_OUT_OF_MEMORY)                                  // 0x0505
-
-	/* FrontFaceDirection */
-	CASE(GL_CW)                                             // 0x0900
-	CASE(GL_CCW)                                            // 0x0901
-
-	/* GetPName */
-	CASE(GL_LINE_WIDTH)                                     // 0x0B21
-	CASE(GL_ALIASED_POINT_SIZE_RANGE)                       // 0x846D
-	CASE(GL_ALIASED_LINE_WIDTH_RANGE)                       // 0x846E
-	CASE(GL_CULL_FACE_MODE)                                 // 0x0B45
-	CASE(GL_FRONT_FACE)                                     // 0x0B46
-	CASE(GL_DEPTH_RANGE)                                    // 0x0B70
-	CASE(GL_DEPTH_WRITEMASK)                                // 0x0B72
-	CASE(GL_DEPTH_CLEAR_VALUE)                              // 0x0B73
-	CASE(GL_DEPTH_FUNC)                                     // 0x0B74
-	CASE(GL_STENCIL_CLEAR_VALUE)                            // 0x0B91
-	CASE(GL_STENCIL_FUNC)                                   // 0x0B92
-	CASE(GL_STENCIL_FAIL)                                   // 0x0B94
-	CASE(GL_STENCIL_PASS_DEPTH_FAIL)                        // 0x0B95
-	CASE(GL_STENCIL_PASS_DEPTH_PASS)                        // 0x0B96
-	CASE(GL_STENCIL_REF)                                    // 0x0B97
-	CASE(GL_STENCIL_VALUE_MASK)                             // 0x0B93
-	CASE(GL_STENCIL_WRITEMASK)                              // 0x0B98
-	CASE(GL_STENCIL_BACK_FUNC)                              // 0x8800
-	CASE(GL_STENCIL_BACK_FAIL)                              // 0x8801
-	CASE(GL_STENCIL_BACK_PASS_DEPTH_FAIL)                   // 0x8802
-	CASE(GL_STENCIL_BACK_PASS_DEPTH_PASS)                   // 0x8803
-	CASE(GL_STENCIL_BACK_REF)                               // 0x8CA3
-	CASE(GL_STENCIL_BACK_VALUE_MASK)                        // 0x8CA4
-	CASE(GL_STENCIL_BACK_WRITEMASK)                         // 0x8CA5
-	CASE(GL_VIEWPORT)                                       // 0x0BA2
-	CASE(GL_SCISSOR_BOX)                                    // 0x0C10
-	CASE(GL_COLOR_CLEAR_VALUE)                              // 0x0C22
-	CASE(GL_COLOR_WRITEMASK)                                // 0x0C23
-	CASE(GL_UNPACK_ALIGNMENT)                               // 0x0CF5
-	CASE(GL_PACK_ALIGNMENT)                                 // 0x0D05
-	CASE(GL_MAX_TEXTURE_SIZE)                               // 0x0D33
-	CASE(GL_MAX_VIEWPORT_DIMS)                              // 0x0D3A
-	CASE(GL_SUBPIXEL_BITS)                                  // 0x0D50
-	CASE(GL_RED_BITS)                                       // 0x0D52
-	CASE(GL_GREEN_BITS)                                     // 0x0D53
-	CASE(GL_BLUE_BITS)                                      // 0x0D54
-	CASE(GL_ALPHA_BITS)                                     // 0x0D55
-	CASE(GL_DEPTH_BITS)                                     // 0x0D56
-	CASE(GL_STENCIL_BITS)                                   // 0x0D57
-	CASE(GL_POLYGON_OFFSET_UNITS)                           // 0x2A00
-	CASE(GL_POLYGON_OFFSET_FACTOR)                          // 0x8038
-	CASE(GL_TEXTURE_BINDING_2D)                             // 0x8069
-	CASE(GL_SAMPLE_BUFFERS)                                 // 0x80A8
-	CASE(GL_SAMPLES)                                        // 0x80A9
-	CASE(GL_SAMPLE_COVERAGE_VALUE)                          // 0x80AA
-	CASE(GL_SAMPLE_COVERAGE_INVERT)                         // 0x80AB
-
-	/* GetTextureParameter */
-	CASE(GL_NUM_COMPRESSED_TEXTURE_FORMATS)                 // 0x86A2
-	CASE(GL_COMPRESSED_TEXTURE_FORMATS)                     // 0x86A3
-
-	/* HintMode */
-	CASE(GL_DONT_CARE)                                      // 0x1100
-	CASE(GL_FASTEST)                                        // 0x1101
-	CASE(GL_NICEST)                                         // 0x1102
-
-	/* HintTarget */
-	CASE(GL_GENERATE_MIPMAP_HINT)                           // 0x8192
-
-	/* DataType */
-	CASE(GL_BYTE)                                           // 0x1400
-	CASE(GL_UNSIGNED_BYTE)                                  // 0x1401
-	CASE(GL_SHORT)                                          // 0x1402
-	CASE(GL_UNSIGNED_SHORT)                                 // 0x1403
-	CASE(GL_INT)                                            // 0x1404
-	CASE(GL_UNSIGNED_INT)                                   // 0x1405
-	CASE(GL_FLOAT)                                          // 0x1406
-	CASE(GL_FIXED)                                          // 0x140C
-
-	/* PixelFormat */
-	CASE(GL_DEPTH_COMPONENT)                                // 0x1902
-	CASE(GL_ALPHA)                                          // 0x1906
-	CASE(GL_RGB)                                            // 0x1907
-	CASE(GL_RGBA)                                           // 0x1908
-	CASE(GL_LUMINANCE)                                      // 0x1909
-	CASE(GL_LUMINANCE_ALPHA)                                // 0x190A
-
-	/* PixelType */
-	CASE(GL_UNSIGNED_SHORT_4_4_4_4)                         // 0x8033
-	CASE(GL_UNSIGNED_SHORT_5_5_5_1)                         // 0x8034
-	CASE(GL_UNSIGNED_SHORT_5_6_5)                           // 0x8363
-
-	/* Shaders */
-	CASE(GL_FRAGMENT_SHADER)                                // 0x8B30
-	CASE(GL_VERTEX_SHADER)                                  // 0x8B31
-	CASE(GL_MAX_VERTEX_ATTRIBS)                             // 0x8869
-	CASE(GL_MAX_VERTEX_UNIFORM_VECTORS)                     // 0x8DFB
-	CASE(GL_MAX_VARYING_VECTORS)                            // 0x8DFC
-	CASE(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS)               // 0x8B4D
-	CASE(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS)                 // 0x8B4C
-	CASE(GL_MAX_TEXTURE_IMAGE_UNITS)                        // 0x8872
-	CASE(GL_MAX_FRAGMENT_UNIFORM_VECTORS)                   // 0x8DFD
-	CASE(GL_SHADER_TYPE)                                    // 0x8B4F
-	CASE(GL_DELETE_STATUS)                                  // 0x8B80
-	CASE(GL_LINK_STATUS)                                    // 0x8B82
-	CASE(GL_VALIDATE_STATUS)                                // 0x8B83
-	CASE(GL_ATTACHED_SHADERS)                               // 0x8B85
-	CASE(GL_ACTIVE_UNIFORMS)                                // 0x8B86
-	CASE(GL_ACTIVE_UNIFORM_MAX_LENGTH)                      // 0x8B87
-	CASE(GL_ACTIVE_ATTRIBUTES)                              // 0x8B89
-	CASE(GL_ACTIVE_ATTRIBUTE_MAX_LENGTH)                    // 0x8B8A
-	CASE(GL_SHADING_LANGUAGE_VERSION)                       // 0x8B8C
-	CASE(GL_CURRENT_PROGRAM)                                // 0x8B8D
-
-	/* StencilFunction */
-	CASE(GL_NEVER)                                          // 0x0200
-	CASE(GL_LESS)                                           // 0x0201
-	CASE(GL_EQUAL)                                          // 0x0202
-	CASE(GL_LEQUAL)                                         // 0x0203
-	CASE(GL_GREATER)                                        // 0x0204
-	CASE(GL_NOTEQUAL)                                       // 0x0205
-	CASE(GL_GEQUAL)                                         // 0x0206
-	CASE(GL_ALWAYS)                                         // 0x0207
-
-	/* StencilOp */
-	CASE(GL_KEEP)                                           // 0x1E00
-	CASE(GL_REPLACE)                                        // 0x1E01
-	CASE(GL_INCR)                                           // 0x1E02
-	CASE(GL_DECR)                                           // 0x1E03
-	CASE(GL_INVERT)                                         // 0x150A
-	CASE(GL_INCR_WRAP)                                      // 0x8507
-	CASE(GL_DECR_WRAP)                                      // 0x8508
-
-	/* StringName */
-	CASE(GL_VENDOR)                                         // 0x1F00
-	CASE(GL_RENDERER)                                       // 0x1F01
-	CASE(GL_VERSION)                                        // 0x1F02
-	CASE(GL_EXTENSIONS)                                     // 0x1F03
-
-	/* TextureMagFilter */
-	CASE(GL_NEAREST)                                        // 0x2600
-	CASE(GL_LINEAR)                                         // 0x2601
-
-	/* TextureMinFilter */
-	CASE(GL_NEAREST_MIPMAP_NEAREST)                         // 0x2700
-	CASE(GL_LINEAR_MIPMAP_NEAREST)                          // 0x2701
-	CASE(GL_NEAREST_MIPMAP_LINEAR)                          // 0x2702
-	CASE(GL_LINEAR_MIPMAP_LINEAR)                           // 0x2703
-
-	/* TextureParameterName */
-	CASE(GL_TEXTURE_MAG_FILTER)                             // 0x2800
-	CASE(GL_TEXTURE_MIN_FILTER)                             // 0x2801
-	CASE(GL_TEXTURE_WRAP_S)                                 // 0x2802
-	CASE(GL_TEXTURE_WRAP_T)                                 // 0x2803
-
-	/* TextureTarget */
-	CASE(GL_TEXTURE)                                        // 0x1702
-
-	CASE(GL_TEXTURE_CUBE_MAP)                               // 0x8513
-	CASE(GL_TEXTURE_BINDING_CUBE_MAP)                       // 0x8514
-	CASE(GL_TEXTURE_CUBE_MAP_POSITIVE_X)                    // 0x8515
-	CASE(GL_TEXTURE_CUBE_MAP_NEGATIVE_X)                    // 0x8516
-	CASE(GL_TEXTURE_CUBE_MAP_POSITIVE_Y)                    // 0x8517
-	CASE(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y)                    // 0x8518
-	CASE(GL_TEXTURE_CUBE_MAP_POSITIVE_Z)                    // 0x8519
-	CASE(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)                    // 0x851A
-	CASE(GL_MAX_CUBE_MAP_TEXTURE_SIZE)                      // 0x851C
-
-	/* TextureUnit */
-	CASE(GL_TEXTURE0)                                       // 0x84C0
-	CASE(GL_TEXTURE1)                                       // 0x84C1
-	CASE(GL_TEXTURE2)                                       // 0x84C2
-	CASE(GL_TEXTURE3)                                       // 0x84C3
-	CASE(GL_TEXTURE4)                                       // 0x84C4
-	CASE(GL_TEXTURE5)                                       // 0x84C5
-	CASE(GL_TEXTURE6)                                       // 0x84C6
-	CASE(GL_TEXTURE7)                                       // 0x84C7
-	CASE(GL_TEXTURE8)                                       // 0x84C8
-	CASE(GL_TEXTURE9)                                       // 0x84C9
-	CASE(GL_TEXTURE10)                                      // 0x84CA
-	CASE(GL_TEXTURE11)                                      // 0x84CB
-	CASE(GL_TEXTURE12)                                      // 0x84CC
-	CASE(GL_TEXTURE13)                                      // 0x84CD
-	CASE(GL_TEXTURE14)                                      // 0x84CE
-	CASE(GL_TEXTURE15)                                      // 0x84CF
-	CASE(GL_TEXTURE16)                                      // 0x84D0
-	CASE(GL_TEXTURE17)                                      // 0x84D1
-	CASE(GL_TEXTURE18)                                      // 0x84D2
-	CASE(GL_TEXTURE19)                                      // 0x84D3
-	CASE(GL_TEXTURE20)                                      // 0x84D4
-	CASE(GL_TEXTURE21)                                      // 0x84D5
-	CASE(GL_TEXTURE22)                                      // 0x84D6
-	CASE(GL_TEXTURE23)                                      // 0x84D7
-	CASE(GL_TEXTURE24)                                      // 0x84D8
-	CASE(GL_TEXTURE25)                                      // 0x84D9
-	CASE(GL_TEXTURE26)                                      // 0x84DA
-	CASE(GL_TEXTURE27)                                      // 0x84DB
-	CASE(GL_TEXTURE28)                                      // 0x84DC
-	CASE(GL_TEXTURE29)                                      // 0x84DD
-	CASE(GL_TEXTURE30)                                      // 0x84DE
-	CASE(GL_TEXTURE31)                                      // 0x84DF
-	CASE(GL_ACTIVE_TEXTURE)                                 // 0x84E0
-
-	/* TextureWrapMode */
-	CASE(GL_REPEAT)                                         // 0x2901
-	CASE(GL_CLAMP_TO_EDGE)                                  // 0x812F
-	CASE(GL_MIRRORED_REPEAT)                                // 0x8370
-
-	/* Uniform Types */
-	CASE(GL_FLOAT_VEC2)                                     // 0x8B50
-	CASE(GL_FLOAT_VEC3)                                     // 0x8B51
-	CASE(GL_FLOAT_VEC4)                                     // 0x8B52
-	CASE(GL_INT_VEC2)                                       // 0x8B53
-	CASE(GL_INT_VEC3)                                       // 0x8B54
-	CASE(GL_INT_VEC4)                                       // 0x8B55
-	CASE(GL_BOOL)                                           // 0x8B56
-	CASE(GL_BOOL_VEC2)                                      // 0x8B57
-	CASE(GL_BOOL_VEC3)                                      // 0x8B58
-	CASE(GL_BOOL_VEC4)                                      // 0x8B59
-	CASE(GL_FLOAT_MAT2)                                     // 0x8B5A
-	CASE(GL_FLOAT_MAT3)                                     // 0x8B5B
-	CASE(GL_FLOAT_MAT4)                                     // 0x8B5C
-	CASE(GL_SAMPLER_2D)                                     // 0x8B5E
-	CASE(GL_SAMPLER_CUBE)                                   // 0x8B60
-
-	/* Vertex Arrays */
-	CASE(GL_VERTEX_ATTRIB_ARRAY_ENABLED)                    // 0x8622
-	CASE(GL_VERTEX_ATTRIB_ARRAY_SIZE)                       // 0x8623
-	CASE(GL_VERTEX_ATTRIB_ARRAY_STRIDE)                     // 0x8624
-	CASE(GL_VERTEX_ATTRIB_ARRAY_TYPE)                       // 0x8625
-	CASE(GL_VERTEX_ATTRIB_ARRAY_NORMALIZED)                 // 0x886A
-	CASE(GL_VERTEX_ATTRIB_ARRAY_POINTER)                    // 0x8645
-	CASE(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)             // 0x889F
-
-	/* Read Format */
-	CASE(GL_IMPLEMENTATION_COLOR_READ_TYPE)                 // 0x8B9A
-	CASE(GL_IMPLEMENTATION_COLOR_READ_FORMAT)               // 0x8B9B
-
-	/* Shader Source */
-	CASE(GL_COMPILE_STATUS)                                 // 0x8B81
-	CASE(GL_INFO_LOG_LENGTH)                                // 0x8B84
-	CASE(GL_SHADER_SOURCE_LENGTH)                           // 0x8B88
-	CASE(GL_SHADER_COMPILER)                                // 0x8DFA
-
-	/* Shader Binary */
-	CASE(GL_SHADER_BINARY_FORMATS)                          // 0x8DF8
-	CASE(GL_NUM_SHADER_BINARY_FORMATS)                      // 0x8DF9
-
-	/* Shader Precision-Specified Types */
-	CASE(GL_LOW_FLOAT)                                      // 0x8DF0
-	CASE(GL_MEDIUM_FLOAT)                                   // 0x8DF1
-	CASE(GL_HIGH_FLOAT)                                     // 0x8DF2
-	CASE(GL_LOW_INT)                                        // 0x8DF3
-	CASE(GL_MEDIUM_INT)                                     // 0x8DF4
-	CASE(GL_HIGH_INT)                                       // 0x8DF5
-
-	/* Framebuffer Object. */
-	CASE(GL_FRAMEBUFFER)                                    // 0x8D40
-	CASE(GL_RENDERBUFFER)                                   // 0x8D41
-
-	CASE(GL_RGBA4)                                          // 0x8056
-	CASE(GL_RGB5_A1)                                        // 0x8057
-	CASE(GL_RGB565)                                         // 0x8D62
-	CASE(GL_DEPTH_COMPONENT16)                              // 0x81A5
-	CASE(GL_STENCIL_INDEX8)                                 // 0x8D48
-
-	CASE(GL_RENDERBUFFER_WIDTH)                             // 0x8D42
-	CASE(GL_RENDERBUFFER_HEIGHT)                            // 0x8D43
-	CASE(GL_RENDERBUFFER_INTERNAL_FORMAT)                   // 0x8D44
-	CASE(GL_RENDERBUFFER_RED_SIZE)                          // 0x8D50
-	CASE(GL_RENDERBUFFER_GREEN_SIZE)                        // 0x8D51
-	CASE(GL_RENDERBUFFER_BLUE_SIZE)                         // 0x8D52
-	CASE(GL_RENDERBUFFER_ALPHA_SIZE)                        // 0x8D53
-	CASE(GL_RENDERBUFFER_DEPTH_SIZE)                        // 0x8D54
-	CASE(GL_RENDERBUFFER_STENCIL_SIZE)                      // 0x8D55
-
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)             // 0x8CD0
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)             // 0x8CD1
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL)           // 0x8CD2
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE)   // 0x8CD3
-
-	CASE(GL_COLOR_ATTACHMENT0)                              // 0x8CE0
-	CASE(GL_DEPTH_ATTACHMENT)                               // 0x8D00
-	CASE(GL_STENCIL_ATTACHMENT)                             // 0x8D20
-
-	CASE(GL_FRAMEBUFFER_COMPLETE)                           // 0x8CD5
-	CASE(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)              // 0x8CD6
-	CASE(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)      // 0x8CD7
-	CASE(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS)              // 0x8CD9
-	CASE(GL_FRAMEBUFFER_UNSUPPORTED)                        // 0x8CDD
-
-	CASE(GL_FRAMEBUFFER_BINDING)                            // 0x8CA6
-	CASE(GL_RENDERBUFFER_BINDING)                           // 0x8CA7
-	CASE(GL_MAX_RENDERBUFFER_SIZE)                          // 0x84E8
-
-	CASE(GL_INVALID_FRAMEBUFFER_OPERATION)                  // 0x0506
-
-	CASE(GL_READ_BUFFER)                                    // 0x0C02
-	CASE(GL_UNPACK_ROW_LENGTH)                              // 0x0CF2
-	CASE(GL_UNPACK_SKIP_ROWS)                               // 0x0CF3
-	CASE(GL_UNPACK_SKIP_PIXELS)                             // 0x0CF4
-	CASE(GL_PACK_ROW_LENGTH)                                // 0x0D02
-	CASE(GL_PACK_SKIP_ROWS)                                 // 0x0D03
-	CASE(GL_PACK_SKIP_PIXELS)                               // 0x0D04
-	CASE(GL_COLOR)                                          // 0x1800
-	CASE(GL_DEPTH)                                          // 0x1801
-	CASE(GL_STENCIL)                                        // 0x1802
-	CASE(GL_RED)                                            // 0x1903
-	CASE(GL_RGB8)                                           // 0x8051
-	CASE(GL_RGBA8)                                          // 0x8058
-	CASE(GL_RGB10_A2)                                       // 0x8059
-	CASE(GL_TEXTURE_BINDING_3D)                             // 0x806A
-	CASE(GL_UNPACK_SKIP_IMAGES)                             // 0x806D
-	CASE(GL_UNPACK_IMAGE_HEIGHT)                            // 0x806E
-	CASE(GL_TEXTURE_3D)                                     // 0x806F
-	CASE(GL_TEXTURE_WRAP_R)                                 // 0x8072
-	CASE(GL_MAX_3D_TEXTURE_SIZE)                            // 0x8073
-	CASE(GL_UNSIGNED_INT_2_10_10_10_REV)                    // 0x8368
-	CASE(GL_MAX_ELEMENTS_VERTICES)                          // 0x80E8
-	CASE(GL_MAX_ELEMENTS_INDICES)                           // 0x80E9
-	CASE(GL_TEXTURE_MIN_LOD)                                // 0x813A
-	CASE(GL_TEXTURE_MAX_LOD)                                // 0x813B
-	CASE(GL_TEXTURE_BASE_LEVEL)                             // 0x813C
-	CASE(GL_TEXTURE_MAX_LEVEL)                              // 0x813D
-	CASE(GL_MIN)                                            // 0x8007
-	CASE(GL_MAX)                                            // 0x8008
-	CASE(GL_DEPTH_COMPONENT24)                              // 0x81A6
-	CASE(GL_MAX_TEXTURE_LOD_BIAS)                           // 0x84FD
-	CASE(GL_TEXTURE_COMPARE_MODE)                           // 0x884C
-	CASE(GL_TEXTURE_COMPARE_FUNC)                           // 0x884D
-	CASE(GL_CURRENT_QUERY)                                  // 0x8865
-	CASE(GL_QUERY_RESULT)                                   // 0x8866
-	CASE(GL_QUERY_RESULT_AVAILABLE)                         // 0x8867
-	CASE(GL_BUFFER_MAPPED)                                  // 0x88BC
-	CASE(GL_BUFFER_MAP_POINTER)                             // 0x88BD
-	CASE(GL_STREAM_READ)                                    // 0x88E1
-	CASE(GL_STREAM_COPY)                                    // 0x88E2
-	CASE(GL_STATIC_READ)                                    // 0x88E5
-	CASE(GL_STATIC_COPY)                                    // 0x88E6
-	CASE(GL_DYNAMIC_READ)                                   // 0x88E9
-	CASE(GL_DYNAMIC_COPY)                                   // 0x88EA
-	CASE(GL_MAX_DRAW_BUFFERS)                               // 0x8824
-	CASE(GL_DRAW_BUFFER0)                                   // 0x8825
-	CASE(GL_DRAW_BUFFER1)                                   // 0x8826
-	CASE(GL_DRAW_BUFFER2)                                   // 0x8827
-	CASE(GL_DRAW_BUFFER3)                                   // 0x8828
-	CASE(GL_DRAW_BUFFER4)                                   // 0x8829
-	CASE(GL_DRAW_BUFFER5)                                   // 0x882A
-	CASE(GL_DRAW_BUFFER6)                                   // 0x882B
-	CASE(GL_DRAW_BUFFER7)                                   // 0x882C
-	CASE(GL_DRAW_BUFFER8)                                   // 0x882D
-	CASE(GL_DRAW_BUFFER9)                                   // 0x882E
-	CASE(GL_DRAW_BUFFER10)                                  // 0x882F
-	CASE(GL_DRAW_BUFFER11)                                  // 0x8830
-	CASE(GL_DRAW_BUFFER12)                                  // 0x8831
-	CASE(GL_DRAW_BUFFER13)                                  // 0x8832
-	CASE(GL_DRAW_BUFFER14)                                  // 0x8833
-	CASE(GL_DRAW_BUFFER15)                                  // 0x8834
-	CASE(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS)                // 0x8B49
-	CASE(GL_MAX_VERTEX_UNIFORM_COMPONENTS)                  // 0x8B4A
-	CASE(GL_SAMPLER_3D)                                     // 0x8B5F
-	CASE(GL_SAMPLER_2D_SHADOW)                              // 0x8B62
-	CASE(GL_FRAGMENT_SHADER_DERIVATIVE_HINT)                // 0x8B8B
-	CASE(GL_PIXEL_PACK_BUFFER)                              // 0x88EB
-	CASE(GL_PIXEL_UNPACK_BUFFER)                            // 0x88EC
-	CASE(GL_PIXEL_PACK_BUFFER_BINDING)                      // 0x88ED
-	CASE(GL_PIXEL_UNPACK_BUFFER_BINDING)                    // 0x88EF
-	CASE(GL_FLOAT_MAT2x3)                                   // 0x8B65
-	CASE(GL_FLOAT_MAT2x4)                                   // 0x8B66
-	CASE(GL_FLOAT_MAT3x2)                                   // 0x8B67
-	CASE(GL_FLOAT_MAT3x4)                                   // 0x8B68
-	CASE(GL_FLOAT_MAT4x2)                                   // 0x8B69
-	CASE(GL_FLOAT_MAT4x3)                                   // 0x8B6A
-	CASE(GL_SRGB)                                           // 0x8C40
-	CASE(GL_SRGB8)                                          // 0x8C41
-	CASE(GL_SRGB8_ALPHA8)                                   // 0x8C43
-	CASE(GL_COMPARE_REF_TO_TEXTURE)                         // 0x884E
-	CASE(GL_MAJOR_VERSION)                                  // 0x821B
-	CASE(GL_MINOR_VERSION)                                  // 0x821C
-	CASE(GL_NUM_EXTENSIONS)                                 // 0x821D
-	CASE(GL_RGBA32F)                                        // 0x8814
-	CASE(GL_RGB32F)                                         // 0x8815
-	CASE(GL_RGBA16F)                                        // 0x881A
-	CASE(GL_RGB16F)                                         // 0x881B
-	CASE(GL_VERTEX_ATTRIB_ARRAY_INTEGER)                    // 0x88FD
-	CASE(GL_MAX_ARRAY_TEXTURE_LAYERS)                       // 0x88FF
-	CASE(GL_MIN_PROGRAM_TEXEL_OFFSET)                       // 0x8904
-	CASE(GL_MAX_PROGRAM_TEXEL_OFFSET)                       // 0x8905
-	CASE(GL_MAX_VARYING_COMPONENTS)                         // 0x8B4B
-	CASE(GL_TEXTURE_2D_ARRAY)                               // 0x8C1A
-	CASE(GL_TEXTURE_BINDING_2D_ARRAY)                       // 0x8C1D
-	CASE(GL_R11F_G11F_B10F)                                 // 0x8C3A
-	CASE(GL_UNSIGNED_INT_10F_11F_11F_REV)                   // 0x8C3B
-	CASE(GL_RGB9_E5)                                        // 0x8C3D
-	CASE(GL_UNSIGNED_INT_5_9_9_9_REV)                       // 0x8C3E
-	CASE(GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH)          // 0x8C76
-	CASE(GL_TRANSFORM_FEEDBACK_BUFFER_MODE)                 // 0x8C7F
-	CASE(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS)     // 0x8C80
-	CASE(GL_TRANSFORM_FEEDBACK_VARYINGS)                    // 0x8C83
-	CASE(GL_TRANSFORM_FEEDBACK_BUFFER_START)                // 0x8C84
-	CASE(GL_TRANSFORM_FEEDBACK_BUFFER_SIZE)                 // 0x8C85
-	CASE(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN)          // 0x8C88
-	CASE(GL_RASTERIZER_DISCARD)                             // 0x8C89
-	CASE(GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS)  // 0x8C8A
-	CASE(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS)        // 0x8C8B
-	CASE(GL_INTERLEAVED_ATTRIBS)                            // 0x8C8C
-	CASE(GL_SEPARATE_ATTRIBS)                               // 0x8C8D
-	CASE(GL_TRANSFORM_FEEDBACK_BUFFER)                      // 0x8C8E
-	CASE(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING)              // 0x8C8F
-	CASE(GL_RGBA32UI)                                       // 0x8D70
-	CASE(GL_RGB32UI)                                        // 0x8D71
-	CASE(GL_RGBA16UI)                                       // 0x8D76
-	CASE(GL_RGB16UI)                                        // 0x8D77
-	CASE(GL_RGBA8UI)                                        // 0x8D7C
-	CASE(GL_RGB8UI)                                         // 0x8D7D
-	CASE(GL_RGBA32I)                                        // 0x8D82
-	CASE(GL_RGB32I)                                         // 0x8D83
-	CASE(GL_RGBA16I)                                        // 0x8D88
-	CASE(GL_RGB16I)                                         // 0x8D89
-	CASE(GL_RGBA8I)                                         // 0x8D8E
-	CASE(GL_RGB8I)                                          // 0x8D8F
-	CASE(GL_RED_INTEGER)                                    // 0x8D94
-	CASE(GL_RGB_INTEGER)                                    // 0x8D98
-	CASE(GL_RGBA_INTEGER)                                   // 0x8D99
-	CASE(GL_SAMPLER_2D_ARRAY)                               // 0x8DC1
-	CASE(GL_SAMPLER_2D_ARRAY_SHADOW)                        // 0x8DC4
-	CASE(GL_SAMPLER_CUBE_SHADOW)                            // 0x8DC5
-	CASE(GL_UNSIGNED_INT_VEC2)                              // 0x8DC6
-	CASE(GL_UNSIGNED_INT_VEC3)                              // 0x8DC7
-	CASE(GL_UNSIGNED_INT_VEC4)                              // 0x8DC8
-	CASE(GL_INT_SAMPLER_2D)                                 // 0x8DCA
-	CASE(GL_INT_SAMPLER_3D)                                 // 0x8DCB
-	CASE(GL_INT_SAMPLER_CUBE)                               // 0x8DCC
-	CASE(GL_INT_SAMPLER_2D_ARRAY)                           // 0x8DCF
-	CASE(GL_UNSIGNED_INT_SAMPLER_2D)                        // 0x8DD2
-	CASE(GL_UNSIGNED_INT_SAMPLER_3D)                        // 0x8DD3
-	CASE(GL_UNSIGNED_INT_SAMPLER_CUBE)                      // 0x8DD4
-	CASE(GL_UNSIGNED_INT_SAMPLER_2D_ARRAY)                  // 0x8DD7
-	CASE(GL_BUFFER_ACCESS_FLAGS)                            // 0x911F
-	CASE(GL_BUFFER_MAP_LENGTH)                              // 0x9120
-	CASE(GL_BUFFER_MAP_OFFSET)                              // 0x9121
-	CASE(GL_DEPTH_COMPONENT32F)                             // 0x8CAC
-	CASE(GL_DEPTH32F_STENCIL8)                              // 0x8CAD
-	CASE(GL_FLOAT_32_UNSIGNED_INT_24_8_REV)                 // 0x8DAD
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING)          // 0x8210
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE)          // 0x8211
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE)                // 0x8212
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE)              // 0x8213
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE)               // 0x8214
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE)              // 0x8215
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE)              // 0x8216
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE)            // 0x8217
-	CASE(GL_FRAMEBUFFER_DEFAULT)                            // 0x8218
-	CASE(GL_FRAMEBUFFER_UNDEFINED)                          // 0x8219
-	CASE(GL_DEPTH_STENCIL_ATTACHMENT)                       // 0x821A
-	CASE(GL_DEPTH_STENCIL)                                  // 0x84F9
-	CASE(GL_UNSIGNED_INT_24_8)                              // 0x84FA
-	CASE(GL_DEPTH24_STENCIL8)                               // 0x88F0
-	CASE(GL_UNSIGNED_NORMALIZED)                            // 0x8C17
-	CASE(GL_READ_FRAMEBUFFER)                               // 0x8CA8
-	CASE(GL_DRAW_FRAMEBUFFER)                               // 0x8CA9
-	CASE(GL_READ_FRAMEBUFFER_BINDING)                       // 0x8CAA
-	CASE(GL_RENDERBUFFER_SAMPLES)                           // 0x8CAB
-	CASE(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER)           // 0x8CD4
-	CASE(GL_MAX_COLOR_ATTACHMENTS)                          // 0x8CDF
-	CASE(GL_COLOR_ATTACHMENT1)                              // 0x8CE1
-	CASE(GL_COLOR_ATTACHMENT2)                              // 0x8CE2
-	CASE(GL_COLOR_ATTACHMENT3)                              // 0x8CE3
-	CASE(GL_COLOR_ATTACHMENT4)                              // 0x8CE4
-	CASE(GL_COLOR_ATTACHMENT5)                              // 0x8CE5
-	CASE(GL_COLOR_ATTACHMENT6)                              // 0x8CE6
-	CASE(GL_COLOR_ATTACHMENT7)                              // 0x8CE7
-	CASE(GL_COLOR_ATTACHMENT8)                              // 0x8CE8
-	CASE(GL_COLOR_ATTACHMENT9)                              // 0x8CE9
-	CASE(GL_COLOR_ATTACHMENT10)                             // 0x8CEA
-	CASE(GL_COLOR_ATTACHMENT11)                             // 0x8CEB
-	CASE(GL_COLOR_ATTACHMENT12)                             // 0x8CEC
-	CASE(GL_COLOR_ATTACHMENT13)                             // 0x8CED
-	CASE(GL_COLOR_ATTACHMENT14)                             // 0x8CEE
-	CASE(GL_COLOR_ATTACHMENT15)                             // 0x8CEF
-	CASE(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE)             // 0x8D56
-	CASE(GL_MAX_SAMPLES)                                    // 0x8D57
-	CASE(GL_HALF_FLOAT)                                     // 0x140B
-	CASE(GL_MAP_READ_BIT)                                   // 0x0001
-	CASE(GL_MAP_WRITE_BIT)                                  // 0x0002
-	CASE(GL_MAP_INVALIDATE_RANGE_BIT)                       // 0x0004
-	CASE(GL_MAP_INVALIDATE_BUFFER_BIT)                      // 0x0008
-	CASE(GL_MAP_FLUSH_EXPLICIT_BIT)                         // 0x0010
-	CASE(GL_MAP_UNSYNCHRONIZED_BIT)                         // 0x0020
-	CASE(GL_RG)                                             // 0x8227
-	CASE(GL_RG_INTEGER)                                     // 0x8228
-	CASE(GL_R8)                                             // 0x8229
-	CASE(GL_RG8)                                            // 0x822B
-	CASE(GL_R16F)                                           // 0x822D
-	CASE(GL_R32F)                                           // 0x822E
-	CASE(GL_RG16F)                                          // 0x822F
-	CASE(GL_RG32F)                                          // 0x8230
-	CASE(GL_R8I)                                            // 0x8231
-	CASE(GL_R8UI)                                           // 0x8232
-	CASE(GL_R16I)                                           // 0x8233
-	CASE(GL_R16UI)                                          // 0x8234
-	CASE(GL_R32I)                                           // 0x8235
-	CASE(GL_R32UI)                                          // 0x8236
-	CASE(GL_RG8I)                                           // 0x8237
-	CASE(GL_RG8UI)                                          // 0x8238
-	CASE(GL_RG16I)                                          // 0x8239
-	CASE(GL_RG16UI)                                         // 0x823A
-	CASE(GL_RG32I)                                          // 0x823B
-	CASE(GL_RG32UI)                                         // 0x823C
-	CASE(GL_VERTEX_ARRAY_BINDING)                           // 0x85B5
-	CASE(GL_R8_SNORM)                                       // 0x8F94
-	CASE(GL_RG8_SNORM)                                      // 0x8F95
-	CASE(GL_RGB8_SNORM)                                     // 0x8F96
-	CASE(GL_RGBA8_SNORM)                                    // 0x8F97
-	CASE(GL_SIGNED_NORMALIZED)                              // 0x8F9C
-	CASE(GL_PRIMITIVE_RESTART_FIXED_INDEX)                  // 0x8D69
-	CASE(GL_COPY_READ_BUFFER)                               // 0x8F36
-	CASE(GL_COPY_WRITE_BUFFER)                              // 0x8F37
-	CASE(GL_UNIFORM_BUFFER)                                 // 0x8A11
-	CASE(GL_UNIFORM_BUFFER_BINDING)                         // 0x8A28
-	CASE(GL_UNIFORM_BUFFER_START)                           // 0x8A29
-	CASE(GL_UNIFORM_BUFFER_SIZE)                            // 0x8A2A
-	CASE(GL_MAX_VERTEX_UNIFORM_BLOCKS)                      // 0x8A2B
-	CASE(GL_MAX_FRAGMENT_UNIFORM_BLOCKS)                    // 0x8A2D
-	CASE(GL_MAX_COMBINED_UNIFORM_BLOCKS)                    // 0x8A2E
-	CASE(GL_MAX_UNIFORM_BUFFER_BINDINGS)                    // 0x8A2F
-	CASE(GL_MAX_UNIFORM_BLOCK_SIZE)                         // 0x8A30
-	CASE(GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS)         // 0x8A31
-	CASE(GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS)       // 0x8A33
-	CASE(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT)                // 0x8A34
-	CASE(GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH)           // 0x8A35
-	CASE(GL_ACTIVE_UNIFORM_BLOCKS)                          // 0x8A36
-	CASE(GL_UNIFORM_TYPE)                                   // 0x8A37
-	CASE(GL_UNIFORM_SIZE)                                   // 0x8A38
-	CASE(GL_UNIFORM_NAME_LENGTH)                            // 0x8A39
-	CASE(GL_UNIFORM_BLOCK_INDEX)                            // 0x8A3A
-	CASE(GL_UNIFORM_OFFSET)                                 // 0x8A3B
-	CASE(GL_UNIFORM_ARRAY_STRIDE)                           // 0x8A3C
-	CASE(GL_UNIFORM_MATRIX_STRIDE)                          // 0x8A3D
-	CASE(GL_UNIFORM_IS_ROW_MAJOR)                           // 0x8A3E
-	CASE(GL_UNIFORM_BLOCK_BINDING)                          // 0x8A3F
-	CASE(GL_UNIFORM_BLOCK_DATA_SIZE)                        // 0x8A40
-	CASE(GL_UNIFORM_BLOCK_NAME_LENGTH)                      // 0x8A41
-	CASE(GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS)                  // 0x8A42
-	CASE(GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES)           // 0x8A43
-	CASE(GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER)      // 0x8A44
-	CASE(GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER)    // 0x8A46
-	CASE(GL_MAX_VERTEX_OUTPUT_COMPONENTS)                   // 0x9122
-	CASE(GL_MAX_FRAGMENT_INPUT_COMPONENTS)                  // 0x9125
-	CASE(GL_MAX_SERVER_WAIT_TIMEOUT)                        // 0x9111
-	CASE(GL_OBJECT_TYPE)                                    // 0x9112
-	CASE(GL_SYNC_CONDITION)                                 // 0x9113
-	CASE(GL_SYNC_STATUS)                                    // 0x9114
-	CASE(GL_SYNC_FLAGS)                                     // 0x9115
-	CASE(GL_SYNC_FENCE)                                     // 0x9116
-	CASE(GL_SYNC_GPU_COMMANDS_COMPLETE)                     // 0x9117
-	CASE(GL_UNSIGNALED)                                     // 0x9118
-	CASE(GL_SIGNALED)                                       // 0x9119
-	CASE(GL_ALREADY_SIGNALED)                               // 0x911A
-	CASE(GL_TIMEOUT_EXPIRED)                                // 0x911B
-	CASE(GL_CONDITION_SATISFIED)                            // 0x911C
-	CASE(GL_WAIT_FAILED)                                    // 0x911D
-	CASE(GL_VERTEX_ATTRIB_ARRAY_DIVISOR)                    // 0x88FE
-	CASE(GL_ANY_SAMPLES_PASSED)                             // 0x8C2F
-	CASE(GL_ANY_SAMPLES_PASSED_CONSERVATIVE)                // 0x8D6A
-	CASE(GL_SAMPLER_BINDING)                                // 0x8919
-	CASE(GL_RGB10_A2UI)                                     // 0x906F
-	CASE(GL_TEXTURE_SWIZZLE_R)                              // 0x8E42
-	CASE(GL_TEXTURE_SWIZZLE_G)                              // 0x8E43
-	CASE(GL_TEXTURE_SWIZZLE_B)                              // 0x8E44
-	CASE(GL_TEXTURE_SWIZZLE_A)                              // 0x8E45
-	CASE(GL_GREEN)                                          // 0x1904
-	CASE(GL_BLUE)                                           // 0x1905
-	CASE(GL_INT_2_10_10_10_REV)                             // 0x8D9F
-	CASE(GL_TRANSFORM_FEEDBACK)                             // 0x8E22
-	CASE(GL_TRANSFORM_FEEDBACK_PAUSED)                      // 0x8E23
-	CASE(GL_TRANSFORM_FEEDBACK_ACTIVE)                      // 0x8E24
-	CASE(GL_TRANSFORM_FEEDBACK_BINDING)                     // 0x8E25
-	CASE(GL_PROGRAM_BINARY_RETRIEVABLE_HINT)                // 0x8257
-	CASE(GL_PROGRAM_BINARY_LENGTH)                          // 0x8741
-	CASE(GL_NUM_PROGRAM_BINARY_FORMATS)                     // 0x87FE
-	CASE(GL_PROGRAM_BINARY_FORMATS)                         // 0x87FF
-	CASE(GL_COMPRESSED_R11_EAC)                             // 0x9270
-	CASE(GL_COMPRESSED_SIGNED_R11_EAC)                      // 0x9271
-	CASE(GL_COMPRESSED_RG11_EAC)                            // 0x9272
-	CASE(GL_COMPRESSED_SIGNED_RG11_EAC)                     // 0x9273
-	CASE(GL_COMPRESSED_RGB8_ETC2)                           // 0x9274
-	CASE(GL_COMPRESSED_SRGB8_ETC2)                          // 0x9275
-	CASE(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2)       // 0x9276
-	CASE(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2)      // 0x9277
-	CASE(GL_COMPRESSED_RGBA8_ETC2_EAC)                      // 0x9278
-	CASE(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC)               // 0x9279
-	CASE(GL_TEXTURE_IMMUTABLE_FORMAT)                       // 0x912F
-	CASE(GL_MAX_ELEMENT_INDEX)                              // 0x8D6B
-	CASE(GL_NUM_SAMPLE_COUNTS)                              // 0x9380
-	CASE(GL_TEXTURE_IMMUTABLE_LEVELS)                       // 0x8D63
-
-	default:
-		return "(unrecognized enum)";
-	}
-
-#undef CASE
-}
-
-const char *
-piglit_get_prim_name(GLenum prim)
-{
-	switch (prim) {
-	case GL_POINTS:
-		return "GL_POINTS";
-	case GL_LINES:
-		return "GL_LINES";
-	case GL_LINE_STRIP:
-		return "GL_LINE_STRIP";
-	case GL_LINE_LOOP:
-		return "GL_LINE_LOOP";
-	case GL_TRIANGLES:
-		return "GL_TRIANGLES";
-	case GL_TRIANGLE_STRIP:
-		return "GL_TRIANGLE_STRIP";
-	case GL_TRIANGLE_FAN:
-		return "GL_TRIANGLE_FAN";
-	default:
-		return "(unrecognized enum)";
-	}
-}
-- 
2.0.0.rc1



More information about the Piglit mailing list