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 Workerstatic 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 Workervoid 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