diff mbox

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

Message ID 1392057261-25942-3-git-send-email-robdclark@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Rob Clark Feb. 10, 2014, 6:34 p.m. UTC
From: Rob Clark <robclark@freedesktop.org>

This lets multiple gallium drivers use XA.

Signed-off-by: Rob Clark <robclark@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

Comments

Emil Velikov Feb. 11, 2014, 4:36 a.m. UTC | #1
On 10/02/14 18:34, Rob Clark wrote:
> From: Rob Clark <robclark@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@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@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@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
>
Rob Clark Feb. 11, 2014, 12:08 p.m. UTC | #2
On Mon, Feb 10, 2014 at 11:36 PM, Emil Velikov <emil.l.velikov@gmail.com> wrote:
> On 10/02/14 18:34, Rob Clark wrote:
>> From: Rob Clark <robclark@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.

yeah, the only reason for the wrappers in target/xa was to keep
-DPIPE_SEARCH_DIR=.. and GALLIUM_PIPE_LOADER_LIBS in targets vs
state_trackers.. if you don't care about that, then we can do it with
no src files as with opencl.

BR,
-R

> Sorry for the confusion
> -Emil
>
>> Signed-off-by: Rob Clark <robclark@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@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@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
>>
>
Emil Velikov Feb. 11, 2014, 12:38 p.m. UTC | #3
On 11/02/14 12:08, Rob Clark wrote:
> On Mon, Feb 10, 2014 at 11:36 PM, Emil Velikov <emil.l.velikov@gmail.com> wrote:
>> On 10/02/14 18:34, Rob Clark wrote:
>>> From: Rob Clark <robclark@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.
> 
> yeah, the only reason for the wrappers in target/xa was to keep
> -DPIPE_SEARCH_DIR=.. and GALLIUM_PIPE_LOADER_LIBS in targets vs
> state_trackers.. if you don't care about that, then we can do it with
> no src files as with opencl.
> 
In my humble understanding the relationship between state-trackers and
targets should be one way. Targets should expose the st functionality
rather than imposing new one back to the st.
One can build several variations of one st from the by flexing the aux
module to their liking.

Pardon for the preach
-Emil

> BR,
> -R
> 
>> Sorry for the confusion
>> -Emil
>>
>>> Signed-off-by: Rob Clark <robclark@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@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@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
>>>
>>
Rob Clark Feb. 11, 2014, 1:19 p.m. UTC | #4
On Tue, Feb 11, 2014 at 7:38 AM, Emil Velikov <emil.l.velikov@gmail.com> wrote:
> On 11/02/14 12:08, Rob Clark wrote:
>> On Mon, Feb 10, 2014 at 11:36 PM, Emil Velikov <emil.l.velikov@gmail.com> wrote:
>>> On 10/02/14 18:34, Rob Clark wrote:
>>>> From: Rob Clark <robclark@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.
>>
>> yeah, the only reason for the wrappers in target/xa was to keep
>> -DPIPE_SEARCH_DIR=.. and GALLIUM_PIPE_LOADER_LIBS in targets vs
>> state_trackers.. if you don't care about that, then we can do it with
>> no src files as with opencl.
>>
> In my humble understanding the relationship between state-trackers and
> targets should be one way. Targets should expose the st functionality
> rather than imposing new one back to the st.
> One can build several variations of one st from the by flexing the aux
> module to their liking.

hmm, well this is the case currently with this patch, if I understand
you properly.  A different target could provide it's own loader by
implementing it's own version of xa_pipe_probe(), etc.  I suppose if
someone wanted to, this could be used for static xatracker targets
(ie. libxatracer-vmwgfx.so).  Without any src files in the target, you
could not do this.  But perhaps in this case, where the xa.h lives is
not correct.

It could be that I am missing your point.. ;-)

BR,
-R

> Pardon for the preach
> -Emil
>
>> BR,
>> -R
>>
>>> Sorry for the confusion
>>> -Emil
diff mbox

Patch

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@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@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