[Piglit] [PATCH 2/7] Replace piglit-dispatch with libepoxy.

Daniel Kurtz djkurtz at chromium.org
Wed Feb 26 15:18:24 PST 2014


Hi Eric,

I've been trying to test this series with the latest libepoxy on my
[EGL & GLES only] system without much luck yet.
There are a couple of problems with libepoxy, for which I will create
epoxy bugs.
I also added a comment on this patch; see below.

On Mon, Feb 24, 2014 at 11:41 AM, Eric Anholt <eric at anholt.net> wrote:
> libepoxy is based on a similar code-generation idea as
> piglit-dispatch, but is distributed as a separate library, uses the
> new XML files, and handles EGL and GLX function pointers as well.
> ---
>
> Trimmed the big deletes in here to avoid mailing list moderation.
>
>  CMakeLists.txt                                     |    4 +-
>  cmake/piglit_dispatch.cmake                        |   44 -
>  src/piglit/gl_wrap.h                               |   67 -
>  tests/egl/egl-util.c                               |   10 +-
>  .../default-major-version-gl.c                     |    2 -
>  .../default-major-version-gles.c                   |    3 -
>  .../default-minor-version-gl.c                     |    2 -
>  .../default-minor-version-gles.c                   |    7 -
>  .../valid-attribute-empty-gl.c                     |    2 -
>  .../valid-attribute-empty-gles.c                   |    3 -
>  .../valid-attribute-null-gl.c                      |    2 -
>  .../valid-attribute-null-gles.c                    |    3 -
>  .../spec/egl_khr_create_context/valid-flag-debug.c |   24 -
>  .../valid-flag-forward-compatible-gl.c             |    2 -
>  .../spec/egl_khr_create_context/verify-gl-flavor.c |   10 -
>  tests/general/windowoverlap.c                      |    1 -
>  tests/glean/glwrap.h                               |    2 +-
>  tests/glean/tbase.h                                |    6 +-
>  tests/glx/glx-copy-sub-buffer.c                    |    1 -
>  tests/glx/glx-destroycontext-1.c                   |    1 -
>  tests/glx/glx-destroycontext-2.c                   |    1 -
>  tests/glx/glx-fbo-binding.c                        |    1 -
>  tests/glx/glx-make-current.c                       |    1 -
>  tests/glx/glx-make-glxdrawable-current.c           |    1 -
>  tests/glx/glx-multi-context-ib-1.c                 |    1 -
>  tests/glx/glx-multithread-makecurrent-1.c          |    1 -
>  tests/glx/glx-multithread-makecurrent-2.c          |    1 -
>  tests/glx/glx-multithread-makecurrent-3.c          |    1 -
>  tests/glx/glx-multithread-makecurrent-4.c          |    1 -
>  tests/glx/glx-multithread-shader-compile.c         |    7 -
>  tests/glx/glx-multithread-texture.c                |    1 -
>  tests/glx/glx-multithread.c                        |    1 -
>  tests/glx/glx-shader-sharing.c                     |    2 -
>  tests/glx/glx-swap-event.c                         |    1 -
>  tests/glx/glx-swap-pixmap-bad.c                    |    1 -
>  tests/glx/glx-swap-pixmap.c                        |    1 -
>  tests/glx/glx-swap-singlebuffer.c                  |    1 -
>  tests/glx/glx-tfp.c                                |    2 -
>  tests/glx/glx-visuals-depth.c                      |    1 -
>  tests/glx/glx-visuals-stencil.c                    |    1 -
>  .../depth-stencil-texture.c                        |    7 +-
>  .../glx_arb_create_context/default-major-version.c |    1 -
>  .../glx_arb_create_context/default-minor-version.c |    1 -
>  tests/spec/glx_mesa_query_renderer/coverage.c      |    1 -
>  tests/spec/glx_oml_sync_control/common.c           |    2 -
>  tests/texturing/getteximage-luminance.c            |    1 -
>  tests/util/CMakeLists.gl.txt                       |    4 -
>  tests/util/CMakeLists.gles2.txt                    |    2 -
>  tests/util/CMakeLists.gles3.txt                    |    2 -
>  tests/util/CMakeLists.txt                          |    1 +
>  tests/util/gen_dispatch.py                         |  682 ---------
>  tests/util/glxew.h                                 | 1586 --------------------
>  tests/util/piglit-dispatch-init.c                  |  202 ---
>  tests/util/piglit-dispatch.c                       |  304 ----
>  tests/util/piglit-dispatch.h                       |  175 ---
>  .../piglit-framework-gl/piglit_fbo_framework.c     |    2 -
>  .../piglit-framework-gl/piglit_glut_framework.c    |    4 -
>  .../piglit-framework-gl/piglit_wfl_framework.c     |    6 -
>  .../piglit-framework-gl/piglit_x11_framework.c     |   13 +-
>  tests/util/piglit-shader.h                         |   45 -
>  tests/util/piglit-util-gl-common.h                 |    4 +-
>  tests/util/piglit-util-gl.c                        |    2 -
>  tests/util/piglit_ktx.h                            |    2 +-
>  63 files changed, 13 insertions(+), 3260 deletions(-)
>  delete mode 100644 cmake/piglit_dispatch.cmake
>  delete mode 100644 src/piglit/gl_wrap.h
>  delete mode 100644 tests/util/gen_dispatch.py
>  delete mode 100644 tests/util/glxew.h
>  delete mode 100644 tests/util/piglit-dispatch-init.c
>  delete mode 100644 tests/util/piglit-dispatch.c
>  delete mode 100644 tests/util/piglit-dispatch.h
>
> diff --git a/CMakeLists.txt b/CMakeLists.txt
> index bef9c35..45d2cc1 100644
> --- a/CMakeLists.txt
> +++ b/CMakeLists.txt
> @@ -26,6 +26,9 @@ option(PIGLIT_BUILD_CL_TESTS "Build tests for OpenCL" OFF)
>
>  if(PIGLIT_BUILD_GL_TESTS)
>         find_package(OpenGL REQUIRED)
> +       pkg_check_modules(EPOXY REQUIRED epoxy)
> +       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EPOXY_CFLAGS}")
> +       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EPOXY_CFLAGS}")

We want to use epoxy even when running only GLES (and not desktop GL)
tests.  So, perhaps something like:

if(PIGLIT_BUILD_GL_TESTS)
  find_package(OpenGL REQUIRED)
endif()

+if(PIGLIT_BUILD_GL_TESTS OR PIGLIT_BUILD_GLES1_TESTS OR
+   PIGLIT_BUILD_GLES2_TESTS OR PIGLIT_BUILD_GLES3_TESTS)
+  pkg_check_modules(EPOXY REQUIRED epoxy)
+  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EPOXY_CFLAGS}")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EPOXY_CFLAGS}")
+ endif()

Thanks,
-Dan

>
>  if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
> @@ -377,7 +380,6 @@ configure_file(
>
>  include(cmake/piglit_util.cmake)
>  include(cmake/piglit_glapi.cmake)
> -include(cmake/piglit_dispatch.cmake)
>
>  include_directories(src)
>  add_subdirectory(cmake/target_api)
> diff --git a/cmake/piglit_dispatch.cmake b/cmake/piglit_dispatch.cmake
> deleted file mode 100644
> index 0b0a2eb..0000000
> --- a/cmake/piglit_dispatch.cmake
> +++ /dev/null
> @@ -1,44 +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.
> -
> -set(piglit_dispatch_gen_output_dir ${CMAKE_BINARY_DIR}/tests/util)
> -
> -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
> -       )
> -
> -set(piglit_dispatch_gen_inputs
> -       ${CMAKE_SOURCE_DIR}/tests/util/gen_dispatch.py
> -       ${CMAKE_BINARY_DIR}/glapi/glapi.json
> -       )
> -
> -add_custom_command(
> -       OUTPUT ${piglit_dispatch_gen_outputs}
> -       DEPENDS ${piglit_dispatch_gen_inputs}
> -       COMMAND ${python} ${piglit_dispatch_gen_inputs} ${piglit_dispatch_gen_outputs}
> -       )
> -
> -add_custom_target(piglit_dispatch_gen
> -       DEPENDS ${piglit_dispatch_gen_outputs}
> -       )
> diff --git a/src/piglit/gl_wrap.h b/src/piglit/gl_wrap.h
> deleted file mode 100644
> index e8bbbcd..0000000
> --- a/src/piglit/gl_wrap.h
> +++ /dev/null
> @@ -1,67 +0,0 @@
> -/*
> - * Copyright (c) 2010 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.
> - *
> - * Authors:
> - *     Chad Versace <chad.versace at intel.com>
> - */
> -
> -/**
> - * \file gl_wrap.h
> - * \brief Convenience header that includes the actual OpenGL headers.
> - *
> - * The actual OpenGL headers are chosen according to the macro definitions
> - * PIGLIT_USE_OPENGL, PIGLIT_USE_OPENGL_ES1, and PIGLIT_USE_OPENGL_ES2.
> - */
> -
> -#pragma once
> -
> -#ifdef __cplusplus
> -extern "C" {
> -#endif
> -
> -#ifdef _WIN32
> -#include <windows.h>
> -#endif
> -
> -#if (defined(PIGLIT_USE_OPENGL) || \
> -     defined(PIGLIT_USE_OPENGL_ES2) || \
> -     defined(PIGLIT_USE_OPENGL_ES3))
> -#      include "piglit-dispatch.h"
> -
> -#elif defined(PIGLIT_USE_OPENGL_ES1)
> -#      define GL_GLEXT_PROTOTYPES
> -#      include <GLES/gl.h>
> -#      include <GLES/glext.h>
> -
> -       /* for source level compatibility */
> -#       define GL_TEXTURE_CUBE_MAP_POSITIVE_X GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES
> -#       define GL_TEXTURE_CUBE_MAP_POSITIVE_Y GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES
> -#       define GL_TEXTURE_CUBE_MAP_POSITIVE_Z GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES
> -#       define GL_TEXTURE_CUBE_MAP_NEGATIVE_X GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES
> -#       define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES
> -#       define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES
> -
> -#endif
> -
> -#ifdef __cplusplus
> -} /* end extern "C" */
> -#endif
> diff --git a/tests/egl/egl-util.c b/tests/egl/egl-util.c
> index 226ba0e..f371666 100644
> --- a/tests/egl/egl-util.c
> +++ b/tests/egl/egl-util.c
> @@ -189,7 +189,7 @@ egl_util_run(const struct egl_test *test, int argc, char *argv[])
>         struct egl_state state;
>         EGLint count;
>         enum piglit_result result;
> -       int i, dispatch_api, api_bit = EGL_OPENGL_BIT;
> +       int i, api_bit = EGL_OPENGL_BIT;
>
>         EGLint ctxAttribsES[] = {
>                 EGL_CONTEXT_CLIENT_VERSION, 0,
> @@ -225,18 +225,14 @@ egl_util_run(const struct egl_test *test, int argc, char *argv[])
>                 ctxAttribs = ctxAttribsES;
>         }
>
> -       /* choose dispatch_api and set ctx version to ctxAttribs if using ES */
> +       /* Set ctx version to ctxAttribs if using ES */
>         switch (api_bit) {
>         case EGL_OPENGL_ES_BIT:
> -               dispatch_api = PIGLIT_DISPATCH_ES1;
>                 ctxAttribsES[1] = 1;
>                 break;
>         case EGL_OPENGL_ES2_BIT:
> -               dispatch_api = PIGLIT_DISPATCH_ES2;
>                 ctxAttribsES[1] = 2;
>                 break;
> -       default:
> -               dispatch_api = PIGLIT_DISPATCH_GL;
>         }
>
>
> @@ -283,8 +279,6 @@ egl_util_run(const struct egl_test *test, int argc, char *argv[])
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       piglit_dispatch_default_init(dispatch_api);
> -
>         result = event_loop(&state, test);
>
>         eglTerminate(state.egl_dpy);
> diff --git a/tests/egl/spec/egl_khr_create_context/default-major-version-gl.c b/tests/egl/spec/egl_khr_create_context/default-major-version-gl.c
> index 1162d7b..22cb802 100644
> --- a/tests/egl/spec/egl_khr_create_context/default-major-version-gl.c
> +++ b/tests/egl/spec/egl_khr_create_context/default-major-version-gl.c
> @@ -63,8 +63,6 @@ int main(int argc, char **argv)
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         version_string = (char *) glGetString(GL_VERSION);
>
>         if (!parse_version_string(version_string, &major, &minor)) {
> diff --git a/tests/egl/spec/egl_khr_create_context/default-major-version-gles.c b/tests/egl/spec/egl_khr_create_context/default-major-version-gles.c
> index 00c28d1..da72fbb 100644
> --- a/tests/egl/spec/egl_khr_create_context/default-major-version-gles.c
> +++ b/tests/egl/spec/egl_khr_create_context/default-major-version-gles.c
> @@ -60,9 +60,6 @@ int main(int argc, char **argv)
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       /* FINISHME: Use PIGLIT_DISPATCH_ES1 when implemented. */
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         version_string = (char *) glGetString(GL_VERSION);
>
>         if (!parse_version_string(version_string, &major, &minor)) {
> diff --git a/tests/egl/spec/egl_khr_create_context/default-minor-version-gl.c b/tests/egl/spec/egl_khr_create_context/default-minor-version-gl.c
> index 37369d5..2ff3d85 100644
> --- a/tests/egl/spec/egl_khr_create_context/default-minor-version-gl.c
> +++ b/tests/egl/spec/egl_khr_create_context/default-minor-version-gl.c
> @@ -65,8 +65,6 @@ int main(int argc, char **argv)
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         version_string = (char *) glGetString(GL_VERSION);
>
>         if (!parse_version_string(version_string, &major, &minor)) {
> diff --git a/tests/egl/spec/egl_khr_create_context/default-minor-version-gles.c b/tests/egl/spec/egl_khr_create_context/default-minor-version-gles.c
> index 6101ad7..8c4270f 100644
> --- a/tests/egl/spec/egl_khr_create_context/default-minor-version-gles.c
> +++ b/tests/egl/spec/egl_khr_create_context/default-minor-version-gles.c
> @@ -64,13 +64,6 @@ int main(int argc, char **argv)
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       if (attribs[1] == 1) {
> -               /* FINISHME: Use PIGLIT_DISPATCH_ES1 when implemented. */
> -               piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -       } else if (attribs[1] == 2) {
> -               piglit_dispatch_default_init(PIGLIT_DISPATCH_ES2);
> -       }
> -
>         version_string = (char *) glGetString(GL_VERSION);
>
>         if (!parse_version_string(version_string, &major, &minor)) {
> diff --git a/tests/egl/spec/egl_khr_create_context/valid-attribute-empty-gl.c b/tests/egl/spec/egl_khr_create_context/valid-attribute-empty-gl.c
> index 5e1ebb3..7ae042d 100644
> --- a/tests/egl/spec/egl_khr_create_context/valid-attribute-empty-gl.c
> +++ b/tests/egl/spec/egl_khr_create_context/valid-attribute-empty-gl.c
> @@ -55,8 +55,6 @@ int main(int argc, char **argv)
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         version_string = (char *) glGetString(GL_VERSION);
>
>         if (!parse_version_string(version_string, &major, &minor)) {
> diff --git a/tests/egl/spec/egl_khr_create_context/valid-attribute-empty-gles.c b/tests/egl/spec/egl_khr_create_context/valid-attribute-empty-gles.c
> index 1a878a8..b962424 100644
> --- a/tests/egl/spec/egl_khr_create_context/valid-attribute-empty-gles.c
> +++ b/tests/egl/spec/egl_khr_create_context/valid-attribute-empty-gles.c
> @@ -54,9 +54,6 @@ int main(int argc, char **argv)
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       /* FINISHME: Use PIGLIT_DISPATCH_ES1 when implemented. */
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         version_string = (char *) glGetString(GL_VERSION);
>
>         if (!parse_version_string(version_string, &major, &minor)) {
> diff --git a/tests/egl/spec/egl_khr_create_context/valid-attribute-null-gl.c b/tests/egl/spec/egl_khr_create_context/valid-attribute-null-gl.c
> index d3ff851..04a24c2 100644
> --- a/tests/egl/spec/egl_khr_create_context/valid-attribute-null-gl.c
> +++ b/tests/egl/spec/egl_khr_create_context/valid-attribute-null-gl.c
> @@ -52,8 +52,6 @@ int main(int argc, char **argv)
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         version_string = (char *) glGetString(GL_VERSION);
>
>         if (!parse_version_string(version_string, &major, &minor)) {
> diff --git a/tests/egl/spec/egl_khr_create_context/valid-attribute-null-gles.c b/tests/egl/spec/egl_khr_create_context/valid-attribute-null-gles.c
> index 2042283..706d338 100644
> --- a/tests/egl/spec/egl_khr_create_context/valid-attribute-null-gles.c
> +++ b/tests/egl/spec/egl_khr_create_context/valid-attribute-null-gles.c
> @@ -51,9 +51,6 @@ int main(int argc, char **argv)
>                 piglit_report_result(PIGLIT_FAIL);
>         }
>
> -       /* FINISHME: Use PIGLIT_DISPATCH_ES1 when implemented. */
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         version_string = (char *) glGetString(GL_VERSION);
>
>         if (!parse_version_string(version_string, &major, &minor)) {
> diff --git a/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c b/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
> index 1473b44..a8bc1d7 100644
> --- a/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
> +++ b/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
> @@ -65,7 +65,6 @@ static void
>  try_debug_flag(EGLenum context_api, EGLenum context_bit)
>  {
>         GLint actual_flags = 0;
> -       piglit_dispatch_api dispatch_api;
>
>         EGLint attribs[64];
>         int i = 0;
> @@ -117,29 +116,6 @@ try_debug_flag(EGLenum context_api, EGLenum context_bit)
>
>         switch (context_bit) {
>         case EGL_OPENGL_BIT:
> -               dispatch_api = PIGLIT_DISPATCH_GL;
> -               break;
> -       case EGL_OPENGL_ES_BIT:
> -               /* Piglit doesn't yet have ES1 dispatch, so just initialize
> -                * with ES2 dispatch. This should be safe because the only
> -                * GL functions called by this test are glGetString() and
> -                * glGetIntegerv().
> -                */
> -               dispatch_api = PIGLIT_DISPATCH_ES2;
> -       case EGL_OPENGL_ES2_BIT:
> -       case EGL_OPENGL_ES3_BIT_KHR:
> -               dispatch_api = PIGLIT_DISPATCH_ES2;
> -               break;
> -       default:
> -               dispatch_api = 0;
> -               assert(0);
> -               break;
> -       }
> -
> -       piglit_dispatch_default_init(dispatch_api);
> -
> -       switch (context_bit) {
> -       case EGL_OPENGL_BIT:
>                 if (piglit_get_gl_version() < 31 &&
>                     !piglit_is_extension_supported("GL_KHR_debug")) {
>                         fprintf(stderr, "In OpenGL, either OpenGL 3.1 or "
> diff --git a/tests/egl/spec/egl_khr_create_context/valid-flag-forward-compatible-gl.c b/tests/egl/spec/egl_khr_create_context/valid-flag-forward-compatible-gl.c
> index 7f0f148..eef19f2 100644
> --- a/tests/egl/spec/egl_khr_create_context/valid-flag-forward-compatible-gl.c
> +++ b/tests/egl/spec/egl_khr_create_context/valid-flag-forward-compatible-gl.c
> @@ -43,8 +43,6 @@ static bool try_flag(int flag)
>                                 piglit_report_result(PIGLIT_FAIL);
>                         }
>
> -                       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>                         gl_version = piglit_get_gl_version();
>                 }
>                 eglDestroyContext(egl_dpy, ctx);
> diff --git a/tests/egl/spec/egl_khr_create_context/verify-gl-flavor.c b/tests/egl/spec/egl_khr_create_context/verify-gl-flavor.c
> index 27ea0b1..ff40eda 100644
> --- a/tests/egl/spec/egl_khr_create_context/verify-gl-flavor.c
> +++ b/tests/egl/spec/egl_khr_create_context/verify-gl-flavor.c
> @@ -139,8 +139,6 @@ get_gl_version(void)
>  static enum piglit_result
>  check_flavor(int requested_version, enum gl_api requested_api)
>  {
> -       static bool is_dispatch_init = false;
> -
>         enum piglit_result result = PIGLIT_PASS;
>         int i;
>
> @@ -231,14 +229,6 @@ check_flavor(int requested_version, enum gl_api requested_api)
>                 goto fail;
>         }
>
> -       if (!is_dispatch_init) {
> -               /* We must postpone initialization of piglit-dispatch until
> -                * a context is current.
> -                */
> -               piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -               is_dispatch_init = true;
> -       }
> -
>         if (!eglQueryContext(egl_dpy, ctx,
>                              EGL_CONTEXT_CLIENT_TYPE, &actual_client_type)) {
>                 printf("%s", "error: eglQueryContext(EGL_CONTEXT_CLIENT_TYPE) "
> diff --git a/tests/general/windowoverlap.c b/tests/general/windowoverlap.c
> index 6b08a75..71e70f6 100644
> --- a/tests/general/windowoverlap.c
> +++ b/tests/general/windowoverlap.c
> @@ -181,7 +181,6 @@ int main(int argc, char *argv[])
>         glutInitWindowSize(MainWidth, MainHeight);
>         glutInitDisplayMode(PIGLIT_GL_VISUAL_RGB);
>         glutCreateWindow(argv[0]);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>         glutReshapeFunc(Reshape);
>         glutDisplayFunc(RedisplayMain);
>         if (!Automatic)
> diff --git a/tests/glean/glwrap.h b/tests/glean/glwrap.h
> index d3404b4..cfc2ee5 100644
> --- a/tests/glean/glwrap.h
> +++ b/tests/glean/glwrap.h
> @@ -48,7 +48,7 @@
>  #ifndef __glwrap_h__
>  #define __glwrap_h__
>
> -#include "../util/piglit-dispatch.h"
> +#include <epoxy/gl.h>
>
>  #if defined(__WIN__)
>  #  include <windows.h>
> diff --git a/tests/glean/tbase.h b/tests/glean/tbase.h
> index b5fe2c5..37a65c2 100644
> --- a/tests/glean/tbase.h
> +++ b/tests/glean/tbase.h
> @@ -104,7 +104,7 @@ and tbasic.cpp.
>  #ifndef __tbase_h__
>  #define __tbase_h__
>
> -#include "piglit-dispatch.h"
> +#include <epoxy/gl.h>
>
>  #ifdef __UNIX__
>  #include <unistd.h>
> @@ -311,10 +311,6 @@ public:
>                                         // XXX need to throw exception here
>                                 }
>
> -                               // Make sure glew is initialized so we can call
> -                               // GL functions safely.
> -                               piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>                                 // Check if test is applicable to this context
>                                 if (!isApplicable())
>                                         continue;
> diff --git a/tests/glx/glx-copy-sub-buffer.c b/tests/glx/glx-copy-sub-buffer.c
> index a991df5..ef8bd93 100644
> --- a/tests/glx/glx-copy-sub-buffer.c
> +++ b/tests/glx/glx-copy-sub-buffer.c
> @@ -52,7 +52,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win_one, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         glClearColor(1.0, 0.0, 0.0, 0.0);
>         glClear(GL_COLOR_BUFFER_BIT);
> diff --git a/tests/glx/glx-destroycontext-1.c b/tests/glx/glx-destroycontext-1.c
> index fc27b6e..3088d5b 100644
> --- a/tests/glx/glx-destroycontext-1.c
> +++ b/tests/glx/glx-destroycontext-1.c
> @@ -48,7 +48,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>         glClearColor(1.0, 0.0, 0.0, 1.0);
>         glClear(GL_COLOR_BUFFER_BIT);
>         glXMakeCurrent(dpy, None, NULL);
> diff --git a/tests/glx/glx-destroycontext-2.c b/tests/glx/glx-destroycontext-2.c
> index e4c6d37..0edfbb9 100644
> --- a/tests/glx/glx-destroycontext-2.c
> +++ b/tests/glx/glx-destroycontext-2.c
> @@ -48,7 +48,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>         glClearColor(1.0, 0.0, 0.0, 1.0);
>         glClear(GL_COLOR_BUFFER_BIT);
>         glXDestroyContext(dpy, ctx);
> diff --git a/tests/glx/glx-fbo-binding.c b/tests/glx/glx-fbo-binding.c
> index bfdc4dd..6fb051e 100644
> --- a/tests/glx/glx-fbo-binding.c
> +++ b/tests/glx/glx-fbo-binding.c
> @@ -111,7 +111,6 @@ main(int argc, char **argv)
>     ctx = piglit_get_glx_context(dpy, visinfo);
>
>     glXMakeCurrent(dpy, Windows[0], ctx);
> -   piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>     piglit_glx_event_loop(dpy, draw);
>
> diff --git a/tests/glx/glx-make-current.c b/tests/glx/glx-make-current.c
> index dde99b4..0f09060 100644
> --- a/tests/glx/glx-make-current.c
> +++ b/tests/glx/glx-make-current.c
> @@ -49,7 +49,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win_one, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         glClearColor(0.0, 1.0, 0.0, 1.0);
>         glClear(GL_COLOR_BUFFER_BIT);
> diff --git a/tests/glx/glx-make-glxdrawable-current.c b/tests/glx/glx-make-glxdrawable-current.c
> index fc339be..2a6d778 100644
> --- a/tests/glx/glx-make-glxdrawable-current.c
> +++ b/tests/glx/glx-make-glxdrawable-current.c
> @@ -76,7 +76,6 @@ draw(Display *dpy)
>         ctx = piglit_get_glx_context(dpy, visinfo);
>
>         glXMakeCurrent(dpy, glxwin_one, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         glClearColor(0.0, 1.0, 0.0, 1.0);
>         glClear(GL_COLOR_BUFFER_BIT);
> diff --git a/tests/glx/glx-multi-context-ib-1.c b/tests/glx/glx-multi-context-ib-1.c
> index 2b3c00e..6a4ce3f 100644
> --- a/tests/glx/glx-multi-context-ib-1.c
> +++ b/tests/glx/glx-multi-context-ib-1.c
> @@ -189,7 +189,6 @@ main(int argc, char **argv)
>         ctx1 = piglit_get_glx_context(dpy, visinfo);
>
>         glXMakeCurrent(dpy, win, ctx0);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>         piglit_require_extension("GL_ARB_vertex_buffer_object");
>         context0_init();
>         glXMakeCurrent(dpy, win, ctx1);
> diff --git a/tests/glx/glx-multithread-makecurrent-1.c b/tests/glx/glx-multithread-makecurrent-1.c
> index 97dc1cd..d9d689b 100644
> --- a/tests/glx/glx-multithread-makecurrent-1.c
> +++ b/tests/glx/glx-multithread-makecurrent-1.c
> @@ -107,7 +107,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         piglit_require_glx_extension(dpy, "MESA_multithread_makecurrent");
>
> diff --git a/tests/glx/glx-multithread-makecurrent-2.c b/tests/glx/glx-multithread-makecurrent-2.c
> index d9714ec..adb1e98 100644
> --- a/tests/glx/glx-multithread-makecurrent-2.c
> +++ b/tests/glx/glx-multithread-makecurrent-2.c
> @@ -108,7 +108,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         piglit_require_glx_extension(dpy, "MESA_multithread_makecurrent");
>
> diff --git a/tests/glx/glx-multithread-makecurrent-3.c b/tests/glx/glx-multithread-makecurrent-3.c
> index dc93d33..3a5524d 100644
> --- a/tests/glx/glx-multithread-makecurrent-3.c
> +++ b/tests/glx/glx-multithread-makecurrent-3.c
> @@ -100,7 +100,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         piglit_require_glx_extension(dpy, "MESA_multithread_makecurrent");
>
> diff --git a/tests/glx/glx-multithread-makecurrent-4.c b/tests/glx/glx-multithread-makecurrent-4.c
> index 53cb297..f2d0cc2 100644
> --- a/tests/glx/glx-multithread-makecurrent-4.c
> +++ b/tests/glx/glx-multithread-makecurrent-4.c
> @@ -100,7 +100,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         piglit_require_glx_extension(dpy, "MESA_multithread_makecurrent");
>
> diff --git a/tests/glx/glx-multithread-shader-compile.c b/tests/glx/glx-multithread-shader-compile.c
> index 82042d5..61a6250 100644
> --- a/tests/glx/glx-multithread-shader-compile.c
> +++ b/tests/glx/glx-multithread-shader-compile.c
> @@ -68,13 +68,6 @@ thread_func(void *arg)
>                 ctx = piglit_get_glx_context(dpy, visinfo);
>                 glXMakeCurrent(dpy, win, ctx);
>
> -               /* Ok, not nice but should be safe due to all threads working
> -                * on the same type of context.
> -                 */
> -               pthread_mutex_lock(&mutex);
> -               piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -               pthread_mutex_unlock(&mutex);
> -
>                 vert_shader = piglit_compile_shader_text(GL_VERTEX_SHADER, vert_shader_text);
>                 piglit_check_gl_error(GL_NO_ERROR);
>
> diff --git a/tests/glx/glx-multithread-texture.c b/tests/glx/glx-multithread-texture.c
> index 59dc730..af17ce1 100644
> --- a/tests/glx/glx-multithread-texture.c
> +++ b/tests/glx/glx-multithread-texture.c
> @@ -195,7 +195,6 @@ draw(Display *dpy)
>
>         ret = glXMakeCurrent(dpy, draw_win, my_ctx);
>         assert(ret);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         glEnable(GL_TEXTURE_2D);
>
> diff --git a/tests/glx/glx-multithread.c b/tests/glx/glx-multithread.c
> index f88f8da..133544d 100644
> --- a/tests/glx/glx-multithread.c
> +++ b/tests/glx/glx-multithread.c
> @@ -79,7 +79,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         /* Clear background to gray */
>         glClearColor(0.5, 0.5, 0.5, 1.0);
> diff --git a/tests/glx/glx-shader-sharing.c b/tests/glx/glx-shader-sharing.c
> index 1b180ae..4a78ac0 100644
> --- a/tests/glx/glx-shader-sharing.c
> +++ b/tests/glx/glx-shader-sharing.c
> @@ -88,8 +88,6 @@ draw(Display *dpy)
>      */
>     glXMakeCurrent(dpy, win, ctx1);
>
> -   piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>     if (piglit_get_gl_version() < 20) {
>        printf("%s: Requires OpenGL 2.0\n", TestName);
>        return PIGLIT_SKIP;
> diff --git a/tests/glx/glx-swap-event.c b/tests/glx/glx-swap-event.c
> index 310e634..8b2eb0c 100644
> --- a/tests/glx/glx-swap-event.c
> +++ b/tests/glx/glx-swap-event.c
> @@ -533,7 +533,6 @@ main(int argc, char *argv[])
>              piglit_report_result(PIGLIT_FAIL);
>          }
>      }
> -    piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>      event_loop(dpy, glxWin);
>
>      glXDestroyContext(dpy, ctx);
> diff --git a/tests/glx/glx-swap-pixmap-bad.c b/tests/glx/glx-swap-pixmap-bad.c
> index 52a0749..2b4133e 100644
> --- a/tests/glx/glx-swap-pixmap-bad.c
> +++ b/tests/glx/glx-swap-pixmap-bad.c
> @@ -73,7 +73,6 @@ main(int argc, char **argv)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, g, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         /* Clear to green */
>         glClearColor(0.0, 1.0, 0.0, 0.0);
> diff --git a/tests/glx/glx-swap-pixmap.c b/tests/glx/glx-swap-pixmap.c
> index 7635e0d..51aebfe 100644
> --- a/tests/glx/glx-swap-pixmap.c
> +++ b/tests/glx/glx-swap-pixmap.c
> @@ -67,7 +67,6 @@ main(int argc, char **argv)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, g, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         /* Clear to green */
>         glClearColor(0.0, 1.0, 0.0, 0.0);
> diff --git a/tests/glx/glx-swap-singlebuffer.c b/tests/glx/glx-swap-singlebuffer.c
> index a747149..b7c2e75 100644
> --- a/tests/glx/glx-swap-singlebuffer.c
> +++ b/tests/glx/glx-swap-singlebuffer.c
> @@ -48,7 +48,6 @@ draw(Display *dpy)
>
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         /* Clear to green */
>         glClearColor(0.0, 1.0, 0.0, 0.0);
> diff --git a/tests/glx/glx-tfp.c b/tests/glx/glx-tfp.c
> index 413d920..3336c51 100644
> --- a/tests/glx/glx-tfp.c
> +++ b/tests/glx/glx-tfp.c
> @@ -320,8 +320,6 @@ int main(int argc, char**argv)
>
>         glXMakeCurrent(dpy, win, ctx);
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         if (piglit_automatic)
>                 piglit_glx_set_no_input();
>
> diff --git a/tests/glx/glx-visuals-depth.c b/tests/glx/glx-visuals-depth.c
> index 8db98bb..38c3a27 100644
> --- a/tests/glx/glx-visuals-depth.c
> +++ b/tests/glx/glx-visuals-depth.c
> @@ -50,7 +50,6 @@ draw(Display *dpy, GLXFBConfig config)
>         float *left, *right;
>         bool pass = true;
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>         glXGetFBConfigAttrib(dpy, config, GLX_DEPTH_SIZE, &dbits);
>
>         piglit_ortho_projection(piglit_width, piglit_height, false);
> diff --git a/tests/glx/glx-visuals-stencil.c b/tests/glx/glx-visuals-stencil.c
> index 12fcfd3..9da3b33 100644
> --- a/tests/glx/glx-visuals-stencil.c
> +++ b/tests/glx/glx-visuals-stencil.c
> @@ -50,7 +50,6 @@ draw(Display *dpy, GLXFBConfig config)
>         float *left, *right;
>         bool pass = true;
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>         glXGetFBConfigAttrib(dpy, config, GLX_STENCIL_SIZE, &sbits);
>
>         piglit_ortho_projection(piglit_width, piglit_height, false);
> diff --git a/tests/spec/ext_packed_depth_stencil/depth-stencil-texture.c b/tests/spec/ext_packed_depth_stencil/depth-stencil-texture.c
> index d40d6a6..369f80e 100644
> --- a/tests/spec/ext_packed_depth_stencil/depth-stencil-texture.c
> +++ b/tests/spec/ext_packed_depth_stencil/depth-stencil-texture.c
> @@ -57,11 +57,8 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
>  PIGLIT_GL_TEST_CONFIG_END
>
>  #if defined PIGLIT_USE_OPENGL_ES1
> -#define GL_TEXTURE_CUBE_MAP  GL_TEXTURE_CUBE_MAP_OES
> -#define GL_DEPTH_STENCIL     GL_DEPTH_STENCIL_OES
> -#define GL_DEPTH24_STENCIL8  GL_DEPTH24_STENCIL8_OES
> -#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
> -#define GL_TEXTURE_3D        0x806F
> +/* XXX: This should get propagated to gl.xml */
> +#undef glTexStorage2D
>  #define glTexStorage2D       glTexStorage2DEXT
>  #endif
>
> diff --git a/tests/spec/glx_arb_create_context/default-major-version.c b/tests/spec/glx_arb_create_context/default-major-version.c
> index 07bff27..6f0bc4d 100644
> --- a/tests/spec/glx_arb_create_context/default-major-version.c
> +++ b/tests/spec/glx_arb_create_context/default-major-version.c
> @@ -52,7 +52,6 @@ int main(int argc, char **argv)
>          */
>         ctx = glXCreateContextAttribsARB(dpy, fbconfig, NULL, True, attribs);
>         glXMakeContextCurrent(dpy, glxWin, glxWin, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         version_string = (char *) glGetString(GL_VERSION);
>
> diff --git a/tests/spec/glx_arb_create_context/default-minor-version.c b/tests/spec/glx_arb_create_context/default-minor-version.c
> index f32e991..e442fe0 100644
> --- a/tests/spec/glx_arb_create_context/default-minor-version.c
> +++ b/tests/spec/glx_arb_create_context/default-minor-version.c
> @@ -57,7 +57,6 @@ int main(int argc, char **argv)
>         }
>
>         glXMakeContextCurrent(dpy, glxWin, glxWin, ctx);
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         version_string = (char *) glGetString(GL_VERSION);
>
> diff --git a/tests/spec/glx_mesa_query_renderer/coverage.c b/tests/spec/glx_mesa_query_renderer/coverage.c
> index b3464d4..387da93 100644
> --- a/tests/spec/glx_mesa_query_renderer/coverage.c
> +++ b/tests/spec/glx_mesa_query_renderer/coverage.c
> @@ -264,7 +264,6 @@ int main(int argc, char **argv)
>         }
>
>          glXMakeContextCurrent(dpy, glxWin, glxWin, ctx);
> -        piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>
>         pass = subtest_QueryRendererInteger(dpy) && pass;
>         pass = subtest_QueryRendererString(dpy) && pass;
> diff --git a/tests/spec/glx_oml_sync_control/common.c b/tests/spec/glx_oml_sync_control/common.c
> index d5011a8..922f080 100644
> --- a/tests/spec/glx_oml_sync_control/common.c
> +++ b/tests/spec/glx_oml_sync_control/common.c
> @@ -80,8 +80,6 @@ piglit_oml_sync_control_test_run(enum piglit_result (*draw)(Display *dpy))
>         ctx = piglit_get_glx_context(dpy, visinfo);
>         glXMakeCurrent(dpy, win, ctx);
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         XMapWindow(dpy, win);
>
>         piglit_glx_event_loop(dpy, draw);
> diff --git a/tests/texturing/getteximage-luminance.c b/tests/texturing/getteximage-luminance.c
> index 389c3a2..e8631a8 100644
> --- a/tests/texturing/getteximage-luminance.c
> +++ b/tests/texturing/getteximage-luminance.c
> @@ -251,5 +251,4 @@ piglit_display(void)
>  void
>  piglit_init(int argc, char **argv)
>  {
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>  }
> diff --git a/tests/util/CMakeLists.gl.txt b/tests/util/CMakeLists.gl.txt
> index d8fb32c..ba83d84 100644
> --- a/tests/util/CMakeLists.gl.txt
> +++ b/tests/util/CMakeLists.gl.txt
> @@ -1,7 +1,5 @@
>  set(UTIL_GL_SOURCES
>         ${UTIL_GL_SOURCES}
> -       piglit-dispatch.c
> -       piglit-dispatch-init.c
>         piglit-shader.c
>         piglit-shader-gl.c
>         piglit-util-gl-enum.c
> @@ -37,8 +35,6 @@ IF(PIGLIT_BUILD_GLX_TESTS)
>                     piglit-util-gl.c
>                     piglit-glx-framework.c
>                     piglit-glx-util.c
> -                   piglit-dispatch.c
> -                   piglit-dispatch-init.c
>         )
>         target_link_libraries(piglitglxutil
>                 piglitutil_${piglit_target_api}
> diff --git a/tests/util/CMakeLists.gles2.txt b/tests/util/CMakeLists.gles2.txt
> index d2501e3..0470104 100644
> --- a/tests/util/CMakeLists.gles2.txt
> +++ b/tests/util/CMakeLists.gles2.txt
> @@ -1,8 +1,6 @@
>  set(UTIL_GL_SOURCES
>         ${UTIL_GL_SOURCES}
>         piglit-vbo.cpp
> -       piglit-dispatch.c
> -       piglit-dispatch-init.c
>         piglit-shader.c
>         piglit-shader-gles2.c
>         piglit-util-gl-enum.c
> diff --git a/tests/util/CMakeLists.gles3.txt b/tests/util/CMakeLists.gles3.txt
> index 1cb591f..98f3302 100644
> --- a/tests/util/CMakeLists.gles3.txt
> +++ b/tests/util/CMakeLists.gles3.txt
> @@ -1,7 +1,5 @@
>  list(APPEND UTIL_GL_SOURCES
>         minmax-test.c
> -       piglit-dispatch.c
> -       piglit-dispatch-init.c
>         piglit-shader.c
>         piglit-shader-gles2.c # Compatible with gles3.
>         piglit-util-gles.c
> diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt
> index 27c8888..691adc4 100644
> --- a/tests/util/CMakeLists.txt
> +++ b/tests/util/CMakeLists.txt
> @@ -52,6 +52,7 @@ endif()
>  set(UTIL_GL_LIBS
>         piglitutil
>         ${WAFFLE_LDFLAGS}
> +       ${EPOXY_LDFLAGS}
>         )
>
>  if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
> diff --git a/tests/util/gen_dispatch.py b/tests/util/gen_dispatch.py
> deleted file mode 100644
> index c97af94..0000000
> --- a/tests/util/gen_dispatch.py
> +++ /dev/null
> @@ -1,682 +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.
> -
> -# This script generates a C file (and corresponding header) allowing
> -# Piglit to dispatch calls to OpenGL based on a JSON description of
> -# the GL API (and extensions).
> -#
> -# Invoke this script with 3 command line arguments: the JSON input
> -# filename, the C output filename, and the header outpit filename.
> -#
> -#
> -# The input looks like this:
> -#
> -# {
> -#   "categories": {
> -#     <category name>: {
> -#       "kind": <"GL" or "GLES" for a GL spec API, "extension" for an extension>,
> -#       "gl_10x_version": <For a GL version, version number times 10>,
> -#       "extension_name" <For an extension, name of the extension>
> -#     }, ...
> -#   },
> -#   "enums": {
> -#     <enum name, without "GL_" prefix>: {
> -#       "value_int": <value integer>
> -#       "value_str": <value string>
> -#     }, ...
> -#   },
> -#   "functions": {
> -#     <function name, without "gl" prefix>: {
> -#       "categories": <list of categories in which this function appears>,
> -#       "param_names": <list of param names>,
> -#       "param_types": <list of param types>,
> -#       "return_type": <type, or "void" if no return>
> -#     }, ...
> -#   },
> -#   "function_alias_sets": {
> -#     <list of synonymous function names>, ...
> -#   },
> -# }
> -#
> -#
> -# The generated header consists of the following:
> -#
> -# - A typedef for each function, of the form that would normally
> -#   appear in gl.h or glext.h, e.g.:
> -#
> -#   typedef GLvoid * (APIENTRY *PFNGLMAPBUFFERPROC)(GLenum, GLenum);
> -#   typedef GLvoid * (APIENTRY *PFNGLMAPBUFFERARBPROC)(GLenum, GLenum);
> -#
> -# - A set of extern declarations for "dispatch function pointers".
> -#   There is one dispatch function pointer for each set of synonymous
> -#   functions in the GL API, e.g.:
> -#
> -#   extern PFNGLMAPBUFFERPROC piglit_dispatch_glMapBuffer;
> -#
> -# - A set of #defines mapping each function name to the corresponding
> -#   dispatch function pointer, e.g.:
> -#
> -#   #define glMapBuffer piglit_dispatch_glMapBuffer
> -#   #define glMapBufferARB piglit_dispatch_glMapBuffer
> -#
> -# - A #define for each enum in the GL API, e.g.:
> -#
> -#   #define GL_FRONT 0x0404
> -#
> -# - A #define for each extension, e.g.:
> -#
> -#   #define GL_ARB_vertex_buffer_object 1
> -#
> -# - A #define for each known GL version, e.g.:
> -#
> -#   #define GL_VERSION_1_5 1
> -#
> -#
> -# The generated C file consists of the following:
> -#
> -# - A resolve function corresponding to each set of synonymous
> -#   functions in the GL API.  The resolve function determines which of
> -#   the synonymous names the implementation supports (by consulting
> -#   the current GL version and/or the extension string), and calls
> -#   either get_core_proc() or get_ext_proc() to get the function
> -#   pointer.  It stores the result in the dispatch function pointer,
> -#   and then returns it as a generic void(void) function pointer.  If
> -#   the implementation does not support any of the synonymous names,
> -#   it calls unsupported().  E.g.:
> -#
> -#   /* glMapBuffer (GL 1.5) */
> -#   /* glMapbufferARB (GL_ARB_vertex_buffer_object) */
> -#   static piglit_dispatch_function_ptr resolve_glMapBuffer()
> -#   {
> -#     if (check_version(15))
> -#       piglit_dispatch_glMapBuffer = (PFNGLMAPBUFFERPROC) get_core_proc("glMapBuffer", 15);
> -#     else if (check_extension("GL_ARB_vertex_buffer_object"))
> -#       piglit_dispatch_glMapBuffer = (PFNGLMAPBUFFERARBPROC) get_ext_proc("glMapBufferARB");
> -#     else
> -#       unsupported("MapBuffer");
> -#     return (piglit_dispatch_function_ptr) piglit_dispatch_glMapBuffer;
> -#   }
> -#
> -# - A stub function corresponding to each set of synonymous functions
> -#   in the GL API.  The stub function first calls
> -#   check_initialized().  Then it calls the resolve function to
> -#   ensure that the dispatch function pointer is set.  Finally, it
> -#   dispatches to the GL function through the dispatch function
> -#   pointer.  E.g.:
> -#
> -#   static GLvoid * APIENTRY stub_glMapBuffer(GLenum target, GLenum access)
> -#   {
> -#     check_initialized();
> -#     resolve_glMapBuffer();
> -#     return piglit_dispatch_glMapBuffer(target, access);
> -#   }
> -#
> -# - A declaration for each dispatch function pointer, e.g.:
> -#
> -#   PFNGLMAPBUFFERPROC piglit_dispatch_glMapBuffer = stub_glMapBuffer;
> -#
> -# - An function, reset_dispatch_pointers(), which resets each dispatch
> -#   pointer to the corresponding stub function.
> -#
> -# - A table function_names, containing the name of each function in
> -#   alphabetical order (including the "gl" prefix).
> -#
> -# - A table function_resolvers, containing a pointer to the resolve
> -#   function corresponding to each entry in function_names.
> -
> -import collections
> -import os.path
> -import sys
> -try:
> -    import simplejson as json
> -except:
> -    import json
> -
> -
> -# Generate a top-of-file comment cautioning that the file is
> -# auto-generated and should not be manually edited.
> -def generated_boilerplate():
> -    return """\
> -/**
> - * This file was automatically generated by the script {0!r}.
> - *
> - * DO NOT EDIT!
> - *
> - * To regenerate, run "make piglit_dispatch_gen" from the toplevel directory.
> - *
> - * 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.
> - */
> -""".format(os.path.basename(sys.argv[0]))
> -
> -
> -# Certain param names used in OpenGL are reserved by some compilers.
> -# Rename them.
> -PARAM_NAME_FIXUPS = {'near': 'hither', 'far': 'yon'}
> -
> -
> -def fixup_param_name(name):
> -    if name in PARAM_NAME_FIXUPS:
> -        return PARAM_NAME_FIXUPS[name]
> -    else:
> -        return name
> -
> -
> -# Internal representation of a category.
> -#
> -# - For a category representing a GL version, Category.kind is 'GL'
> -#   and Category.gl_10x_version is 10 times the GL version (e.g. 21
> -#   for OpenGL version 2.1).
> -#
> -# - For a category representing an extension, Category.kind is
> -#   'extension' and Category.extension_name is the extension name
> -#   (including the 'GL_' prefix).
> -class Category(object):
> -    def __init__(self, json_data):
> -        self.kind = json_data['kind']
> -        if 'gl_10x_version' in json_data:
> -            self.gl_10x_version = json_data['gl_10x_version']
> -        if 'extension_name' in json_data:
> -            self.extension_name = json_data['extension_name']
> -
> -    # Generate a human-readable representation of the category (for
> -    # use in generated comments).
> -    def __str__(self):
> -        if self.kind == 'GL':
> -            return 'GL {0}.{1}'.format(
> -                self.gl_10x_version // 10, self.gl_10x_version % 10)
> -        if self.kind == 'GLES':
> -            return 'GLES {0}.{1}'.format(
> -                self.gl_10x_version // 10, self.gl_10x_version % 10)
> -        elif self.kind == 'extension':
> -            return self.extension_name
> -        else:
> -            raise Exception(
> -                'Unexpected category kind {0!r}'.format(self.kind))
> -
> -
> -# Internal representation of a GL function.
> -#
> -# - Function.name is the name of the function, without the 'gl'
> -#   prefix.
> -#
> -# - Function.param_names is a list containing the name of each
> -#   function parameter.
> -#
> -# - Function.param_types is a list containing the type of each
> -#   function parameter.
> -#
> -# - Function.return_type is the return type of the function, or 'void'
> -#   if the function has no return.
> -#
> -# - Function.category is a Category object describing the extension or
> -#   GL version the function is defined in.
> -class Function(object):
> -    def __init__(self, name, json_data):
> -        self.name = name
> -        self.param_names = [
> -            fixup_param_name(x) for x in json_data['param_names']]
> -        self.param_types = json_data['param_types']
> -        self.return_type = json_data['return_type']
> -        self.categories = json_data['categories']
> -
> -    # Name of the function, with the 'gl' prefix.
> -    @property
> -    def gl_name(self):
> -        return 'gl' + self.name
> -
> -    # Name of the function signature typedef corresponding to this
> -    # function.  E.g. for the glGetString function, this is
> -    # 'PFNGLGETSTRINGPROC'.
> -    @property
> -    def typedef_name(self):
> -        return 'pfn{0}proc'.format(self.gl_name).upper()
> -
> -    # Generate a string representing the function signature in C.
> -    #
> -    # - name is inserted before the opening paren--use '' to generate
> -    #   an anonymous function type signature.
> -    #
> -    # - If anonymous_args is True, then the signature contains only
> -    #   the types of the arguments, not the names.
> -    def c_form(self, name, anonymous_args):
> -        if self.param_types:
> -            if anonymous_args:
> -                param_decls = ', '.join(self.param_types)
> -            else:
> -                param_decls = ', '.join(
> -                    '{0} {1}'.format(*p)
> -                    for p in zip(self.param_types, self.param_names))
> -        else:
> -            param_decls = 'void'
> -        return '{rettype} {name}({param_decls})'.format(
> -            rettype=self.return_type, name=name,
> -            param_decls=param_decls)
> -
> -
> -# Internal representation of an enum.
> -#
> -# - Enum.value_int is the value of the enum, as a Python integer.
> -#
> -# - Enum.value_str is the value of the enum, as a string suitable for
> -#   emitting as C code.
> -class Enum(object):
> -    def __init__(self, json_data):
> -        self.value_int = json_data['value_int']
> -        self.value_str = json_data['value_str']
> -
> -
> -# Data structure keeping track of a set of synonymous functions.  Such
> -# a set is called a "dispatch set" because it corresponds to a single
> -# dispatch pointer.
> -#
> -# - DispatchSet.cat_fn_pairs is a list of pairs (category, function)
> -#   for each category this function is defined in.  The list is sorted
> -#   by category, with categories of kind 'GL' and then 'GLES' appearing first.
> -class DispatchSet(object):
> -    # Initialize a dispatch set given a list of synonymous function
> -    # names.
> -    #
> -    # - all_functions is a dict mapping all possible function names to
> -    #   the Function object describing them.
> -    #
> -    # - all_categories is a dict mapping all possible category names
> -    #   to the Category object describing them.
> -    def __init__(self, synonym_set, all_functions, all_categories):
> -        self.cat_fn_pairs = []
> -        for function_name in synonym_set:
> -            function = all_functions[function_name]
> -            for category_name in function.categories:
> -                category = all_categories[category_name]
> -                self.cat_fn_pairs.append((category, function))
> -        # Sort by category, with GL categories preceding extensions.
> -        self.cat_fn_pairs.sort(key=self.__sort_key)
> -
> -    # The first Function object in DispatchSet.functions.  This
> -    # "primary" function is used to name the dispatch pointer, the
> -    # stub function, and the resolve function.
> -    @property
> -    def primary_function(self):
> -        return self.cat_fn_pairs[0][1]
> -
> -    # The name of the dispatch pointer that should be generated for
> -    # this dispatch set.
> -    @property
> -    def dispatch_name(self):
> -        return 'piglit_dispatch_' + self.primary_function.gl_name
> -
> -    # The name of the stub function that should be generated for this
> -    # dispatch set.
> -    @property
> -    def stub_name(self):
> -        return 'stub_' + self.primary_function.gl_name
> -
> -    # The name of the resolve function that should be generated for
> -    # this dispatch set.
> -    @property
> -    def resolve_name(self):
> -        return 'resolve_' + self.primary_function.gl_name
> -
> -    @staticmethod
> -    def __sort_key(cat_fn_pair):
> -        if cat_fn_pair[0].kind == 'GL':
> -            return 0, cat_fn_pair[0].gl_10x_version
> -        elif cat_fn_pair[0].kind == 'GLES':
> -            return 1, cat_fn_pair[0].gl_10x_version
> -        elif cat_fn_pair[0].kind == 'extension':
> -            return 2, cat_fn_pair[0].extension_name
> -        else:
> -            raise Exception(
> -                'Unexpected category kind {0!r}'.format(cat_fn_pair[0].kind))
> -
> -
> -# Data structure keeping track of all of the known functions and
> -# enums, and synonym relationships that exist between the functions.
> -#
> -# - Api.enums is a dict mapping enum name to an Enum object.
> -#
> -# - Api.functions is a dict mapping function name to a Function object.
> -#
> -# - Api.function_alias_sets is a list of lists, where each constituent
> -#   list is a list of function names that are aliases of each other.
> -#
> -# - Api.categories is a dict mapping category name to a Category
> -#   object.
> -class Api(object):
> -    def __init__(self, json_data):
> -        self.enums = dict(
> -            (key, Enum(value))
> -            for key, value in json_data['enums'].items())
> -        self.functions = dict(
> -            (key, Function(key, value))
> -            for key, value in json_data['functions'].items())
> -        self.function_alias_sets = json_data['function_alias_sets']
> -        self.categories = dict(
> -            (key, Category(value))
> -            for key, value in json_data['categories'].items())
> -
> -    # Generate a list of (name, value) pairs representing all enums in
> -    # the API.  The resulting list is sorted by enum value.
> -    def compute_unique_enums(self):
> -        enums_by_value = [(enum.value_int, (name, enum.value_str))
> -                          for name, enum in self.enums.items()]
> -        enums_by_value.sort()
> -        return [item[1] for item in enums_by_value]
> -
> -    # A list of all of the extension names declared in the API, as
> -    # Python strings, sorted alphabetically.
> -    @property
> -    def extensions(self):
> -        return sorted(
> -            [category_name
> -             for category_name, category in self.categories.items()
> -             if category.kind == 'extension'])
> -
> -    # A list of all of the GL versions declared in the API, as
> -    # integers (e.g. 13 represents GL version 1.3).
> -    @property
> -    def gl_versions(self):
> -        return sorted(
> -            [category.gl_10x_version
> -             for category in self.categories.values()
> -             if category.kind == 'GL'])
> -
> -    # Generate a list of DispatchSet objects representing all sets of
> -    # synonymous functions in the API.  The resulting list is sorted
> -    # by DispatchSet.stub_name.
> -    def compute_dispatch_sets(self):
> -        sets = [DispatchSet(synonym_set, self.functions, self.categories)
> -                for synonym_set in self.function_alias_sets]
> -        sets.sort(key=lambda ds: ds.stub_name)
> -
> -        return sets
> -
> -    # Generate a list of Function objects representing all functions
> -    # in the API.  The resulting list is sorted by function name.
> -    def compute_unique_functions(self):
> -        return [self.functions[key] for key in sorted(self.functions.keys())]
> -
> -
> -# Read the given input file and return an Api object containing the
> -# data in it.
> -def read_api(filename):
> -    with open(filename, 'r') as f:
> -        return Api(json.load(f))
> -
> -
> -# Generate the resolve function for a given DispatchSet.
> -def generate_resolve_function(ds):
> -    f0 = ds.primary_function
> -
> -    # First figure out all the conditions we want to check in order to
> -    # figure out which function to dispatch to, and the code we will
> -    # execute in each case.
> -    condition_code_pairs = []
> -    for category, f in ds.cat_fn_pairs:
> -        if category.kind in ('GL', 'GLES'):
> -            getter = 'get_core_proc("{0}", {1})'.format(
> -                f.gl_name, category.gl_10x_version)
> -
> -            condition = ''
> -            api_base_version = 0
> -            if category.kind == 'GL':
> -                condition = 'dispatch_api == PIGLIT_DISPATCH_GL'
> -                api_base_version = 10
> -            elif category.gl_10x_version >= 20:
> -                condition = 'dispatch_api == PIGLIT_DISPATCH_ES2'
> -                api_base_version = 20
> -            else:
> -                condition = 'dispatch_api == PIGLIT_DISPATCH_ES1'
> -                api_base_version = 11
> -
> -            # Only check the version for functions that aren't part of the
> -            # core for the PIGLIT_DISPATCH api.
> -            if category.gl_10x_version != api_base_version:
> -                condition = condition + ' && check_version({0})'.format(
> -                    category.gl_10x_version)
> -        elif category.kind == 'extension':
> -            getter = 'get_ext_proc("{0}")'.format(f.gl_name)
> -            condition = 'check_extension("{0}")'.format(category.extension_name)
> -        else:
> -            raise Exception(
> -                'Unexpected category type {0!r}'.format(category.kind))
> -
> -        if f.name == 'TexImage3DEXT':
> -            # Special case: glTexImage3DEXT has a slightly different
> -            # type than glTexImage3D (argument 3 is a GLenum rather
> -            # than a GLint).  This is not a problem, since GLenum and
> -            # GLint are treated identically by function calling
> -            # conventions.  So when calling get_proc_address() on
> -            # glTexImage3DEXT, cast the result to PFNGLTEXIMAGE3DPROC
> -            # to avoid a warning.
> -            typedef_name = 'PFNGLTEXIMAGE3DPROC'
> -        else:
> -            typedef_name = f.typedef_name
> -
> -        code = '{0} = ({1}) {2};'.format(
> -            ds.dispatch_name, typedef_name, getter)
> -
> -        condition_code_pairs.append((condition, code))
> -
> -    # XXX: glDraw{Arrays,Elements}InstancedARB are exposed by
> -    # ARB_instanced_arrays in addition to ARB_draw_instanced, but neither
> -    # gl.spec nor gl.json can accomodate an extension with two categories, so
> -    # insert these cases here.
> -        if f.gl_name in ('glDrawArraysInstancedARB',
> -                         'glDrawElementsInstancedARB'):
> -            condition = 'check_extension("GL_ARB_instanced_arrays")'
> -            condition_code_pairs.append((condition, code))
> -
> -    # Finally, if none of the previous conditions were satisfied, then
> -    # the given dispatch set is not supported by the implementation,
> -    # so we want to call the unsupported() function.
> -    condition_code_pairs.append(
> -        ('true', 'unsupported("{0}");'.format(f0.name)))
> -
> -    # Start the resolve function
> -    resolve_fn = 'static piglit_dispatch_function_ptr {0}()\n'.format(
> -        ds.resolve_name)
> -    resolve_fn += '{\n'
> -
> -    # Output code that checks each condition in turn and executes the
> -    # appropriate case.  To make the generated code more palatable
> -    # (and to avoid compiler warnings), we convert "if (true) FOO;" to
> -    # "FOO;" and "else if (true) FOO;" to "else FOO;".
> -    if condition_code_pairs[0][0] == 'true':
> -        resolve_fn += '\t{0}\n'.format(condition_code_pairs[0][1])
> -    else:
> -        resolve_fn += '\tif ({0})\n\t\t{1}\n'.format(*condition_code_pairs[0])
> -        for i in xrange(1, len(condition_code_pairs)):
> -            if condition_code_pairs[i][0] == 'true':
> -                resolve_fn += '\telse\n\t\t{0}\n'.format(
> -                    condition_code_pairs[i][1])
> -                break
> -            else:
> -                resolve_fn += '\telse if ({0})\n\t\t{1}\n'.format(
> -                    *condition_code_pairs[i])
> -
> -    # Output code to return the dispatch function.
> -    resolve_fn += '\treturn (piglit_dispatch_function_ptr) {0};\n'.format(
> -        ds.dispatch_name)
> -    resolve_fn += '}\n'
> -    return resolve_fn
> -
> -
> -# Generate the stub function for a given DispatchSet.
> -def generate_stub_function(ds):
> -    f0 = ds.primary_function
> -
> -    # Start the stub function
> -    stub_fn = 'static {0}\n'.format(
> -        f0.c_form('APIENTRY ' + ds.stub_name, anonymous_args=False))
> -    stub_fn += '{\n'
> -    stub_fn += '\tcheck_initialized();\n'
> -    stub_fn += '\t{0}();\n'.format(ds.resolve_name)
> -
> -    # Output the call to the dispatch function.
> -    stub_fn += '\t{0}{1}({2});\n'.format(
> -        'return ' if f0.return_type != 'void' else '',
> -        ds.dispatch_name, ', '.join(f0.param_names))
> -    stub_fn += '}\n'
> -    return stub_fn
> -
> -
> -# Generate the reset_dispatch_pointers() function, which sets each
> -# dispatch pointer to point to the corresponding stub function.
> -def generate_dispatch_pointer_resetter(dispatch_sets):
> -    result = []
> -    result.append('static void\n')
> -    result.append('reset_dispatch_pointers()\n')
> -    result.append('{\n')
> -    for ds in dispatch_sets:
> -        result.append(
> -            '\t{0} = {1};\n'.format(ds.dispatch_name, ds.stub_name))
> -    result.append('}\n')
> -    return ''.join(result)
> -
> -
> -# Generate the function_names and function_resolvers tables.
> -def generate_function_names_and_resolvers(dispatch_sets):
> -    name_resolver_pairs = []
> -    for ds in dispatch_sets:
> -        for _, f in ds.cat_fn_pairs:
> -            name_resolver_pairs.append((f.gl_name, ds.resolve_name))
> -    name_resolver_pairs.sort()
> -    result = []
> -    result.append('static const char * const function_names[] = {\n')
> -    for name, _ in name_resolver_pairs:
> -        result.append('\t"{0}",\n'.format(name))
> -    result.append('};\n')
> -    result.append('\n')
> -    result.append('static const piglit_dispatch_resolver_ptr '
> -                  'function_resolvers[] = {\n')
> -    for _, resolver in name_resolver_pairs:
> -        result.append('\t{0},\n'.format(resolver))
> -    result.append('};\n')
> -    return ''.join(result)
> -
> -
> -# Generate the C source and header files for the API.
> -def generate_code(api):
> -    c_contents = [generated_boilerplate()]
> -    h_contents = [generated_boilerplate()]
> -
> -    unique_functions = api.compute_unique_functions()
> -
> -    # Emit typedefs for each name
> -    for f in unique_functions:
> -        h_contents.append(
> -            'typedef {0};\n'.format(
> -                f.c_form('(APIENTRY *{0})'.format(f.typedef_name),
> -                         anonymous_args=True)))
> -
> -    dispatch_sets = api.compute_dispatch_sets()
> -
> -    for ds in dispatch_sets:
> -        f0 = ds.primary_function
> -
> -        # Emit comment block
> -        comments = '\n'
> -        for cat, f in ds.cat_fn_pairs:
> -            comments += '/* {0} ({1}) */\n'.format(f.gl_name, cat)
> -        c_contents.append(comments)
> -        h_contents.append(comments)
> -
> -        # Emit extern declaration of dispatch pointer
> -        h_contents.append(
> -            'extern {0} {1};\n'.format(f0.typedef_name, ds.dispatch_name))
> -
> -        # Emit defines aliasing each GL function to the dispatch
> -        # pointer
> -        for _, f in ds.cat_fn_pairs:
> -            h_contents.append(
> -                '#define {0} {1}\n'.format(f.gl_name, ds.dispatch_name))
> -
> -        # Emit resolve function
> -        c_contents.append(generate_resolve_function(ds))
> -
> -        # Emit stub function
> -        c_contents.append(generate_stub_function(ds))
> -
> -        # Emit initializer for dispatch pointer
> -        c_contents.append(
> -            '{0} {1} = {2};\n'.format(
> -                f0.typedef_name, ds.dispatch_name, ds.stub_name))
> -
> -    # Emit dispatch pointer initialization function
> -    c_contents.append(generate_dispatch_pointer_resetter(dispatch_sets))
> -
> -    c_contents.append('\n')
> -
> -    # Emit function_names and function_resolvers tables.
> -    c_contents.append(generate_function_names_and_resolvers(dispatch_sets))
> -
> -    # Emit enum #defines
> -    for name, value in api.compute_unique_enums():
> -        h_contents.append('#define GL_{0} {1}\n'.format(name, value))
> -
> -    # Emit extension #defines
> -    #
> -    # While enum.ext lists some old extension names (defined to 1), it
> -    # doesn't contain the full set that appears in glext.h.
> -    h_contents.append('\n')
> -    for ext in api.extensions:
> -        h_contents.append('#define {0} 1\n'.format(ext))
> -
> -    # Emit GL version #defines
> -    #
> -    # While enum.ext lists GL versions up to 3.2, it didn't continue
> -    # adding them for later GL versions.
> -    h_contents.append('\n')
> -    for ver in api.gl_versions:
> -        h_contents.append('#define GL_VERSION_{0}_{1} 1\n'.format(
> -            ver // 10, ver % 10))
> -
> -    return ''.join(c_contents), ''.join(h_contents)
> -
> -
> -if __name__ == '__main__':
> -    file_to_parse = sys.argv[1]
> -    api = read_api(file_to_parse)
> -
> -    c_contents, h_contents = generate_code(api)
> -    with open(sys.argv[2], 'w') as f:
> -        f.write(c_contents)
> -    with open(sys.argv[3], 'w') as f:
> -        f.write(h_contents)
> diff --git a/tests/util/piglit-framework-gl/piglit_fbo_framework.c b/tests/util/piglit-framework-gl/piglit_fbo_framework.c
> index 8e82657..51927aa 100644
> --- a/tests/util/piglit-framework-gl/piglit_fbo_framework.c
> +++ b/tests/util/piglit-framework-gl/piglit_fbo_framework.c
> @@ -66,8 +66,6 @@ init_gl(struct piglit_wfl_framework *wfl_fw)
>         GLenum status;
>
>  #ifdef PIGLIT_USE_OPENGL
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -
>         if (piglit_get_gl_version() < 20)
>                 return false;
>
> diff --git a/tests/util/piglit-framework-gl/piglit_glut_framework.c b/tests/util/piglit-framework-gl/piglit_glut_framework.c
> index 716f314..ee9d27d 100644
> --- a/tests/util/piglit-framework-gl/piglit_glut_framework.c
> +++ b/tests/util/piglit-framework-gl/piglit_glut_framework.c
> @@ -124,10 +124,6 @@ init_glut(void)
>         glutDisplayFunc(display);
>         glutReshapeFunc(default_reshape_func);
>         glutKeyboardFunc(piglit_escape_exit_key);
> -
> -#ifdef PIGLIT_USE_OPENGL
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -#endif
>  }
>
>  static void
> diff --git a/tests/util/piglit-framework-gl/piglit_wfl_framework.c b/tests/util/piglit-framework-gl/piglit_wfl_framework.c
> index 0d09032..8f63f0a 100644
> --- a/tests/util/piglit-framework-gl/piglit_wfl_framework.c
> +++ b/tests/util/piglit-framework-gl/piglit_wfl_framework.c
> @@ -446,12 +446,6 @@ make_context_current_singlepass(struct piglit_wfl_framework *wfl_fw,
>                                  wfl_fw->window,
>                                  wfl_fw->context);
>
> -#ifdef PIGLIT_USE_OPENGL
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
> -#elif defined(PIGLIT_USE_OPENGL_ES2) || defined(PIGLIT_USE_OPENGL_ES3)
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_ES2);
> -#endif
> -
>         ok = check_gl_version(test_config, flavor, ctx_desc);
>         if (!ok)
>            goto fail;
> diff --git a/tests/util/piglit-framework-gl/piglit_x11_framework.c b/tests/util/piglit-framework-gl/piglit_x11_framework.c
> index 8b3d3d7..b31a971 100644
> --- a/tests/util/piglit-framework-gl/piglit_x11_framework.c
> +++ b/tests/util/piglit-framework-gl/piglit_x11_framework.c
> @@ -25,18 +25,7 @@
>  #error "Cannot build piglit_x11_framework.c without PIGLIT_HAS_X11"
>  #endif
>
> -#include <piglit/gl_wrap.h>
> -
> -/* If building for a GLES API, <piglit/gl_wrap.h> may include the GLES
> - * headers, such as <GLES2/gl2.h>. Below, <waffle_glx.h> transitively includes
> - * <GL/gl.h>, which defines some of the same symbols found in <GLES2/gl2.h>.
> - * We define the include guards below in order to prevent <GL/gl.h> and
> - * related headers from being included and causing compilation failure due to
> - * symbol redefinitions.
> - */
> -#define __gl_h_
> -#define __gltypes_h_
> -#define __glext_h_
> +#include <epoxy/gl.h>
>
>  #include <assert.h>
>  #include <unistd.h>
> diff --git a/tests/util/piglit-shader.h b/tests/util/piglit-shader.h
> index e0503e6..e2eef03 100644
> --- a/tests/util/piglit-shader.h
> +++ b/tests/util/piglit-shader.h
> @@ -52,51 +52,6 @@ GLint piglit_build_simple_program_multiple_shaders(GLenum target1,
>  extern GLboolean piglit_program_pipeline_check_status(GLuint pipeline);
>  extern GLboolean piglit_program_pipeline_check_status_quiet(GLuint pipeline);
>
> -#if defined(PIGLIT_USE_OPENGL_ES1)
> -#define glAttachShader assert(!"glAttachShader does not exist in ES1")
> -#define glBindAttribLocation assert(!"glBindAttribLocation does not exist in ES1")
> -#define glCompileShader assert(!"glCompileShader does not exist in ES1")
> -#define glCreateProgram assert(!"glCreateProgram does not exist in ES1")
> -#define glCreateShader assert(!"glCreateShader does not exist in ES1")
> -#define glDeleteProgram assert(!"glDeleteProgram does not exist in ES1")
> -#define glDeleteShader assert(!"glDeleteShader does not exist in ES1")
> -#define glGetActiveUniform assert(!"glGetActiveUniform does not exist in ES1")
> -#define glGetAttribLocation assert(!"glGetAttribLocation does not exist in ES1")
> -#define glGetProgramInfoLog assert(!"glGetProgramInfoLog does not exist in ES1")
> -#define glGetProgramiv assert(!"glGetProgramiv does not exist in ES1")
> -#define glGetShaderInfoLog assert(!"glGetShaderInfoLog does not exist in ES1")
> -#define glGetShaderiv assert(!"glGetShaderiv does not exist in ES1")
> -#define glGetUniformLocation assert(!"glGetUniformLocation does not exist in ES1")
> -#define glLinkProgram assert(!"glLinkProgram does not exist in ES1")
> -#define glShaderSource assert(!"glShaderSource does not exist in ES1")
> -#define glUseProgram assert(!"glUseProgram does not exist in ES1")
> -#define glUniform1f assert(!"glUniform1f does not exist in ES1")
> -#define glUniform2f assert(!"glUniform2f does not exist in ES1")
> -#define glUniform3f assert(!"glUniform3f does not exist in ES1")
> -#define glUniform4f assert(!"glUniform4f does not exist in ES1")
> -#define glUniform1fv assert(!"glUniform1fv does not exist in ES1")
> -#define glUniform2fv assert(!"glUniform2fv does not exist in ES1")
> -#define glUniform3fv assert(!"glUniform3fv does not exist in ES1")
> -#define glUniform4fv assert(!"glUniform4fv does not exist in ES1")
> -#define glUniform1i assert(!"glUniform1i does not exist in ES1")
> -#define glUniform2iv assert(!"glUniform2iv does not exist in ES1")
> -#define glUniform3iv assert(!"glUniform3iv does not exist in ES1")
> -#define glUniform4iv assert(!"glUniform4iv does not exist in ES1")
> -#define glUniformMatrix2fv assert(!"glUniformMatrix2fv does not exist in ES1")
> -#define glUniformMatrix3fv assert(!"glUniformMatrix3fv does not exist in ES1")
> -#define glUniformMatrix4fv assert(!"glUniformMatrix4fv does not exist in ES1")
> -#define glGetUniformfv assert(!"glGetUniformfv does not exist in ES1")
> -#define glVertexAttribPointer assert(!"glVertexAttribPointer does not exist in ES1")
> -#define glEnableVertexAttribArray assert(!"glEnableVertexAttribArray does not exist in ES1")
> -#define glDisableVertexAttribArray assert(!"glDisableVertexAttribArray does not exist in ES1")
> -#define glUniformMatrix2x3fv assert(!"glUniformMatrix2x3fv does not exist in ES1")
> -#define glUniformMatrix2x4fv assert(!"glUniformMatrix2x4fv does not exist in ES1")
> -#define glUniformMatrix3x2fv assert(!"glUniformMatrix3x2fv does not exist in ES1")
> -#define glUniformMatrix3x4fv assert(!"glUniformMatrix3x4fv does not exist in ES1")
> -#define glUniformMatrix4x2fv assert(!"glUniformMatrix4x2fv does not exist in ES1")
> -#define glUniformMatrix4x3fv assert(!"glUniformMatrix4x3fv does not exist in ES1")
> -#endif
> -
>  /**
>   * Require a specific version of GLSL.
>   *
> diff --git a/tests/util/piglit-util-gl-common.h b/tests/util/piglit-util-gl-common.h
> index 73f2f83..40c6b7d 100644
> --- a/tests/util/piglit-util-gl-common.h
> +++ b/tests/util/piglit-util-gl-common.h
> @@ -31,11 +31,9 @@ extern "C" {
>
>  #include "piglit-util.h"
>
> -#include <piglit/gl_wrap.h>
> +#include <epoxy/gl.h>
>  #include <piglit/glut_wrap.h>
>
> -#define piglit_get_proc_address(x) piglit_dispatch_resolve_function(x)
> -
>  #include "piglit-framework-gl.h"
>  #include "piglit-shader.h"
>
> diff --git a/tests/util/piglit-util-gl.c b/tests/util/piglit-util-gl.c
> index 3bb4adf..9fff9a6 100644
> --- a/tests/util/piglit-util-gl.c
> +++ b/tests/util/piglit-util-gl.c
> @@ -738,7 +738,6 @@ int piglit_use_fragment_program(void)
>                 "END\n"
>                 ;
>
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>         if (!piglit_is_extension_supported("GL_ARB_fragment_program"))
>                 return 0;
>
> @@ -758,7 +757,6 @@ void piglit_require_fragment_program(void)
>
>  int piglit_use_vertex_program(void)
>  {
> -       piglit_dispatch_default_init(PIGLIT_DISPATCH_GL);
>         return piglit_is_extension_supported("GL_ARB_vertex_program");
>  }
>
> diff --git a/tests/util/piglit_ktx.h b/tests/util/piglit_ktx.h
> index d150423..9b063c2 100644
> --- a/tests/util/piglit_ktx.h
> +++ b/tests/util/piglit_ktx.h
> @@ -37,7 +37,7 @@
>  #include <stdio.h>
>  #include <stdint.h>
>
> -#include <piglit/gl_wrap.h>
> +#include <epoxy/gl.h>
>
>  #ifdef __cplusplus
>  extern "C" {
> --
> 1.9.rc1
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list