xref: /aosp_15_r20/external/libvpx/test/init_vpx_test.cc (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2023 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker 
11*fb1b10abSAndroid Build Coastguard Worker #include "test/init_vpx_test.h"
12*fb1b10abSAndroid Build Coastguard Worker 
13*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_config.h"
14*fb1b10abSAndroid Build Coastguard Worker 
15*fb1b10abSAndroid Build Coastguard Worker #if !CONFIG_SHARED
16*fb1b10abSAndroid Build Coastguard Worker #include <string>
17*fb1b10abSAndroid Build Coastguard Worker #include "gtest/gtest.h"
18*fb1b10abSAndroid Build Coastguard Worker #if VPX_ARCH_ARM
19*fb1b10abSAndroid Build Coastguard Worker #include "vpx_ports/arm.h"
20*fb1b10abSAndroid Build Coastguard Worker #endif
21*fb1b10abSAndroid Build Coastguard Worker #if VPX_ARCH_X86 || VPX_ARCH_X86_64
22*fb1b10abSAndroid Build Coastguard Worker #include "vpx_ports/x86.h"
23*fb1b10abSAndroid Build Coastguard Worker #endif
24*fb1b10abSAndroid Build Coastguard Worker extern "C" {
25*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8
26*fb1b10abSAndroid Build Coastguard Worker extern void vp8_rtcd();
27*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_VP8
28*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9
29*fb1b10abSAndroid Build Coastguard Worker extern void vp9_rtcd();
30*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_VP9
31*fb1b10abSAndroid Build Coastguard Worker extern void vpx_dsp_rtcd();
32*fb1b10abSAndroid Build Coastguard Worker extern void vpx_scale_rtcd();
33*fb1b10abSAndroid Build Coastguard Worker }
34*fb1b10abSAndroid Build Coastguard Worker 
35*fb1b10abSAndroid Build Coastguard Worker #if VPX_ARCH_ARM || VPX_ARCH_X86 || VPX_ARCH_X86_64
append_negative_gtest_filter(const char * str)36*fb1b10abSAndroid Build Coastguard Worker static void append_negative_gtest_filter(const char *str) {
37*fb1b10abSAndroid Build Coastguard Worker   std::string filter = GTEST_FLAG_GET(filter);
38*fb1b10abSAndroid Build Coastguard Worker   // Negative patterns begin with one '-' followed by a ':' separated list.
39*fb1b10abSAndroid Build Coastguard Worker   if (filter.find('-') == std::string::npos) filter += '-';
40*fb1b10abSAndroid Build Coastguard Worker   filter += str;
41*fb1b10abSAndroid Build Coastguard Worker   GTEST_FLAG_SET(filter, filter);
42*fb1b10abSAndroid Build Coastguard Worker }
43*fb1b10abSAndroid Build Coastguard Worker #endif  // VPX_ARCH_ARM || VPX_ARCH_X86 || VPX_ARCH_X86_64
44*fb1b10abSAndroid Build Coastguard Worker #endif  // !CONFIG_SHARED
45*fb1b10abSAndroid Build Coastguard Worker 
46*fb1b10abSAndroid Build Coastguard Worker namespace libvpx_test {
init_vpx_test()47*fb1b10abSAndroid Build Coastguard Worker void init_vpx_test() {
48*fb1b10abSAndroid Build Coastguard Worker #if !CONFIG_SHARED
49*fb1b10abSAndroid Build Coastguard Worker #if VPX_ARCH_AARCH64
50*fb1b10abSAndroid Build Coastguard Worker   const int caps = arm_cpu_caps();
51*fb1b10abSAndroid Build Coastguard Worker   if (!(caps & HAS_NEON_DOTPROD)) {
52*fb1b10abSAndroid Build Coastguard Worker     append_negative_gtest_filter(":NEON_DOTPROD.*:NEON_DOTPROD/*");
53*fb1b10abSAndroid Build Coastguard Worker   }
54*fb1b10abSAndroid Build Coastguard Worker   if (!(caps & HAS_NEON_I8MM)) {
55*fb1b10abSAndroid Build Coastguard Worker     append_negative_gtest_filter(":NEON_I8MM.*:NEON_I8MM/*");
56*fb1b10abSAndroid Build Coastguard Worker   }
57*fb1b10abSAndroid Build Coastguard Worker   if (!(caps & HAS_SVE)) {
58*fb1b10abSAndroid Build Coastguard Worker     append_negative_gtest_filter(":SVE.*:SVE/*");
59*fb1b10abSAndroid Build Coastguard Worker   }
60*fb1b10abSAndroid Build Coastguard Worker   if (!(caps & HAS_SVE2)) {
61*fb1b10abSAndroid Build Coastguard Worker     append_negative_gtest_filter(":SVE2.*:SVE2/*");
62*fb1b10abSAndroid Build Coastguard Worker   }
63*fb1b10abSAndroid Build Coastguard Worker #elif VPX_ARCH_ARM
64*fb1b10abSAndroid Build Coastguard Worker   const int caps = arm_cpu_caps();
65*fb1b10abSAndroid Build Coastguard Worker   if (!(caps & HAS_NEON)) append_negative_gtest_filter(":NEON.*:NEON/*");
66*fb1b10abSAndroid Build Coastguard Worker #endif  // VPX_ARCH_ARM
67*fb1b10abSAndroid Build Coastguard Worker 
68*fb1b10abSAndroid Build Coastguard Worker #if VPX_ARCH_X86 || VPX_ARCH_X86_64
69*fb1b10abSAndroid Build Coastguard Worker   const int simd_caps = x86_simd_caps();
70*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_MMX)) append_negative_gtest_filter(":MMX.*:MMX/*");
71*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_SSE)) append_negative_gtest_filter(":SSE.*:SSE/*");
72*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_SSE2)) append_negative_gtest_filter(":SSE2.*:SSE2/*");
73*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_SSE3)) append_negative_gtest_filter(":SSE3.*:SSE3/*");
74*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_SSSE3)) {
75*fb1b10abSAndroid Build Coastguard Worker     append_negative_gtest_filter(":SSSE3.*:SSSE3/*");
76*fb1b10abSAndroid Build Coastguard Worker   }
77*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_SSE4_1)) {
78*fb1b10abSAndroid Build Coastguard Worker     append_negative_gtest_filter(":SSE4_1.*:SSE4_1/*");
79*fb1b10abSAndroid Build Coastguard Worker   }
80*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_AVX)) append_negative_gtest_filter(":AVX.*:AVX/*");
81*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_AVX2)) append_negative_gtest_filter(":AVX2.*:AVX2/*");
82*fb1b10abSAndroid Build Coastguard Worker   if (!(simd_caps & HAS_AVX512)) {
83*fb1b10abSAndroid Build Coastguard Worker     append_negative_gtest_filter(":AVX512.*:AVX512/*");
84*fb1b10abSAndroid Build Coastguard Worker   }
85*fb1b10abSAndroid Build Coastguard Worker #endif  // VPX_ARCH_X86 || VPX_ARCH_X86_64
86*fb1b10abSAndroid Build Coastguard Worker 
87*fb1b10abSAndroid Build Coastguard Worker   // Shared library builds don't support whitebox tests that exercise internal
88*fb1b10abSAndroid Build Coastguard Worker   // symbols.
89*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8
90*fb1b10abSAndroid Build Coastguard Worker   vp8_rtcd();
91*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_VP8
92*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9
93*fb1b10abSAndroid Build Coastguard Worker   vp9_rtcd();
94*fb1b10abSAndroid Build Coastguard Worker #endif  // CONFIG_VP9
95*fb1b10abSAndroid Build Coastguard Worker   vpx_dsp_rtcd();
96*fb1b10abSAndroid Build Coastguard Worker   vpx_scale_rtcd();
97*fb1b10abSAndroid Build Coastguard Worker #endif  // !CONFIG_SHARED
98*fb1b10abSAndroid Build Coastguard Worker }
99*fb1b10abSAndroid Build Coastguard Worker }  // namespace libvpx_test
100