Message ID | 1392057261-25942-3-git-send-email-robdclark@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 >
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 >> >
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 >>> >>
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 --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