1*4882a593SmuzhiyunFrom e3b47c1b84964c62b3e1fa782f1ffa4be0ae62f9 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Peter Seiderer <ps.report@gmx.net>
3*4882a593SmuzhiyunDate: Mon, 9 Mar 2020 13:01:14 +0100
4*4882a593SmuzhiyunSubject: [PATCH] vc4: add meson option to disable optional neon support
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunNot all toolchains are able to compile the runtime
7*4882a593Smuzhiyunoptional vc4 neon support, so add an meson option
8*4882a593Smuzhiyunto force disabling it at compile time.
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun[Upstream: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4114]
11*4882a593SmuzhiyunSigned-off-by: Peter Seiderer <ps.report@gmx.net>
12*4882a593SmuzhiyunSigned-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
13*4882a593Smuzhiyun[rebased for 20.2.0, 20.3.0 & 21.1.0]
14*4882a593Smuzhiyun---
15*4882a593Smuzhiyun meson_options.txt                    | 7 +++++++
16*4882a593Smuzhiyun src/gallium/drivers/vc4/meson.build  | 4 ++--
17*4882a593Smuzhiyun src/gallium/drivers/vc4/vc4_tiling.h | 4 ++--
18*4882a593Smuzhiyun 3 files changed, 11 insertions(+), 4 deletions(-)
19*4882a593Smuzhiyun
20*4882a593Smuzhiyundiff --git a/meson_options.txt b/meson_options.txt
21*4882a593Smuzhiyunindex a39596a6f19..0f6b6c62b55 100644
22*4882a593Smuzhiyun--- a/meson_options.txt
23*4882a593Smuzhiyun+++ b/meson_options.txt
24*4882a593Smuzhiyun@@ -123,6 +123,13 @@ option(
25*4882a593Smuzhiyun   choices : ['auto', 'true', 'false', 'enabled', 'disabled'],
26*4882a593Smuzhiyun   description : 'enable gallium va frontend.',
27*4882a593Smuzhiyun )
28*4882a593Smuzhiyun+option(
29*4882a593Smuzhiyun+  'gallium-vc4-neon',
30*4882a593Smuzhiyun+  type : 'combo',
31*4882a593Smuzhiyun+  value : 'auto',
32*4882a593Smuzhiyun+  choices : ['auto', 'disabled'],
33*4882a593Smuzhiyun+  description : 'enable gallium vc4 optional neon support.',
34*4882a593Smuzhiyun+)
35*4882a593Smuzhiyun option(
36*4882a593Smuzhiyun   'va-libs-path',
37*4882a593Smuzhiyun   type : 'string',
38*4882a593Smuzhiyundiff --git a/src/gallium/drivers/vc4/meson.build b/src/gallium/drivers/vc4/meson.build
39*4882a593Smuzhiyunindex 5ce5af5f6b4..e3f7d8d62ae 100644
40*4882a593Smuzhiyun--- a/src/gallium/drivers/vc4/meson.build
41*4882a593Smuzhiyun+++ b/src/gallium/drivers/vc4/meson.build
42*4882a593Smuzhiyun@@ -84,7 +84,7 @@ files_libvc4 = files(
43*4882a593Smuzhiyun vc4_c_args = []
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun libvc4_neon = []
46*4882a593Smuzhiyun-if host_machine.cpu_family() == 'arm'
47*4882a593Smuzhiyun+if host_machine.cpu_family() == 'arm' and get_option('gallium-vc4-neon') != 'disabled'
48*4882a593Smuzhiyun   libvc4_neon = static_library(
49*4882a593Smuzhiyun     'vc4_neon',
50*4882a593Smuzhiyun     'vc4_tiling_lt_neon.c',
51*4882a593Smuzhiyun@@ -93,7 +93,7 @@ if host_machine.cpu_family() == 'arm'
52*4882a593Smuzhiyun     ],
53*4882a593Smuzhiyun     c_args : '-mfpu=neon',
54*4882a593Smuzhiyun   )
55*4882a593Smuzhiyun-  vc4_c_args += '-DUSE_ARM_ASM'
56*4882a593Smuzhiyun+  vc4_c_args += '-DVC4_TILING_LT_NEON'
57*4882a593Smuzhiyun endif
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun if dep_simpenrose.found()
60*4882a593Smuzhiyundiff --git a/src/gallium/drivers/vc4/vc4_tiling.h b/src/gallium/drivers/vc4/vc4_tiling.h
61*4882a593Smuzhiyunindex 66767e7f1f8..7446f1c3d0c 100644
62*4882a593Smuzhiyun--- a/src/gallium/drivers/vc4/vc4_tiling.h
63*4882a593Smuzhiyun+++ b/src/gallium/drivers/vc4/vc4_tiling.h
64*4882a593Smuzhiyun@@ -89,7 +89,7 @@ vc4_load_lt_image(void *dst, uint32_t dst_stride,
65*4882a593Smuzhiyun                   void *src, uint32_t src_stride,
66*4882a593Smuzhiyun                   int cpp, const struct pipe_box *box)
67*4882a593Smuzhiyun {
68*4882a593Smuzhiyun-#ifdef USE_ARM_ASM
69*4882a593Smuzhiyun+#ifdef VC4_TILING_LT_NEON
70*4882a593Smuzhiyun         if (util_get_cpu_caps()->has_neon) {
71*4882a593Smuzhiyun                 vc4_load_lt_image_neon(dst, dst_stride, src, src_stride,
72*4882a593Smuzhiyun                                        cpp, box);
73*4882a593Smuzhiyun@@ -105,7 +105,7 @@ vc4_store_lt_image(void *dst, uint32_t dst_stride,
74*4882a593Smuzhiyun                    void *src, uint32_t src_stride,
75*4882a593Smuzhiyun                    int cpp, const struct pipe_box *box)
76*4882a593Smuzhiyun {
77*4882a593Smuzhiyun-#ifdef USE_ARM_ASM
78*4882a593Smuzhiyun+#ifdef VC4_TILING_LT_NEON
79*4882a593Smuzhiyun         if (util_get_cpu_caps()->has_neon) {
80*4882a593Smuzhiyun                 vc4_store_lt_image_neon(dst, dst_stride, src, src_stride,
81*4882a593Smuzhiyun                                         cpp, box);
82*4882a593Smuzhiyun--
83*4882a593Smuzhiyun2.25.1
84*4882a593Smuzhiyun
85