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.tags/mesa-7.9-rc1
| @@ -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 | |||
| @@ -26,7 +26,6 @@ env.Append(CPPPATH = [ | |||
| sources = [ | |||
| 'graw_xlib.c', | |||
| 'graw_util.c', | |||
| ] | |||
| env.Tool('x11') | |||
| @@ -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); | |||
| } | |||
| @@ -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']) | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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" | |||