Mesa (master): graw-null: New target to ensure we always have a graw implementation available.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Thu May 6 13:23:59 UTC 2010


Module: Mesa
Branch: master
Commit: d5e741d6d8ebffefa2851677643c6a1aeeb1d431
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d5e741d6d8ebffefa2851677643c6a1aeeb1d431

Author: José Fonseca <jfonseca at vmware.com>
Date:   Thu May  6 14:20:13 2010 +0100

graw-null: New target to ensure we always have a graw implementation available.

---

 src/gallium/targets/SConscript            |    5 ++-
 src/gallium/targets/graw-null/SConscript  |   53 ++++++++++++++++++
 src/gallium/targets/graw-null/graw_null.c |   83 +++++++++++++++++++++++++++++
 src/gallium/tests/raw/SConscript          |    7 ++-
 4 files changed, 145 insertions(+), 3 deletions(-)

diff --git a/src/gallium/targets/SConscript b/src/gallium/targets/SConscript
index 1292d4f..be5db88 100644
--- a/src/gallium/targets/SConscript
+++ b/src/gallium/targets/SConscript
@@ -10,10 +10,13 @@ if 'gdi' in env['winsys']:
 		'libgl-gdi/SConscript',
 	])
 
-if 'graw-xlib' in env['winsys']:
+if env['platform'] == 'linux' and 'xlib' in env['winsys'] and 'graw-xlib' in env['winsys']:
 	SConscript([
 		'graw-xlib/SConscript',
 	])
+else:
+    SConscript('graw-null/SConscript')
+
 
 if env['dri']:
 	SConscript([
diff --git a/src/gallium/targets/graw-null/SConscript b/src/gallium/targets/graw-null/SConscript
new file mode 100644
index 0000000..99b6f5f
--- /dev/null
+++ b/src/gallium/targets/graw-null/SConscript
@@ -0,0 +1,53 @@
+#######################################################################
+# SConscript for xlib winsys
+
+Import('*')
+
+env = env.Clone()
+
+env.Prepend(LIBS = [
+    ws_null,
+    trace,
+    identity,
+#    gallium,
+])
+
+env.Append(CPPPATH = [
+    '#src/gallium/drivers',
+])
+
+if env['platform'] == 'windows':
+    # For trace
+    env.Append(LIBS = [
+        'ws2_32',
+    ])
+
+sources = [
+    'graw_null.c',
+]
+
+if True:
+    env.Append(CPPDEFINES = 'GALLIUM_SOFTPIPE')
+    env.Prepend(LIBS = [softpipe])
+
+if env['llvm']:
+    env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE')
+    env.Tool('udis86')
+    env.Prepend(LIBS = [llvmpipe])
+
+# Need this for trace, identity drivers referenced by
+# gallium_wrap_screen().
+#
+env.Prepend(LIBS = [gallium])
+
+# TODO: write a wrapper function http://www.scons.org/wiki/WrapperFunctions
+graw = env.SharedLibrary(
+    target ='graw',
+    source = sources,
+)
+
+env.InstallSharedLibrary(graw, version=(1, 0))
+
+graw = env.FindIxes(graw, 'SHLIBPREFIX', 'SHLIBSUFFIX')
+
+Export('graw')
diff --git a/src/gallium/targets/graw-null/graw_null.c b/src/gallium/targets/graw-null/graw_null.c
new file mode 100644
index 0000000..293015b
--- /dev/null
+++ b/src/gallium/targets/graw-null/graw_null.c
@@ -0,0 +1,83 @@
+#include "pipe/p_compiler.h"
+#include "util/u_debug.h"
+#include "util/u_memory.h"
+#include "target-helpers/wrap_screen.h"
+#include "sw/null/null_sw_winsys.h"
+
+#ifdef GALLIUM_SOFTPIPE
+#include "softpipe/sp_public.h"
+#endif
+
+#ifdef GALLIUM_LLVMPIPE
+#include "llvmpipe/lp_public.h"
+#endif
+
+/* Haven't figured out a decent way to build the helper code yet -
+ * #include it here temporarily.
+ */
+#include "sw/sw_public.h"
+#include "sw/sw.c"
+
+#include "state_tracker/graw.h"
+
+#include <stdio.h>
+
+
+struct pipe_screen *
+graw_init( void )
+{
+   const char *default_driver;
+   const char *driver;
+   struct pipe_screen *screen = NULL;
+   struct sw_winsys *winsys = NULL;
+
+   /* Create the underlying winsys, which performs presents to Xlib
+    * drawables:
+    */
+   winsys = null_sw_create();
+   if (winsys == NULL)
+      return NULL;
+
+#if defined(GALLIUM_LLVMPIPE)
+   default_driver = "llvmpipe";
+#elif defined(GALLIUM_SOFTPIPE)
+   default_driver = "softpipe";
+#else
+   default_driver = "";
+#endif
+
+   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
+
+#if defined(GALLIUM_LLVMPIPE)
+   if (screen == NULL && strcmp(driver, "llvmpipe") == 0)
+      screen = llvmpipe_create_screen( winsys );
+#endif
+
+#if defined(GALLIUM_SOFTPIPE)
+   if (screen == NULL)
+      screen = softpipe_create_screen( winsys );
+#endif
+
+   /* Inject any wrapping layers we want to here:
+    */
+   return gallium_wrap_screen( screen );
+}
+
+
+void *
+graw_create_window( int x,
+                    int y,
+                    unsigned width,
+                    unsigned height,
+                    enum pipe_format format )
+{
+   static int dummy;
+   return &dummy;
+}
+
+
+void
+graw_destroy_window( void *window )
+{
+}
+
diff --git a/src/gallium/tests/raw/SConscript b/src/gallium/tests/raw/SConscript
index 1b172e0..8a92ac2 100644
--- a/src/gallium/tests/raw/SConscript
+++ b/src/gallium/tests/raw/SConscript
@@ -1,12 +1,15 @@
 Import('*')
 
-if 'graw-xlib' not in env['winsys']:
+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.name])
+env.Prepend(LIBS = ['graw'])
 
 progs = [
     'clear'




More information about the mesa-commit mailing list