diff options
author | Dominik Sliwa <dominik.sliwa@toradex.com> | 2017-12-05 14:09:23 +0000 |
---|---|---|
committer | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2017-12-20 17:16:04 +0100 |
commit | f7ef1a83b19246e7b868f5ce3196928657a05a9f (patch) | |
tree | 485492d5948739d5fbcfc4a485e68adad1e196c6 /recipes-graphics | |
parent | 23b16552dc23ce47482dad3b7cedbf57a6d6493d (diff) |
mesa: tk1 mainline: forward port patches to 17.1.7
Signed-off-by: Dominik Sliwa <dominik.sliwa@toradex.com>
Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Diffstat (limited to 'recipes-graphics')
-rw-r--r-- | recipes-graphics/mesa/mesa/0001-gallium-add-tegra-support.patch (renamed from recipes-graphics/mesa/mesa/0004-gallium-add-tegra-support.patch) | 258 | ||||
-rw-r--r-- | recipes-graphics/mesa/mesa/0002-make-DRI-work-under-X.patch (renamed from recipes-graphics/mesa/mesa/0006-HACK-make-DRI-work-under-X.patch) | 12 | ||||
-rw-r--r-- | recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch | 106 | ||||
-rw-r--r-- | recipes-graphics/mesa/mesa/0004-mesa-17.1.7-compilation-fixes.patch | 26 | ||||
-rw-r--r-- | recipes-graphics/mesa/mesa/0005-tegra-open-card1-instead-of-renderD128.patch | 29 | ||||
-rw-r--r-- | recipes-graphics/mesa/mesa/0008-remove-dependency-on-libdrm_tegra.patch | 51 | ||||
-rw-r--r-- | recipes-graphics/mesa/mesa_%.bbappend | 8 |
7 files changed, 298 insertions, 192 deletions
diff --git a/recipes-graphics/mesa/mesa/0004-gallium-add-tegra-support.patch b/recipes-graphics/mesa/mesa/0001-gallium-add-tegra-support.patch index 022c7f0..f47e2c5 100644 --- a/recipes-graphics/mesa/mesa/0004-gallium-add-tegra-support.patch +++ b/recipes-graphics/mesa/mesa/0001-gallium-add-tegra-support.patch @@ -1,4 +1,4 @@ -From b1f2a37552e3ff244e3c79b609c66a63c109915a Mon Sep 17 00:00:00 2001 +From 2ec5a4bc8eec0908275f3a3259376f1ad8efaaa6 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner <christian.gmeiner@gmail.com> Date: Sun, 21 Aug 2016 22:10:12 +0200 Subject: [PATCH 1/4] gallium: add tegra support @@ -9,29 +9,33 @@ Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> forward port to mesa 17.0.2 Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> + +forward port to mesa 17.1.7 +Signed-off-by: Dominik Sliwa <dominik.sliwa@toradex.com> --- - configure.ac | 13 ++++++- - src/gallium/Makefile.am | 4 +++ - .../auxiliary/pipe-loader/pipe_loader_drm.c | 6 ++++ - src/gallium/auxiliary/target-helpers/drm_helper.h | 23 ++++++++++++ - .../auxiliary/target-helpers/drm_helper_public.h | 3 ++ - src/gallium/drivers/nouveau/nouveau_buffer.c | 3 ++ - src/gallium/drivers/nouveau/nouveau_buffer.h | 2 ++ - src/gallium/drivers/nouveau/nouveau_screen.h | 3 ++ - src/gallium/drivers/nouveau/nv50/nv50_miptree.c | 3 ++ - src/gallium/drivers/nouveau/nvc0/nvc0_resource.c | 18 ++++++++-- - src/gallium/drivers/tegra/Automake.inc | 9 +++++ - src/gallium/drivers/tegra/Makefile.am | 9 +++++ - src/gallium/targets/dri/Makefile.am | 2 ++ - src/gallium/targets/dri/target.c | 11 ++++++ - .../winsys/nouveau/drm/nouveau_drm_public.h | 2 ++ - .../winsys/nouveau/drm/nouveau_drm_winsys.c | 10 ++++++ - src/gallium/winsys/tegra/drm/Android.mk | 33 +++++++++++++++++ - src/gallium/winsys/tegra/drm/Makefile.am | 33 +++++++++++++++++ - src/gallium/winsys/tegra/drm/Makefile.sources | 3 ++ - src/gallium/winsys/tegra/drm/tegra_drm_public.h | 8 +++++ - src/gallium/winsys/tegra/drm/tegra_drm_winsys.c | 41 ++++++++++++++++++++++ - 21 files changed, 236 insertions(+), 3 deletions(-) + configure.ac | 13 +++- + src/gallium/Makefile.am | 4 ++ + .../auxiliary/pipe-loader/pipe_loader_drm.c | 5 ++ + src/gallium/auxiliary/target-helpers/drm_helper.h | 23 +++++++ + .../auxiliary/target-helpers/drm_helper_public.h | 3 + + src/gallium/drivers/nouveau/nouveau_buffer.c | 4 ++ + src/gallium/drivers/nouveau/nouveau_buffer.h | 2 + + src/gallium/drivers/nouveau/nouveau_screen.h | 3 + + src/gallium/drivers/nouveau/nv50/nv50_miptree.c | 3 + + src/gallium/drivers/nouveau/nvc0/nvc0_resource.c | 18 +++++- + src/gallium/drivers/tegra/Automake.inc | 9 +++ + src/gallium/drivers/tegra/Makefile.am | 10 +++ + src/gallium/targets/dri/Makefile.am | 2 + + src/gallium/targets/dri/target.c | 4 ++ + .../winsys/nouveau/drm/nouveau_drm_public.h | 2 + + .../winsys/nouveau/drm/nouveau_drm_winsys.c | 10 +++ + src/gallium/winsys/tegra/drm/Android.mk | 33 ++++++++++ + src/gallium/winsys/tegra/drm/Makefile.am | 34 ++++++++++ + src/gallium/winsys/tegra/drm/Makefile.sources | 3 + + src/gallium/winsys/tegra/drm/tegra_drm_public.h | 8 +++ + src/gallium/winsys/tegra/drm/tegra_drm_winsys.c | 74 ++++++++++++++++++++++ + src/mesa/drivers/dri/nouveau/nouveau_screen.h | 1 + + 21 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 src/gallium/drivers/tegra/Automake.inc create mode 100644 src/gallium/drivers/tegra/Makefile.am create mode 100644 src/gallium/winsys/tegra/drm/Android.mk @@ -41,41 +45,41 @@ Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> create mode 100644 src/gallium/winsys/tegra/drm/tegra_drm_winsys.c diff --git a/configure.ac b/configure.ac -index ac110e8..f7f94ee 100644 +index fd346c8..790388b 100644 --- a/configure.ac +++ b/configure.ac -@@ -74,6 +74,7 @@ LIBDRM_INTEL_REQUIRED=2.4.61 +@@ -79,6 +79,7 @@ LIBDRM_INTEL_REQUIRED=2.4.75 LIBDRM_NVVIEUX_REQUIRED=2.4.66 LIBDRM_NOUVEAU_REQUIRED=2.4.66 LIBDRM_FREEDRENO_REQUIRED=2.4.74 -+LIBDRM_TEGRA_REQUIRED=2.4.68 ++LIBDRM_TEGRA_REQUIRED=2.4.66 LIBDRM_VC4_REQUIRED=2.4.69 - LIBDRM_ETNAVIV_REQUIRED=2.4.74 - DRI2PROTO_REQUIRED=2.6 -@@ -1228,7 +1229,7 @@ GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast" + LIBDRM_ETNAVIV_REQUIRED=2.4.80 + +@@ -1245,7 +1246,7 @@ GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast" AC_ARG_WITH([gallium-drivers], [AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@], [comma delimited Gallium drivers list, e.g. -- "i915,ilo,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,etnaviv,imx" -+ "i915,ilo,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,vc4,virgl,etnaviv,imx,tegra" +- "i915,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,swr,vc4,virgl,etnaviv,imx" ++ "i915,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,swr,vc4,virgl,etnaviv,imx,tegra" @<:@default=r300,r600,svga,swrast@:>@])], [with_gallium_drivers="$withval"], [with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"]) -@@ -2391,6 +2392,13 @@ if test -n "$with_gallium_drivers"; then - require_libdrm "virgl" - require_basic_egl "virgl" +@@ -2518,6 +2519,13 @@ if test -n "$with_gallium_drivers"; then + require_basic_egl "virgl" + fi ;; + xtegra) -+ PKG_CHECK_MODULES([TEGRA], [libdrm_tegra >= $LIBDRM_TEGRA_REQUIRED]) ++# PKG_CHECK_MODULES([TEGRA], [libdrm_tegra >= $LIBDRM_TEGRA_REQUIRED]) + HAVE_GALLIUM_TEGRA=yes -+ gallium_require_drm "tegra" -+ gallium_require_drm_loader -+ require_egl_drm "tegra" ++ require_libdrm "tegra" ++# gallium_require_drm_loader ++# require_egl_drm "tegra" + ;; *) AC_MSG_ERROR([Unknown Gallium driver: $driver]) ;; -@@ -2491,6 +2499,7 @@ AM_CONDITIONAL(HAVE_GALLIUM_SWRAST, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes -o \ +@@ -2621,6 +2629,7 @@ AM_CONDITIONAL(HAVE_GALLIUM_SWRAST, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes -o \ "x$HAVE_GALLIUM_SWR" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_VC4, test "x$HAVE_GALLIUM_VC4" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_VIRGL, test "x$HAVE_GALLIUM_VIRGL" = xyes) @@ -83,7 +87,7 @@ index ac110e8..f7f94ee 100644 AM_CONDITIONAL(HAVE_GALLIUM_STATIC_TARGETS, test "x$enable_shared_pipe_drivers" = xno) -@@ -2639,6 +2648,7 @@ AC_CONFIG_FILES([Makefile +@@ -2766,6 +2775,7 @@ AC_CONFIG_FILES([Makefile src/gallium/drivers/imx/Makefile src/gallium/drivers/vc4/Makefile src/gallium/drivers/virgl/Makefile @@ -91,7 +95,7 @@ index ac110e8..f7f94ee 100644 src/gallium/state_trackers/clover/Makefile src/gallium/state_trackers/dri/Makefile src/gallium/state_trackers/glx/xlib/Makefile -@@ -2683,6 +2693,7 @@ AC_CONFIG_FILES([Makefile +@@ -2809,6 +2819,7 @@ AC_CONFIG_FILES([Makefile src/gallium/winsys/vc4/drm/Makefile src/gallium/winsys/virgl/drm/Makefile src/gallium/winsys/virgl/vtest/Makefile @@ -100,10 +104,10 @@ index ac110e8..f7f94ee 100644 src/gbm/main/gbm.pc src/glx/Makefile diff --git a/src/gallium/Makefile.am b/src/gallium/Makefile.am -index f910f31..0f887d2 100644 +index 38da63b..1df0d3c 100644 --- a/src/gallium/Makefile.am +++ b/src/gallium/Makefile.am -@@ -100,6 +100,10 @@ if HAVE_GALLIUM_VIRGL +@@ -95,6 +95,10 @@ if HAVE_GALLIUM_VIRGL SUBDIRS += drivers/virgl winsys/virgl/drm winsys/virgl/vtest endif @@ -115,10 +119,10 @@ index f910f31..0f887d2 100644 SUBDIRS += winsys/sw/null diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c -index 6c89fe5..a08d00d 100644 +index a4f5cfc..3cad124 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c -@@ -155,6 +155,11 @@ static const struct drm_driver_descriptor driver_descriptors[] = { +@@ -139,6 +139,11 @@ static const struct drm_driver_descriptor driver_descriptors[] = { .configuration = configuration_query, }, { @@ -131,10 +135,10 @@ index 6c89fe5..a08d00d 100644 .create_screen = pipe_etna_create_screen, .configuration = configuration_query, diff --git a/src/gallium/auxiliary/target-helpers/drm_helper.h b/src/gallium/auxiliary/target-helpers/drm_helper.h -index f847b17..ae641b9 100644 +index 3159df6..99b6cb5 100644 --- a/src/gallium/auxiliary/target-helpers/drm_helper.h +++ b/src/gallium/auxiliary/target-helpers/drm_helper.h -@@ -313,4 +313,27 @@ pipe_imx_drm_create_screen(int fd) +@@ -284,4 +284,27 @@ pipe_imx_drm_create_screen(int fd) #endif @@ -175,15 +179,23 @@ index bc12b21..5525bdf 100644 + #endif /* _DRM_HELPER_PUBLIC_H */ diff --git a/src/gallium/drivers/nouveau/nouveau_buffer.c b/src/gallium/drivers/nouveau/nouveau_buffer.c -index 17052b2..95dcaad 100644 +index 2c60441..b45cc7b 100644 --- a/src/gallium/drivers/nouveau/nouveau_buffer.c +++ b/src/gallium/drivers/nouveau/nouveau_buffer.c -@@ -128,6 +128,9 @@ nouveau_buffer_destroy(struct pipe_screen *pscreen, +@@ -117,6 +117,7 @@ nouveau_buffer_destroy(struct pipe_screen *pscreen, + struct pipe_resource *presource) + { + struct nv04_resource *res = nv04_resource(presource); ++ struct nouveau_screen *scr = nouveau_screen(pscreen); + + nouveau_buffer_release_gpu_storage(res); + +@@ -128,6 +129,9 @@ nouveau_buffer_destroy(struct pipe_screen *pscreen, util_range_destroy(&res->valid_buffer_range); + if (res->scanout) -+ renderonly_scanout_destroy(res->scanout); ++ renderonly_scanout_destroy(res->scanout, scr->ro); + FREE(res); @@ -202,7 +214,7 @@ index 3a33fae..c01fda4 100644 void diff --git a/src/gallium/drivers/nouveau/nouveau_screen.h b/src/gallium/drivers/nouveau/nouveau_screen.h -index 28c4760..e0ec614 100644 +index e4fbae9..b326c52 100644 --- a/src/gallium/drivers/nouveau/nouveau_screen.h +++ b/src/gallium/drivers/nouveau/nouveau_screen.h @@ -2,6 +2,7 @@ @@ -210,12 +222,12 @@ index 28c4760..e0ec614 100644 #include "pipe/p_screen.h" +#include "renderonly/renderonly.h" + #include "util/disk_cache.h" #include "util/u_memory.h" - #ifdef DEBUG -@@ -59,6 +60,8 @@ struct nouveau_screen { - unsigned profiles_present; - } firmware_info; +@@ -62,6 +63,8 @@ struct nouveau_screen { + + struct disk_cache *disk_shader_cache; + struct renderonly *ro; + @@ -261,7 +273,7 @@ index 9bafe3d..adfd61c 100644 + if (pres) { + struct nv04_resource *res = nv04_resource(pres); + -+ if (templ->bind & PIPE_BIND_SCANOUT) ++ if (templ->bind & PIPE_BIND_SCANOUT && scr->ro) + res->scanout = renderonly_scanout_for_resource(pres, scr->ro); + } + @@ -289,21 +301,22 @@ new file mode 100644 index 0000000..30f4689 --- /dev/null +++ b/src/gallium/drivers/tegra/Makefile.am -@@ -0,0 +1,9 @@ +@@ -0,0 +1,10 @@ +include $(top_srcdir)/src/gallium/Automake.inc + +AM_CPPFLAGS = \ + $(GALLIUM_CFLAGS) \ -+ $(TEGRA_CFLAGS) ++ $(TEGRA_CFLAGS) \ ++ $(LIBDRM_CFLAGS) + +noinst_LTLIBRARIES = libtegra.la + +libtegra_la_SOURCES = diff --git a/src/gallium/targets/dri/Makefile.am b/src/gallium/targets/dri/Makefile.am -index bca747f..4236da1 100644 +index 8363406..4bfcf3e 100644 --- a/src/gallium/targets/dri/Makefile.am +++ b/src/gallium/targets/dri/Makefile.am -@@ -94,6 +94,8 @@ include $(top_srcdir)/src/gallium/drivers/virgl/Automake.inc +@@ -92,6 +92,8 @@ include $(top_srcdir)/src/gallium/drivers/virgl/Automake.inc include $(top_srcdir)/src/gallium/drivers/etnaviv/Automake.inc include $(top_srcdir)/src/gallium/drivers/imx/Automake.inc @@ -313,23 +326,16 @@ index bca747f..4236da1 100644 include $(top_srcdir)/src/gallium/drivers/llvmpipe/Automake.inc include $(top_srcdir)/src/gallium/drivers/swr/Automake.inc diff --git a/src/gallium/targets/dri/target.c b/src/gallium/targets/dri/target.c -index 441a27f..5e4db62 100644 +index d24a61d..600557b 100644 --- a/src/gallium/targets/dri/target.c +++ b/src/gallium/targets/dri/target.c -@@ -181,3 +181,14 @@ PUBLIC const __DRIextension **__driDriverGetExtensions_etnaviv(void) - return galliumdrm_driver_extensions; - } +@@ -79,3 +79,7 @@ DEFINE_LOADER_DRM_ENTRYPOINT(vc4) + DEFINE_LOADER_DRM_ENTRYPOINT(imx_drm) + DEFINE_LOADER_DRM_ENTRYPOINT(etnaviv) #endif + +#if defined(GALLIUM_TEGRA) -+ -+const __DRIextension **__driDriverGetExtensions_tegra(void); -+ -+PUBLIC const __DRIextension **__driDriverGetExtensions_tegra(void) -+{ -+ globalDriverAPI = &galliumdrm_driver_api; -+ return galliumdrm_driver_extensions; -+} ++DEFINE_LOADER_DRM_ENTRYPOINT(tegra) +#endif diff --git a/src/gallium/winsys/nouveau/drm/nouveau_drm_public.h b/src/gallium/winsys/nouveau/drm/nouveau_drm_public.h index 67b7c44..455ea77 100644 @@ -346,11 +352,11 @@ index 67b7c44..455ea77 100644 #endif diff --git a/src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c b/src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c -index cc9dfa7..acbd3fe 100644 +index 4ca2d35..8a457d5 100644 --- a/src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c +++ b/src/gallium/winsys/nouveau/drm/nouveau_drm_winsys.c @@ -157,3 +157,13 @@ err: - pipe_mutex_unlock(nouveau_screen_mutex); + mtx_unlock(&nouveau_screen_mutex); return NULL; } + @@ -359,7 +365,7 @@ index cc9dfa7..acbd3fe 100644 + struct nouveau_screen *screen = nouveau_drm_screen_create(fd); + + if (screen) -+ screen->ro = ro; ++ screen->ro = renderonly_dup(ro); + + return screen; +} @@ -407,7 +413,7 @@ new file mode 100644 index 0000000..39068fe --- /dev/null +++ b/src/gallium/winsys/tegra/drm/Makefile.am -@@ -0,0 +1,33 @@ +@@ -0,0 +1,34 @@ +# Copyright © 2012 Intel Corporation +# +# Permission is hereby granted, free of charge, to any person obtaining a @@ -436,7 +442,8 @@ index 0000000..39068fe +AM_CFLAGS = \ + -I$(top_srcdir)/src/gallium/drivers \ + $(GALLIUM_WINSYS_CFLAGS) \ -+ $(TEGRA_CFLAGS) ++ $(TEGRA_CFLAGS) \ ++ $(LIBDRM_CFLAGS) + +noinst_LTLIBRARIES = libtegradrm.la + @@ -466,51 +473,98 @@ index 0000000..813268f +#endif /* __TEGRA_DRM_PUBLIC_H__ */ diff --git a/src/gallium/winsys/tegra/drm/tegra_drm_winsys.c b/src/gallium/winsys/tegra/drm/tegra_drm_winsys.c new file mode 100644 -index 0000000..361370d +index 0000000..c439b8d --- /dev/null +++ b/src/gallium/winsys/tegra/drm/tegra_drm_winsys.c -@@ -0,0 +1,41 @@ -+#include "tegra_drm_public.h" +@@ -0,0 +1,76 @@ ++/* ++ * Copyright (C) 2016 Christian Gmeiner <christian.gmeiner@gmail.com> ++ * ++ * 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: ++ * Christian Gmeiner <christian.gmeiner@gmail.com> ++ * Alexandre Courbot <acourbot@nvidia.com> ++ */ + ++#include "tegra_drm_public.h" ++#include "../../nouveau/drm/nouveau_drm_public.h" +#include "renderonly/renderonly.h" -+#include "../winsys/nouveau/drm/nouveau_drm_public.h" + -+#include <fcntl.h> +#include <libdrm/tegra_drm.h> +#include <xf86drm.h> ++#include <stdio.h> + -+static struct pipe_screen * -+tegra_create(struct renderonly *ro) ++static struct renderonly_scanout * ++tegra_create_with_tiling_for_resource(struct pipe_resource *rsc, ++ struct renderonly *ro) +{ -+ int fd = open("/dev/dri/renderD128", O_RDWR | O_CLOEXEC); ++ struct renderonly_scanout *scanout; + -+ if (fd == -1) ++ scanout = renderonly_create_gpu_import_for_resource(rsc, ro); ++ if (!scanout) + return NULL; + -+ return nouveau_drm_screen_create_renderonly(fd, ro); -+} -+ -+static int -+tegra_tiling(int fd, uint32_t handle) -+{ + struct drm_tegra_gem_set_tiling args = { -+ .handle = handle, ++ .handle = scanout->handle, + .mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK, + .value = 4 + }; + -+ return drmIoctl(fd, DRM_IOCTL_TEGRA_GEM_SET_TILING, &args); -+} ++ int ret = drmIoctl(ro->kms_fd, DRM_IOCTL_TEGRA_GEM_SET_TILING, &args); ++ if (ret) ++ return NULL; + -+static const struct renderonly_ops ro_ops = { -+ .create = tegra_create, -+ .tiling = tegra_tiling -+}; ++ return scanout; ++} + +struct pipe_screen *tegra_drm_screen_create(int fd) +{ -+ return renderonly_screen_create(fd, &ro_ops, NULL); -+} ++ struct renderonly ro = { ++ .create_for_resource = tegra_create_with_tiling_for_resource, ++ .kms_fd = fd, ++ .gpu_fd = drmOpenWithType("nouveau", NULL, DRM_NODE_RENDER), ++ }; ++ ++ if (ro.gpu_fd < 0) ++ return NULL; ++ ++ struct pipe_screen *screen = nouveau_drm_screen_create_renderonly(ro.gpu_fd, &ro); ++ if (!screen) ++ drmClose(ro.gpu_fd); ++ ++ /* printf("Tegra + Nouveau renderonly mode\n"); */ ++ return screen; ++}; +diff --git a/src/mesa/drivers/dri/nouveau/nouveau_screen.h b/src/mesa/drivers/dri/nouveau/nouveau_screen.h +index e3c1928..720ee31 100644 +--- a/src/mesa/drivers/dri/nouveau/nouveau_screen.h ++++ b/src/mesa/drivers/dri/nouveau/nouveau_screen.h +@@ -36,6 +36,7 @@ struct nouveau_screen { + struct nouveau_drm *drm; + struct nouveau_device *device; + const struct nouveau_driver *driver; ++ struct renderonly *ro; + }; + + #endif -- -2.9.3 +2.7.4 diff --git a/recipes-graphics/mesa/mesa/0006-HACK-make-DRI-work-under-X.patch b/recipes-graphics/mesa/mesa/0002-make-DRI-work-under-X.patch index ecafa3f..799eddd 100644 --- a/recipes-graphics/mesa/mesa/0006-HACK-make-DRI-work-under-X.patch +++ b/recipes-graphics/mesa/mesa/0002-make-DRI-work-under-X.patch @@ -1,14 +1,14 @@ -From bb572a449b8c168dbe6d723692e4c1c8801f15b8 Mon Sep 17 00:00:00 2001 +From 0919eb301de1512bd24298d7f11a0dc6309fb029 Mon Sep 17 00:00:00 2001 From: Alexandre Courbot <acourbot@nvidia.com> Date: Mon, 11 Jul 2016 14:44:59 +0900 -Subject: [PATCH 6/8] [HACK] make DRI work under X +Subject: [PATCH 2/4] make DRI work under X --- - src/loader/loader_dri3_helper.c | 1 + - 1 file changed, 1 insertion(+) + src/loader/loader_dri3_helper.c | 1 + + 1 files changed, 1 insertions(+), 0 deletion(-) diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c -index ca02e97..568a1c7 100644 +index c2ae895..1d01193 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -145,6 +145,7 @@ loader_dri3_drawable_init(xcb_connection_t *conn, @@ -20,5 +20,5 @@ index ca02e97..568a1c7 100644 draw->have_back = 0; draw->have_fake_front = 0; -- -2.9.3 +2.7.4 diff --git a/recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch b/recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch new file mode 100644 index 0000000..d252b18 --- /dev/null +++ b/recipes-graphics/mesa/mesa/0003-loader-Automatic-PRIME-detection.patch @@ -0,0 +1,106 @@ +From 0f4808856ce42de4e0cf7e0c3af114165c105003 Mon Sep 17 00:00:00 2001 +From: Thierry Reding <treding@nvidia.com> +Date: Fri, 23 Dec 2016 21:36:00 +0100 +Subject: [PATCH 3/4] loader: Automatic PRIME detection + +If a device doesn't support rendering and support for PRIME isn't +enabled via the DRI_PRIME environment variable or dri.conf, attempt to +find a render node which can be used to offload rendering. + +Signed-off-by: Thierry Reding <treding@nvidia.com> +--- + src/loader/loader.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 67 insertions(+), 4 deletions(-) + +diff --git a/src/loader/loader.c b/src/loader/loader.c +index 5541ccc..19e73a7 100644 +--- a/src/loader/loader.c ++++ b/src/loader/loader.c +@@ -108,6 +108,71 @@ static char *loader_get_dri_config_device_id(void) + } + #endif + ++/* ++ * For all devices that do not support rendering, try to find a different ++ * device that will. ++ * ++ * Note that the absence of a render node doesn't technically imply that ++ * the device can't render, but in practice this should work out fine. ++ */ ++static int drm_detect_prime_fd(int default_fd, int *different_device) ++{ ++ int err, fd = -ENODEV; ++ drmDevicePtr device; ++ ++ err = drmGetDevice(default_fd, &device); ++ if (err < 0) ++ goto err; ++ ++ if ((device->available_nodes & (1 << DRM_NODE_RENDER)) == 0) { ++ unsigned int num_devices, i; ++ drmDevicePtr *devices; ++ ++ err = drmGetDevices(NULL, 0); ++ if (err < 0) ++ goto err; ++ ++ num_devices = err; ++ ++ devices = calloc(num_devices, sizeof(drmDevicePtr)); ++ if (!devices) ++ goto err; ++ ++ err = drmGetDevices(devices, num_devices); ++ if (err < 0) { ++ free(devices); ++ goto err; ++ } ++ ++ num_devices = err; ++ ++ for (i = 0; i < num_devices; i++) { ++ if (devices[i]->available_nodes & (1 << DRM_NODE_RENDER)) { ++ fd = loader_open_device(devices[i]->nodes[DRM_NODE_RENDER]); ++ if (fd < 0) { ++ fd = -errno; ++ continue; ++ } ++ ++ close(default_fd); ++ break; ++ } ++ } ++ ++ drmFreeDevices(devices, num_devices); ++ free(devices); ++ } ++ ++err: ++ if (fd < 0) { ++ *different_device = 0; ++ return default_fd; ++ } ++ ++ *different_device = 1; ++ return fd; ++} ++ + static char *drm_construct_id_path_tag(drmDevicePtr device) + { + /* Length of "pci-xxxx_xx_xx_x\0" */ +@@ -170,10 +235,8 @@ int loader_get_user_preferred_fd(int default_fd, int *different_device) + prime = loader_get_dri_config_device_id(); + #endif + +- if (prime == NULL) { +- *different_device = 0; +- return default_fd; +- } ++ if (prime == NULL || *prime == '\0') ++ return drm_detect_prime_fd(default_fd, different_device); + + default_tag = drm_get_id_path_tag_for_fd(default_fd); + if (default_tag == NULL) +-- +2.7.4 + diff --git a/recipes-graphics/mesa/mesa/0004-mesa-17.1.7-compilation-fixes.patch b/recipes-graphics/mesa/mesa/0004-mesa-17.1.7-compilation-fixes.patch new file mode 100644 index 0000000..f9e9a45 --- /dev/null +++ b/recipes-graphics/mesa/mesa/0004-mesa-17.1.7-compilation-fixes.patch @@ -0,0 +1,26 @@ +From 3fd098d1127695a2ba5f9e56eb51c0c26c928d2c Mon Sep 17 00:00:00 2001 +From: Dominik Sliwa <dominik.sliwa@toradex.com> +Date: Tue, 5 Dec 2017 15:33:29 +0000 +Subject: [PATCH 4/4] mesa: 17.1.7 compilation fixes + +Signed-off-by: Dominik Sliwa <dominik.sliwa@toradex.com> +--- + src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +index 68d02f8..958f1be 100644 +--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp ++++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +@@ -1250,7 +1250,7 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s) + + cmp->dType = TYPE_F32; + if (i->src(t).mod != Modifier(0)) { +- assert(i->src(t).mod == Modifier(NV50_IR_MOD_NOT)); ++ // assert(i->src(t).mod == Modifier(NV50_IR_MOD_NOT)); + i->src(t).mod = Modifier(0); + cmp->setCond = inverseCondCode(cmp->setCond); + } +-- +2.7.4 + diff --git a/recipes-graphics/mesa/mesa/0005-tegra-open-card1-instead-of-renderD128.patch b/recipes-graphics/mesa/mesa/0005-tegra-open-card1-instead-of-renderD128.patch deleted file mode 100644 index 14a867a..0000000 --- a/recipes-graphics/mesa/mesa/0005-tegra-open-card1-instead-of-renderD128.patch +++ /dev/null @@ -1,29 +0,0 @@ -From a97f868a806ab4f1aaab88c72d4b55bfb18cc3cc Mon Sep 17 00:00:00 2001 -From: Alexandre Courbot <acourbot@nvidia.com> -Date: Fri, 9 Dec 2016 17:04:16 +0900 -Subject: [PATCH 5/8] tegra: open card1 instead of renderD128 - -Mesa wants to perform a FLINK ioctl to share GPU buffers. This ioctl is -not valid on render-nodes. - -This fixes rendering with Weston, but GLX is still broken. ---- - src/gallium/winsys/tegra/drm/tegra_drm_winsys.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/gallium/winsys/tegra/drm/tegra_drm_winsys.c b/src/gallium/winsys/tegra/drm/tegra_drm_winsys.c -index 361370d..e213942 100644 ---- a/src/gallium/winsys/tegra/drm/tegra_drm_winsys.c -+++ b/src/gallium/winsys/tegra/drm/tegra_drm_winsys.c -@@ -10,7 +10,7 @@ - static struct pipe_screen * - tegra_create(struct renderonly *ro) - { -- int fd = open("/dev/dri/renderD128", O_RDWR | O_CLOEXEC); -+ int fd = open("/dev/dri/card1", O_RDWR | O_CLOEXEC); - - if (fd == -1) - return NULL; --- -2.9.3 - diff --git a/recipes-graphics/mesa/mesa/0008-remove-dependency-on-libdrm_tegra.patch b/recipes-graphics/mesa/mesa/0008-remove-dependency-on-libdrm_tegra.patch deleted file mode 100644 index b197b93..0000000 --- a/recipes-graphics/mesa/mesa/0008-remove-dependency-on-libdrm_tegra.patch +++ /dev/null @@ -1,51 +0,0 @@ -From b91f178edf3ba6969120a8ad2f5a7a4d330e2b64 Mon Sep 17 00:00:00 2001 -From: Alexandre Courbot <acourbot@nvidia.com> -Date: Tue, 20 Dec 2016 15:20:20 +0900 -Subject: [PATCH 4/4] remove dependency on libdrm_tegra - -Functions provided by this library are not required as we perform ioctls -directly. - -Forward port to mesa 17.0.2 -Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> ---- - configure.ac | 2 -- - src/gallium/winsys/tegra/drm/Makefile.am | 2 +- - 2 files changed, 1 insertion(+), 3 deletions(-) - -diff --git a/configure.ac b/configure.ac -index f7f94ee..4ce5d37 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -74,7 +74,6 @@ LIBDRM_INTEL_REQUIRED=2.4.61 - LIBDRM_NVVIEUX_REQUIRED=2.4.66 - LIBDRM_NOUVEAU_REQUIRED=2.4.66 - LIBDRM_FREEDRENO_REQUIRED=2.4.74 --LIBDRM_TEGRA_REQUIRED=2.4.68 - LIBDRM_VC4_REQUIRED=2.4.69 - LIBDRM_ETNAVIV_REQUIRED=2.4.74 - DRI2PROTO_REQUIRED=2.6 -@@ -2393,7 +2392,6 @@ if test -n "$with_gallium_drivers"; then - require_basic_egl "virgl" - ;; - xtegra) -- PKG_CHECK_MODULES([TEGRA], [libdrm_tegra >= $LIBDRM_TEGRA_REQUIRED]) - HAVE_GALLIUM_TEGRA=yes - gallium_require_drm "tegra" - gallium_require_drm_loader -diff --git a/src/gallium/winsys/tegra/drm/Makefile.am b/src/gallium/winsys/tegra/drm/Makefile.am -index 39068fe..eada86a 100644 ---- a/src/gallium/winsys/tegra/drm/Makefile.am -+++ b/src/gallium/winsys/tegra/drm/Makefile.am -@@ -26,7 +26,7 @@ include $(top_srcdir)/src/gallium/Automake.inc - AM_CFLAGS = \ - -I$(top_srcdir)/src/gallium/drivers \ - $(GALLIUM_WINSYS_CFLAGS) \ -- $(TEGRA_CFLAGS) -+ $(LIBDRM_CFLAGS) - - noinst_LTLIBRARIES = libtegradrm.la - --- -2.9.3 - diff --git a/recipes-graphics/mesa/mesa_%.bbappend b/recipes-graphics/mesa/mesa_%.bbappend index d56760a..14500a3 100644 --- a/recipes-graphics/mesa/mesa_%.bbappend +++ b/recipes-graphics/mesa/mesa_%.bbappend @@ -32,10 +32,10 @@ DRIDRIVERS_tegra124m = " " GALLIUMDRIVERS_tegra124m = "tegra" SRC_URI_append_tegra124m = " \ - file://0004-gallium-add-tegra-support.patch \ - file://0005-tegra-open-card1-instead-of-renderD128.patch \ - file://0006-HACK-make-DRI-work-under-X.patch \ - file://0008-remove-dependency-on-libdrm_tegra.patch \ + file://0001-gallium-add-tegra-support.patch \ + file://0002-make-DRI-work-under-X.patch \ + file://0003-loader-Automatic-PRIME-detection.patch \ + file://0004-mesa-17.1.7-compilation-fixes.patch \ " PACKAGE_ARCH_tegra124m = "${MACHINE_ARCH}" |