graw: Dynamically load graw libraries.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 26 Aug 2010 05:44:02 +0000 (06:44 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 26 Aug 2010 05:44:34 +0000 (06:44 +0100)
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.

12 files changed:
src/gallium/include/state_tracker/graw_dl.h [new file with mode: 0644]
src/gallium/targets/graw-xlib/SConscript
src/gallium/targets/graw-xlib/graw_util.c [deleted file]
src/gallium/tests/graw/SConscript
src/gallium/tests/graw/clear.c
src/gallium/tests/graw/fs-test.c
src/gallium/tests/graw/gs-test.c
src/gallium/tests/graw/quad-tex.c
src/gallium/tests/graw/tri-gs.c
src/gallium/tests/graw/tri-instanced.c
src/gallium/tests/graw/tri.c
src/gallium/tests/graw/vs-test.c

diff --git a/src/gallium/include/state_tracker/graw_dl.h b/src/gallium/include/state_tracker/graw_dl.h
new file mode 100644 (file)
index 0000000..0b326ca
--- /dev/null
@@ -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
index 21fce948f43c7c24a08fbe27c890b0b5762f8a5f..32b98cdef3b0ca6237d14a76769c955d73d4129f 100644 (file)
@@ -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 (file)
index 47aca44..0000000
+++ /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);
-}
-
index 860a17e13e71870515bb1489c59500e87f4ead6f..5ef395e0336bbece4c6bbf1e789358e6b21fac4b 100644 (file)
@@ -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'])
index ce52a93aa1bcb5aa0abfb4d29bb50c27af362087..c9a7b76188ca0470682b1f37ac85792fa3f98f24 100644 (file)
@@ -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"
index 53fbb744d86f3ed62d6cbeace6c3cfa98b0a6728..c0ed6e06e46bb71f73750f56dfb7d33cfe8ee3ef 100644 (file)
@@ -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"
index 62714900bd9d5ce3bcb50ec14b6dbe91aa8ff388..0f029e70c2ea22468c6770df47d63511a3c87fe6 100644 (file)
@@ -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"
index c50ef12ab5a95c8b1fb73deaf35d4e0d3e90be69..e7379e8c4565cee8791f62c5d4f62bd94be36e3f 100644 (file)
@@ -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"
index 152ae408eb06c49ed0596a7facc3c60404438c3a..75466ce889c306b21ae37ee5779487a8eeaf568c 100644 (file)
@@ -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"
index 8859f745fdb4f50cc97ac260f7811887cbde5ed1..67b40f78f78d4974be0b248c9a9aba57f4c29c74 100644 (file)
@@ -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"
index 4dbd2c062a5f6ac96050811529b80e4e6d32e9fb..e8f925d2f430a8cc9ee1fb34d25675a9faf62c93 100644 (file)
@@ -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"
index e1cd814bf72ae52fcd96881f2d36998f7ae67321..e6930225264cd2d0649dcb2e8380a2f6c9f21a78 100644 (file)
@@ -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"