[PATCHv2 2/4] st/xa: use pipe-loader to get screen

Emil Velikov emil.l.velikov at gmail.com
Mon Feb 10 20:36:35 PST 2014


On 10/02/14 18:34, Rob Clark wrote:
> From: Rob Clark <robclark at freedesktop.org>
> 
> This lets multiple gallium drivers use XA.
> 
Hi Rob,

Seems like I should have explained a bit better.

There is no need to have sourcefiles in order to have a specific target.
All you needed was to link the state-tracker, mesagallium, gallium(aux
library), pipe-loader and a few winsys' to wrap up the library.

The opencl target + my vdpau/dri patches are a decent example of what I
had in mind.

Sorry for the confusion
-Emil

> Signed-off-by: Rob Clark <robclark at freedesktop.org>
> ---
>  configure.ac                                  |  9 ++--
>  src/gallium/state_trackers/xa/Makefile.am     |  1 +
>  src/gallium/state_trackers/xa/xa_priv.h       |  1 +
>  src/gallium/state_trackers/xa/xa_tracker.c    |  9 +++-
>  src/gallium/targets/Makefile.am               |  8 ++--
>  src/gallium/targets/xa-vmwgfx/Makefile.am     | 61 ------------------------
>  src/gallium/targets/xa-vmwgfx/vmw_target.c    | 26 ----------
>  src/gallium/targets/xa-vmwgfx/xatracker.pc.in |  9 ----
>  src/gallium/targets/xa/Makefile.am            | 68 +++++++++++++++++++++++++++
>  src/gallium/targets/xa/xa.c                   | 49 +++++++++++++++++++
>  src/gallium/targets/xa/xa.h                   | 37 +++++++++++++++
>  src/gallium/targets/xa/xatracker.pc.in        |  9 ++++
>  12 files changed, 182 insertions(+), 105 deletions(-)
>  delete mode 100644 src/gallium/targets/xa-vmwgfx/Makefile.am
>  delete mode 100644 src/gallium/targets/xa-vmwgfx/vmw_target.c
>  delete mode 100644 src/gallium/targets/xa-vmwgfx/xatracker.pc.in
>  create mode 100644 src/gallium/targets/xa/Makefile.am
>  create mode 100644 src/gallium/targets/xa/xa.c
>  create mode 100644 src/gallium/targets/xa/xa.h
>  create mode 100644 src/gallium/targets/xa/xatracker.pc.in
> 
> diff --git a/configure.ac b/configure.ac
> index cba6301..29ca954 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1270,6 +1270,7 @@ dnl XA configuration
>  dnl
>  if test "x$enable_xa" = xyes; then
>      GALLIUM_STATE_TRACKERS_DIRS="xa $GALLIUM_STATE_TRACKERS_DIRS"
> +    enable_gallium_loader=yes
>  fi
>  AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes)
>  
> @@ -1743,7 +1744,7 @@ if test "x$with_gallium_drivers" != x; then
>          xsvga)
>              HAVE_GALLIUM_SVGA=yes
>              GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga softpipe"
> -            gallium_check_st "svga/drm" "dri-vmwgfx" "xa-vmwgfx"
> +            gallium_check_st "svga/drm" "dri-vmwgfx" ""
>              ;;
>          xi915)
>              HAVE_GALLIUM_I915=yes
> @@ -1962,7 +1963,7 @@ AC_SUBST([XVMC_MAJOR], 1)
>  AC_SUBST([XVMC_MINOR], 0)
>  
>  AC_SUBST([XA_MAJOR], 2)
> -AC_SUBST([XA_MINOR], 1)
> +AC_SUBST([XA_MINOR], 2)
>  AC_SUBST([XA_TINY], 0)
>  AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
>  
> @@ -2035,6 +2036,8 @@ AC_CONFIG_FILES([Makefile
>  		src/gallium/targets/egl-static/Makefile
>  		src/gallium/targets/gbm/Makefile
>  		src/gallium/targets/opencl/Makefile
> +		src/gallium/targets/xa/Makefile
> +		src/gallium/targets/xa/xatracker.pc
>  		src/gallium/targets/osmesa/Makefile
>  		src/gallium/targets/osmesa/osmesa.pc
>  		src/gallium/targets/pipe-loader/Makefile
> @@ -2046,8 +2049,6 @@ AC_CONFIG_FILES([Makefile
>  		src/gallium/targets/r600/xvmc/Makefile
>  		src/gallium/targets/libgl-xlib/Makefile
>  		src/gallium/targets/vdpau-nouveau/Makefile
> -		src/gallium/targets/xa-vmwgfx/Makefile
> -		src/gallium/targets/xa-vmwgfx/xatracker.pc
>  		src/gallium/targets/xvmc-nouveau/Makefile
>  		src/gallium/tests/trivial/Makefile
>  		src/gallium/tests/unit/Makefile
> diff --git a/src/gallium/state_trackers/xa/Makefile.am b/src/gallium/state_trackers/xa/Makefile.am
> index 7d0b366..af79ccd 100644
> --- a/src/gallium/state_trackers/xa/Makefile.am
> +++ b/src/gallium/state_trackers/xa/Makefile.am
> @@ -29,6 +29,7 @@ AM_CFLAGS = \
>  	$(VISIBILITY_CFLAGS)
>  
>  AM_CPPFLAGS = \
> +	-I$(top_srcdir)/src/gallium/targets/xa \
>  	-I$(top_srcdir)/src/gallium/ \
>  	-I$(top_srcdir)/src/gallium/winsys \
>  	-I$(top_srcdir)/src/gallium/drivers
> diff --git a/src/gallium/state_trackers/xa/xa_priv.h b/src/gallium/state_trackers/xa/xa_priv.h
> index ee182e7..b99c214 100644
> --- a/src/gallium/state_trackers/xa/xa_priv.h
> +++ b/src/gallium/state_trackers/xa/xa_priv.h
> @@ -74,6 +74,7 @@ struct xa_tracker {
>      unsigned int format_map[XA_LAST_SURFACE_TYPE][2];
>      int d_depth_bits_last;
>      int ds_depth_bits_last;
> +    struct pipe_loader_device *dev;
>      struct pipe_screen *screen;
>      struct xa_context *default_ctx;
>  };
> diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c
> index cda6501..6943a29 100644
> --- a/src/gallium/state_trackers/xa/xa_tracker.c
> +++ b/src/gallium/state_trackers/xa/xa_tracker.c
> @@ -28,8 +28,10 @@
>  
>  #include "xa_tracker.h"
>  #include "xa_priv.h"
> +#include "xa.h"
>  #include "pipe/p_state.h"
>  #include "pipe/p_format.h"
> +#include "pipe-loader/pipe_loader.h"
>  #include "state_tracker/drm_driver.h"
>  #include "util/u_inlines.h"
>  
> @@ -143,7 +145,9 @@ xa_tracker_create(int drm_fd)
>      if (!xa)
>  	return NULL;
>  
> -    xa->screen = driver_descriptor.create_screen(drm_fd);
> +    xa->dev = xa_pipe_probe(drm_fd);
> +    if (xa->dev)
> +	xa->screen = xa_pipe_create_screen(xa->dev);
>      if (!xa->screen)
>  	goto out_no_screen;
>  
> @@ -190,6 +194,8 @@ xa_tracker_create(int drm_fd)
>   out_no_pipe:
>      xa->screen->destroy(xa->screen);
>   out_no_screen:
> +    if (xa->dev)
> +	xa_pipe_release(xa->dev);
>      free(xa);
>      return NULL;
>  }
> @@ -200,6 +206,7 @@ xa_tracker_destroy(struct xa_tracker *xa)
>      free(xa->supported_formats);
>      xa_context_destroy(xa->default_ctx);
>      xa->screen->destroy(xa->screen);
> +    xa_pipe_release(xa->dev);
>      free(xa);
>  }
>  
> diff --git a/src/gallium/targets/Makefile.am b/src/gallium/targets/Makefile.am
> index e356020..a7c70f4 100644
> --- a/src/gallium/targets/Makefile.am
> +++ b/src/gallium/targets/Makefile.am
> @@ -34,6 +34,10 @@ if HAVE_GALLIUM_GBM
>  SUBDIRS += gbm
>  endif
>  
> +if HAVE_ST_XA
> +SUBDIRS += xa
> +endif
> +
>  if HAVE_CLOVER
>  SUBDIRS += opencl
>  endif
> @@ -42,10 +46,6 @@ if HAVE_GALLIUM_SVGA
>  if HAVE_DRI
>  SUBDIRS += dri-vmwgfx
>  endif
> -
> -if HAVE_ST_XA
> -SUBDIRS += xa-vmwgfx
> -endif
>  endif
>  
>  if HAVE_GALLIUM_FREEDRENO
> diff --git a/src/gallium/targets/xa-vmwgfx/Makefile.am b/src/gallium/targets/xa-vmwgfx/Makefile.am
> deleted file mode 100644
> index 6fe0510..0000000
> --- a/src/gallium/targets/xa-vmwgfx/Makefile.am
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -# Copyright © 2012 Intel Corporation
> -#
> -# 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, sublicense,
> -# 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 above copyright notice and this permission notice (including the next
> -# paragraph) shall be included in all copies or substantial portions of the
> -# Software.
> -#
> -# 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
> -# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> -# HOLDERS 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.
> -
> -include $(top_srcdir)/src/gallium/Automake.inc
> -
> -AM_CFLAGS = \
> -	-Wall -pedantic \
> -	$(GALLIUM_CFLAGS) \
> -	$(XORG_CFLAGS)
> -AM_CPPFLAGS = \
> -	-I$(top_srcdir)/src/gallium/drivers \
> -	-I$(top_srcdir)/src/gallium/winsys
> -
> -pkgconfigdir = $(libdir)/pkgconfig
> -pkgconfig_DATA = xatracker.pc
> -
> -lib_LTLIBRARIES = libxatracker.la
> -
> -libxatracker_la_SOURCES = vmw_target.c
> -
> -libxatracker_la_LDFLAGS = -version-number $(XA_MAJOR):$(XA_MINOR):$(XA_TINY)
> -
> -libxatracker_la_LIBADD = \
> -	$(top_builddir)/src/gallium/auxiliary/libgallium.la \
> -	$(top_builddir)/src/gallium/state_trackers/xa/libxatracker.la \
> -	$(top_builddir)/src/gallium/winsys/svga/drm/libsvgadrm.la \
> -	$(top_builddir)/src/gallium/drivers/svga/libsvga.la \
> -	$(top_builddir)/src/gallium/drivers/trace/libtrace.la \
> -	$(top_builddir)/src/gallium/drivers/rbug/librbug.la
> -
> -nodist_EXTRA_libxatracker_la_SOURCES = dummy.cpp
> -
> -if HAVE_MESA_LLVM
> -libxatracker_la_LDFLAGS += $(LLVM_LDFLAGS)
> -libxatracker_la_LIBADD += $(LLVM_LIBS)
> -endif
> -
> -# Provide compatibility with scripts for the old Mesa build system for
> -# a while by putting a link to the driver into /lib of the build tree.
> -all-local: libxatracker.la
> -	$(MKDIR_P) $(top_builddir)/$(LIB_DIR)/gallium
> -	ln -f .libs/libxatracker.so* $(top_builddir)/$(LIB_DIR)/gallium/
> diff --git a/src/gallium/targets/xa-vmwgfx/vmw_target.c b/src/gallium/targets/xa-vmwgfx/vmw_target.c
> deleted file mode 100644
> index 1087801..0000000
> --- a/src/gallium/targets/xa-vmwgfx/vmw_target.c
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -
> -#include "target-helpers/inline_debug_helper.h"
> -#include "state_tracker/drm_driver.h"
> -#include "svga/drm/svga_drm_public.h"
> -#include "svga/svga_public.h"
> -
> -static struct pipe_screen *
> -create_screen(int fd)
> -{
> -   struct svga_winsys_screen *sws;
> -   struct pipe_screen *screen;
> -
> -   sws = svga_drm_winsys_screen_create(fd);
> -   if (!sws)
> -      return NULL;
> -
> -   screen = svga_screen_create(sws);
> -   if (!screen)
> -      return NULL;
> -
> -   screen = debug_screen_wrap(screen);
> -
> -   return screen;
> -}
> -
> -DRM_DRIVER_DESCRIPTOR("vmwgfx", "vmwgfx", create_screen, NULL)
> diff --git a/src/gallium/targets/xa-vmwgfx/xatracker.pc.in b/src/gallium/targets/xa-vmwgfx/xatracker.pc.in
> deleted file mode 100644
> index c99d8d6..0000000
> --- a/src/gallium/targets/xa-vmwgfx/xatracker.pc.in
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -prefix=@prefix@
> -exec_prefix=${prefix}
> -libdir=@libdir@
> -includedir=@includedir@
> -
> -Name: xatracker
> -Description: Xorg Gallium3D acceleration library
> -Version: @XA_VERSION@
> -Libs: -L${libdir} -lxatracker
> diff --git a/src/gallium/targets/xa/Makefile.am b/src/gallium/targets/xa/Makefile.am
> new file mode 100644
> index 0000000..dddb05c
> --- /dev/null
> +++ b/src/gallium/targets/xa/Makefile.am
> @@ -0,0 +1,68 @@
> +# Copyright © 2012 Intel Corporation
> +#
> +# 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, sublicense,
> +# 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 above copyright notice and this permission notice (including the next
> +# paragraph) shall be included in all copies or substantial portions of the
> +# Software.
> +#
> +# 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
> +# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> +# HOLDERS 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.
> +
> +include $(top_srcdir)/src/gallium/Automake.inc
> +
> +AM_CPPFLAGS = \
> +	-I$(top_srcdir)/include \
> +	-I$(top_srcdir)/src/gallium/state_trackers/xa \
> +	-I$(top_srcdir)/src/gallium/winsys \
> +	$(GALLIUM_PIPE_LOADER_DEFINES) \
> +	-DPIPE_SEARCH_DIR=\"$(libdir)/gallium-pipe\"
> +
> +AM_CFLAGS = \
> +	$(GALLIUM_CFLAGS) \
> +	$(LIBUDEV_CFLAGS) \
> +	$(LIBDRM_CFLAGS)
> +
> +pkgconfigdir = $(libdir)/pkgconfig
> +pkgconfig_DATA = xatracker.pc
> +
> +lib_LTLIBRARIES = libxatracker.la
> +
> +libxatracker_la_SOURCES = xa.c
> +
> +libxatracker_la_LIBADD = \
> +	$(GALLIUM_PIPE_LOADER_LIBS) \
> +	$(top_builddir)/src/gallium/auxiliary/pipe-loader/libpipe_loader.la \
> +	$(top_builddir)/src/gallium/state_trackers/xa/libxatracker.la \
> +	$(top_builddir)/src/gallium/auxiliary/libgallium.la \
> +	$(LIBUDEV_LIBS) \
> +	$(LIBDRM_LIBS)
> +
> +libxatracker_la_LDFLAGS = \
> +	-no-undefined \
> +	-version-number $(XA_MAJOR):$(XA_MINOR):$(XA_TINY)
> +
> +# FIXME: this shouldn't be needed
> +if HAVE_MESA_LLVM
> +libxatracker_la_LINK = $(CXXLINK) $(libxatracker_la_LDFLAGS)
> +# Mention a dummy pure C++ file to trigger generation of the $(LINK) variable
> +nodist_EXTRA_libxatracker_la_SOURCES = dummy-cpp.cpp
> +
> +libxatracker_la_LIBADD += $(LLVM_LIBS)
> +libxatracker_la_LDFLAGS += $(LLVM_LDFLAGS)
> +else
> +libxatracker_la_LINK = $(CXXLINK) $(libxatracker_la_LDFLAGS)
> +# Mention a dummy pure C file to trigger generation of the $(LINK) variable
> +nodist_EXTRA_libxatracker_la_SOURCES = dummy-c.c
> +endif
> diff --git a/src/gallium/targets/xa/xa.c b/src/gallium/targets/xa/xa.c
> new file mode 100644
> index 0000000..e3ceaf6
> --- /dev/null
> +++ b/src/gallium/targets/xa/xa.c
> @@ -0,0 +1,49 @@
> +/*
> + * Copyright (C) 2014 Red Hat
> + *
> + * 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, sublicense,
> + * 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 above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS 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.
> + *
> + * Authors:
> + *    Rob Clark <robclark at freedesktop.org>
> + */
> +
> +#include "xa.h"
> +
> +struct pipe_loader_device *
> +xa_pipe_probe(int fd)
> +{
> +    struct pipe_loader_device *dev;
> +    if (pipe_loader_drm_probe_fd(&dev, fd))
> +	return dev;
> +    return NULL;
> +}
> +
> +void
> +xa_pipe_release(struct pipe_loader_device *dev)
> +{
> +    if (dev)
> +	pipe_loader_release(&dev, 1);
> +}
> +
> +struct pipe_screen *
> +xa_pipe_create_screen(struct pipe_loader_device *dev)
> +{
> +    return pipe_loader_create_screen(dev, PIPE_SEARCH_DIR);
> +}
> diff --git a/src/gallium/targets/xa/xa.h b/src/gallium/targets/xa/xa.h
> new file mode 100644
> index 0000000..9de6851
> --- /dev/null
> +++ b/src/gallium/targets/xa/xa.h
> @@ -0,0 +1,37 @@
> +/*
> + * Copyright (C) 2014 Red Hat
> + *
> + * 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, sublicense,
> + * 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 above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * 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 NONINFRINGEMENT.  IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS 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.
> + *
> + * Authors:
> + *    Rob Clark <robclark at freedesktop.org>
> + */
> +
> +#ifndef _XA_H_
> +#define _XA_H_
> +
> +#include "pipe/p_screen.h"
> +#include "pipe-loader/pipe_loader.h"
> +
> +struct pipe_loader_device *xa_pipe_probe(int fd);
> +void xa_pipe_release(struct pipe_loader_device *dev);
> +struct pipe_screen * xa_pipe_create_screen(struct pipe_loader_device *dev);
> +
> +#endif /* _XA_H_ */
> diff --git a/src/gallium/targets/xa/xatracker.pc.in b/src/gallium/targets/xa/xatracker.pc.in
> new file mode 100644
> index 0000000..c99d8d6
> --- /dev/null
> +++ b/src/gallium/targets/xa/xatracker.pc.in
> @@ -0,0 +1,9 @@
> +prefix=@prefix@
> +exec_prefix=${prefix}
> +libdir=@libdir@
> +includedir=@includedir@
> +
> +Name: xatracker
> +Description: Xorg Gallium3D acceleration library
> +Version: @XA_VERSION@
> +Libs: -L${libdir} -lxatracker
> 



More information about the dri-devel mailing list