diff options
Diffstat (limited to 'src/gallium/targets/libgl-gdi')
| -rw-r--r-- | src/gallium/targets/libgl-gdi/SConscript | 9 | ||||
| -rw-r--r-- | src/gallium/targets/libgl-gdi/gdi_softpipe_winsys.c | 124 | ||||
| -rw-r--r-- | src/gallium/targets/libgl-gdi/libgl_gdi.c (renamed from src/gallium/targets/libgl-gdi/gdi_llvmpipe_winsys.c) | 77 | 
3 files changed, 64 insertions, 146 deletions
diff --git a/src/gallium/targets/libgl-gdi/SConscript b/src/gallium/targets/libgl-gdi/SConscript index 339238756a..6fa0851a1a 100644 --- a/src/gallium/targets/libgl-gdi/SConscript +++ b/src/gallium/targets/libgl-gdi/SConscript @@ -18,16 +18,15 @@ env.Append(LIBS = [      talloc,  ]) -sources = [] +sources = ['libgl_gdi.c']  drivers = []  if True: -    sources = ['gdi_softpipe_winsys.c'] -    drivers = [softpipe] +    drivers += [softpipe]  if env['llvm']: -    sources = ['gdi_llvmpipe_winsys.c'] -    drivers = [llvmpipe] +    env.Append(CPPDEFINES = 'HAVE_LLVMPIPE') +    drivers += [llvmpipe]  if env['gcc']:      sources += ['#src/gallium/state_trackers/wgl/opengl32.mingw.def'] diff --git a/src/gallium/targets/libgl-gdi/gdi_softpipe_winsys.c b/src/gallium/targets/libgl-gdi/gdi_softpipe_winsys.c deleted file mode 100644 index 4ac507ff9c..0000000000 --- a/src/gallium/targets/libgl-gdi/gdi_softpipe_winsys.c +++ /dev/null @@ -1,124 +0,0 @@ -/************************************************************************** - * - * Copyright 2009 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. - * - * - **************************************************************************/ - -/** - * @file - * LLVMpipe support. - * - * @author Jose Fonseca <jfonseca@vmware.com> - */ - - -#include <windows.h> - -#include "stw_winsys.h" -#include "gdi/gdi_sw_winsys.h" -#include "softpipe/sp_texture.h" -#include "softpipe/sp_screen.h" -#include "softpipe/sp_public.h" - - -static struct pipe_screen * -gdi_softpipe_screen_create(void) -{ -   static struct sw_winsys *winsys; -   struct pipe_screen *screen; - -   winsys = gdi_create_sw_winsys(); -   if(!winsys) -      goto no_winsys; - -   screen = softpipe_create_screen(winsys); -   if(!screen) -      goto no_screen; - -   return screen; -    -no_screen: -   winsys->destroy(winsys); -no_winsys: -   return NULL; -} - - - - -static void -gdi_softpipe_present(struct pipe_screen *screen, -                     struct pipe_surface *surface, -                     HDC hDC) -{ -   /* This will fail if any interposing layer (trace, debug, etc) has -    * been introduced between the state-trackers and softpipe. -    * -    * Ideally this would get replaced with a call to -    * pipe_screen::flush_frontbuffer(). -    * -    * Failing that, it may be necessary for intervening layers to wrap -    * other structs such as this stw_winsys as well... -    */ -   gdi_sw_display(softpipe_screen(screen)->winsys, -                  softpipe_resource(surface->texture)->dt, -                  hDC); -} - - -static const struct stw_winsys stw_winsys = { -   &gdi_softpipe_screen_create, -   &gdi_softpipe_present, -   NULL, /* get_adapter_luid */ -   NULL, /* shared_surface_open */ -   NULL, /* shared_surface_close */ -   NULL  /* compose */ -}; - - -BOOL WINAPI -DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) -{ -   switch (fdwReason) { -   case DLL_PROCESS_ATTACH: -      stw_init(&stw_winsys); -      stw_init_thread(); -      break; - -   case DLL_THREAD_ATTACH: -      stw_init_thread(); -      break; - -   case DLL_THREAD_DETACH: -      stw_cleanup_thread(); -      break; - -   case DLL_PROCESS_DETACH: -      stw_cleanup_thread(); -      stw_cleanup(); -      break; -   } -   return TRUE; -} diff --git a/src/gallium/targets/libgl-gdi/gdi_llvmpipe_winsys.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c index 58c941a03b..112904ab5f 100644 --- a/src/gallium/targets/libgl-gdi/gdi_llvmpipe_winsys.c +++ b/src/gallium/targets/libgl-gdi/libgl_gdi.c @@ -1,6 +1,6 @@  /**************************************************************************   * - * Copyright 2009 VMware, Inc. + * Copyright 2009-2010 VMware, Inc.   * All Rights Reserved.   *   * Permission is hereby granted, free of charge, to any person obtaining a @@ -28,7 +28,7 @@  /**   * @file - * LLVMpipe support. + * Softpipe/LLVMpipe support.   *   * @author Jose Fonseca <jfonseca@vmware.com>   */ @@ -36,24 +36,56 @@  #include <windows.h> +#include "util/u_debug.h"  #include "stw_winsys.h"  #include "gdi/gdi_sw_winsys.h" + +#include "softpipe/sp_texture.h" +#include "softpipe/sp_screen.h" +#include "softpipe/sp_public.h" + +#ifdef HAVE_LLVMPIPE  #include "llvmpipe/lp_texture.h"  #include "llvmpipe/lp_screen.h"  #include "llvmpipe/lp_public.h" +#endif + + +static boolean use_llvmpipe = FALSE;  static struct pipe_screen * -gdi_llvmpipe_screen_create(void) +gdi_screen_create(void)  { -   static struct sw_winsys *winsys; -   struct pipe_screen *screen; +   const char *default_driver; +   const char *driver; +   struct pipe_screen *screen = NULL; +   struct sw_winsys *winsys;     winsys = gdi_create_sw_winsys();     if(!winsys)        goto no_winsys; -   screen = llvmpipe_create_screen(winsys); +#ifdef HAVE_LLVMPIPE +   default_driver = "llvmpipe"; +#else +   default_driver = "softpipe"; +#endif + +   driver = debug_get_option("GALLIUM_DRIVER", default_driver); + +#ifdef HAVE_LLVMPIPE +   if (strcmp(driver, "llvmpipe") == 0) { +      screen = llvmpipe_create_screen( winsys ); +   } +#endif + +   if (screen == NULL) { +      screen = softpipe_create_screen( winsys ); +   } else { +      use_llvmpipe = TRUE; +   } +     if(!screen)        goto no_screen; @@ -66,15 +98,13 @@ no_winsys:  } - -  static void -gdi_llvmpipe_present(struct pipe_screen *screen, -                     struct pipe_surface *surface, -                     HDC hDC) +gdi_present(struct pipe_screen *screen, +            struct pipe_resource *res, +            HDC hDC)  {     /* This will fail if any interposing layer (trace, debug, etc) has -    * been introduced between the state-trackers and llvmpipe. +    * been introduced between the state-trackers and the pipe driver.      *      * Ideally this would get replaced with a call to      * pipe_screen::flush_frontbuffer(). @@ -82,15 +112,28 @@ gdi_llvmpipe_present(struct pipe_screen *screen,      * Failing that, it may be necessary for intervening layers to wrap      * other structs such as this stw_winsys as well...      */ -   gdi_sw_display(llvmpipe_screen(screen)->winsys, -                  llvmpipe_resource(surface->texture)->dt, -                  hDC); + +   struct sw_winsys *winsys = NULL; +   struct sw_displaytarget *dt = NULL; + +#ifdef HAVE_LLVMPIPE +   if (use_llvmpipe) { +      winsys = llvmpipe_screen(screen)->winsys; +      dt = llvmpipe_resource(res)->dt; +      gdi_sw_display(winsys, dt, hDC); +      return; +   } +#endif + +   winsys = softpipe_screen(screen)->winsys, +   dt = softpipe_resource(res)->dt, +   gdi_sw_display(winsys, dt, hDC);  }  static const struct stw_winsys stw_winsys = { -   &gdi_llvmpipe_screen_create, -   &gdi_llvmpipe_present, +   &gdi_screen_create, +   &gdi_present,     NULL, /* get_adapter_luid */     NULL, /* shared_surface_open */     NULL, /* shared_surface_close */  | 
