diff options
author | Eric Anholt <[email protected]> | 2017-07-31 14:59:38 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2017-08-15 13:23:54 -0700 |
commit | bd5efbd70b33a9f7977e75799c3b7d293113ba4d (patch) | |
tree | 91ed6d453fe7311ec750bc869a94ada7d147dde0 /src | |
parent | ba8533b6ea6a3e0121da4ab73be1dd18580b4d9b (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')
-rw-r--r-- | src/gallium/drivers/vc4/Android.mk | 4 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/Makefile.am | 7 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/Makefile.sources | 3 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_tiling.h | 17 |
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 */ |