[Mesa-dev] [PATCH 3/4] Mesa changes for adding OpenSWR

Roland Scheidegger sroland at vmware.com
Thu Feb 18 22:32:28 UTC 2016


One comment inline...

Am 18.02.2016 um 02:53 schrieb Tim Rowley:
> C++ protection on gallium functions needed for a C++ driver.
> Add swr driver as a software target.
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_flow.h        |  7 ++++++
>  src/gallium/auxiliary/gallivm/lp_bld_init.h        |  7 ++++++
>  src/gallium/auxiliary/gallivm/lp_bld_sample.h      |  6 +++++
>  src/gallium/auxiliary/gallivm/lp_bld_tgsi.h        |  8 +++++++
>  .../auxiliary/target-helpers/inline_sw_helper.h    | 13 +++++++++-
>  .../target-helpers/inline_wrapper_sw_helper.h      |  2 +-
>  src/gallium/auxiliary/util/u_dl.h                  |  6 +++++
>  src/gallium/targets/libgl-gdi/libgl_gdi.c          | 28 ++++++++++++++++++----
>  8 files changed, 71 insertions(+), 6 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.h b/src/gallium/auxiliary/gallivm/lp_bld_flow.h
> index 0da849b..083b0ad 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_flow.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.h
> @@ -37,6 +37,9 @@
>  
>  #include "gallivm/lp_bld.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
>  
>  struct lp_type;
>  
> @@ -198,4 +201,8 @@ lp_build_array_alloca(struct gallivm_state *gallivm,
>                        LLVMValueRef count,
>                        const char *name);
>  
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif /* !LP_BLD_FLOW_H */
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.h b/src/gallium/auxiliary/gallivm/lp_bld_init.h
> index 9e50f88..ab44661 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_init.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.h
> @@ -35,6 +35,9 @@
>  #include "lp_bld.h"
>  #include <llvm-c/ExecutionEngine.h>
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
>  
>  struct gallivm_state
>  {
> @@ -82,4 +85,8 @@ void
>  lp_set_store_alignment(LLVMValueRef Inst,
>  		       unsigned Align);
>  
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif /* !LP_BLD_INIT_H */
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.h b/src/gallium/auxiliary/gallivm/lp_bld_sample.h
> index a6f0eff..902ae41 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_sample.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.h
> @@ -42,6 +42,9 @@
>  #include "gallivm/lp_bld_type.h"
>  #include "gallivm/lp_bld_swizzle.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
>  
>  struct pipe_resource;
>  struct pipe_sampler_view;
> @@ -625,5 +628,8 @@ lp_build_minify(struct lp_build_context *bld,
>                  LLVMValueRef level,
>                  boolean lod_scalar);
>  
> +#ifdef __cplusplus
> +}
> +#endif
>  
>  #endif /* LP_BLD_SAMPLE_H */
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
> index cc45497..b005d7a 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h
> @@ -48,6 +48,10 @@
>  #include "tgsi/tgsi_scan.h"
>  #include "tgsi/tgsi_info.h"
>  
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>  #define LP_CHAN_ALL ~0
>  
>  #define LP_MAX_INSTRUCTIONS 256
> @@ -663,4 +667,8 @@ lp_build_tgsi_llvm(
>     struct lp_build_tgsi_context * bld_base,
>     const struct tgsi_token *tokens);
>  
> +#ifdef __cplusplus
> +}
> +#endif
> +
>  #endif /* LP_BLD_TGSI_H */
> diff --git a/src/gallium/auxiliary/target-helpers/inline_sw_helper.h b/src/gallium/auxiliary/target-helpers/inline_sw_helper.h
> index a9ab16f..7576bfd 100644
> --- a/src/gallium/auxiliary/target-helpers/inline_sw_helper.h
> +++ b/src/gallium/auxiliary/target-helpers/inline_sw_helper.h
> @@ -6,6 +6,10 @@
>  #include "util/u_debug.h"
>  #include "state_tracker/sw_winsys.h"
>  
> +#ifdef GALLIUM_SWR
> +#include "swr/swr_public.h"
> +#endif
> +
>  
>  /* Helper function to choose and instantiate one of the software rasterizers:
>   * llvmpipe, softpipe.
> @@ -42,6 +46,11 @@ sw_screen_create_named(struct sw_winsys *winsys, const char *driver)
>     }
>  #endif
>  
> +#if defined(GALLIUM_SWR)
> +   if (screen == NULL && strcmp(driver, "swr") == 0)
> +      screen = swr_create_screen(winsys);
> +#endif
> +
>  #if defined(GALLIUM_SOFTPIPE)
>     if (screen == NULL)
>        screen = softpipe_create_screen(winsys);
> @@ -57,7 +66,9 @@ sw_screen_create(struct sw_winsys *winsys)
>     const char *default_driver;
>     const char *driver;
>  
> -#if defined(GALLIUM_LLVMPIPE)
> +#if defined(GALLIUM_SWR)
> +   default_driver = "swr";
> +#elif defined(GALLIUM_LLVMPIPE)
I think changing the default to swr is a bit too ambitious at that point...


>     default_driver = "llvmpipe";
>  #elif defined(GALLIUM_SOFTPIPE)
>     default_driver = "softpipe";
> diff --git a/src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h b/src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h
> index 4f38ba9..d707b8b 100644
> --- a/src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h
> +++ b/src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h
> @@ -12,7 +12,7 @@
>  static inline struct pipe_screen *
>  sw_screen_wrap(struct pipe_screen *screen)
>  {
> -#if defined(GALLIUM_SOFTPIPE) || defined(GALLIUM_LLVMPIPE)
> +#if defined(GALLIUM_SOFTPIPE) || defined(GALLIUM_LLVMPIPE) || defined(GALLIUM_SWR)
>     struct sw_winsys *sws;
>     struct pipe_screen *sw_screen = NULL;
>     const char *driver;
> diff --git a/src/gallium/auxiliary/util/u_dl.h b/src/gallium/auxiliary/util/u_dl.h
> index 80a00ed..d2f4737 100644
> --- a/src/gallium/auxiliary/util/u_dl.h
> +++ b/src/gallium/auxiliary/util/u_dl.h
> @@ -32,6 +32,9 @@
>  
>  #include "pipe/p_config.h"
>  
> +#ifdef	__cplusplus
> +extern "C" {
> +#endif
>  
>  #if defined(PIPE_OS_WINDOWS)
>  #  define UTIL_DL_EXT ".dll"
> @@ -79,5 +82,8 @@ util_dl_close(struct util_dl_library *library);
>  const char *
>  util_dl_error(void);
>  
> +#ifdef	__cplusplus
> +}
> +#endif
>  
>  #endif /* U_DL_H_ */
> diff --git a/src/gallium/targets/libgl-gdi/libgl_gdi.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c
> index 922c186..3af0248 100644
> --- a/src/gallium/targets/libgl-gdi/libgl_gdi.c
> +++ b/src/gallium/targets/libgl-gdi/libgl_gdi.c
> @@ -51,8 +51,12 @@
>  #include "llvmpipe/lp_public.h"
>  #endif
>  
> +#ifdef HAVE_SWR
> +#include "swr/swr_public.h"
> +#endif
>  
>  static boolean use_llvmpipe = FALSE;
> +static boolean use_swr = FALSE;
>  
>  
>  static struct pipe_screen *
> @@ -69,6 +73,8 @@ gdi_screen_create(void)
>  
>  #ifdef HAVE_LLVMPIPE
>     default_driver = "llvmpipe";
> +#elif HAVE_SWR
> +   default_driver = "swr";
>  #else
>     default_driver = "softpipe";
>  #endif
> @@ -78,16 +84,21 @@ gdi_screen_create(void)
>  #ifdef HAVE_LLVMPIPE
>     if (strcmp(driver, "llvmpipe") == 0) {
>        screen = llvmpipe_create_screen( winsys );
> +      if (screen) 
> +         use_llvmpipe = TRUE;
> +   }
> +#elif HAVE_SWR
> +   if (strcmp(driver, "swr") == 0) {
> +      screen = swr_create_screen( winsys );
> +      if (screen) 
> +         use_swr = TRUE;
>     }
> -#else
>     (void) driver;
>  #endif
>  
>     if (screen == NULL) {
>        screen = softpipe_create_screen( winsys );
> -   } else {
> -      use_llvmpipe = TRUE;
> -   }
> +   } 
>  
>     if(!screen)
>        goto no_screen;
> @@ -128,6 +139,15 @@ gdi_present(struct pipe_screen *screen,
>     }
>  #endif
>  
> +#ifdef HAVE_SWR
> +   if (use_swr) {
> +      winsys = swr_get_winsys(screen);
> +      dt = swr_get_displaytarget(res);
> +      gdi_sw_display(winsys, dt, hDC);
> +      return;
> +   }
> +#endif
> +
>     winsys = softpipe_screen(screen)->winsys,
>     dt = softpipe_resource(res)->dt,
>     gdi_sw_display(winsys, dt, hDC);
> 

Could you separate out the #ifdef __cplusplus changes into a separate
patch? This is really mixing two functionally completely unrelated
things into one patch. With that fixed (and my other comment addressed)
this is
Reviewed-by: Roland Scheidegger <sroland at vmware.com>

I can't really review patch 1-2 but you have my
Acked-by: Roland Scheidegger <sroland at vmware.com>

I'm no expert on build issues, though, so no comment on patch 4...

Roland



More information about the mesa-dev mailing list