[OE-core] [PATCH] mesa: Add backport of freedreno dmabuf modifiers patch.

Alexander Kanavin alex.kanavin at gmail.com
Wed May 15 09:23:19 UTC 2019


Email subject should include [thud], otherwise it won't be noticed.

Alex

On Wed, 15 May 2019 at 11:07, Peter Griffin <peter.griffin at linaro.org> wrote:
>
> This is required to get weston-simple-dmabuf-drm to work
> and also now required by Chromium v73 ozone-wayland backend.
>
> It is present in mesa 19.0, backporting to Thud which is
> on 18.1.9.
>
> Signed-off-by: Peter Griffin <peter.griffin at linaro.org>
> ---
>  ...ckport-of-freedreno-dmabuf-modifiers-patc.patch | 140 +++++++++++++++++++++
>  ...-freedreno-add-query-for-dmabuf-modifiers.patch | 101 +++++++++++++++
>  meta/recipes-graphics/mesa/mesa_18.1.9.bb          |   1 +
>  3 files changed, 242 insertions(+)
>  create mode 100644 meta/recipes-graphics/mesa/0001-mesa-Add-backport-of-freedreno-dmabuf-modifiers-patc.patch
>  create mode 100644 meta/recipes-graphics/mesa/files/0001-freedreno-add-query-for-dmabuf-modifiers.patch
>
> diff --git a/meta/recipes-graphics/mesa/0001-mesa-Add-backport-of-freedreno-dmabuf-modifiers-patc.patch b/meta/recipes-graphics/mesa/0001-mesa-Add-backport-of-freedreno-dmabuf-modifiers-patc.patch
> new file mode 100644
> index 0000000..1a5aa68
> --- /dev/null
> +++ b/meta/recipes-graphics/mesa/0001-mesa-Add-backport-of-freedreno-dmabuf-modifiers-patc.patch
> @@ -0,0 +1,140 @@
> +From 6de2fe7bdd1bbe7a1d56c91fabe32a3dbcb736ac Mon Sep 17 00:00:00 2001
> +From: Peter Griffin <peter.griffin at linaro.org>
> +Date: Wed, 15 May 2019 10:07:49 +0200
> +Subject: [PATCH] mesa: Add backport of freedreno dmabuf modifiers patch.
> +
> +This is required to get weston-simple-dmabuf-drm to work
> +and also now required by Chromium v73 ozone-wayland backend.
> +
> +It is present in mesa 19.0, backporting to Thud which is
> +on 18.1.9.
> +
> +Signed-off-by: Peter Griffin <peter.griffin at linaro.org>
> +---
> + ...-freedreno-add-query-for-dmabuf-modifiers.patch | 101 +++++++++++++++++++++
> + meta/recipes-graphics/mesa/mesa_18.1.9.bb          |   1 +
> + 2 files changed, 102 insertions(+)
> + create mode 100644 meta/recipes-graphics/mesa/files/0001-freedreno-add-query-for-dmabuf-modifiers.patch
> +
> +diff --git a/meta/recipes-graphics/mesa/files/0001-freedreno-add-query-for-dmabuf-modifiers.patch b/meta/recipes-graphics/mesa/files/0001-freedreno-add-query-for-dmabuf-modifiers.patch
> +new file mode 100644
> +index 0000000..57ebd8f
> +--- /dev/null
> ++++ b/meta/recipes-graphics/mesa/files/0001-freedreno-add-query-for-dmabuf-modifiers.patch
> +@@ -0,0 +1,101 @@
> ++From c4bee1a1b3fb224002fe8c263bedbce1b705ed49 Mon Sep 17 00:00:00 2001
> ++From: Peter Griffin <peter.griffin at linaro.org>
> ++Date: Mon, 13 May 2019 19:18:56 +0100
> ++Subject: [PATCH] freedreno: add query for dmabuf modifiers
> ++
> ++Backport of mesa 7c4b9510d by Fritz Koenig. Tested with Weston
> ++and weston-simple-dmabuf-drm client.
> ++
> ++Upstream-Status: Backport from 19.0
> ++
> ++Signed-off-by: Peter Griffin <peter.griffin at linaro.org>
> ++---
> ++ src/gallium/drivers/freedreno/freedreno_screen.c | 43 ++++++++++++++++++++++++
> ++ src/gallium/drivers/freedreno/freedreno_screen.h |  3 ++
> ++ 2 files changed, 46 insertions(+)
> ++
> ++diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
> ++index f338d75..cbb5b8a 100644
> ++--- a/src/gallium/drivers/freedreno/freedreno_screen.c
> +++++ b/src/gallium/drivers/freedreno/freedreno_screen.c
> ++@@ -40,6 +40,7 @@
> ++
> ++ #include "util/os_time.h"
> ++
> +++#include <drm_fourcc.h>
> ++ #include <errno.h>
> ++ #include <stdio.h>
> ++ #include <stdlib.h>
> ++@@ -732,6 +733,37 @@ fd_screen_bo_get_handle(struct pipe_screen *pscreen,
> ++      }
> ++ }
> ++
> +++static void
> +++fd_screen_query_dmabuf_modifiers(struct pipe_screen *pscreen,
> +++             enum pipe_format format,
> +++             int max, uint64_t *modifiers,
> +++             unsigned int *external_only,
> +++             int *count)
> +++{
> +++     struct fd_screen *screen = fd_screen(pscreen);
> +++     int i, num = 0;
> +++
> +++     max = MIN2(max, screen->num_supported_modifiers);
> +++
> +++     if (!max) {
> +++             max = screen->num_supported_modifiers;
> +++             external_only = NULL;
> +++             modifiers = NULL;
> +++     }
> +++
> +++     for (i = 0; i < max; i++) {
> +++             if (modifiers)
> +++                     modifiers[num] = screen->supported_modifiers[i];
> +++
> +++             if (external_only)
> +++                     external_only[num] = 0;
> +++
> +++             num++;
> +++     }
> +++
> +++     *count = num;
> +++}
> +++
> ++ struct fd_bo *
> ++ fd_screen_bo_from_handle(struct pipe_screen *pscreen,
> ++              struct winsys_handle *whandle)
> ++@@ -921,6 +953,17 @@ fd_screen_create(struct fd_device *dev)
> ++      pscreen->fence_finish = fd_fence_finish;
> ++      pscreen->fence_get_fd = fd_fence_get_fd;
> ++
> +++     pscreen->query_dmabuf_modifiers = fd_screen_query_dmabuf_modifiers;
> +++
> +++     if (!screen->supported_modifiers) {
> +++             static const uint64_t supported_modifiers[] = {
> +++                     DRM_FORMAT_MOD_LINEAR,
> +++             };
> +++
> +++             screen->supported_modifiers = supported_modifiers;
> +++             screen->num_supported_modifiers = ARRAY_SIZE(supported_modifiers);
> +++     }
> +++
> ++      slab_create_parent(&screen->transfer_pool, sizeof(struct fd_transfer), 16);
> ++
> ++      return pscreen;
> ++diff --git a/src/gallium/drivers/freedreno/freedreno_screen.h b/src/gallium/drivers/freedreno/freedreno_screen.h
> ++index 6be739a..5558066 100644
> ++--- a/src/gallium/drivers/freedreno/freedreno_screen.h
> +++++ b/src/gallium/drivers/freedreno/freedreno_screen.h
> ++@@ -89,6 +89,9 @@ struct fd_screen {
> ++      struct fd_batch_cache batch_cache;
> ++
> ++      bool reorder;
> +++
> +++     unsigned num_supported_modifiers;
> +++     const uint64_t *supported_modifiers;
> ++ };
> ++
> ++ static inline struct fd_screen *
> ++--
> ++2.7.4
> ++
> +diff --git a/meta/recipes-graphics/mesa/mesa_18.1.9.bb b/meta/recipes-graphics/mesa/mesa_18.1.9.bb
> +index 86d6a6b..0558690 100644
> +--- a/meta/recipes-graphics/mesa/mesa_18.1.9.bb
> ++++ b/meta/recipes-graphics/mesa/mesa_18.1.9.bb
> +@@ -7,6 +7,7 @@ SRC_URI = "https://mesa.freedesktop.org/archive/mesa-${PV}.tar.xz \
> +            file://0004-Use-Python-3-to-execute-the-scripts.patch \
> +            file://0005-dri-i965-Add-missing-time.h-include.patch \
> +            file://0006-use-PKG_CHECK_VAR-for-defining-WAYLAND_PROTOCOLS_DAT.patch \
> ++           file://0001-freedreno-add-query-for-dmabuf-modifiers.patch \
> + "
> +
> + SRC_URI[md5sum] = "2f8d2098ab478bc3907e42130577b54a"
> +--
> +2.7.4
> +
> diff --git a/meta/recipes-graphics/mesa/files/0001-freedreno-add-query-for-dmabuf-modifiers.patch b/meta/recipes-graphics/mesa/files/0001-freedreno-add-query-for-dmabuf-modifiers.patch
> new file mode 100644
> index 0000000..57ebd8f
> --- /dev/null
> +++ b/meta/recipes-graphics/mesa/files/0001-freedreno-add-query-for-dmabuf-modifiers.patch
> @@ -0,0 +1,101 @@
> +From c4bee1a1b3fb224002fe8c263bedbce1b705ed49 Mon Sep 17 00:00:00 2001
> +From: Peter Griffin <peter.griffin at linaro.org>
> +Date: Mon, 13 May 2019 19:18:56 +0100
> +Subject: [PATCH] freedreno: add query for dmabuf modifiers
> +
> +Backport of mesa 7c4b9510d by Fritz Koenig. Tested with Weston
> +and weston-simple-dmabuf-drm client.
> +
> +Upstream-Status: Backport from 19.0
> +
> +Signed-off-by: Peter Griffin <peter.griffin at linaro.org>
> +---
> + src/gallium/drivers/freedreno/freedreno_screen.c | 43 ++++++++++++++++++++++++
> + src/gallium/drivers/freedreno/freedreno_screen.h |  3 ++
> + 2 files changed, 46 insertions(+)
> +
> +diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
> +index f338d75..cbb5b8a 100644
> +--- a/src/gallium/drivers/freedreno/freedreno_screen.c
> ++++ b/src/gallium/drivers/freedreno/freedreno_screen.c
> +@@ -40,6 +40,7 @@
> +
> + #include "util/os_time.h"
> +
> ++#include <drm_fourcc.h>
> + #include <errno.h>
> + #include <stdio.h>
> + #include <stdlib.h>
> +@@ -732,6 +733,37 @@ fd_screen_bo_get_handle(struct pipe_screen *pscreen,
> +       }
> + }
> +
> ++static void
> ++fd_screen_query_dmabuf_modifiers(struct pipe_screen *pscreen,
> ++              enum pipe_format format,
> ++              int max, uint64_t *modifiers,
> ++              unsigned int *external_only,
> ++              int *count)
> ++{
> ++      struct fd_screen *screen = fd_screen(pscreen);
> ++      int i, num = 0;
> ++
> ++      max = MIN2(max, screen->num_supported_modifiers);
> ++
> ++      if (!max) {
> ++              max = screen->num_supported_modifiers;
> ++              external_only = NULL;
> ++              modifiers = NULL;
> ++      }
> ++
> ++      for (i = 0; i < max; i++) {
> ++              if (modifiers)
> ++                      modifiers[num] = screen->supported_modifiers[i];
> ++
> ++              if (external_only)
> ++                      external_only[num] = 0;
> ++
> ++              num++;
> ++      }
> ++
> ++      *count = num;
> ++}
> ++
> + struct fd_bo *
> + fd_screen_bo_from_handle(struct pipe_screen *pscreen,
> +               struct winsys_handle *whandle)
> +@@ -921,6 +953,17 @@ fd_screen_create(struct fd_device *dev)
> +       pscreen->fence_finish = fd_fence_finish;
> +       pscreen->fence_get_fd = fd_fence_get_fd;
> +
> ++      pscreen->query_dmabuf_modifiers = fd_screen_query_dmabuf_modifiers;
> ++
> ++      if (!screen->supported_modifiers) {
> ++              static const uint64_t supported_modifiers[] = {
> ++                      DRM_FORMAT_MOD_LINEAR,
> ++              };
> ++
> ++              screen->supported_modifiers = supported_modifiers;
> ++              screen->num_supported_modifiers = ARRAY_SIZE(supported_modifiers);
> ++      }
> ++
> +       slab_create_parent(&screen->transfer_pool, sizeof(struct fd_transfer), 16);
> +
> +       return pscreen;
> +diff --git a/src/gallium/drivers/freedreno/freedreno_screen.h b/src/gallium/drivers/freedreno/freedreno_screen.h
> +index 6be739a..5558066 100644
> +--- a/src/gallium/drivers/freedreno/freedreno_screen.h
> ++++ b/src/gallium/drivers/freedreno/freedreno_screen.h
> +@@ -89,6 +89,9 @@ struct fd_screen {
> +       struct fd_batch_cache batch_cache;
> +
> +       bool reorder;
> ++
> ++      unsigned num_supported_modifiers;
> ++      const uint64_t *supported_modifiers;
> + };
> +
> + static inline struct fd_screen *
> +--
> +2.7.4
> +
> diff --git a/meta/recipes-graphics/mesa/mesa_18.1.9.bb b/meta/recipes-graphics/mesa/mesa_18.1.9.bb
> index 86d6a6b..0558690 100644
> --- a/meta/recipes-graphics/mesa/mesa_18.1.9.bb
> +++ b/meta/recipes-graphics/mesa/mesa_18.1.9.bb
> @@ -7,6 +7,7 @@ SRC_URI = "https://mesa.freedesktop.org/archive/mesa-${PV}.tar.xz \
>             file://0004-Use-Python-3-to-execute-the-scripts.patch \
>             file://0005-dri-i965-Add-missing-time.h-include.patch \
>             file://0006-use-PKG_CHECK_VAR-for-defining-WAYLAND_PROTOCOLS_DAT.patch \
> +           file://0001-freedreno-add-query-for-dmabuf-modifiers.patch \
>  "
>
>  SRC_URI[md5sum] = "2f8d2098ab478bc3907e42130577b54a"
> --
> 2.7.4
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core


More information about the Openembedded-core mailing list