summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2010-08-26 06:44:02 +0100
committerJosé Fonseca <jfonseca@vmware.com>2010-08-26 06:44:34 +0100
commitf0eb02af800ea1c4be6847ead0096d368d9276ff (patch)
tree593c6645fb2993ff72d85bf741ddec74f56a00d8
parentc32f87c39ce2b2e0ac6ae93d3bd5f286bf345613 (diff)
graw: Dynamically load graw libraries.
This allows to build multiple graws libs simultaneously and avoid unnecessary rebuilds of the tests. Also remove graw_util.c from inside the graw implementation -- it was only being provided by one implementation, and graw tests were linking against gallium anyway.
-rw-r--r--src/gallium/include/state_tracker/graw_dl.h152
-rw-r--r--src/gallium/targets/graw-xlib/SConscript1
-rw-r--r--src/gallium/targets/graw-xlib/graw_util.c49
-rw-r--r--src/gallium/tests/graw/SConscript9
-rw-r--r--src/gallium/tests/graw/clear.c2
-rw-r--r--src/gallium/tests/graw/fs-test.c2
-rw-r--r--src/gallium/tests/graw/gs-test.c2
-rw-r--r--src/gallium/tests/graw/quad-tex.c2
-rw-r--r--src/gallium/tests/graw/tri-gs.c2
-rw-r--r--src/gallium/tests/graw/tri-instanced.c2
-rw-r--r--src/gallium/tests/graw/tri.c2
-rw-r--r--src/gallium/tests/graw/vs-test.c2
12 files changed, 161 insertions, 66 deletions
diff --git a/src/gallium/include/state_tracker/graw_dl.h b/src/gallium/include/state_tracker/graw_dl.h
new file mode 100644
index 00000000000..0b326ca9f1d
--- /dev/null
+++ b/src/gallium/include/state_tracker/graw_dl.h
@@ -0,0 +1,152 @@
+#ifndef GALLIUM_RAW_DL_H
+#define GALLIUM_RAW_DL_H
+
+/* This is an API for exercising gallium functionality in a
+ * platform-neutral fashion. Whatever platform integration is
+ * necessary to implement this interface is orchestrated by the
+ * individual target building this entity.
+ *
+ * For instance, the graw-xlib target includes code to implent these
+ * interfaces on top of the X window system.
+ *
+ * Programs using this interface may additionally benefit from some of
+ * the utilities currently in the libgallium.a library, especially
+ * those for parsing text representations of TGSI shaders.
+ */
+
+#include "pipe/p_compiler.h"
+#include "pipe/p_format.h"
+#include "pipe/p_context.h"
+#include "util/u_dl.h"
+#include "tgsi/tgsi_text.h"
+#include <stdio.h>
+
+
+struct pipe_screen;
+struct pipe_context;
+
+
+typedef void *
+(*pfn_graw_create_window_and_screen_t)( int x,
+ int y,
+ unsigned width,
+ unsigned height,
+ enum pipe_format format,
+ void **handle );
+
+typedef void
+(*pfn_graw_set_display_func_t)( void (*func)( void ) );
+
+typedef void
+(*pfn_graw_main_loop_t)( void );
+
+
+static pfn_graw_create_window_and_screen_t
+pfn_graw_create_window_and_screen = NULL;
+
+static pfn_graw_set_display_func_t
+pfn_graw_set_display_func = NULL;
+
+static pfn_graw_main_loop_t
+pfn_graw_main_loop = NULL;
+
+
+static INLINE void *
+graw_create_window_and_screen( int x,
+ int y,
+ unsigned width,
+ unsigned height,
+ enum pipe_format format,
+ void **handle )
+{
+ static struct util_dl_library *lib;
+ lib = util_dl_open(UTIL_DL_PREFIX "graw" UTIL_DL_EXT);
+ if (!lib)
+ goto error;
+ pfn_graw_create_window_and_screen = (pfn_graw_create_window_and_screen_t)
+ util_dl_get_proc_address(lib, "graw_create_window_and_screen");
+ if (!pfn_graw_create_window_and_screen)
+ goto error;
+ pfn_graw_set_display_func = (pfn_graw_set_display_func_t)
+ util_dl_get_proc_address(lib, "graw_set_display_func");
+ if (!pfn_graw_set_display_func)
+ goto error;
+ pfn_graw_main_loop = (pfn_graw_main_loop_t)
+ util_dl_get_proc_address(lib, "graw_main_loop");
+ if (!pfn_graw_main_loop)
+ goto error;
+ return pfn_graw_create_window_and_screen(x, y, width, height, format, handle );
+error:
+ fprintf(stderr, "failed to open " UTIL_DL_PREFIX "graw" UTIL_DL_EXT "\n");
+ return NULL;
+}
+
+static INLINE void
+graw_set_display_func( void (*func)( void ) )
+{
+ if (!pfn_graw_set_display_func)
+ return;
+ pfn_graw_set_display_func(func);
+}
+
+static INLINE void
+graw_main_loop( void )
+{
+ if (!pfn_graw_main_loop)
+ return;
+ pfn_graw_main_loop();
+}
+
+
+/*
+ * Helper functions. These are the same for all graw implementations.
+ *
+ * XXX: These aren't graw related. If they are useful then should go somwhere
+ * inside auxiliary/util.
+ */
+
+#define GRAW_MAX_NUM_TOKENS 1024
+
+static INLINE void *
+graw_parse_geometry_shader(struct pipe_context *pipe,
+ const char *text)
+{
+ struct tgsi_token tokens[GRAW_MAX_NUM_TOKENS];
+ struct pipe_shader_state state;
+
+ if (!tgsi_text_translate(text, tokens, GRAW_MAX_NUM_TOKENS))
+ return NULL;
+
+ state.tokens = tokens;
+ return pipe->create_gs_state(pipe, &state);
+}
+
+static INLINE void *
+graw_parse_vertex_shader(struct pipe_context *pipe,
+ const char *text)
+{
+ struct tgsi_token tokens[GRAW_MAX_NUM_TOKENS];
+ struct pipe_shader_state state;
+
+ if (!tgsi_text_translate(text, tokens, GRAW_MAX_NUM_TOKENS))
+ return NULL;
+
+ state.tokens = tokens;
+ return pipe->create_vs_state(pipe, &state);
+}
+
+static INLINE void *
+graw_parse_fragment_shader(struct pipe_context *pipe,
+ const char *text)
+{
+ struct tgsi_token tokens[GRAW_MAX_NUM_TOKENS];
+ struct pipe_shader_state state;
+
+ if (!tgsi_text_translate(text, tokens, GRAW_MAX_NUM_TOKENS))
+ return NULL;
+
+ state.tokens = tokens;
+ return pipe->create_fs_state(pipe, &state);
+}
+
+#endif
diff --git a/src/gallium/targets/graw-xlib/SConscript b/src/gallium/targets/graw-xlib/SConscript
index 21fce948f43..32b98cdef3b 100644
--- a/src/gallium/targets/graw-xlib/SConscript
+++ b/src/gallium/targets/graw-xlib/SConscript
@@ -26,7 +26,6 @@ env.Append(CPPPATH = [
sources = [
'graw_xlib.c',
- 'graw_util.c',
]
env.Tool('x11')
diff --git a/src/gallium/targets/graw-xlib/graw_util.c b/src/gallium/targets/graw-xlib/graw_util.c
deleted file mode 100644
index 47aca4464db..00000000000
--- a/src/gallium/targets/graw-xlib/graw_util.c
+++ /dev/null
@@ -1,49 +0,0 @@
-
-#include "pipe/p_compiler.h"
-#include "pipe/p_context.h"
-#include "tgsi/tgsi_text.h"
-#include "util/u_memory.h"
-#include "state_tracker/graw.h"
-
-
-/* Helper functions. These are the same for all graw implementations.
- */
-void *graw_parse_geometry_shader(struct pipe_context *pipe,
- const char *text)
-{
- struct tgsi_token tokens[1024];
- struct pipe_shader_state state;
-
- if (!tgsi_text_translate(text, tokens, Elements(tokens)))
- return NULL;
-
- state.tokens = tokens;
- return pipe->create_gs_state(pipe, &state);
-}
-
-void *graw_parse_vertex_shader(struct pipe_context *pipe,
- const char *text)
-{
- struct tgsi_token tokens[1024];
- struct pipe_shader_state state;
-
- if (!tgsi_text_translate(text, tokens, Elements(tokens)))
- return NULL;
-
- state.tokens = tokens;
- return pipe->create_vs_state(pipe, &state);
-}
-
-void *graw_parse_fragment_shader(struct pipe_context *pipe,
- const char *text)
-{
- struct tgsi_token tokens[1024];
- struct pipe_shader_state state;
-
- if (!tgsi_text_translate(text, tokens, Elements(tokens)))
- return NULL;
-
- state.tokens = tokens;
- return pipe->create_fs_state(pipe, &state);
-}
-
diff --git a/src/gallium/tests/graw/SConscript b/src/gallium/tests/graw/SConscript
index 860a17e13e7..5ef395e0336 100644
--- a/src/gallium/tests/graw/SConscript
+++ b/src/gallium/tests/graw/SConscript
@@ -1,15 +1,8 @@
Import('*')
-try:
- graw
-except NameError:
- print 'warning: graw library not avaiable: skipping build of graw test'
- Return()
-
env = env.Clone()
-env.Prepend(LIBPATH = [graw.dir])
-env.Prepend(LIBS = ['graw'] + gallium)
+env.Prepend(LIBS = gallium)
if platform in ('freebsd8', 'sunos5'):
env.Append(LIBS = ['m'])
diff --git a/src/gallium/tests/graw/clear.c b/src/gallium/tests/graw/clear.c
index ce52a93aa1b..c9a7b76188c 100644
--- a/src/gallium/tests/graw/clear.c
+++ b/src/gallium/tests/graw/clear.c
@@ -2,7 +2,7 @@
* any utility code, just the graw interface and gallium.
*/
-#include "state_tracker/graw.h"
+#include "state_tracker/graw_dl.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_state.h"
diff --git a/src/gallium/tests/graw/fs-test.c b/src/gallium/tests/graw/fs-test.c
index 53fbb744d86..c0ed6e06e46 100644
--- a/src/gallium/tests/graw/fs-test.c
+++ b/src/gallium/tests/graw/fs-test.c
@@ -2,7 +2,7 @@
* any utility code, just the graw interface and gallium.
*/
-#include "state_tracker/graw.h"
+#include "state_tracker/graw_dl.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_shader_tokens.h"
diff --git a/src/gallium/tests/graw/gs-test.c b/src/gallium/tests/graw/gs-test.c
index 62714900bd9..0f029e70c2e 100644
--- a/src/gallium/tests/graw/gs-test.c
+++ b/src/gallium/tests/graw/gs-test.c
@@ -2,7 +2,7 @@
* any utility code, just the graw interface and gallium.
*/
-#include "state_tracker/graw.h"
+#include "state_tracker/graw_dl.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_shader_tokens.h"
diff --git a/src/gallium/tests/graw/quad-tex.c b/src/gallium/tests/graw/quad-tex.c
index c50ef12ab5a..e7379e8c456 100644
--- a/src/gallium/tests/graw/quad-tex.c
+++ b/src/gallium/tests/graw/quad-tex.c
@@ -2,7 +2,7 @@
* any utility code, just the graw interface and gallium.
*/
-#include "state_tracker/graw.h"
+#include "state_tracker/graw_dl.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_shader_tokens.h"
diff --git a/src/gallium/tests/graw/tri-gs.c b/src/gallium/tests/graw/tri-gs.c
index 152ae408eb0..75466ce889c 100644
--- a/src/gallium/tests/graw/tri-gs.c
+++ b/src/gallium/tests/graw/tri-gs.c
@@ -2,7 +2,7 @@
* any utility code, just the graw interface and gallium.
*/
-#include "state_tracker/graw.h"
+#include "state_tracker/graw_dl.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_state.h"
diff --git a/src/gallium/tests/graw/tri-instanced.c b/src/gallium/tests/graw/tri-instanced.c
index 8859f745fdb..67b40f78f78 100644
--- a/src/gallium/tests/graw/tri-instanced.c
+++ b/src/gallium/tests/graw/tri-instanced.c
@@ -5,7 +5,7 @@
#include <stdio.h>
#include <string.h>
-#include "state_tracker/graw.h"
+#include "state_tracker/graw_dl.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_state.h"
diff --git a/src/gallium/tests/graw/tri.c b/src/gallium/tests/graw/tri.c
index 4dbd2c062a5..e8f925d2f43 100644
--- a/src/gallium/tests/graw/tri.c
+++ b/src/gallium/tests/graw/tri.c
@@ -2,7 +2,7 @@
* any utility code, just the graw interface and gallium.
*/
-#include "state_tracker/graw.h"
+#include "state_tracker/graw_dl.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_state.h"
diff --git a/src/gallium/tests/graw/vs-test.c b/src/gallium/tests/graw/vs-test.c
index e1cd814bf72..e6930225264 100644
--- a/src/gallium/tests/graw/vs-test.c
+++ b/src/gallium/tests/graw/vs-test.c
@@ -2,7 +2,7 @@
* any utility code, just the graw interface and gallium.
*/
-#include "state_tracker/graw.h"
+#include "state_tracker/graw_dl.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_shader_tokens.h"