mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-06 16:56:55 +08:00
Make 2 step transitive tests measure 2 step time.
Add tests of all macros used by libyuv public headers When a 1 step conversion is added, a 2 step test can compare the old 2 step method to the 1 step. A 1 step unittest is also added which compares C to SIMD. Making the 2 step conversions measure performance of the 2 steps allows the old 2 step performance to be compared to 1 step. All macros used in public headers are added to an ifdef test. Showing them in a unittest allows some diagnostics when a test is failing. Bug: libyuv:901 Change-Id: I7ffa6ed0cb3b506fa1b7fd4b7b1b729658c3c266 Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/2857916 Reviewed-by: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Mirko Bonadei <mbonadei@chromium.org> Commit-Queue: Frank Barchard <fbarchard@chromium.org>
This commit is contained in:
parent
99cddd8051
commit
49ebc996aa
@ -1,6 +1,6 @@
|
||||
Name: libyuv
|
||||
URL: http://code.google.com/p/libyuv/
|
||||
Version: 1787
|
||||
Version: 1788
|
||||
License: BSD
|
||||
License File: LICENSE
|
||||
|
||||
|
||||
@ -54,16 +54,15 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
// The following are available for Visual C and clangcl 32 bit:
|
||||
#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && \
|
||||
defined(_MSC_VER) && !defined(__clang__) && \
|
||||
#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) && \
|
||||
!defined(__clang__) && \
|
||||
(defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2))
|
||||
#define HAS_HASHDJB2_AVX2
|
||||
#define HAS_SUMSQUAREERROR_AVX2
|
||||
#endif
|
||||
|
||||
// The following are available for GCC and clangcl:
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
#define HAS_HAMMINGDISTANCE_SSSE3
|
||||
#endif
|
||||
|
||||
|
||||
@ -269,8 +269,7 @@ extern "C" {
|
||||
|
||||
// The following are available for gcc/clang x86 platforms:
|
||||
// TODO(fbarchard): Port to Visual C
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
#define HAS_ABGRTOAR30ROW_SSSE3
|
||||
#define HAS_ARGBTOAR30ROW_SSSE3
|
||||
#define HAS_ARGBTOAR64ROW_SSSE3
|
||||
@ -377,8 +376,7 @@ extern "C" {
|
||||
// TODO(fbarchard): Port to GCC and Visual C
|
||||
// TODO(fbarchard): re-enable HAS_ARGBTORGB24ROW_AVX512VBMI. Issue libyuv:789
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__)) && \
|
||||
(defined(CLANG_HAS_AVX512))
|
||||
(defined(__x86_64__) || defined(__i386__)) && (defined(CLANG_HAS_AVX512))
|
||||
#define HAS_ARGBTORGB24ROW_AVX512VBMI
|
||||
#endif
|
||||
|
||||
|
||||
@ -74,8 +74,7 @@ extern "C" {
|
||||
|
||||
// The following are available for gcc/clang x86 platforms:
|
||||
// TODO(fbarchard): Port to Visual C
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
#define HAS_SCALEUVROWDOWN2BOX_SSSE3
|
||||
#define HAS_SCALEROWUP2LINEAR_SSE2
|
||||
#define HAS_SCALEROWUP2LINEAR_SSSE3
|
||||
|
||||
@ -11,6 +11,6 @@
|
||||
#ifndef INCLUDE_LIBYUV_VERSION_H_
|
||||
#define INCLUDE_LIBYUV_VERSION_H_
|
||||
|
||||
#define LIBYUV_VERSION 1787
|
||||
#define LIBYUV_VERSION 1788
|
||||
|
||||
#endif // INCLUDE_LIBYUV_VERSION_H_
|
||||
|
||||
@ -19,8 +19,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
// This module is for GCC x86 and x64.
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
|
||||
#if defined(__x86_64__)
|
||||
uint32_t HammingDistance_SSE42(const uint8_t* src_a,
|
||||
|
||||
@ -17,8 +17,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
// This module is for GCC x86 and x64.
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
|
||||
// Transpose 8x8. 32 or 64 bit, but not NaCL for 64 bit.
|
||||
#if defined(HAS_TRANSPOSEWX8_SSSE3)
|
||||
|
||||
@ -16,8 +16,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
// This module is for GCC x86 and x64.
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
|
||||
#if defined(HAS_ARGBTOYROW_SSSE3) || defined(HAS_ARGBGRAYROW_SSSE3)
|
||||
|
||||
@ -3376,8 +3375,7 @@ void OMITFP I422ToRGBARow_SSSE3(const uint8_t* y_buf,
|
||||
"vpsubsw %%ymm1,%%ymm4,%%ymm1 \n" \
|
||||
"vpaddsw %%ymm4,%%ymm2,%%ymm2 \n"
|
||||
|
||||
#define YUVTORGB_REGS_AVX2 \
|
||||
"xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13",
|
||||
#define YUVTORGB_REGS_AVX2 "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13",
|
||||
|
||||
#else // Convert 16 pixels: 16 UV and 16 Y.
|
||||
|
||||
|
||||
@ -2106,8 +2106,7 @@ __declspec(naked) void RGBAToUVRow_SSSE3(const uint8_t* src_argb,
|
||||
__asm vpsraw ymm2, ymm2, 6 \
|
||||
__asm vpackuswb ymm0, ymm0, ymm0 \
|
||||
__asm vpackuswb ymm1, ymm1, ymm1 \
|
||||
__asm vpackuswb ymm2, ymm2, ymm2 \
|
||||
}
|
||||
__asm vpackuswb ymm2, ymm2, ymm2}
|
||||
|
||||
// Store 16 ARGB values.
|
||||
#define STOREARGB_AVX2 \
|
||||
|
||||
@ -17,8 +17,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
// This module is for GCC x86 and x64.
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
|
||||
// Offsets for source bytes 0 to 9
|
||||
static const uvec8 kShuf0 = {0, 1, 3, 4, 5, 7, 8, 9,
|
||||
|
||||
@ -22,8 +22,7 @@ namespace libyuv {
|
||||
|
||||
// TODO(fbarchard): clang x86 has a higher accuracy YUV to RGB.
|
||||
// Port to Visual C and other CPUs
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(__x86_64__) || defined(__i386__))
|
||||
#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
|
||||
#define ERROR_FULL 5
|
||||
#define ERROR_J420 4
|
||||
#else
|
||||
|
||||
@ -183,7 +183,7 @@ TESTPLANARTOP(I412, uint16_t, 2, 1, 1, I444, uint8_t, 1, 1, 1, 12)
|
||||
#define TESTAPLANARTOPI(SRC_FMT_PLANAR, PIXEL_STRIDE, SRC_SUBSAMP_X, \
|
||||
SRC_SUBSAMP_Y, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
W1280, N, NEG, OFF, PN, OFF_U, OFF_V) \
|
||||
TEST_F(LibYUVConvertTest, SRC_FMT_PLANAR##To##FMT_PLANAR##_##PN##N) { \
|
||||
TEST_F(LibYUVConvertTest, SRC_FMT_PLANAR##To##FMT_PLANAR##To##PN##N) { \
|
||||
const int kWidth = W1280; \
|
||||
const int kHeight = benchmark_height_; \
|
||||
const int kSizeUV = \
|
||||
@ -2817,10 +2817,11 @@ TESTPTOB(TestYUY2ToNV12, YUY2ToI420, YUY2ToNV12)
|
||||
TESTPTOB(TestUYVYToNV12, UYVYToI420, UYVYToNV12)
|
||||
|
||||
// Transitive tests. A to B to C is same as A to C.
|
||||
// Benchmarks A To B to C for comparison to 1 step, benchmarked elsewhere.
|
||||
|
||||
#define TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
W1280, N, NEG, OFF, FMT_C, BPP_C) \
|
||||
TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##_##FMT_C##N) { \
|
||||
TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##To##FMT_C##N) { \
|
||||
const int kWidth = W1280; \
|
||||
const int kHeight = benchmark_height_; \
|
||||
const int kStrideB = SUBSAMPLE(kWidth, SUB_B) * BPP_B; \
|
||||
@ -2838,23 +2839,23 @@ TESTPTOB(TestUYVYToNV12, UYVYToI420, UYVYToNV12)
|
||||
src_v[i + OFF] = (fastrand() & 0xff); \
|
||||
} \
|
||||
memset(dst_argb_b + OFF, 1, kStrideB * kHeight); \
|
||||
for (int i = 0; i < benchmark_iterations_; ++i) { \
|
||||
FMT_PLANAR##To##FMT_B(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
|
||||
src_v + OFF, kStrideUV, dst_argb_b + OFF, \
|
||||
kStrideB, kWidth, NEG kHeight); \
|
||||
} \
|
||||
src_v + OFF, kStrideUV, dst_argb_b + OFF, kStrideB, \
|
||||
kWidth, NEG kHeight); \
|
||||
/* Convert to a 3rd format in 1 step and 2 steps and compare */ \
|
||||
const int kStrideC = kWidth * BPP_C; \
|
||||
align_buffer_page_end(dst_argb_c, kStrideC* kHeight + OFF); \
|
||||
align_buffer_page_end(dst_argb_bc, kStrideC* kHeight + OFF); \
|
||||
memset(dst_argb_c + OFF, 2, kStrideC * kHeight); \
|
||||
memset(dst_argb_bc + OFF, 3, kStrideC * kHeight); \
|
||||
for (int i = 0; i < benchmark_iterations_; ++i) { \
|
||||
FMT_PLANAR##To##FMT_C(src_y + OFF, kWidth, src_u + OFF, kStrideUV, \
|
||||
src_v + OFF, kStrideUV, dst_argb_c + OFF, kStrideC, \
|
||||
kWidth, NEG kHeight); \
|
||||
src_v + OFF, kStrideUV, dst_argb_c + OFF, \
|
||||
kStrideC, kWidth, NEG kHeight); \
|
||||
/* Convert B to C */ \
|
||||
FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, kStrideC, \
|
||||
kWidth, kHeight); \
|
||||
FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, \
|
||||
kStrideC, kWidth, kHeight); \
|
||||
} \
|
||||
for (int i = 0; i < kStrideC * kHeight; ++i) { \
|
||||
EXPECT_EQ(dst_argb_c[i + OFF], dst_argb_bc[i + OFF]); \
|
||||
} \
|
||||
@ -2877,26 +2878,28 @@ TESTPTOB(TestUYVYToNV12, UYVYToI420, UYVYToNV12)
|
||||
TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
benchmark_width_, _Opt, +, 0, FMT_C, BPP_C)
|
||||
|
||||
TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, ABGR, 4)
|
||||
TESTPLANARTOE(I420, 2, 2, ABGR, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(J420, 2, 2, ARGB, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(J420, 2, 2, ABGR, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, ARGB, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, ABGR, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(U420, 2, 2, ARGB, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(U420, 2, 2, ABGR, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(I420, 2, 2, BGRA, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(I420, 2, 2, RGBA, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(I420, 2, 2, RGB24, 1, 3, ARGB, 4)
|
||||
TESTPLANARTOE(I420, 2, 2, RAW, 1, 3, RGB24, 3)
|
||||
TESTPLANARTOE(I420, 2, 2, RGB24, 1, 3, RAW, 3)
|
||||
TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, ABGR, 4)
|
||||
TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RAW, 3)
|
||||
TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RGB24, 3)
|
||||
TESTPLANARTOE(I420, 2, 2, BGRA, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(I420, 2, 2, RAW, 1, 3, ARGB, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, RGB24, 1, 3, ARGB, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, RAW, 1, 3, RGB24, 3)
|
||||
TESTPLANARTOE(H420, 2, 2, RGB24, 1, 3, RAW, 3)
|
||||
TESTPLANARTOE(I420, 2, 2, RAW, 1, 3, RGB24, 3)
|
||||
TESTPLANARTOE(I420, 2, 2, RGB24, 1, 3, ARGB, 4)
|
||||
TESTPLANARTOE(I420, 2, 2, RGB24, 1, 3, RAW, 3)
|
||||
TESTPLANARTOE(I420, 2, 2, RGBA, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, ABGR, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, ARGB, 1, 4, ABGR, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, ARGB, 1, 4, RAW, 3)
|
||||
TESTPLANARTOE(H420, 2, 2, ARGB, 1, 4, RGB24, 3)
|
||||
TESTPLANARTOE(H420, 2, 2, RAW, 1, 3, ARGB, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, RAW, 1, 3, RGB24, 3)
|
||||
TESTPLANARTOE(H420, 2, 2, RGB24, 1, 3, ARGB, 4)
|
||||
TESTPLANARTOE(H420, 2, 2, RGB24, 1, 3, RAW, 3)
|
||||
TESTPLANARTOE(J420, 2, 2, ABGR, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(J420, 2, 2, ARGB, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(U420, 2, 2, ABGR, 1, 4, ARGB, 4)
|
||||
TESTPLANARTOE(U420, 2, 2, ARGB, 1, 4, ARGB, 4)
|
||||
#ifdef LITTLE_ENDIAN_ONLY_TEST
|
||||
TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, RGB565, 2)
|
||||
TESTPLANARTOE(I420, 2, 2, ARGB, 1, 4, ARGB1555, 2)
|
||||
@ -2932,7 +2935,7 @@ TESTPLANARTOE(I422, 2, 1, UYVY, 2, 4, ARGB, 4)
|
||||
|
||||
#define TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
W1280, N, NEG, OFF, FMT_C, BPP_C, ATTEN) \
|
||||
TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##_##FMT_C##N) { \
|
||||
TEST_F(LibYUVConvertTest, FMT_PLANAR##To##FMT_B##To##FMT_C##N) { \
|
||||
const int kWidth = W1280; \
|
||||
const int kHeight = benchmark_height_; \
|
||||
const int kStrideB = SUBSAMPLE(kWidth, SUB_B) * BPP_B; \
|
||||
@ -2952,25 +2955,25 @@ TESTPLANARTOE(I422, 2, 1, UYVY, 2, 4, ARGB, 4)
|
||||
src_v[i + OFF] = (fastrand() & 0xff); \
|
||||
} \
|
||||
memset(dst_argb_b + OFF, 1, kStrideB * kHeight); \
|
||||
for (int i = 0; i < benchmark_iterations_; ++i) { \
|
||||
FMT_PLANAR##To##FMT_B( \
|
||||
src_y + OFF, kWidth, src_u + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \
|
||||
src_v + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), src_a + OFF, kWidth, \
|
||||
dst_argb_b + OFF, kStrideB, kWidth, NEG kHeight, ATTEN); \
|
||||
} \
|
||||
/* Convert to a 3rd format in 1 step and 2 steps and compare */ \
|
||||
const int kStrideC = kWidth * BPP_C; \
|
||||
align_buffer_page_end(dst_argb_c, kStrideC* kHeight + OFF); \
|
||||
align_buffer_page_end(dst_argb_bc, kStrideC* kHeight + OFF); \
|
||||
memset(dst_argb_c + OFF, 2, kStrideC * kHeight); \
|
||||
memset(dst_argb_bc + OFF, 3, kStrideC * kHeight); \
|
||||
for (int i = 0; i < benchmark_iterations_; ++i) { \
|
||||
FMT_PLANAR##To##FMT_C( \
|
||||
src_y + OFF, kWidth, src_u + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), \
|
||||
src_v + OFF, SUBSAMPLE(kWidth, SUBSAMP_X), src_a + OFF, kWidth, \
|
||||
dst_argb_c + OFF, kStrideC, kWidth, NEG kHeight, ATTEN); \
|
||||
/* Convert B to C */ \
|
||||
FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, kStrideC, \
|
||||
kWidth, kHeight); \
|
||||
FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, \
|
||||
kStrideC, kWidth, kHeight); \
|
||||
} \
|
||||
for (int i = 0; i < kStrideC * kHeight; ++i) { \
|
||||
EXPECT_EQ(dst_argb_c[i + OFF], dst_argb_bc[i + OFF]); \
|
||||
} \
|
||||
@ -3033,7 +3036,7 @@ TESTQPLANARTOE(V444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
|
||||
|
||||
#define TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, W1280, N, NEG, \
|
||||
OFF, FMT_C, BPP_C) \
|
||||
TEST_F(LibYUVConvertTest, FMT_A##To##FMT_B##_##FMT_C##N) { \
|
||||
TEST_F(LibYUVConvertTest, FMT_A##To##FMT_B##To##FMT_C##N) { \
|
||||
const int kWidth = W1280; \
|
||||
const int kHeight = benchmark_height_; \
|
||||
const int kStrideA = SUBSAMPLE(kWidth, SUB_A) * BPP_A; \
|
||||
@ -3042,21 +3045,21 @@ TESTQPLANARTOE(V444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
|
||||
align_buffer_page_end(dst_argb_b, kStrideB* kHeight + OFF); \
|
||||
MemRandomize(src_argb_a + OFF, kStrideA * kHeight); \
|
||||
memset(dst_argb_b + OFF, 1, kStrideB * kHeight); \
|
||||
for (int i = 0; i < benchmark_iterations_; ++i) { \
|
||||
FMT_A##To##FMT_B(src_argb_a + OFF, kStrideA, dst_argb_b + OFF, kStrideB, \
|
||||
kWidth, NEG kHeight); \
|
||||
} \
|
||||
/* Convert to a 3rd format in 1 step and 2 steps and compare */ \
|
||||
const int kStrideC = kWidth * BPP_C; \
|
||||
align_buffer_page_end(dst_argb_c, kStrideC* kHeight + OFF); \
|
||||
align_buffer_page_end(dst_argb_bc, kStrideC* kHeight + OFF); \
|
||||
memset(dst_argb_c + OFF, 2, kStrideC * kHeight); \
|
||||
memset(dst_argb_bc + OFF, 3, kStrideC * kHeight); \
|
||||
for (int i = 0; i < benchmark_iterations_; ++i) { \
|
||||
FMT_A##To##FMT_C(src_argb_a + OFF, kStrideA, dst_argb_c + OFF, kStrideC, \
|
||||
kWidth, NEG kHeight); \
|
||||
/* Convert B to C */ \
|
||||
FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, kStrideC, \
|
||||
kWidth, kHeight); \
|
||||
FMT_B##To##FMT_C(dst_argb_b + OFF, kStrideB, dst_argb_bc + OFF, \
|
||||
kStrideC, kWidth, kHeight); \
|
||||
} \
|
||||
for (int i = 0; i < kStrideC * kHeight; i += 4) { \
|
||||
EXPECT_EQ(dst_argb_c[i + OFF + 0], dst_argb_bc[i + OFF + 0]); \
|
||||
EXPECT_EQ(dst_argb_c[i + OFF + 1], dst_argb_bc[i + OFF + 1]); \
|
||||
|
||||
@ -72,26 +72,98 @@ TEST_F(LibYUVBaseTest, TestCpuHas) {
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST_F(LibYUVBaseTest, TestCpuCompilerEnabled) {
|
||||
#if defined(__aarch64__)
|
||||
printf("Arm64 build\n");
|
||||
TEST_F(LibYUVBaseTest, TestCompilerMacros) {
|
||||
// Tests all macros used in public headers.
|
||||
#ifdef __ATOMIC_RELAXED
|
||||
printf("__ATOMIC_RELAXED %d\n", __ATOMIC_RELAXED);
|
||||
#endif
|
||||
#if defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON)
|
||||
printf("Neon build enabled\n");
|
||||
#ifdef __cplusplus
|
||||
printf("__cplusplus %ld\n", __cplusplus);
|
||||
#endif
|
||||
#if defined(__x86_64__) || defined(_M_X64)
|
||||
printf("x64 build\n");
|
||||
#ifdef __clang_major__
|
||||
printf("__clang_major__ %d\n", __clang_major__);
|
||||
#endif
|
||||
#ifdef __clang_minor__
|
||||
printf("__clang_minor__ %d\n", __clang_minor__);
|
||||
#endif
|
||||
#ifdef __GNUC__
|
||||
printf("__GNUC__ %d\n", __GNUC__);
|
||||
#endif
|
||||
#ifdef __GNUC_MINOR__
|
||||
printf("__GNUC_MINOR__ %d\n", __GNUC_MINOR__);
|
||||
#endif
|
||||
#ifdef __i386__
|
||||
printf("__i386__ %d\n", __i386__);
|
||||
#endif
|
||||
#ifdef __mips
|
||||
printf("__mips %d\n", __mips);
|
||||
#endif
|
||||
#ifdef __mips_isa_rev
|
||||
printf("__mips_isa_rev %d\n", __mips_isa_rev);
|
||||
#endif
|
||||
#ifdef __x86_64__
|
||||
printf("__x86_64__ %d\n", __x86_64__);
|
||||
#endif
|
||||
#ifdef _MSC_VER
|
||||
printf("_MSC_VER %d\n", _MSC_VER);
|
||||
#endif
|
||||
#if !defined(LIBYUV_DISABLE_X86) && \
|
||||
(defined(GCC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \
|
||||
defined(VISUALC_HAS_AVX2))
|
||||
printf("Has AVX2 1\n");
|
||||
#else
|
||||
printf("Has AVX2 0\n");
|
||||
// If compiler does not support AVX2, the following function not expected:
|
||||
#ifdef __aarch64__
|
||||
printf("__aarch64__ %d\n", __aarch64__);
|
||||
#endif
|
||||
#ifdef __APPLE__
|
||||
printf("__APPLE__ %d\n", __APPLE__);
|
||||
#endif
|
||||
#ifdef __arm__
|
||||
printf("__arm__ %d\n", __arm__);
|
||||
#endif
|
||||
#ifdef __clang__
|
||||
printf("__clang__ %d\n", __clang__);
|
||||
#endif
|
||||
#ifdef __CLR_VER
|
||||
printf("__CLR_VER %d\n", __CLR_VER);
|
||||
#endif
|
||||
#ifdef __CYGWIN__
|
||||
printf("__CYGWIN__ %d\n", __CYGWIN__);
|
||||
#endif
|
||||
#ifdef __llvm__
|
||||
printf("__llvm__ %d\n", __llvm__);
|
||||
#endif
|
||||
#ifdef __mips_msa
|
||||
printf("__mips_msa %d\n", __mips_msa);
|
||||
#endif
|
||||
#ifdef __native_client__
|
||||
printf("__native_client__ %d\n", __native_client__);
|
||||
#endif
|
||||
#ifdef __pic__
|
||||
printf("__pic__ %d\n", __pic__);
|
||||
#endif
|
||||
#ifdef __pnacl__
|
||||
printf("__pnacl__ %d\n", __pnacl__);
|
||||
#endif
|
||||
#ifdef _M_IX86
|
||||
printf("_M_IX86 %d\n", _M_IX86);
|
||||
#endif
|
||||
#ifdef _M_X64
|
||||
printf("_M_X64 %d\n", _M_X64);
|
||||
#endif
|
||||
#ifdef _MIPS_ARCH_LOONGSON3A
|
||||
printf("_MIPS_ARCH_LOONGSON3A %d\n", _MIPS_ARCH_LOONGSON3A);
|
||||
#endif
|
||||
#ifdef _WIN32
|
||||
printf("_WIN32 %d\n", _WIN32);
|
||||
#endif
|
||||
#ifdef GG_LONGLONG
|
||||
printf("GG_LONGLONG %d\n", GG_LONGLONG);
|
||||
#endif
|
||||
#ifdef INT_TYPES_DEFINED
|
||||
printf("INT_TYPES_DEFINED\n");
|
||||
#endif
|
||||
#ifdef __has_feature
|
||||
printf("__has_feature\n");
|
||||
#if __has_feature(memory_sanitizer)
|
||||
printf("__has_feature(memory_sanitizer) %d\n",
|
||||
__has_feature(memory_sanitizer));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user