From: Rob Clark <robclark@xxxxxxxxxxxxxxx> This lets multiple gallium drivers use XA. 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 -- 1.8.5.3 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel