[PATCHv2 2/4] st/xa: use pipe-loader to get screen
Emil Velikov
emil.l.velikov at gmail.com
Mon Feb 10 20:36:35 PST 2014
On 10/02/14 18:34, Rob Clark wrote:
> From: Rob Clark <robclark at freedesktop.org>
>
> This lets multiple gallium drivers use XA.
>
Hi Rob,
Seems like I should have explained a bit better.
There is no need to have sourcefiles in order to have a specific target.
All you needed was to link the state-tracker, mesagallium, gallium(aux
library), pipe-loader and a few winsys' to wrap up the library.
The opencl target + my vdpau/dri patches are a decent example of what I
had in mind.
Sorry for the confusion
-Emil
> Signed-off-by: Rob Clark <robclark at freedesktop.org>
> ---
> configure.ac | 9 ++--
> src/gallium/state_trackers/xa/Makefile.am | 1 +
> src/gallium/state_trackers/xa/xa_priv.h | 1 +
> src/gallium/state_trackers/xa/xa_tracker.c | 9 +++-
> src/gallium/targets/Makefile.am | 8 ++--
> src/gallium/targets/xa-vmwgfx/Makefile.am | 61 ------------------------
> src/gallium/targets/xa-vmwgfx/vmw_target.c | 26 ----------
> src/gallium/targets/xa-vmwgfx/xatracker.pc.in | 9 ----
> src/gallium/targets/xa/Makefile.am | 68 +++++++++++++++++++++++++++
> src/gallium/targets/xa/xa.c | 49 +++++++++++++++++++
> src/gallium/targets/xa/xa.h | 37 +++++++++++++++
> src/gallium/targets/xa/xatracker.pc.in | 9 ++++
> 12 files changed, 182 insertions(+), 105 deletions(-)
> delete mode 100644 src/gallium/targets/xa-vmwgfx/Makefile.am
> delete mode 100644 src/gallium/targets/xa-vmwgfx/vmw_target.c
> delete mode 100644 src/gallium/targets/xa-vmwgfx/xatracker.pc.in
> create mode 100644 src/gallium/targets/xa/Makefile.am
> create mode 100644 src/gallium/targets/xa/xa.c
> create mode 100644 src/gallium/targets/xa/xa.h
> create mode 100644 src/gallium/targets/xa/xatracker.pc.in
>
> diff --git a/configure.ac b/configure.ac
> index cba6301..29ca954 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1270,6 +1270,7 @@ dnl XA configuration
> dnl
> if test "x$enable_xa" = xyes; then
> GALLIUM_STATE_TRACKERS_DIRS="xa $GALLIUM_STATE_TRACKERS_DIRS"
> + enable_gallium_loader=yes
> fi
> AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes)
>
> @@ -1743,7 +1744,7 @@ if test "x$with_gallium_drivers" != x; then
> xsvga)
> HAVE_GALLIUM_SVGA=yes
> GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga softpipe"
> - gallium_check_st "svga/drm" "dri-vmwgfx" "xa-vmwgfx"
> + gallium_check_st "svga/drm" "dri-vmwgfx" ""
> ;;
> xi915)
> HAVE_GALLIUM_I915=yes
> @@ -1962,7 +1963,7 @@ AC_SUBST([XVMC_MAJOR], 1)
> AC_SUBST([XVMC_MINOR], 0)
>
> AC_SUBST([XA_MAJOR], 2)
> -AC_SUBST([XA_MINOR], 1)
> +AC_SUBST([XA_MINOR], 2)
> AC_SUBST([XA_TINY], 0)
> AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
>
> @@ -2035,6 +2036,8 @@ AC_CONFIG_FILES([Makefile
> src/gallium/targets/egl-static/Makefile
> src/gallium/targets/gbm/Makefile
> src/gallium/targets/opencl/Makefile
> + src/gallium/targets/xa/Makefile
> + src/gallium/targets/xa/xatracker.pc
> src/gallium/targets/osmesa/Makefile
> src/gallium/targets/osmesa/osmesa.pc
> src/gallium/targets/pipe-loader/Makefile
> @@ -2046,8 +2049,6 @@ AC_CONFIG_FILES([Makefile
> src/gallium/targets/r600/xvmc/Makefile
> src/gallium/targets/libgl-xlib/Makefile
> src/gallium/targets/vdpau-nouveau/Makefile
> - src/gallium/targets/xa-vmwgfx/Makefile
> - src/gallium/targets/xa-vmwgfx/xatracker.pc
> src/gallium/targets/xvmc-nouveau/Makefile
> src/gallium/tests/trivial/Makefile
> src/gallium/tests/unit/Makefile
> diff --git a/src/gallium/state_trackers/xa/Makefile.am b/src/gallium/state_trackers/xa/Makefile.am
> index 7d0b366..af79ccd 100644
> --- a/src/gallium/state_trackers/xa/Makefile.am
> +++ b/src/gallium/state_trackers/xa/Makefile.am
> @@ -29,6 +29,7 @@ AM_CFLAGS = \
> $(VISIBILITY_CFLAGS)
>
> AM_CPPFLAGS = \
> + -I$(top_srcdir)/src/gallium/targets/xa \
> -I$(top_srcdir)/src/gallium/ \
> -I$(top_srcdir)/src/gallium/winsys \
> -I$(top_srcdir)/src/gallium/drivers
> diff --git a/src/gallium/state_trackers/xa/xa_priv.h b/src/gallium/state_trackers/xa/xa_priv.h
> index ee182e7..b99c214 100644
> --- a/src/gallium/state_trackers/xa/xa_priv.h
> +++ b/src/gallium/state_trackers/xa/xa_priv.h
> @@ -74,6 +74,7 @@ struct xa_tracker {
> unsigned int format_map[XA_LAST_SURFACE_TYPE][2];
> int d_depth_bits_last;
> int ds_depth_bits_last;
> + struct pipe_loader_device *dev;
> struct pipe_screen *screen;
> struct xa_context *default_ctx;
> };
> diff --git a/src/gallium/state_trackers/xa/xa_tracker.c b/src/gallium/state_trackers/xa/xa_tracker.c
> index cda6501..6943a29 100644
> --- a/src/gallium/state_trackers/xa/xa_tracker.c
> +++ b/src/gallium/state_trackers/xa/xa_tracker.c
> @@ -28,8 +28,10 @@
>
> #include "xa_tracker.h"
> #include "xa_priv.h"
> +#include "xa.h"
> #include "pipe/p_state.h"
> #include "pipe/p_format.h"
> +#include "pipe-loader/pipe_loader.h"
> #include "state_tracker/drm_driver.h"
> #include "util/u_inlines.h"
>
> @@ -143,7 +145,9 @@ xa_tracker_create(int drm_fd)
> if (!xa)
> return NULL;
>
> - xa->screen = driver_descriptor.create_screen(drm_fd);
> + xa->dev = xa_pipe_probe(drm_fd);
> + if (xa->dev)
> + xa->screen = xa_pipe_create_screen(xa->dev);
> if (!xa->screen)
> goto out_no_screen;
>
> @@ -190,6 +194,8 @@ xa_tracker_create(int drm_fd)
> out_no_pipe:
> xa->screen->destroy(xa->screen);
> out_no_screen:
> + if (xa->dev)
> + xa_pipe_release(xa->dev);
> free(xa);
> return NULL;
> }
> @@ -200,6 +206,7 @@ xa_tracker_destroy(struct xa_tracker *xa)
> free(xa->supported_formats);
> xa_context_destroy(xa->default_ctx);
> xa->screen->destroy(xa->screen);
> + xa_pipe_release(xa->dev);
> free(xa);
> }
>
> diff --git a/src/gallium/targets/Makefile.am b/src/gallium/targets/Makefile.am
> index e356020..a7c70f4 100644
> --- a/src/gallium/targets/Makefile.am
> +++ b/src/gallium/targets/Makefile.am
> @@ -34,6 +34,10 @@ if HAVE_GALLIUM_GBM
> SUBDIRS += gbm
> endif
>
> +if HAVE_ST_XA
> +SUBDIRS += xa
> +endif
> +
> if HAVE_CLOVER
> SUBDIRS += opencl
> endif
> @@ -42,10 +46,6 @@ if HAVE_GALLIUM_SVGA
> if HAVE_DRI
> SUBDIRS += dri-vmwgfx
> endif
> -
> -if HAVE_ST_XA
> -SUBDIRS += xa-vmwgfx
> -endif
> endif
>
> if HAVE_GALLIUM_FREEDRENO
> diff --git a/src/gallium/targets/xa-vmwgfx/Makefile.am b/src/gallium/targets/xa-vmwgfx/Makefile.am
> deleted file mode 100644
> index 6fe0510..0000000
> --- a/src/gallium/targets/xa-vmwgfx/Makefile.am
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -# Copyright © 2012 Intel Corporation
> -#
> -# Permission is hereby granted, free of charge, to any person obtaining a
> -# copy of this software and associated documentation files (the "Software"),
> -# to deal in the Software without restriction, including without limitation
> -# the rights to use, copy, modify, merge, publish, distribute, sublicense,
> -# and/or sell copies of the Software, and to permit persons to whom the
> -# Software is furnished to do so, subject to the following conditions:
> -#
> -# The above copyright notice and this permission notice (including the next
> -# paragraph) shall be included in all copies or substantial portions of the
> -# Software.
> -#
> -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> -# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> -# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> -# DEALINGS IN THE SOFTWARE.
> -
> -include $(top_srcdir)/src/gallium/Automake.inc
> -
> -AM_CFLAGS = \
> - -Wall -pedantic \
> - $(GALLIUM_CFLAGS) \
> - $(XORG_CFLAGS)
> -AM_CPPFLAGS = \
> - -I$(top_srcdir)/src/gallium/drivers \
> - -I$(top_srcdir)/src/gallium/winsys
> -
> -pkgconfigdir = $(libdir)/pkgconfig
> -pkgconfig_DATA = xatracker.pc
> -
> -lib_LTLIBRARIES = libxatracker.la
> -
> -libxatracker_la_SOURCES = vmw_target.c
> -
> -libxatracker_la_LDFLAGS = -version-number $(XA_MAJOR):$(XA_MINOR):$(XA_TINY)
> -
> -libxatracker_la_LIBADD = \
> - $(top_builddir)/src/gallium/auxiliary/libgallium.la \
> - $(top_builddir)/src/gallium/state_trackers/xa/libxatracker.la \
> - $(top_builddir)/src/gallium/winsys/svga/drm/libsvgadrm.la \
> - $(top_builddir)/src/gallium/drivers/svga/libsvga.la \
> - $(top_builddir)/src/gallium/drivers/trace/libtrace.la \
> - $(top_builddir)/src/gallium/drivers/rbug/librbug.la
> -
> -nodist_EXTRA_libxatracker_la_SOURCES = dummy.cpp
> -
> -if HAVE_MESA_LLVM
> -libxatracker_la_LDFLAGS += $(LLVM_LDFLAGS)
> -libxatracker_la_LIBADD += $(LLVM_LIBS)
> -endif
> -
> -# Provide compatibility with scripts for the old Mesa build system for
> -# a while by putting a link to the driver into /lib of the build tree.
> -all-local: libxatracker.la
> - $(MKDIR_P) $(top_builddir)/$(LIB_DIR)/gallium
> - ln -f .libs/libxatracker.so* $(top_builddir)/$(LIB_DIR)/gallium/
> diff --git a/src/gallium/targets/xa-vmwgfx/vmw_target.c b/src/gallium/targets/xa-vmwgfx/vmw_target.c
> deleted file mode 100644
> index 1087801..0000000
> --- a/src/gallium/targets/xa-vmwgfx/vmw_target.c
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -
> -#include "target-helpers/inline_debug_helper.h"
> -#include "state_tracker/drm_driver.h"
> -#include "svga/drm/svga_drm_public.h"
> -#include "svga/svga_public.h"
> -
> -static struct pipe_screen *
> -create_screen(int fd)
> -{
> - struct svga_winsys_screen *sws;
> - struct pipe_screen *screen;
> -
> - sws = svga_drm_winsys_screen_create(fd);
> - if (!sws)
> - return NULL;
> -
> - screen = svga_screen_create(sws);
> - if (!screen)
> - return NULL;
> -
> - screen = debug_screen_wrap(screen);
> -
> - return screen;
> -}
> -
> -DRM_DRIVER_DESCRIPTOR("vmwgfx", "vmwgfx", create_screen, NULL)
> diff --git a/src/gallium/targets/xa-vmwgfx/xatracker.pc.in b/src/gallium/targets/xa-vmwgfx/xatracker.pc.in
> deleted file mode 100644
> index c99d8d6..0000000
> --- a/src/gallium/targets/xa-vmwgfx/xatracker.pc.in
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -prefix=@prefix@
> -exec_prefix=${prefix}
> -libdir=@libdir@
> -includedir=@includedir@
> -
> -Name: xatracker
> -Description: Xorg Gallium3D acceleration library
> -Version: @XA_VERSION@
> -Libs: -L${libdir} -lxatracker
> diff --git a/src/gallium/targets/xa/Makefile.am b/src/gallium/targets/xa/Makefile.am
> new file mode 100644
> index 0000000..dddb05c
> --- /dev/null
> +++ b/src/gallium/targets/xa/Makefile.am
> @@ -0,0 +1,68 @@
> +# Copyright © 2012 Intel Corporation
> +#
> +# Permission is hereby granted, free of charge, to any person obtaining a
> +# copy of this software and associated documentation files (the "Software"),
> +# to deal in the Software without restriction, including without limitation
> +# the rights to use, copy, modify, merge, publish, distribute, sublicense,
> +# and/or sell copies of the Software, and to permit persons to whom the
> +# Software is furnished to do so, subject to the following conditions:
> +#
> +# The above copyright notice and this permission notice (including the next
> +# paragraph) shall be included in all copies or substantial portions of the
> +# Software.
> +#
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> +# DEALINGS IN THE SOFTWARE.
> +
> +include $(top_srcdir)/src/gallium/Automake.inc
> +
> +AM_CPPFLAGS = \
> + -I$(top_srcdir)/include \
> + -I$(top_srcdir)/src/gallium/state_trackers/xa \
> + -I$(top_srcdir)/src/gallium/winsys \
> + $(GALLIUM_PIPE_LOADER_DEFINES) \
> + -DPIPE_SEARCH_DIR=\"$(libdir)/gallium-pipe\"
> +
> +AM_CFLAGS = \
> + $(GALLIUM_CFLAGS) \
> + $(LIBUDEV_CFLAGS) \
> + $(LIBDRM_CFLAGS)
> +
> +pkgconfigdir = $(libdir)/pkgconfig
> +pkgconfig_DATA = xatracker.pc
> +
> +lib_LTLIBRARIES = libxatracker.la
> +
> +libxatracker_la_SOURCES = xa.c
> +
> +libxatracker_la_LIBADD = \
> + $(GALLIUM_PIPE_LOADER_LIBS) \
> + $(top_builddir)/src/gallium/auxiliary/pipe-loader/libpipe_loader.la \
> + $(top_builddir)/src/gallium/state_trackers/xa/libxatracker.la \
> + $(top_builddir)/src/gallium/auxiliary/libgallium.la \
> + $(LIBUDEV_LIBS) \
> + $(LIBDRM_LIBS)
> +
> +libxatracker_la_LDFLAGS = \
> + -no-undefined \
> + -version-number $(XA_MAJOR):$(XA_MINOR):$(XA_TINY)
> +
> +# FIXME: this shouldn't be needed
> +if HAVE_MESA_LLVM
> +libxatracker_la_LINK = $(CXXLINK) $(libxatracker_la_LDFLAGS)
> +# Mention a dummy pure C++ file to trigger generation of the $(LINK) variable
> +nodist_EXTRA_libxatracker_la_SOURCES = dummy-cpp.cpp
> +
> +libxatracker_la_LIBADD += $(LLVM_LIBS)
> +libxatracker_la_LDFLAGS += $(LLVM_LDFLAGS)
> +else
> +libxatracker_la_LINK = $(CXXLINK) $(libxatracker_la_LDFLAGS)
> +# Mention a dummy pure C file to trigger generation of the $(LINK) variable
> +nodist_EXTRA_libxatracker_la_SOURCES = dummy-c.c
> +endif
> diff --git a/src/gallium/targets/xa/xa.c b/src/gallium/targets/xa/xa.c
> new file mode 100644
> index 0000000..e3ceaf6
> --- /dev/null
> +++ b/src/gallium/targets/xa/xa.c
> @@ -0,0 +1,49 @@
> +/*
> + * Copyright (C) 2014 Red Hat
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + * Authors:
> + * Rob Clark <robclark at freedesktop.org>
> + */
> +
> +#include "xa.h"
> +
> +struct pipe_loader_device *
> +xa_pipe_probe(int fd)
> +{
> + struct pipe_loader_device *dev;
> + if (pipe_loader_drm_probe_fd(&dev, fd))
> + return dev;
> + return NULL;
> +}
> +
> +void
> +xa_pipe_release(struct pipe_loader_device *dev)
> +{
> + if (dev)
> + pipe_loader_release(&dev, 1);
> +}
> +
> +struct pipe_screen *
> +xa_pipe_create_screen(struct pipe_loader_device *dev)
> +{
> + return pipe_loader_create_screen(dev, PIPE_SEARCH_DIR);
> +}
> diff --git a/src/gallium/targets/xa/xa.h b/src/gallium/targets/xa/xa.h
> new file mode 100644
> index 0000000..9de6851
> --- /dev/null
> +++ b/src/gallium/targets/xa/xa.h
> @@ -0,0 +1,37 @@
> +/*
> + * Copyright (C) 2014 Red Hat
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + * Authors:
> + * Rob Clark <robclark at freedesktop.org>
> + */
> +
> +#ifndef _XA_H_
> +#define _XA_H_
> +
> +#include "pipe/p_screen.h"
> +#include "pipe-loader/pipe_loader.h"
> +
> +struct pipe_loader_device *xa_pipe_probe(int fd);
> +void xa_pipe_release(struct pipe_loader_device *dev);
> +struct pipe_screen * xa_pipe_create_screen(struct pipe_loader_device *dev);
> +
> +#endif /* _XA_H_ */
> diff --git a/src/gallium/targets/xa/xatracker.pc.in b/src/gallium/targets/xa/xatracker.pc.in
> new file mode 100644
> index 0000000..c99d8d6
> --- /dev/null
> +++ b/src/gallium/targets/xa/xatracker.pc.in
> @@ -0,0 +1,9 @@
> +prefix=@prefix@
> +exec_prefix=${prefix}
> +libdir=@libdir@
> +includedir=@includedir@
> +
> +Name: xatracker
> +Description: Xorg Gallium3D acceleration library
> +Version: @XA_VERSION@
> +Libs: -L${libdir} -lxatracker
>
More information about the dri-devel
mailing list