On 10/02/14 18:34, Rob Clark wrote: > From: Rob Clark <robclark@xxxxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxx> > + */ > + > +#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@xxxxxxxxxxxxxxx> > + */ > + > +#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 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel