summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2017-07-31 14:59:38 -0700
committerEric Anholt <[email protected]>2017-08-15 13:23:54 -0700
commitbd5efbd70b33a9f7977e75799c3b7d293113ba4d (patch)
tree91ed6d453fe7311ec750bc869a94ada7d147dde0 /src/gallium
parentba8533b6ea6a3e0121da4ab73be1dd18580b4d9b (diff)
broadcom/vc4: Build the vc4_tiling_lt_neon.c with -mfpu=neon on ARM.
If you don't pass this, the compiler refuses to compile the assembly for pre-v7 CPUs. This also keeps us from building identical, non-NEON code on aarch64 and x86. Fixes: a373f77662c5 ("vc4: Use a wrapper file to set VC4_BUILD_NEON instead of CFLAGS.") v2: Fix Android build by just appending NEON_C_SOURCES when ARCH_ARM_HAVE_NEON. Tested-by: Rob Herring <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/vc4/Android.mk4
-rw-r--r--src/gallium/drivers/vc4/Makefile.am7
-rw-r--r--src/gallium/drivers/vc4/Makefile.sources3
-rw-r--r--src/gallium/drivers/vc4/vc4_tiling.h17
4 files changed, 24 insertions, 7 deletions
diff --git a/src/gallium/drivers/vc4/Android.mk b/src/gallium/drivers/vc4/Android.mk
index 84bfaa839f9..fc141de3ca8 100644
--- a/src/gallium/drivers/vc4/Android.mk
+++ b/src/gallium/drivers/vc4/Android.mk
@@ -28,6 +28,10 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
$(C_SOURCES)
+ifeq ($(ARCH_ARM_HAVE_NEON),true)
+LOCAL_SRC_FILES += $(NEON_C_SOURCES)
+endif
+
LOCAL_GENERATED_SOURCES := $(MESA_GEN_NIR_H)
LOCAL_C_INCLUDES := \
$(MESA_TOP)/include/drm-uapi
diff --git a/src/gallium/drivers/vc4/Makefile.am b/src/gallium/drivers/vc4/Makefile.am
index 9b0ef6ef790..4c2b7486c52 100644
--- a/src/gallium/drivers/vc4/Makefile.am
+++ b/src/gallium/drivers/vc4/Makefile.am
@@ -44,6 +44,13 @@ libvc4_la_LIBADD = \
$(top_builddir)/src/broadcom/cle/libbroadcom_cle.la \
$()
+if HAVE_ARM_ASM
+noinst_LTLIBRARIES += libvc4_neon.la
+libvc4_la_LIBADD += libvc4_neon.la
+libvc4_neon_la_SOURCES = $(NEON_C_SOURCES)
+libvc4_neon_la_CFLAGS = $(AM_CFLAGS) -mfpu=neon
+endif
+
libvc4_la_LDFLAGS = $(SIM_LDFLAGS)
EXTRA_DIST = kernel/README
diff --git a/src/gallium/drivers/vc4/Makefile.sources b/src/gallium/drivers/vc4/Makefile.sources
index f67dffe0063..76dea7041b7 100644
--- a/src/gallium/drivers/vc4/Makefile.sources
+++ b/src/gallium/drivers/vc4/Makefile.sources
@@ -57,7 +57,8 @@ C_SOURCES := \
vc4_state.c \
vc4_tiling.c \
vc4_tiling_lt.c \
- vc4_tiling_lt_neon.c \
vc4_tiling.h \
vc4_uniforms.c \
$()
+
+NEON_C_SOURCES := vc4_tiling_lt_neon.c
diff --git a/src/gallium/drivers/vc4/vc4_tiling.h b/src/gallium/drivers/vc4/vc4_tiling.h
index 3168ec20a60..66767e7f1f8 100644
--- a/src/gallium/drivers/vc4/vc4_tiling.h
+++ b/src/gallium/drivers/vc4/vc4_tiling.h
@@ -89,13 +89,15 @@ vc4_load_lt_image(void *dst, uint32_t dst_stride,
void *src, uint32_t src_stride,
int cpp, const struct pipe_box *box)
{
+#ifdef USE_ARM_ASM
if (util_cpu_caps.has_neon) {
vc4_load_lt_image_neon(dst, dst_stride, src, src_stride,
cpp, box);
- } else {
- vc4_load_lt_image_base(dst, dst_stride, src, src_stride,
- cpp, box);
+ return;
}
+#endif
+ vc4_load_lt_image_base(dst, dst_stride, src, src_stride,
+ cpp, box);
}
static inline void
@@ -103,13 +105,16 @@ vc4_store_lt_image(void *dst, uint32_t dst_stride,
void *src, uint32_t src_stride,
int cpp, const struct pipe_box *box)
{
+#ifdef USE_ARM_ASM
if (util_cpu_caps.has_neon) {
vc4_store_lt_image_neon(dst, dst_stride, src, src_stride,
cpp, box);
- } else {
- vc4_store_lt_image_base(dst, dst_stride, src, src_stride,
- cpp, box);
+ return;
}
+#endif
+
+ vc4_store_lt_image_base(dst, dst_stride, src, src_stride,
+ cpp, box);
}
#endif /* VC4_TILING_H */