summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct3
-rw-r--r--src/gallium/include/state_tracker/graw_dl.h153
-rw-r--r--src/gallium/targets/SConscript5
-rw-r--r--src/gallium/targets/graw-null/SConscript58
-rw-r--r--src/gallium/targets/graw-null/graw_null.c95
-rw-r--r--src/gallium/targets/graw-xlib/SConscript1
-rw-r--r--src/gallium/targets/graw-xlib/graw_util.c50
-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
16 files changed, 227 insertions, 163 deletions
diff --git a/SConstruct b/SConstruct
index 14663727f52..bb03e5055ea 100644
--- a/SConstruct
+++ b/SConstruct
@@ -31,7 +31,7 @@ import common
# Configuration options
default_statetrackers = 'mesa'
-default_targets = 'none'
+default_targets = 'graw-null'
if common.default_platform in ('linux', 'freebsd', 'darwin'):
default_drivers = 'softpipe,failover,svga,i915,i965,trace,identity,llvmpipe'
@@ -69,6 +69,7 @@ opts.Add(ListVariable('targets', 'driver targets to build', default_targets,
'egl-swrast',
'egl-vmwgfx',
'graw-xlib',
+ 'graw-null',
'libgl-gdi',
'libgl-xlib',
'xorg-i915',
diff --git a/src/gallium/include/state_tracker/graw_dl.h b/src/gallium/include/state_tracker/graw_dl.h
deleted file mode 100644
index 3c5c3d86473..00000000000
--- a/src/gallium/include/state_tracker/graw_dl.h
+++ /dev/null
@@ -1,153 +0,0 @@
-#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 <stdio.h>
-#include "pipe/p_compiler.h"
-#include "pipe/p_context.h"
-#include "pipe/p_format.h"
-#include "pipe/p_state.h"
-#include "util/u_dl.h"
-#include "tgsi/tgsi_text.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/SConscript b/src/gallium/targets/SConscript
index 7eecdb24c79..e447d093610 100644
--- a/src/gallium/targets/SConscript
+++ b/src/gallium/targets/SConscript
@@ -9,6 +9,11 @@ if 'mesa' in env['statetrackers']:
if 'gdi' in env['winsys'] and 'libgl-gdi' not in env['targets']:
env['targets'].append('libgl-gdi')
+if not 'graw-xlib' in env['targets'] and not 'graw-null' in env['targets'] and not env['msvc']:
+ # XXX: disable until MSVC can link correctly
+ SConscript('graw-null/SConscript')
+
+
if env['dri']:
SConscript([
'SConscript.dri'
diff --git a/src/gallium/targets/graw-null/SConscript b/src/gallium/targets/graw-null/SConscript
new file mode 100644
index 00000000000..3416989d8eb
--- /dev/null
+++ b/src/gallium/targets/graw-null/SConscript
@@ -0,0 +1,58 @@
+#######################################################################
+# SConscript for xlib winsys
+
+Import('*')
+
+env = env.Clone()
+
+env.Prepend(LIBS = [
+ ws_null,
+ trace,
+ rbug,
+ identity,
+# gallium,
+])
+
+env.Append(CPPPATH = [
+ '#src/gallium/drivers',
+])
+
+if env['platform'] == 'windows':
+ # For trace
+ env.Append(LIBS = [
+ 'ws2_32',
+ ])
+
+sources = [
+ 'graw_null.c',
+ '../graw-xlib/graw_util.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))
+
+if env['platform'] == 'windows':
+ graw = env.FindIxes(graw, 'LIBPREFIX', 'LIBSUFFIX')
+else:
+ 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 00000000000..5939a5acd3c
--- /dev/null
+++ b/src/gallium/targets/graw-null/graw_null.c
@@ -0,0 +1,95 @@
+#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"
+#include "os/os_time.h"
+#include "state_tracker/graw.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 <stdio.h>
+
+
+static struct {
+ void (*draw)(void);
+} graw;
+
+
+
+struct pipe_screen *
+graw_create_window_and_screen( int x,
+ int y,
+ unsigned width,
+ unsigned height,
+ enum pipe_format format,
+ void **handle)
+{
+ const char *default_driver;
+ const char *driver;
+ struct pipe_screen *screen = NULL;
+ struct sw_winsys *winsys = NULL;
+ static int dummy;
+
+
+ /* 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
+
+ *handle = &dummy;
+
+ /* Inject any wrapping layers we want to here:
+ */
+ return gallium_wrap_screen( screen );
+}
+
+
+
+void
+graw_set_display_func( void (*draw)( void ) )
+{
+ graw.draw = draw;
+}
+
+
+void
+graw_main_loop( void )
+{
+ graw.draw();
+ os_time_sleep(100000);
+}
diff --git a/src/gallium/targets/graw-xlib/SConscript b/src/gallium/targets/graw-xlib/SConscript
index 32b98cdef3b..21fce948f43 100644
--- a/src/gallium/targets/graw-xlib/SConscript
+++ b/src/gallium/targets/graw-xlib/SConscript
@@ -26,6 +26,7 @@ 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
new file mode 100644
index 00000000000..fc7c9ae6f92
--- /dev/null
+++ b/src/gallium/targets/graw-xlib/graw_util.c
@@ -0,0 +1,50 @@
+
+#include "pipe/p_compiler.h"
+#include "pipe/p_context.h"
+#include "pipe/p_state.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 5ef395e0336..860a17e13e7 100644
--- a/src/gallium/tests/graw/SConscript
+++ b/src/gallium/tests/graw/SConscript
@@ -1,8 +1,15 @@
Import('*')
+try:
+ graw
+except NameError:
+ print 'warning: graw library not avaiable: skipping build of graw test'
+ Return()
+
env = env.Clone()
-env.Prepend(LIBS = gallium)
+env.Prepend(LIBPATH = [graw.dir])
+env.Prepend(LIBS = ['graw'] + 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 c9a7b76188c..ce52a93aa1b 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_dl.h"
+#include "state_tracker/graw.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 c0ed6e06e46..53fbb744d86 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_dl.h"
+#include "state_tracker/graw.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 0f029e70c2e..62714900bd9 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_dl.h"
+#include "state_tracker/graw.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 e7379e8c456..c50ef12ab5a 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_dl.h"
+#include "state_tracker/graw.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 75466ce889c..152ae408eb0 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_dl.h"
+#include "state_tracker/graw.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 67b40f78f78..8859f745fdb 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_dl.h"
+#include "state_tracker/graw.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 e8f925d2f43..4dbd2c062a5 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_dl.h"
+#include "state_tracker/graw.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 e6930225264..e1cd814bf72 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_dl.h"
+#include "state_tracker/graw.h"
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "pipe/p_shader_tokens.h"