tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

intrapred_test.cc (21037B)


      1 /*
      2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
      3 *
      4 * This source code is subject to the terms of the BSD 2 Clause License and
      5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
      6 * was not distributed with this source code in the LICENSE file, you can
      7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
      8 * Media Patent License 1.0 was not distributed with this source code in the
      9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
     10 */
     11 
     12 #include <string>
     13 
     14 #include "gtest/gtest.h"
     15 
     16 #include "config/aom_config.h"
     17 #include "config/aom_dsp_rtcd.h"
     18 
     19 #include "test/acm_random.h"
     20 #include "test/register_state_check.h"
     21 #include "test/util.h"
     22 #include "av1/common/blockd.h"
     23 #include "av1/common/common.h"
     24 #include "av1/common/pred_common.h"
     25 #include "aom_mem/aom_mem.h"
     26 
     27 namespace {
     28 
     29 using libaom_test::ACMRandom;
     30 
     31 const int count_test_block = 100000;
     32 
     33 using HighbdIntraPred = void (*)(uint16_t *dst, ptrdiff_t stride,
     34                                 const uint16_t *above, const uint16_t *left,
     35                                 int bps);
     36 using IntraPred = void (*)(uint8_t *dst, ptrdiff_t stride, const uint8_t *above,
     37                           const uint8_t *left);
     38 
     39 }  // namespace
     40 
     41 // NOTE: Under gcc version 7.3.0 (Debian 7.3.0-5), if this template is in the
     42 // anonymous namespace, then we get a strange compiler warning in
     43 // the begin() and end() methods of the ParamGenerator template class in
     44 // gtest/internal/gtest-param-util.h:
     45 //   warning: ‘<anonymous>’ is used uninitialized in this function
     46 // As a workaround, put this template outside the anonymous namespace.
     47 // See bug aomedia:2003.
     48 template <typename FuncType>
     49 struct IntraPredFunc {
     50  IntraPredFunc(FuncType pred = nullptr, FuncType ref = nullptr,
     51                int block_width_value = 0, int block_height_value = 0,
     52                int bit_depth_value = 0)
     53      : pred_fn(pred), ref_fn(ref), block_width(block_width_value),
     54        block_height(block_height_value), bit_depth(bit_depth_value) {}
     55 
     56  FuncType pred_fn;
     57  FuncType ref_fn;
     58  int block_width;
     59  int block_height;
     60  int bit_depth;
     61 };
     62 
     63 namespace {
     64 
     65 template <typename FuncType, typename Pixel>
     66 class AV1IntraPredTest
     67    : public ::testing::TestWithParam<IntraPredFunc<FuncType> > {
     68 public:
     69  void RunTest(Pixel *left_col, Pixel *above_data, Pixel *dst, Pixel *ref_dst) {
     70    ACMRandom rnd(ACMRandom::DeterministicSeed());
     71    const int block_width = params_.block_width;
     72    const int block_height = params_.block_height;
     73    above_row_ = above_data + 16;
     74    left_col_ = left_col;
     75    dst_ = dst;
     76    ref_dst_ = ref_dst;
     77    int error_count = 0;
     78    for (int i = 0; i < count_test_block; ++i) {
     79      // Fill edges with random data, try first with saturated values.
     80      for (int x = -1; x <= block_width * 2; x++) {
     81        if (i == 0) {
     82          above_row_[x] = mask_;
     83        } else {
     84          above_row_[x] = rnd.Rand16() & mask_;
     85        }
     86      }
     87      for (int y = 0; y < block_height; y++) {
     88        if (i == 0) {
     89          left_col_[y] = mask_;
     90        } else {
     91          left_col_[y] = rnd.Rand16() & mask_;
     92        }
     93      }
     94      Predict();
     95      CheckPrediction(i, &error_count);
     96    }
     97    ASSERT_EQ(0, error_count);
     98  }
     99  void RunSpeedTest(Pixel *left_col, Pixel *above_data, Pixel *dst,
    100                    Pixel *ref_dst) {
    101    ACMRandom rnd(ACMRandom::DeterministicSeed());
    102    const int block_width = params_.block_width;
    103    const int block_height = params_.block_height;
    104    above_row_ = above_data + 16;
    105    left_col_ = left_col;
    106    dst_ = dst;
    107    ref_dst_ = ref_dst;
    108    int error_count = 0;
    109    const int numIter = 100;
    110 
    111    int c_sum_time = 0;
    112    int simd_sum_time = 0;
    113    for (int i = 0; i < count_test_block; ++i) {
    114      // Fill edges with random data, try first with saturated values.
    115      for (int x = -1; x <= block_width * 2; x++) {
    116        if (i == 0) {
    117          above_row_[x] = mask_;
    118        } else {
    119          above_row_[x] = rnd.Rand16() & mask_;
    120        }
    121      }
    122      for (int y = 0; y < block_height; y++) {
    123        if (i == 0) {
    124          left_col_[y] = mask_;
    125        } else {
    126          left_col_[y] = rnd.Rand16() & mask_;
    127        }
    128      }
    129 
    130      aom_usec_timer c_timer_;
    131      aom_usec_timer_start(&c_timer_);
    132 
    133      PredictRefSpeedTest(numIter);
    134 
    135      aom_usec_timer_mark(&c_timer_);
    136 
    137      aom_usec_timer simd_timer_;
    138      aom_usec_timer_start(&simd_timer_);
    139 
    140      PredictFncSpeedTest(numIter);
    141 
    142      aom_usec_timer_mark(&simd_timer_);
    143 
    144      c_sum_time += static_cast<int>(aom_usec_timer_elapsed(&c_timer_));
    145      simd_sum_time += static_cast<int>(aom_usec_timer_elapsed(&simd_timer_));
    146 
    147      CheckPrediction(i, &error_count);
    148    }
    149 
    150    printf(
    151        "blockWxH = %d x %d c_time = %d \t simd_time = %d \t Gain = %4.2f \n",
    152        block_width, block_height, c_sum_time, simd_sum_time,
    153        (static_cast<float>(c_sum_time) / static_cast<float>(simd_sum_time)));
    154    ASSERT_EQ(0, error_count);
    155  }
    156 
    157 protected:
    158  void SetUp() override {
    159    params_ = this->GetParam();
    160    stride_ = params_.block_width * 3;
    161    mask_ = (1 << params_.bit_depth) - 1;
    162  }
    163 
    164  virtual void Predict() = 0;
    165 
    166  virtual void PredictRefSpeedTest(int num) = 0;
    167  virtual void PredictFncSpeedTest(int num) = 0;
    168 
    169  void CheckPrediction(int test_case_number, int *error_count) const {
    170    // For each pixel ensure that the calculated value is the same as reference.
    171    const int block_width = params_.block_width;
    172    const int block_height = params_.block_height;
    173    for (int y = 0; y < block_height; y++) {
    174      for (int x = 0; x < block_width; x++) {
    175        *error_count += ref_dst_[x + y * stride_] != dst_[x + y * stride_];
    176        if (*error_count == 1) {
    177          ASSERT_EQ(ref_dst_[x + y * stride_], dst_[x + y * stride_])
    178              << " Failed on Test Case Number " << test_case_number
    179              << " location: x = " << x << " y = " << y;
    180        }
    181      }
    182    }
    183  }
    184 
    185  Pixel *above_row_;
    186  Pixel *left_col_;
    187  Pixel *dst_;
    188  Pixel *ref_dst_;
    189  ptrdiff_t stride_;
    190  int mask_;
    191 
    192  IntraPredFunc<FuncType> params_;
    193 };
    194 
    195 #if CONFIG_AV1_HIGHBITDEPTH
    196 class HighbdIntraPredTest : public AV1IntraPredTest<HighbdIntraPred, uint16_t> {
    197 protected:
    198  void Predict() override {
    199    const int bit_depth = params_.bit_depth;
    200    params_.ref_fn(ref_dst_, stride_, above_row_, left_col_, bit_depth);
    201    API_REGISTER_STATE_CHECK(
    202        params_.pred_fn(dst_, stride_, above_row_, left_col_, bit_depth));
    203  }
    204  void PredictRefSpeedTest(int num) override {
    205    const int bit_depth = params_.bit_depth;
    206    for (int i = 0; i < num; i++) {
    207      params_.ref_fn(ref_dst_, stride_, above_row_, left_col_, bit_depth);
    208    }
    209  }
    210  void PredictFncSpeedTest(int num) override {
    211    const int bit_depth = params_.bit_depth;
    212    for (int i = 0; i < num; i++) {
    213      params_.pred_fn(dst_, stride_, above_row_, left_col_, bit_depth);
    214    }
    215  }
    216 };
    217 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(HighbdIntraPredTest);
    218 
    219 #endif
    220 
    221 class LowbdIntraPredTest : public AV1IntraPredTest<IntraPred, uint8_t> {
    222 protected:
    223  void Predict() override {
    224    params_.ref_fn(ref_dst_, stride_, above_row_, left_col_);
    225    API_REGISTER_STATE_CHECK(
    226        params_.pred_fn(dst_, stride_, above_row_, left_col_));
    227  }
    228  void PredictRefSpeedTest(int num) override {
    229    for (int i = 0; i < num; i++) {
    230      params_.ref_fn(ref_dst_, stride_, above_row_, left_col_);
    231    }
    232  }
    233  void PredictFncSpeedTest(int num) override {
    234    for (int i = 0; i < num; i++) {
    235      params_.pred_fn(dst_, stride_, above_row_, left_col_);
    236    }
    237  }
    238 };
    239 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(LowbdIntraPredTest);
    240 
    241 #if CONFIG_AV1_HIGHBITDEPTH
    242 TEST_P(HighbdIntraPredTest, Bitexact) {
    243  // max block size is 64
    244  DECLARE_ALIGNED(16, uint16_t, left_col[2 * 64]);
    245  DECLARE_ALIGNED(16, uint16_t, above_data[2 * 64 + 64]);
    246  DECLARE_ALIGNED(16, uint16_t, dst[3 * 64 * 64]);
    247  DECLARE_ALIGNED(16, uint16_t, ref_dst[3 * 64 * 64]);
    248  av1_zero(left_col);
    249  av1_zero(above_data);
    250  RunTest(left_col, above_data, dst, ref_dst);
    251 }
    252 
    253 TEST_P(HighbdIntraPredTest, DISABLED_Speed) {
    254  // max block size is 64
    255  DECLARE_ALIGNED(16, uint16_t, left_col[2 * 64]);
    256  DECLARE_ALIGNED(16, uint16_t, above_data[2 * 64 + 64]);
    257  DECLARE_ALIGNED(16, uint16_t, dst[3 * 64 * 64]);
    258  DECLARE_ALIGNED(16, uint16_t, ref_dst[3 * 64 * 64]);
    259  av1_zero(left_col);
    260  av1_zero(above_data);
    261  RunSpeedTest(left_col, above_data, dst, ref_dst);
    262 }
    263 #endif
    264 
    265 TEST_P(LowbdIntraPredTest, Bitexact) {
    266  // max block size is 64
    267  DECLARE_ALIGNED(16, uint8_t, left_col[2 * 64]);
    268  DECLARE_ALIGNED(16, uint8_t, above_data[2 * 64 + 64]);
    269  DECLARE_ALIGNED(16, uint8_t, dst[3 * 64 * 64]);
    270  DECLARE_ALIGNED(16, uint8_t, ref_dst[3 * 64 * 64]);
    271  av1_zero(left_col);
    272  av1_zero(above_data);
    273  RunTest(left_col, above_data, dst, ref_dst);
    274 }
    275 TEST_P(LowbdIntraPredTest, DISABLED_Speed) {
    276  // max block size is 64
    277  DECLARE_ALIGNED(16, uint8_t, left_col[2 * 64]);
    278  DECLARE_ALIGNED(16, uint8_t, above_data[2 * 64 + 64]);
    279  DECLARE_ALIGNED(16, uint8_t, dst[3 * 64 * 64]);
    280  DECLARE_ALIGNED(16, uint8_t, ref_dst[3 * 64 * 64]);
    281  av1_zero(left_col);
    282  av1_zero(above_data);
    283  RunSpeedTest(left_col, above_data, dst, ref_dst);
    284 }
    285 
    286 #if CONFIG_AV1_HIGHBITDEPTH
    287 // -----------------------------------------------------------------------------
    288 // High Bit Depth Tests
    289 #define highbd_entry(type, width, height, opt, bd)                          \
    290  IntraPredFunc<HighbdIntraPred>(                                           \
    291      &aom_highbd_##type##_predictor_##width##x##height##_##opt,            \
    292      &aom_highbd_##type##_predictor_##width##x##height##_c, width, height, \
    293      bd)
    294 
    295 #if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
    296 #define highbd_intrapred(type, opt, bd)                                        \
    297  highbd_entry(type, 4, 4, opt, bd), highbd_entry(type, 4, 8, opt, bd),        \
    298      highbd_entry(type, 4, 16, opt, bd), highbd_entry(type, 8, 4, opt, bd),   \
    299      highbd_entry(type, 8, 8, opt, bd), highbd_entry(type, 8, 16, opt, bd),   \
    300      highbd_entry(type, 8, 32, opt, bd), highbd_entry(type, 16, 4, opt, bd),  \
    301      highbd_entry(type, 16, 8, opt, bd), highbd_entry(type, 16, 16, opt, bd), \
    302      highbd_entry(type, 16, 32, opt, bd),                                     \
    303      highbd_entry(type, 16, 64, opt, bd), highbd_entry(type, 32, 8, opt, bd), \
    304      highbd_entry(type, 32, 16, opt, bd),                                     \
    305      highbd_entry(type, 32, 32, opt, bd),                                     \
    306      highbd_entry(type, 32, 64, opt, bd),                                     \
    307      highbd_entry(type, 64, 16, opt, bd),                                     \
    308      highbd_entry(type, 64, 32, opt, bd), highbd_entry(type, 64, 64, opt, bd)
    309 #else
    310 #define highbd_intrapred(type, opt, bd)                                       \
    311  highbd_entry(type, 4, 4, opt, bd), highbd_entry(type, 4, 8, opt, bd),       \
    312      highbd_entry(type, 8, 4, opt, bd), highbd_entry(type, 8, 8, opt, bd),   \
    313      highbd_entry(type, 8, 16, opt, bd), highbd_entry(type, 16, 8, opt, bd), \
    314      highbd_entry(type, 16, 16, opt, bd),                                    \
    315      highbd_entry(type, 16, 32, opt, bd),                                    \
    316      highbd_entry(type, 32, 16, opt, bd),                                    \
    317      highbd_entry(type, 32, 32, opt, bd),                                    \
    318      highbd_entry(type, 32, 64, opt, bd),                                    \
    319      highbd_entry(type, 64, 32, opt, bd), highbd_entry(type, 64, 64, opt, bd)
    320 #endif  // !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
    321 #endif  // CONFIG_AV1_HIGHBITDEPTH
    322 
    323 // ---------------------------------------------------------------------------
    324 // Low Bit Depth Tests
    325 
    326 #define lowbd_entry(type, width, height, opt)                                  \
    327  IntraPredFunc<IntraPred>(&aom_##type##_predictor_##width##x##height##_##opt, \
    328                           &aom_##type##_predictor_##width##x##height##_c,     \
    329                           width, height, 8)
    330 
    331 #if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
    332 #define lowbd_intrapred(type, opt)                                    \
    333  lowbd_entry(type, 4, 4, opt), lowbd_entry(type, 4, 8, opt),         \
    334      lowbd_entry(type, 4, 16, opt), lowbd_entry(type, 8, 4, opt),    \
    335      lowbd_entry(type, 8, 8, opt), lowbd_entry(type, 8, 16, opt),    \
    336      lowbd_entry(type, 8, 32, opt), lowbd_entry(type, 16, 4, opt),   \
    337      lowbd_entry(type, 16, 8, opt), lowbd_entry(type, 16, 16, opt),  \
    338      lowbd_entry(type, 16, 32, opt), lowbd_entry(type, 16, 64, opt), \
    339      lowbd_entry(type, 32, 8, opt), lowbd_entry(type, 32, 16, opt),  \
    340      lowbd_entry(type, 32, 32, opt), lowbd_entry(type, 32, 64, opt), \
    341      lowbd_entry(type, 64, 16, opt), lowbd_entry(type, 64, 32, opt), \
    342      lowbd_entry(type, 64, 64, opt)
    343 #else
    344 #define lowbd_intrapred(type, opt)                                    \
    345  lowbd_entry(type, 4, 4, opt), lowbd_entry(type, 4, 8, opt),         \
    346      lowbd_entry(type, 8, 4, opt), lowbd_entry(type, 8, 8, opt),     \
    347      lowbd_entry(type, 8, 16, opt), lowbd_entry(type, 16, 8, opt),   \
    348      lowbd_entry(type, 16, 16, opt), lowbd_entry(type, 16, 32, opt), \
    349      lowbd_entry(type, 32, 16, opt), lowbd_entry(type, 32, 32, opt), \
    350      lowbd_entry(type, 32, 64, opt), lowbd_entry(type, 64, 32, opt), \
    351      lowbd_entry(type, 64, 64, opt)
    352 #endif  // !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
    353 
    354 #if HAVE_SSE2
    355 const IntraPredFunc<IntraPred> LowbdIntraPredTestVector[] = {
    356  lowbd_intrapred(dc, sse2),      lowbd_intrapred(dc_top, sse2),
    357  lowbd_intrapred(dc_left, sse2), lowbd_intrapred(dc_128, sse2),
    358  lowbd_intrapred(v, sse2),       lowbd_intrapred(h, sse2),
    359 };
    360 
    361 INSTANTIATE_TEST_SUITE_P(SSE2, LowbdIntraPredTest,
    362                         ::testing::ValuesIn(LowbdIntraPredTestVector));
    363 #endif  // HAVE_SSE2
    364 
    365 #if HAVE_NEON
    366 const IntraPredFunc<IntraPred> LowbdIntraPredTestVectorNeon[] = {
    367  lowbd_intrapred(dc, neon),       lowbd_intrapred(dc_top, neon),
    368  lowbd_intrapred(dc_left, neon),  lowbd_intrapred(dc_128, neon),
    369  lowbd_intrapred(v, neon),        lowbd_intrapred(h, neon),
    370  lowbd_intrapred(smooth, neon),   lowbd_intrapred(smooth_v, neon),
    371  lowbd_intrapred(smooth_h, neon), lowbd_intrapred(paeth, neon),
    372 };
    373 
    374 INSTANTIATE_TEST_SUITE_P(NEON, LowbdIntraPredTest,
    375                         ::testing::ValuesIn(LowbdIntraPredTestVectorNeon));
    376 #endif  // HAVE_NEON
    377 
    378 #if HAVE_SSSE3
    379 const IntraPredFunc<IntraPred> LowbdIntraPredTestVectorSsse3[] = {
    380  lowbd_intrapred(paeth, ssse3),
    381  lowbd_intrapred(smooth, ssse3),
    382  lowbd_intrapred(smooth_v, ssse3),
    383  lowbd_intrapred(smooth_h, ssse3),
    384 };
    385 
    386 INSTANTIATE_TEST_SUITE_P(SSSE3, LowbdIntraPredTest,
    387                         ::testing::ValuesIn(LowbdIntraPredTestVectorSsse3));
    388 #endif  // HAVE_SSSE3
    389 
    390 #if HAVE_AVX2
    391 const IntraPredFunc<IntraPred> LowbdIntraPredTestVectorAvx2[] = {
    392 #if !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
    393  lowbd_entry(dc, 32, 16, avx2),      lowbd_entry(dc, 32, 32, avx2),
    394  lowbd_entry(dc, 32, 64, avx2),      lowbd_entry(dc, 64, 16, avx2),
    395  lowbd_entry(dc, 64, 32, avx2),      lowbd_entry(dc, 64, 64, avx2),
    396 
    397  lowbd_entry(dc_top, 32, 16, avx2),  lowbd_entry(dc_top, 32, 32, avx2),
    398  lowbd_entry(dc_top, 32, 64, avx2),  lowbd_entry(dc_top, 64, 16, avx2),
    399  lowbd_entry(dc_top, 64, 32, avx2),  lowbd_entry(dc_top, 64, 64, avx2),
    400 
    401  lowbd_entry(dc_left, 32, 16, avx2), lowbd_entry(dc_left, 32, 32, avx2),
    402  lowbd_entry(dc_left, 32, 64, avx2), lowbd_entry(dc_left, 64, 16, avx2),
    403  lowbd_entry(dc_left, 64, 32, avx2), lowbd_entry(dc_left, 64, 64, avx2),
    404 
    405  lowbd_entry(dc_128, 32, 16, avx2),  lowbd_entry(dc_128, 32, 32, avx2),
    406  lowbd_entry(dc_128, 32, 64, avx2),  lowbd_entry(dc_128, 64, 16, avx2),
    407  lowbd_entry(dc_128, 64, 32, avx2),  lowbd_entry(dc_128, 64, 64, avx2),
    408 
    409  lowbd_entry(v, 32, 16, avx2),       lowbd_entry(v, 32, 32, avx2),
    410  lowbd_entry(v, 32, 64, avx2),       lowbd_entry(v, 64, 16, avx2),
    411  lowbd_entry(v, 64, 32, avx2),       lowbd_entry(v, 64, 64, avx2),
    412 
    413  lowbd_entry(h, 32, 32, avx2),
    414 
    415  lowbd_entry(paeth, 16, 8, avx2),    lowbd_entry(paeth, 16, 16, avx2),
    416  lowbd_entry(paeth, 16, 32, avx2),   lowbd_entry(paeth, 32, 16, avx2),
    417  lowbd_entry(paeth, 32, 32, avx2),   lowbd_entry(paeth, 32, 64, avx2),
    418  lowbd_entry(paeth, 64, 32, avx2),   lowbd_entry(paeth, 64, 64, avx2),
    419 #else
    420  lowbd_entry(dc, 32, 16, avx2),      lowbd_entry(dc, 32, 32, avx2),
    421  lowbd_entry(dc, 32, 64, avx2),      lowbd_entry(dc, 64, 32, avx2),
    422  lowbd_entry(dc, 64, 64, avx2),
    423 
    424  lowbd_entry(dc_top, 32, 16, avx2),  lowbd_entry(dc_top, 32, 32, avx2),
    425  lowbd_entry(dc_top, 32, 64, avx2),  lowbd_entry(dc_top, 64, 32, avx2),
    426  lowbd_entry(dc_top, 64, 64, avx2),
    427 
    428  lowbd_entry(dc_left, 32, 16, avx2), lowbd_entry(dc_left, 32, 32, avx2),
    429  lowbd_entry(dc_left, 32, 64, avx2), lowbd_entry(dc_left, 64, 32, avx2),
    430  lowbd_entry(dc_left, 64, 64, avx2),
    431 
    432  lowbd_entry(dc_128, 32, 16, avx2),  lowbd_entry(dc_128, 32, 32, avx2),
    433  lowbd_entry(dc_128, 32, 64, avx2),  lowbd_entry(dc_128, 64, 32, avx2),
    434  lowbd_entry(dc_128, 64, 64, avx2),
    435 
    436  lowbd_entry(v, 32, 16, avx2),       lowbd_entry(v, 32, 32, avx2),
    437  lowbd_entry(v, 32, 64, avx2),       lowbd_entry(v, 64, 32, avx2),
    438  lowbd_entry(v, 64, 64, avx2),
    439 
    440  lowbd_entry(h, 32, 32, avx2),
    441 
    442  lowbd_entry(paeth, 16, 8, avx2),    lowbd_entry(paeth, 16, 16, avx2),
    443  lowbd_entry(paeth, 16, 32, avx2),   lowbd_entry(paeth, 32, 16, avx2),
    444  lowbd_entry(paeth, 32, 32, avx2),   lowbd_entry(paeth, 32, 64, avx2),
    445  lowbd_entry(paeth, 64, 32, avx2),   lowbd_entry(paeth, 64, 64, avx2),
    446 #endif  // !CONFIG_REALTIME_ONLY || CONFIG_AV1_DECODER
    447 };
    448 
    449 INSTANTIATE_TEST_SUITE_P(AVX2, LowbdIntraPredTest,
    450                         ::testing::ValuesIn(LowbdIntraPredTestVectorAvx2));
    451 #endif  // HAVE_AVX2
    452 
    453 #if CONFIG_AV1_HIGHBITDEPTH
    454 #if HAVE_NEON
    455 const IntraPredFunc<HighbdIntraPred> HighbdIntraPredTestVectorNeon[] = {
    456  highbd_intrapred(dc, neon, 12),       highbd_intrapred(dc_top, neon, 12),
    457  highbd_intrapred(dc_left, neon, 12),  highbd_intrapred(dc_128, neon, 12),
    458  highbd_intrapred(v, neon, 12),        highbd_intrapred(h, neon, 12),
    459  highbd_intrapred(paeth, neon, 12),    highbd_intrapred(smooth, neon, 12),
    460  highbd_intrapred(smooth_v, neon, 12), highbd_intrapred(smooth_h, neon, 12),
    461 };
    462 
    463 INSTANTIATE_TEST_SUITE_P(NEON, HighbdIntraPredTest,
    464                         ::testing::ValuesIn(HighbdIntraPredTestVectorNeon));
    465 #endif  // HAVE_NEON
    466 
    467 #if HAVE_SSE2
    468 const IntraPredFunc<HighbdIntraPred> HighbdIntraPredTestVectorSse2[] = {
    469  highbd_entry(dc, 4, 4, sse2, 12),
    470  highbd_entry(dc, 4, 8, sse2, 12),
    471  highbd_entry(dc, 8, 4, sse2, 12),
    472  highbd_entry(dc, 8, 8, sse2, 12),
    473  highbd_entry(dc, 8, 16, sse2, 12),
    474  highbd_entry(dc, 16, 8, sse2, 12),
    475  highbd_entry(dc, 16, 16, sse2, 12),
    476  highbd_entry(dc, 16, 32, sse2, 12),
    477  highbd_entry(dc, 32, 16, sse2, 12),
    478  highbd_entry(dc, 32, 32, sse2, 12),
    479 
    480  highbd_entry(dc_top, 4, 4, sse2, 12),
    481  highbd_entry(dc_top, 4, 8, sse2, 12),
    482  highbd_entry(dc_top, 8, 4, sse2, 12),
    483  highbd_entry(dc_top, 8, 8, sse2, 12),
    484  highbd_entry(dc_top, 8, 16, sse2, 12),
    485  highbd_entry(dc_top, 16, 8, sse2, 12),
    486  highbd_entry(dc_top, 16, 16, sse2, 12),
    487  highbd_entry(dc_top, 16, 32, sse2, 12),
    488  highbd_entry(dc_top, 32, 16, sse2, 12),
    489  highbd_entry(dc_top, 32, 32, sse2, 12),
    490 
    491  highbd_entry(dc_left, 4, 4, sse2, 12),
    492  highbd_entry(dc_left, 4, 8, sse2, 12),
    493  highbd_entry(dc_left, 8, 4, sse2, 12),
    494  highbd_entry(dc_left, 8, 8, sse2, 12),
    495  highbd_entry(dc_left, 8, 16, sse2, 12),
    496  highbd_entry(dc_left, 16, 8, sse2, 12),
    497  highbd_entry(dc_left, 16, 16, sse2, 12),
    498  highbd_entry(dc_left, 16, 32, sse2, 12),
    499  highbd_entry(dc_left, 32, 16, sse2, 12),
    500  highbd_entry(dc_left, 32, 32, sse2, 12),
    501 
    502  highbd_entry(dc_128, 4, 4, sse2, 12),
    503  highbd_entry(dc_128, 4, 8, sse2, 12),
    504  highbd_entry(dc_128, 8, 4, sse2, 12),
    505  highbd_entry(dc_128, 8, 8, sse2, 12),
    506  highbd_entry(dc_128, 8, 16, sse2, 12),
    507  highbd_entry(dc_128, 16, 8, sse2, 12),
    508  highbd_entry(dc_128, 16, 16, sse2, 12),
    509  highbd_entry(dc_128, 16, 32, sse2, 12),
    510  highbd_entry(dc_128, 32, 16, sse2, 12),
    511  highbd_entry(dc_128, 32, 32, sse2, 12),
    512 
    513  highbd_entry(v, 4, 4, sse2, 12),
    514  highbd_entry(v, 4, 8, sse2, 12),
    515  highbd_entry(v, 8, 4, sse2, 12),
    516  highbd_entry(v, 8, 8, sse2, 12),
    517  highbd_entry(v, 8, 16, sse2, 12),
    518  highbd_entry(v, 16, 8, sse2, 12),
    519  highbd_entry(v, 16, 16, sse2, 12),
    520  highbd_entry(v, 16, 32, sse2, 12),
    521  highbd_entry(v, 32, 16, sse2, 12),
    522  highbd_entry(v, 32, 32, sse2, 12),
    523 
    524  highbd_entry(h, 4, 4, sse2, 12),
    525  highbd_entry(h, 4, 8, sse2, 12),
    526  highbd_entry(h, 8, 4, sse2, 12),
    527  highbd_entry(h, 8, 8, sse2, 12),
    528  highbd_entry(h, 8, 16, sse2, 12),
    529  highbd_entry(h, 16, 8, sse2, 12),
    530  highbd_entry(h, 16, 16, sse2, 12),
    531  highbd_entry(h, 16, 32, sse2, 12),
    532  highbd_entry(h, 32, 16, sse2, 12),
    533  highbd_entry(h, 32, 32, sse2, 12),
    534 };
    535 
    536 INSTANTIATE_TEST_SUITE_P(SSE2, HighbdIntraPredTest,
    537                         ::testing::ValuesIn(HighbdIntraPredTestVectorSse2));
    538 #endif  // HAVE_SSE2
    539 #endif  // CONFIG_AV1_HIGHBITDEPTH
    540 }  // namespace