From: Keith W. <kei...@go...> - 2010-03-21 17:22:42
|
George, This is basically a reproduction of a facility I had in target-helpers previously (swrast_screen.c or similar), which I removed after feedback from Jose that supporting it with scons created more ugliness than we saved in the C code. This change breaks layering in the build system by making code in the utility libraries conditionally built depending on which targets we're supporting. Ideally the code in auxilliary wouldn't have any idea whether softpipe, llvmpipe or any other driver is out there. For the meantime, I'd say just duplicate the function in the few places which use it. There aren't many currently. Longer term, I think we probably want a little targets/common or similar, rather than trying to bundle this into auxilliary. Keith On Sun, Mar 21, 2010 at 11:24 AM, George Sapountzis <gs...@ke...> wrote: > Module: Mesa > Branch: master > Commit: f87a5f6499f51f651c2a9f2d4682875b22926905 > URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f87a5f6499f51f651c2a9f2d4682875b22926905 > > Author: George Sapountzis <gsa...@gm...> > Date: Fri Mar 19 02:38:11 2010 +0200 > > gallium: add soft screen helper > > --- > > src/gallium/auxiliary/target-helpers/soft_screen.c | 73 ++++++++++++++++++++ > src/gallium/auxiliary/target-helpers/soft_screen.h | 12 +++ > src/gallium/targets/libgl-xlib/Makefile | 1 + > src/gallium/targets/libgl-xlib/soft_screen.c | 1 + > src/gallium/targets/libgl-xlib/xlib.c | 34 +--------- > src/gallium/winsys/drm/sw/Makefile | 3 +- > src/gallium/winsys/drm/sw/soft_screen.c | 1 + > src/gallium/winsys/drm/sw/sw_drm_api.c | 32 ++++++++- > 8 files changed, 120 insertions(+), 37 deletions(-) > > diff --git a/src/gallium/auxiliary/target-helpers/soft_screen.c b/src/gallium/auxiliary/target-helpers/soft_screen.c > new file mode 100644 > index 0000000..00d386e > --- /dev/null > +++ b/src/gallium/auxiliary/target-helpers/soft_screen.c > @@ -0,0 +1,73 @@ > +/************************************************************************** > + * > + * Copyright 2010 VMware, Inc. > + * All Rights Reserved. > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the > + * "Software"), to deal in the Software without restriction, including > + * without limitation the rights to use, copy, modify, merge, publish, > + * distribute, sub license, and/or sell copies of the Software, and to > + * permit persons to whom the Software is furnished to do so, subject to > + * the following conditions: > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL > + * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, > + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR > + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE > + * USE OR OTHER DEALINGS IN THE SOFTWARE. > + * > + * The above copyright notice and this permission notice (including the > + * next paragraph) shall be included in all copies or substantial portions > + * of the Software. > + * > + * > + **************************************************************************/ > + > +#include "target-helpers/soft_screen.h" > +#include "softpipe/sp_public.h" > +#include "llvmpipe/lp_public.h" > +#include "cell/ppu/cell_public.h" > +#include "util/u_debug.h" > + > +/** > + * Choose and create a software renderer screen. > + */ > +struct pipe_screen * > +gallium_soft_create_screen( struct sw_winsys *winsys ) > +{ > + const char *default_driver = NULL; > + const char *driver = NULL; > + struct pipe_screen *screen = NULL; > + > +#if defined(GALLIUM_CELL) > + default_driver = "cell"; > +#elif 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_CELL) > + if (screen == NULL && strcmp(driver, "cell") == 0) > + screen = cell_create_screen( winsys ); > +#endif > + > +#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 > + > + return screen; > +} > diff --git a/src/gallium/auxiliary/target-helpers/soft_screen.h b/src/gallium/auxiliary/target-helpers/soft_screen.h > new file mode 100644 > index 0000000..5c10126 > --- /dev/null > +++ b/src/gallium/auxiliary/target-helpers/soft_screen.h > @@ -0,0 +1,12 @@ > +#ifndef SOFT_SCREEN_HELPER_H > +#define SOFT_SCREEN_HELPER_H > + > +#include "pipe/p_compiler.h" > + > +struct pipe_screen; > +struct sw_winsys; > + > +struct pipe_screen * > +gallium_soft_create_screen( struct sw_winsys *winsys ); > + > +#endif > diff --git a/src/gallium/targets/libgl-xlib/Makefile b/src/gallium/targets/libgl-xlib/Makefile > index 5a4e035..2c44a62 100644 > --- a/src/gallium/targets/libgl-xlib/Makefile > +++ b/src/gallium/targets/libgl-xlib/Makefile > @@ -27,6 +27,7 @@ DEFINES += \ > #-DGALLIUM_CELL will be defined by the config */ > > XLIB_TARGET_SOURCES = \ > + soft_screen.c \ > xlib.c > > > diff --git a/src/gallium/targets/libgl-xlib/soft_screen.c b/src/gallium/targets/libgl-xlib/soft_screen.c > new file mode 120000 > index 0000000..d6d878f > --- /dev/null > +++ b/src/gallium/targets/libgl-xlib/soft_screen.c > @@ -0,0 +1 @@ > +../../auxiliary/target-helpers/soft_screen.c > \ No newline at end of file > diff --git a/src/gallium/targets/libgl-xlib/xlib.c b/src/gallium/targets/libgl-xlib/xlib.c > index 48e79fe..e786221 100644 > --- a/src/gallium/targets/libgl-xlib/xlib.c > +++ b/src/gallium/targets/libgl-xlib/xlib.c > @@ -36,6 +36,7 @@ > #include "softpipe/sp_public.h" > #include "llvmpipe/lp_public.h" > #include "cell/ppu/cell_public.h" > +#include "target-helpers/soft_screen.h" > #include "target-helpers/wrap_screen.h" > #include "xm_public.h" > > @@ -63,8 +64,6 @@ PUBLIC const struct st_module st_module_OpenGL = { > static struct pipe_screen * > swrast_xlib_create_screen( Display *display ) > { > - const char *default_driver; > - const char *driver; > struct sw_winsys *winsys; > struct pipe_screen *screen = NULL; > > @@ -75,36 +74,7 @@ swrast_xlib_create_screen( Display *display ) > if (winsys == NULL) > return NULL; > > -#if defined(GALLIUM_CELL) > - default_driver = "cell"; > -#elif 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); > - > - /* Create a software rasterizer on top of that winsys: > - */ > -#if defined(GALLIUM_CELL) > - if (screen == NULL && > - strcmp(driver, "cell") == 0) > - screen = cell_create_screen( winsys ); > -#endif > - > -#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 > + screen = gallium_soft_create_screen( winsys ); > > if (screen == NULL) > goto fail; > diff --git a/src/gallium/winsys/drm/sw/Makefile b/src/gallium/winsys/drm/sw/Makefile > index 5f3c3ec..12b20cb 100644 > --- a/src/gallium/winsys/drm/sw/Makefile > +++ b/src/gallium/winsys/drm/sw/Makefile > @@ -4,11 +4,12 @@ include $(TOP)/configs/current > LIBNAME = swdrm > > C_SOURCES = \ > + soft_screen.c \ > wrapper_sw_winsys.c \ > sw_drm_api.c > > LIBRARY_INCLUDES = > > -LIBRARY_DEFINES = > +LIBRARY_DEFINES = -DGALLIUM_SOFTPIPE > > include ../../../Makefile.template > diff --git a/src/gallium/winsys/drm/sw/soft_screen.c b/src/gallium/winsys/drm/sw/soft_screen.c > new file mode 120000 > index 0000000..423597b > --- /dev/null > +++ b/src/gallium/winsys/drm/sw/soft_screen.c > @@ -0,0 +1 @@ > +../../../auxiliary/target-helpers/soft_screen.c > \ No newline at end of file > diff --git a/src/gallium/winsys/drm/sw/sw_drm_api.c b/src/gallium/winsys/drm/sw/sw_drm_api.c > index 9c5933c..ed3ce14 100644 > --- a/src/gallium/winsys/drm/sw/sw_drm_api.c > +++ b/src/gallium/winsys/drm/sw/sw_drm_api.c > @@ -24,8 +24,11 @@ > **********************************************************/ > > > +#include "pipe/p_screen.h" > #include "util/u_memory.h" > -#include "softpipe/sp_public.h" > +#include "target-helpers/soft_screen.h" > + > +#include "state_tracker/sw_winsys.h" > #include "state_tracker/drm_api.h" > #include "wrapper_sw_winsys.h" > #include "sw_drm_api.h" > @@ -60,14 +63,35 @@ sw_drm_create_screen(struct drm_api *_api, int drmFD, > { > struct sw_drm_api *swapi = sw_drm_api(_api); > struct drm_api *api = swapi->api; > - struct sw_winsys *sww; > - struct pipe_screen *screen; > + struct sw_winsys *sww = NULL; > + struct pipe_screen *screen = NULL; > + struct pipe_screen *soft_screen = NULL; > > screen = api->create_screen(api, drmFD, arg); > + if (screen == NULL) > + goto fail; > > sww = wrapper_sw_winsys_warp_pipe_screen(screen); > + if (sww == NULL) > + goto fail; > + > + soft_screen = gallium_soft_create_screen(sww); > + if (soft_screen == NULL) > + goto fail; > + > + return soft_screen; > + > +fail: > + if (soft_screen) > + soft_screen->destroy(soft_screen); > + > + if (sww) > + sww->destroy(sww); > + > + if (screen) > + screen->destroy(screen); > > - return softpipe_create_screen(sww); > + return NULL; > } > > static void > > _______________________________________________ > mesa-commit mailing list > mes...@li... > http://lists.freedesktop.org/mailman/listinfo/mesa-commit > |
From: George S. <gsa...@gm...> - 2010-03-21 17:43:22
|
On Sun, Mar 21, 2010 at 7:22 PM, Keith Whitwell <kei...@go...> wrote: > George, > > This is basically a reproduction of a facility I had in target-helpers > previously (swrast_screen.c or similar), which I removed after > feedback from Jose that supporting it with scons created more ugliness > than we saved in the C code. > > This change breaks layering in the build system by making code in the > utility libraries conditionally built depending on which targets we're > supporting. Ideally the code in auxilliary wouldn't have any idea > whether softpipe, llvmpipe or any other driver is out there. > > For the meantime, I'd say just duplicate the function in the few > places which use it. There aren't many currently. Longer term, I > think we probably want a little targets/common or similar, rather than > trying to bundle this into auxilliary. > Ok, I just reverted the commit and the commits that fix it. It seems that there will be three places using it (libgl-xlib, drm/sw and drm/swrast). I'll give it a try some other day when I can read and type. |
From: George S. <gsa...@gm...> - 2010-03-21 17:57:51
|
On Sun, Mar 21, 2010 at 7:43 PM, George Sapountzis <gsa...@gm...> wrote: > On Sun, Mar 21, 2010 at 7:22 PM, Keith Whitwell > <kei...@go...> wrote: >> George, >> >> This is basically a reproduction of a facility I had in target-helpers >> previously (swrast_screen.c or similar), which I removed after >> feedback from Jose that supporting it with scons created more ugliness >> than we saved in the C code. >> Ah ok, i was not aware of this >> This change breaks layering in the build system by making code in the >> utility libraries conditionally built depending on which targets we're >> supporting. Ideally the code in auxilliary wouldn't have any idea >> whether softpipe, llvmpipe or any other driver is out there. >> This commit did not build soft_screen.c with auxiliary but symlinked it at each target and build it there, I guess this is not pretty either. For the record, the scons build seemed to work (after getting broken) as reported by Xavier. >> For the meantime, I'd say just duplicate the function in the few >> places which use it. There aren't many currently. Longer term, I >> think we probably want a little targets/common or similar, rather than >> trying to bundle this into auxilliary. >> Ah ok, so it will be build once and all places will use the same software renderer by default. > > Ok, I just reverted the commit and the commits that fix it. It seems > that there will be three places using it (libgl-xlib, drm/sw and > drm/swrast). I'll give it a try some other day when I can read and > type. > |
From: Keith W. <kei...@go...> - 2010-03-21 18:46:54
|
On Sun, Mar 21, 2010 at 5:57 PM, George Sapountzis <gsa...@gm...> wrote: > On Sun, Mar 21, 2010 at 7:43 PM, George Sapountzis > <gsa...@gm...> wrote: >> On Sun, Mar 21, 2010 at 7:22 PM, Keith Whitwell >> <kei...@go...> wrote: >>> George, >>> >>> This is basically a reproduction of a facility I had in target-helpers >>> previously (swrast_screen.c or similar), which I removed after >>> feedback from Jose that supporting it with scons created more ugliness >>> than we saved in the C code. >>> > > Ah ok, i was not aware of this > >>> This change breaks layering in the build system by making code in the >>> utility libraries conditionally built depending on which targets we're >>> supporting. Ideally the code in auxilliary wouldn't have any idea >>> whether softpipe, llvmpipe or any other driver is out there. >>> > > This commit did not build soft_screen.c with auxiliary but symlinked > it at each target and build it there, I guess this is not pretty > either. For the record, the scons build seemed to work (after getting > broken) as reported by Xavier. OK, that would overcome the issue I was thinking of, but agree it's not pretty either... >>> For the meantime, I'd say just duplicate the function in the few >>> places which use it. There aren't many currently. Longer term, I >>> think we probably want a little targets/common or similar, rather than >>> trying to bundle this into auxilliary. >>> > > Ah ok, so it will be build once and all places will use the same > software renderer by default. That's the hope... >> >> Ok, I just reverted the commit and the commits that fix it. It seems >> that there will be three places using it (libgl-xlib, drm/sw and >> drm/swrast). I'll give it a try some other day when I can read and >> type. >> > Thanks George. Keith |