mesa: Add backport of freedreno dmabuf modifiers patch.

Message ID 1557911110-10999-1-git-send-email-peter.griffin@linaro.org
State New
Headers show
Series
  • mesa: Add backport of freedreno dmabuf modifiers patch.
Related show

Commit Message

Peter Griffin May 15, 2019, 9:05 a.m.
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@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

-- 
2.7.4

Comments

Alexander Kanavin May 15, 2019, 9:23 a.m. | #1
Email subject should include [thud], otherwise it won't be noticed.

Alex

On Wed, 15 May 2019 at 11:07, Peter Griffin <peter.griffin@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@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@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@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@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@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@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@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@lists.openembedded.org

> http://lists.openembedded.org/mailman/listinfo/openembedded-core

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

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@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@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@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@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@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@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"