[Piglit] [PATCH 18/29] dispatch: Simplify function resolving

Pauli Nieminen pauli.nieminen at linux.intel.com
Mon May 21 11:08:53 PDT 2012


EGL functions has to be called before dispatch can be initialized making
function pointers chicked-egg problem for resolving. But there is no
need for runtime selection of resolving functions so we can drop
functions pointers.

Signed-off-by: Pauli Nieminen <pauli.nieminen at linux.intel.com>
---
 tests/util/piglit-dispatch-init.c |   26 +++++++++++---------------
 tests/util/piglit-dispatch.c      |   37 +------------------------------------
 tests/util/piglit-dispatch.h      |    6 ++++++
 tests/util/piglit-util-core.h     |   19 +------------------
 4 files changed, 19 insertions(+), 69 deletions(-)

diff --git a/tests/util/piglit-dispatch-init.c b/tests/util/piglit-dispatch-init.c
index dbe9842..ad83528 100644
--- a/tests/util/piglit-dispatch-init.c
+++ b/tests/util/piglit-dispatch-init.c
@@ -59,8 +59,8 @@
  * piglit test from the burden of having to pre-check whether the
  * implementation supports the functionality being tested.
  */
-static void
-default_unsupported(const char *name)
+void
+unsupported(const char *name)
 {
 	printf("Function \"%s\" not supported on this implementation\n", name);
 	piglit_report_result(PIGLIT_SKIP);
@@ -74,8 +74,8 @@ default_unsupported(const char *name)
  * GetProcAddress() for functions that the implementation claims to
  * support.  So if it does happen we terminate the test with a FAIL.
  */
-static void
-default_get_proc_address_failure(const char *function_name)
+void
+get_proc_address_failure(const char *function_name)
 {
 	printf("GetProcAddress failed for \"%s\"\n", function_name);
 	piglit_report_result(PIGLIT_FAIL);
@@ -88,7 +88,7 @@ default_get_proc_address_failure(const char *function_name)
  * functions, and core GL functions for GL versions above 1.3, on
  * Windows.
  */
-static piglit_dispatch_function_ptr
+piglit_dispatch_function_ptr
 get_ext_proc_address(const char *function_name)
 {
 #ifdef USE_WAFFLE
@@ -104,7 +104,7 @@ get_ext_proc_address(const char *function_name)
  * This function is used to retrieve the address of core GL functions
  * on windows.
  */
-static piglit_dispatch_function_ptr
+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 */
@@ -135,7 +135,7 @@ get_core_proc_address(const char *function_name, int gl_10x_version)
  * This function is used to retrieve the address of all GL functions
  * on Apple.
  */
-static piglit_dispatch_function_ptr
+piglit_dispatch_function_ptr
 get_ext_proc_address(const char *function_name)
 {
 	static const char *opengl_path =
@@ -157,7 +157,7 @@ get_ext_proc_address(const char *function_name)
  * This function is used to retrieve the address of core GL functions
  * on Apple.
  */
-static piglit_dispatch_function_ptr
+piglit_dispatch_function_ptr
 get_core_proc_address(const char *function_name, int gl_10x_version)
 {
 	/* We don't need to worry about the GL version, since on Apple
@@ -174,7 +174,7 @@ get_core_proc_address(const char *function_name, int gl_10x_version)
  * This function is used to retrieve the address of all GL functions
  * on Linux.
  */
-static piglit_dispatch_function_ptr
+piglit_dispatch_function_ptr
 get_ext_proc_address(const char *function_name)
 {
 #ifdef USE_WAFFLE
@@ -190,7 +190,7 @@ get_ext_proc_address(const char *function_name)
  * This function is used to retrieve the address of core GL functions
  * on Linux.
  */
-static piglit_dispatch_function_ptr
+piglit_dispatch_function_ptr
 get_core_proc_address(const char *function_name, int gl_10x_version)
 {
 	/* We don't need to worry about the GL version, since on Apple
@@ -233,11 +233,7 @@ piglit_dispatch_default_init()
 	if (already_initialized)
 		return;
 
-	piglit_dispatch_init(PIGLIT_DISPATCH_GL,
-			     get_core_proc_address,
-			     get_ext_proc_address,
-			     default_unsupported,
-			     default_get_proc_address_failure);
+	piglit_dispatch_init();
 
 	already_initialized = true;
 }
diff --git a/tests/util/piglit-dispatch.c b/tests/util/piglit-dispatch.c
index 48e03ff..904acc9 100644
--- a/tests/util/piglit-dispatch.c
+++ b/tests/util/piglit-dispatch.c
@@ -28,30 +28,6 @@
 #endif
 
 /* Global state maintained by the Piglit dispatch mechanism: */
-
-/**
- * Which function to call to get the address of a core function.
- */
-static piglit_get_core_proc_address_function_ptr get_core_proc_address = NULL;
-
-/**
- * Which function to call to get the address of a function defined in
- * an extension.
- */
-static piglit_get_ext_proc_address_function_ptr get_ext_proc_address = NULL;
-
-/**
- * Which function to call if the test attempts to call a function that
- * is not supported by the implementation.
- */
-static piglit_error_function_ptr unsupported = NULL;
-
-/**
- * Which function to call if get_core_proc_address or
- * get_ext_proc_address returns NULL.
- */
-static piglit_error_function_ptr get_proc_address_failure = NULL;
-
 /**
  * The GL version extracted from glGetString(GL_VERSION), times 10.
  * For example, if the GL version is 2.1, the value 21 is stored here.
@@ -167,19 +143,8 @@ check_extension(const char *name)
  * get_core_proc() or get_ext_proc().
  */
 void
-piglit_dispatch_init(piglit_dispatch_api api,
-		     piglit_get_core_proc_address_function_ptr get_core_proc,
-		     piglit_get_ext_proc_address_function_ptr get_ext_proc,
-		     piglit_error_function_ptr unsupported_proc,
-		     piglit_error_function_ptr failure_proc)
+piglit_dispatch_init(void)
 {
-	(void) api; /* Not yet implemented--assume GL. */
-
-	get_core_proc_address = get_core_proc;
-	get_ext_proc_address = get_ext_proc;
-	unsupported = unsupported_proc;
-	get_proc_address_failure = failure_proc;
-
 	/* No need to reset the dispatch pointers the first time */
 	if (is_initialized) {
 		reset_dispatch_pointers();
diff --git a/tests/util/piglit-dispatch.h b/tests/util/piglit-dispatch.h
index adc01e4..6979a14 100644
--- a/tests/util/piglit-dispatch.h
+++ b/tests/util/piglit-dispatch.h
@@ -110,6 +110,12 @@ typedef void (APIENTRY *piglit_dispatch_function_ptr)(void);
 piglit_dispatch_function_ptr
 piglit_dispatch_resolve_function(const char *name);
 
+void unsupported(const char *name);
+void get_proc_address_failure(const char *function_name);
+piglit_dispatch_function_ptr get_core_proc_address(const char *function_name,
+						   int gl_10x_version);
+piglit_dispatch_function_ptr get_ext_proc_address(const char *function_name);
+
 #include "generated_dispatch.h"
 
 void piglit_dispatch_default_init();
diff --git a/tests/util/piglit-util-core.h b/tests/util/piglit-util-core.h
index 46dd1c8..513e5da 100644
--- a/tests/util/piglit-util-core.h
+++ b/tests/util/piglit-util-core.h
@@ -64,28 +64,11 @@ void piglit_report_result(enum piglit_result result);
 
 #endif
 
-typedef enum {
-	PIGLIT_DISPATCH_GL,
-	PIGLIT_DISPATCH_GL_FWD,
-	PIGLIT_DISPATCH_ES1,
-	PIGLIT_DISPATCH_ES2
-} piglit_dispatch_api;
-
 typedef void (APIENTRY *piglit_dispatch_function_ptr)(void);
 
-typedef piglit_dispatch_function_ptr (*piglit_get_core_proc_address_function_ptr)(const char *, int);
-
-typedef piglit_dispatch_function_ptr (*piglit_get_ext_proc_address_function_ptr)(const char *);
-
 typedef piglit_dispatch_function_ptr (*piglit_dispatch_resolver_ptr)();
 
-typedef void (*piglit_error_function_ptr)(const char *);
-
-void piglit_dispatch_init(piglit_dispatch_api api,
-			  piglit_get_core_proc_address_function_ptr get_core_proc,
-			  piglit_get_ext_proc_address_function_ptr get_ext_proc,
-			  piglit_error_function_ptr unsupported_proc,
-			  piglit_error_function_ptr failure_proc);
+void piglit_dispatch_init(void);
 
 #ifdef __cplusplus
 }
-- 
1.7.5.4



More information about the Piglit mailing list