diff options
Diffstat (limited to 'src/gallium/drivers/vc4')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_screen.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_tiling.h | 27 |
2 files changed, 16 insertions, 14 deletions
diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c index 5bc0141c725..d116748324a 100644 --- a/src/gallium/drivers/vc4/vc4_screen.c +++ b/src/gallium/drivers/vc4/vc4_screen.c @@ -27,6 +27,7 @@ #include "pipe/p_screen.h" #include "pipe/p_state.h" +#include "util/u_cpu_detect.h" #include "util/u_debug.h" #include "util/u_memory.h" #include "util/u_format.h" @@ -629,6 +630,8 @@ vc4_screen_create(int fd) if (!vc4_get_chip_info(screen)) goto fail; + util_cpu_detect(); + slab_create_parent(&screen->transfer_pool, sizeof(struct vc4_transfer), 16); vc4_fence_init(screen); diff --git a/src/gallium/drivers/vc4/vc4_tiling.h b/src/gallium/drivers/vc4/vc4_tiling.h index ba1ad6fb3f7..3168ec20a60 100644 --- a/src/gallium/drivers/vc4/vc4_tiling.h +++ b/src/gallium/drivers/vc4/vc4_tiling.h @@ -27,6 +27,7 @@ #include <stdbool.h> #include <stdint.h> #include "util/macros.h" +#include "util/u_cpu_detect.h" /** Return the width in pixels of a 64-byte microtile. */ static inline uint32_t @@ -83,23 +84,18 @@ void vc4_store_tiled_image(void *dst, uint32_t dst_stride, uint8_t tiling_format, int cpp, const struct pipe_box *box); -/* If we're building for ARMv7 (Pi 2+), assume it has NEON. For Raspbian we - * should extend this to have some runtime detection of being built for ARMv6 - * on a Pi 2+. - */ -#if defined(__ARM_ARCH) && __ARM_ARCH == 7 -#define NEON_SUFFIX(x) x ## _neon -#else -#define NEON_SUFFIX(x) x ## _base -#endif - static inline void vc4_load_lt_image(void *dst, uint32_t dst_stride, void *src, uint32_t src_stride, int cpp, const struct pipe_box *box) { - NEON_SUFFIX(vc4_load_lt_image)(dst, dst_stride, src, src_stride, + 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); + } } static inline void @@ -107,10 +103,13 @@ vc4_store_lt_image(void *dst, uint32_t dst_stride, void *src, uint32_t src_stride, int cpp, const struct pipe_box *box) { - NEON_SUFFIX(vc4_store_lt_image)(dst, dst_stride, src, src_stride, + 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); + } } -#undef NEON_SUFFIX - #endif /* VC4_TILING_H */ |