[Mesa-dev] [PATCH v3 3/9] gallium/auxiliary: implement sw_probe_wrapped

Emil Velikov emil.l.velikov at gmail.com
Thu Nov 6 06:48:03 PST 2014


Hi David,

Just a few nitpicks which I've missed the previously

On 02/11/14 18:31, David Heidelberg wrote:
> Implement pipe_loader_sw_probe_wrapped which allows to use the wrapped
> software renderer backend when using the pipe loader.
> 
> Signed-off-by: David Heidelberg <david at ixit.cz>
> ---
>  src/gallium/auxiliary/pipe-loader/pipe_loader.h    | 11 +++++++++++
>  src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c | 22
> ++++++++++++++++++++++
>  src/gallium/targets/gbm/Makefile.am                |  1 +
>  src/gallium/targets/opencl/Makefile.am             |  1 +
>  src/gallium/targets/xa/Makefile.am                 |  1 +
>  src/gallium/tests/trivial/Makefile.am              |  1 +
>  6 files changed, 37 insertions(+)
> 
> diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.h
> b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
> index 6127a6a..9f43f17 100644
> --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.h
> +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
> @@ -166,6 +166,17 @@ pipe_loader_sw_probe_null(struct pipe_loader_device
> **devs);
>  int
>  pipe_loader_sw_probe(struct pipe_loader_device **devs, int ndev);
>  +/**
> + * Get a software device wrapped atop another device.
> + *
> + * This function is platform-specific.
> + *
> + * \sa pipe_loader_probe
> + */
> +boolean
> +pipe_loader_sw_probe_wrapped(struct pipe_loader_device **dev,
> +                             struct pipe_screen *screen);
> +
>  #ifdef HAVE_PIPE_LOADER_DRM
>   /**
> diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
> b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
> index b1b1ca6..b152f60 100644
> --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
> +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
> @@ -29,8 +29,11 @@
>   #include "util/u_memory.h"
>  #include "util/u_dl.h"
> +#ifdef HAVE_PIPE_LOADER_DRI
>  #include "sw/dri/dri_sw_winsys.h"
> +#endif
Does this bring any benefit ? Afaics the header does not pull any
dependencies - drm, Xlib, etc so it should be safe as is.

>  #include "sw/null/null_sw_winsys.h"
> +#include "sw/wrapper/wrapper_sw_winsys.h"
>  #ifdef HAVE_PIPE_LOADER_XLIB
>  /* Explicitly wrap the header to ease build without X11 headers */
>  #include "sw/xlib/xlib_sw_winsys.h"
> @@ -140,6 +143,25 @@ pipe_loader_sw_probe(struct pipe_loader_device
> **devs, int ndev)
>     return i;
>  }
>  +boolean
> +pipe_loader_sw_probe_wrapped(struct pipe_loader_device **dev,
> +                             struct pipe_screen *screen)
> +{
> +   struct pipe_loader_sw_device *sdev =
> CALLOC_STRUCT(pipe_loader_sw_device);
> +
Can we check for CALLOC_STRUCT failure ?

> +   sdev->base.type = PIPE_LOADER_DEVICE_SOFTWARE;
> +   sdev->base.driver_name = "swrast";
> +   sdev->base.ops = &pipe_loader_sw_ops;
> +   sdev->ws = wrapper_sw_winsys_wrap_pipe_screen(screen);
> +
> +   if (!sdev->ws) {
> +      FREE(sdev);
> +      return FALSE;
> +   }
> +   *dev = &sdev->base;
> +   return TRUE;
> +}
> +
>  static void
>  pipe_loader_sw_release(struct pipe_loader_device **dev)
>  {
> diff --git a/src/gallium/targets/gbm/Makefile.am
> b/src/gallium/targets/gbm/Makefile.am
> index 2c9b425..679c994 100644
> --- a/src/gallium/targets/gbm/Makefile.am
> +++ b/src/gallium/targets/gbm/Makefile.am
> @@ -34,6 +34,7 @@ gbm_gallium_drm_la_SOURCES =
>  gbm_gallium_drm_la_LIBADD = \
>      $(top_builddir)/src/gallium/state_trackers/gbm/libgbm.la \
>      $(top_builddir)/src/gallium/auxiliary/libgallium.la \
> +    $(top_builddir)/src/gallium/winsys/sw/wrapper/libwsw.la \
You can avoid adding this for each target by add it to
GALLIUM_PIPE_LOADER_WINSYS_LIBS. Something like the following would do
the job.


--- a/src/gallium/Automake.inc
+++ b/src/gallium/Automake.inc

GALLIUM_PIPE_LOADER_WINSYS_LIBS = \
+      $(top_builddir)/src/gallium/winsys/sw/wrapper/libwsw.la \
       $(top_builddir)/src/gallium/winsys/sw/null/libws_null.la


Cheers,
Emil


More information about the mesa-dev mailing list