gallium: create helper for swrast+xlib combination

Several targets may want to reuse this code.  It's pretty simple, not
sure if this is really a win.
This commit is contained in:
Keith Whitwell 2010-03-09 17:27:58 +00:00
parent c27ffc5215
commit d0aea65032
6 changed files with 17 additions and 81 deletions

View File

@ -131,7 +131,8 @@ C_SOURCES = \
vl/vl_mpeg12_mc_renderer.c \
vl/vl_compositor.c \
vl/vl_csc.c \
vl/vl_shader_build.c
vl/vl_shader_build.c \
target-helpers/swrast_xlib.c
GALLIVM_SOURCES = \
gallivm/lp_bld_alpha.c \

View File

@ -9,8 +9,9 @@ struct pipe_screen;
struct pipe_surface;
/* This is what the xlib software winsys expects to find in the
* "private" field of flush_frontbuffers(). Xlib-based state trackers
* somehow need to know this.
* "private" field of flush_frontbuffers().
*
* Xlib-based state trackers somehow need to know this.
*/
struct xlib_drawable {
Visual *visual;
@ -18,12 +19,6 @@ struct xlib_drawable {
Drawable drawable;
};
/* This is the interface required by the glx/xlib state tracker. Why
* is it being defined in this file?
*/
struct xm_driver {
struct pipe_screen *(*create_pipe_screen)( Display *display );
};
/* This is the public interface to the ws/xlib module. Why isn't it
* being defined in that directory?

View File

@ -63,7 +63,7 @@
#include "pipe/p_screen.h"
#include "pipe/p_context.h"
#include "xm_winsys.h"
#include "xm_public.h"
#include <GL/glx.h>

View File

@ -29,11 +29,13 @@
#ifndef XM_WINSYS_H
#define XM_WINSYS_H
struct pipe_context;
struct pipe_screen;
struct pipe_surface;
struct xlib_drawable;
struct xm_driver;
/* This is the driver interface required by the glx/xlib state tracker.
*/
struct xm_driver {
struct pipe_screen *(*create_pipe_screen)( Display *display );
};
extern void
xmesa_set_driver( const struct xm_driver *driver );

View File

@ -30,81 +30,19 @@
* Authors:
* Keith Whitwell
*/
#include "state_tracker/xlib_sw_winsys.h"
#include "xm_winsys.h"
#include "util/u_debug.h"
#include "softpipe/sp_public.h"
#include "llvmpipe/lp_public.h"
#include "identity/id_public.h"
#include "trace/tr_public.h"
#include "cell/ppu/cell_public.h"
#include "pipe/p_compiler.h"
#include "target-helpers/swrast_xlib.h"
#include "xm_public.h"
/* advertise OpenGL support */
PUBLIC const int st_api_OpenGL = 1;
static struct pipe_screen *
create_screen( struct sw_winsys *winsys )
{
#if defined(GALLIUM_CELL)
if (!debug_get_bool_option("GALLIUM_NOCELL", FALSE))
return cell_create_screen( winsys );
#endif
#if defined(GALLIUM_LLVMPIPE)
return llvmpipe_create_screen( winsys );
#endif
return softpipe_create_screen( winsys );
}
static struct pipe_screen *
xlib_create_screen( Display *display )
{
struct sw_winsys *winsys;
struct pipe_screen *screen;
winsys = xlib_create_sw_winsys( display );
if (winsys == NULL)
return NULL;
screen = create_screen(winsys);
if (screen == NULL)
goto fail;
/* Finally we have somewhere to inject layers into the stack in a
* clean fashion:
*/
if (debug_get_bool_option("GALLIUM_WRAP", FALSE)) {
screen = identity_screen_create(screen);
}
if (debug_get_bool_option("GALLIUM_TRACE", FALSE)) {
screen = trace_screen_create( screen );
}
return screen;
fail:
if (winsys)
winsys->destroy( winsys );
return NULL;
}
struct xm_driver xlib_driver =
{
.create_pipe_screen = xlib_create_screen,
.create_pipe_screen = swrast_xlib_create_screen,
};
/* Build the rendering stack.
*/
static void _init( void ) __attribute__((constructor));

View File

@ -38,7 +38,7 @@
#include "pipe/p_error.h"
#include "pipe/p_context.h"
#include "xm_winsys.h"
#include "xm_public.h"
#include "i965/brw_winsys.h"
#include "i965/brw_screen.h"