[Piglit] [PATCH 16/29] dispatch: Use GetProcAddress from the platform
Pauli Nieminen
pauli.nieminen at linux.intel.com
Mon May 21 11:08:51 PDT 2012
If piglit is running in EGL platform glX can't be used to resolve the
function names. For existing GLES tests that means calling
eglGetProcAddress.
But if waffle is in used we have to use waffle because we may select
between EGL and GLX in runtime.
Signed-off-by: Pauli Nieminen <pauli.nieminen at linux.intel.com>
---
tests/util/CMakeLists.txt | 1 +
tests/util/piglit-dispatch-init.c | 52 ++++++++++++++++++++++++++++++++++++-
2 files changed, 52 insertions(+), 1 deletions(-)
diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt
index aaec988..8866c2c 100644
--- a/tests/util/CMakeLists.txt
+++ b/tests/util/CMakeLists.txt
@@ -26,6 +26,7 @@ if(OPENGL_egl_LIBRARY)
piglit-util-egl.c
)
link_libraries(${OPENGL_egl_LIBRARY})
+ add_definitions ( -DUSE_EGL )
endif(OPENGL_egl_LIBRARY)
piglit_include_target_api()
diff --git a/tests/util/piglit-dispatch-init.c b/tests/util/piglit-dispatch-init.c
index 7ad76e2..2a4bcf6 100644
--- a/tests/util/piglit-dispatch-init.c
+++ b/tests/util/piglit-dispatch-init.c
@@ -20,6 +20,8 @@
* IN THE SOFTWARE.
*/
+#define _GNU_SOURCE
+#include <dlfcn.h>
#include "piglit-util.h"
#if defined(_WIN32)
@@ -33,8 +35,18 @@
#else /* Linux */
-#include "glxew.h"
+#ifdef USE_WAFFLE
+#include <waffle/waffle_gl_misc.h>
+#endif
+
+#endif
+#ifdef USE_EGL
+#include <EGL/egl.h>
+#endif
+
+#ifdef USE_GLX
+#include <GL/glx.h>
#endif
/**
@@ -77,7 +89,13 @@ default_get_proc_address_failure(const char *function_name)
static piglit_dispatch_function_ptr
get_ext_proc_address(const char *function_name)
{
+#ifdef USE_WAFFLE
+ return waffle_get_proc_address(function_name);
+#elif defined(USE_EGLUT)
+ return eglGetProcAddress(function_name);
+#else
return (piglit_dispatch_function_ptr) wglGetProcAddress(function_name);
+#endif
}
/**
@@ -87,6 +105,20 @@ get_ext_proc_address(const char *function_name)
static piglit_dispatch_function_ptr
get_core_proc_address(const char *function_name, int gl_10x_version)
{
+ /* Try first to resolve egl core functions with dlsym */
+ if (strncmp("egl", function_name, 3) == 0) {
+ piglit_dispatch_function_ptr r = NULL;
+ r = (piglit_dispatch_function_ptr)
+ GetProcAddress(LoadLibraryA("EGL"), function_name);
+ r = dlsym(RTLD_DEFAULT, function_name);
+#ifdef USE_EGL
+ if (!r)
+ r = eglGetProcAddress(function_name);
+#endif
+ if (r)
+ return r;
+ }
+
if (gl_10x_version > 11) {
return get_ext_proc_address(function_name);
} else {
@@ -143,7 +175,13 @@ get_core_proc_address(const char *function_name, int gl_10x_version)
static piglit_dispatch_function_ptr
get_ext_proc_address(const char *function_name)
{
+#ifdef USE_WAFFLE
+ return waffle_get_proc_address(function_name);
+#elif defined(USE_EGLUT)
+ return eglGetProcAddress(function_name);
+#else
return glXGetProcAddressARB((const GLubyte *) function_name);
+#endif
}
/**
@@ -157,6 +195,18 @@ get_core_proc_address(const char *function_name, int gl_10x_version)
* we retrieve all proc addresses in the same way.
*/
(void) gl_10x_version;
+ /* Try first to resolve egl core functions with dlsym */
+ if (strncmp("egl", function_name, 3) == 0) {
+ piglit_dispatch_function_ptr r = NULL;
+ r = dlsym(RTLD_DEFAULT, function_name);
+#ifdef USE_EGL
+ if (!r)
+ r = (piglit_dispatch_function_ptr)
+ eglGetProcAddress(function_name);
+#endif
+ if (r)
+ return r;
+ }
return get_ext_proc_address(function_name);
}
--
1.7.5.4
More information about the Piglit
mailing list