blob: ae3fd1d282a8af8f2c32b6bb5bb6cb200a1fa142 [file] [log] [blame]
Johannfbea8972012-06-28 11:43:58 -07001/*
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07002 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Johannfbea8972012-06-28 11:43:58 -07003 *
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07004 * 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.
Johann123e8a62017-12-28 14:40:49 -080010 */
Johannfbea8972012-06-28 11:43:58 -070011
Johannfbea8972012-06-28 11:43:58 -070012#include <string.h>
13#include <limits.h>
14#include <stdio.h>
sarahparkera543df52018-11-02 16:02:05 -070015#include <tuple>
Johannfbea8972012-06-28 11:43:58 -070016
Tom Finegan7a07ece2017-02-07 17:14:05 -080017#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
Jingning Han097d59c2015-07-29 14:51:36 -070018
Tom Finegan60e653d2018-05-22 11:34:58 -070019#include "config/aom_config.h"
Tom Finegan44702c82018-05-22 13:00:39 -070020#include "config/aom_dsp_rtcd.h"
Tom Finegan60e653d2018-05-22 11:34:58 -070021
Johannfbea8972012-06-28 11:43:58 -070022#include "test/acm_random.h"
James Zern5b756742013-06-17 22:58:40 -070023#include "test/clear_system_state.h"
James Zerneebb6482012-11-27 13:08:05 -080024#include "test/register_state_check.h"
Johannfbea8972012-06-28 11:43:58 -070025#include "test/util.h"
Yaowu Xuf883b422016-08-30 14:01:10 -070026#include "aom/aom_codec.h"
27#include "aom_mem/aom_mem.h"
Yaowu Xuc27fc142016-08-22 16:08:15 -070028#include "aom_ports/mem.h"
Johannfbea8972012-06-28 11:43:58 -070029
clang-format3a826f12016-08-11 17:46:05 -070030typedef unsigned int (*SadMxNFunc)(const uint8_t *src_ptr, int src_stride,
31 const uint8_t *ref_ptr, int ref_stride);
sarahparkera543df52018-11-02 16:02:05 -070032typedef std::tuple<int, int, SadMxNFunc, int> SadMxNParam;
Johannd5d92892015-04-17 16:11:38 -040033
clang-format3a826f12016-08-11 17:46:05 -070034typedef uint32_t (*SadMxNAvgFunc)(const uint8_t *src_ptr, int src_stride,
35 const uint8_t *ref_ptr, int ref_stride,
Johannd5d92892015-04-17 16:11:38 -040036 const uint8_t *second_pred);
sarahparkera543df52018-11-02 16:02:05 -070037typedef std::tuple<int, int, SadMxNAvgFunc, int> SadMxNAvgParam;
Johannfbea8972012-06-28 11:43:58 -070038
Debargha Mukherjee0c96c112018-12-20 16:04:18 -080039typedef void (*DistWtdCompAvgFunc)(uint8_t *comp_pred, const uint8_t *pred,
40 int width, int height, const uint8_t *ref,
41 int ref_stride,
42 const DIST_WTD_COMP_PARAMS *jcp_param);
sarahparkera543df52018-11-02 16:02:05 -070043typedef std::tuple<int, int, DistWtdCompAvgFunc, int> DistWtdCompAvgParam;
Cheng Chena0367dc2017-11-16 19:20:42 -080044
Debargha Mukherjee0c96c112018-12-20 16:04:18 -080045typedef unsigned int (*DistWtdSadMxhFunc)(const uint8_t *src_ptr,
46 int src_stride,
47 const uint8_t *ref_ptr,
48 int ref_stride, int width,
49 int height);
sarahparkera543df52018-11-02 16:02:05 -070050typedef std::tuple<int, int, DistWtdSadMxhFunc, int> DistWtdSadMxhParam;
Cheng Chena0367dc2017-11-16 19:20:42 -080051
Debargha Mukherjee0c96c112018-12-20 16:04:18 -080052typedef uint32_t (*DistWtdSadMxNAvgFunc)(const uint8_t *src_ptr, int src_stride,
53 const uint8_t *ref_ptr, int ref_stride,
54 const uint8_t *second_pred,
55 const DIST_WTD_COMP_PARAMS *jcp_param);
sarahparkera543df52018-11-02 16:02:05 -070056typedef std::tuple<int, int, DistWtdSadMxNAvgFunc, int> DistWtdSadMxNAvgParam;
Cheng Chena0367dc2017-11-16 19:20:42 -080057
clang-format3a826f12016-08-11 17:46:05 -070058typedef void (*SadMxNx4Func)(const uint8_t *src_ptr, int src_stride,
59 const uint8_t *const ref_ptr[], int ref_stride,
Peter de Rivaz7eee4872014-10-16 13:41:55 +010060 uint32_t *sad_array);
sarahparkera543df52018-11-02 16:02:05 -070061typedef std::tuple<int, int, SadMxNx4Func, int> SadMxNx4Param;
John Koleszar1cfc86e2013-03-01 12:43:41 -080062
Ruiling Song8dc32d72020-01-20 15:33:37 +080063typedef void (*SadMxNx4AvgFunc)(const uint8_t *src_ptr, int src_stride,
64 const uint8_t *const ref_ptr[], int ref_stride,
65 const uint8_t *second_pred,
66 uint32_t *sad_array);
67typedef std::tuple<int, int, SadMxNx4AvgFunc, int> SadMxNx4AvgParam;
68
Yaowu Xuc27fc142016-08-22 16:08:15 -070069using libaom_test::ACMRandom;
Johannfbea8972012-06-28 11:43:58 -070070
71namespace {
John Koleszar1cfc86e2013-03-01 12:43:41 -080072class SADTestBase : public ::testing::Test {
James Zern10f8b362012-08-27 17:13:09 -070073 public:
clang-format3a826f12016-08-11 17:46:05 -070074 SADTestBase(int width, int height, int bit_depth)
75 : width_(width), height_(height), bd_(bit_depth) {}
John Koleszar1cfc86e2013-03-01 12:43:41 -080076
James Zern10f8b362012-08-27 17:13:09 -070077 static void SetUpTestCase() {
clang-format3a826f12016-08-11 17:46:05 -070078 source_data8_ = reinterpret_cast<uint8_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070079 aom_memalign(kDataAlignment, kDataBlockSize));
clang-format3a826f12016-08-11 17:46:05 -070080 reference_data8_ = reinterpret_cast<uint8_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070081 aom_memalign(kDataAlignment, kDataBufferSize));
clang-format3a826f12016-08-11 17:46:05 -070082 second_pred8_ =
Yaowu Xuf883b422016-08-30 14:01:10 -070083 reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment, 128 * 128));
Cheng Chena0367dc2017-11-16 19:20:42 -080084 comp_pred8_ =
85 reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment, 128 * 128));
86 comp_pred8_test_ =
87 reinterpret_cast<uint8_t *>(aom_memalign(kDataAlignment, 128 * 128));
clang-format3a826f12016-08-11 17:46:05 -070088 source_data16_ = reinterpret_cast<uint16_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070089 aom_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
clang-format3a826f12016-08-11 17:46:05 -070090 reference_data16_ = reinterpret_cast<uint16_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070091 aom_memalign(kDataAlignment, kDataBufferSize * sizeof(uint16_t)));
clang-format3a826f12016-08-11 17:46:05 -070092 second_pred16_ = reinterpret_cast<uint16_t *>(
Yaowu Xuf883b422016-08-30 14:01:10 -070093 aom_memalign(kDataAlignment, 128 * 128 * sizeof(uint16_t)));
Cheng Chena0367dc2017-11-16 19:20:42 -080094 comp_pred16_ = reinterpret_cast<uint16_t *>(
95 aom_memalign(kDataAlignment, 128 * 128 * sizeof(uint16_t)));
96 comp_pred16_test_ = reinterpret_cast<uint16_t *>(
97 aom_memalign(kDataAlignment, 128 * 128 * sizeof(uint16_t)));
James Zern10f8b362012-08-27 17:13:09 -070098 }
99
100 static void TearDownTestCase() {
Yaowu Xuf883b422016-08-30 14:01:10 -0700101 aom_free(source_data8_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100102 source_data8_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -0700103 aom_free(reference_data8_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100104 reference_data8_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -0700105 aom_free(second_pred8_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100106 second_pred8_ = NULL;
Cheng Chena0367dc2017-11-16 19:20:42 -0800107 aom_free(comp_pred8_);
108 comp_pred8_ = NULL;
109 aom_free(comp_pred8_test_);
110 comp_pred8_test_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -0700111 aom_free(source_data16_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100112 source_data16_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -0700113 aom_free(reference_data16_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100114 reference_data16_ = NULL;
Yaowu Xuf883b422016-08-30 14:01:10 -0700115 aom_free(second_pred16_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100116 second_pred16_ = NULL;
Cheng Chena0367dc2017-11-16 19:20:42 -0800117 aom_free(comp_pred16_);
118 comp_pred16_ = NULL;
119 aom_free(comp_pred16_test_);
120 comp_pred16_test_ = NULL;
James Zern10f8b362012-08-27 17:13:09 -0700121 }
122
Yaowu Xuc27fc142016-08-22 16:08:15 -0700123 virtual void TearDown() { libaom_test::ClearSystemState(); }
James Zern5b756742013-06-17 22:58:40 -0700124
James Zern10f8b362012-08-27 17:13:09 -0700125 protected:
Geza Lore697bf5b2016-03-02 11:12:52 +0000126 // Handle up to 4 128x128 blocks, with stride up to 256
James Zern10f8b362012-08-27 17:13:09 -0700127 static const int kDataAlignment = 16;
Geza Lore697bf5b2016-03-02 11:12:52 +0000128 static const int kDataBlockSize = 128 * 256;
John Koleszar1cfc86e2013-03-01 12:43:41 -0800129 static const int kDataBufferSize = 4 * kDataBlockSize;
James Zern10f8b362012-08-27 17:13:09 -0700130
Johannfbea8972012-06-28 11:43:58 -0700131 virtual void SetUp() {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100132 if (bd_ == -1) {
133 use_high_bit_depth_ = false;
Yaowu Xuf883b422016-08-30 14:01:10 -0700134 bit_depth_ = AOM_BITS_8;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100135 source_data_ = source_data8_;
136 reference_data_ = reference_data8_;
137 second_pred_ = second_pred8_;
Cheng Chena0367dc2017-11-16 19:20:42 -0800138 comp_pred_ = comp_pred8_;
139 comp_pred_test_ = comp_pred8_test_;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100140 } else {
141 use_high_bit_depth_ = true;
Yaowu Xuf883b422016-08-30 14:01:10 -0700142 bit_depth_ = static_cast<aom_bit_depth_t>(bd_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100143 source_data_ = CONVERT_TO_BYTEPTR(source_data16_);
144 reference_data_ = CONVERT_TO_BYTEPTR(reference_data16_);
145 second_pred_ = CONVERT_TO_BYTEPTR(second_pred16_);
Cheng Chena0367dc2017-11-16 19:20:42 -0800146 comp_pred_ = CONVERT_TO_BYTEPTR(comp_pred16_);
147 comp_pred_test_ = CONVERT_TO_BYTEPTR(comp_pred16_test_);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100148 }
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100149 mask_ = (1 << bit_depth_) - 1;
John Koleszar6b653cb2013-02-28 17:03:02 -0800150 source_stride_ = (width_ + 31) & ~31;
Johannfbea8972012-06-28 11:43:58 -0700151 reference_stride_ = width_ * 2;
152 rnd_.Reset(ACMRandom::DeterministicSeed());
153 }
154
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100155 virtual uint8_t *GetReference(int block_idx) {
Johannd5d92892015-04-17 16:11:38 -0400156 if (use_high_bit_depth_)
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100157 return CONVERT_TO_BYTEPTR(CONVERT_TO_SHORTPTR(reference_data_) +
158 block_idx * kDataBlockSize);
John Koleszar1cfc86e2013-03-01 12:43:41 -0800159 return reference_data_ + block_idx * kDataBlockSize;
Johannfbea8972012-06-28 11:43:58 -0700160 }
161
162 // Sum of Absolute Differences. Given two blocks, calculate the absolute
163 // difference between two pixels in the same relative location; accumulate.
Johannd5d92892015-04-17 16:11:38 -0400164 unsigned int ReferenceSAD(int block_idx) {
Johannfbea8972012-06-28 11:43:58 -0700165 unsigned int sad = 0;
clang-format3a826f12016-08-11 17:46:05 -0700166 const uint8_t *const reference8 = GetReference(block_idx);
167 const uint8_t *const source8 = source_data_;
clang-format3a826f12016-08-11 17:46:05 -0700168 const uint16_t *const reference16 =
169 CONVERT_TO_SHORTPTR(GetReference(block_idx));
170 const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
Johannfbea8972012-06-28 11:43:58 -0700171 for (int h = 0; h < height_; ++h) {
172 for (int w = 0; w < width_; ++w) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100173 if (!use_high_bit_depth_) {
Johannd5d92892015-04-17 16:11:38 -0400174 sad += abs(source8[h * source_stride_ + w] -
175 reference8[h * reference_stride_ + w]);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100176 } else {
Johannd5d92892015-04-17 16:11:38 -0400177 sad += abs(source16[h * source_stride_ + w] -
178 reference16[h * reference_stride_ + w]);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100179 }
Jim Bankoskia16794d2014-05-15 08:31:20 -0700180 }
Johannfbea8972012-06-28 11:43:58 -0700181 }
182 return sad;
183 }
184
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100185 // Sum of Absolute Differences Average. Given two blocks, and a prediction
186 // calculate the absolute difference between one pixel and average of the
187 // corresponding and predicted pixels; accumulate.
Johannd5d92892015-04-17 16:11:38 -0400188 unsigned int ReferenceSADavg(int block_idx) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100189 unsigned int sad = 0;
Johannd5d92892015-04-17 16:11:38 -0400190 const uint8_t *const reference8 = GetReference(block_idx);
191 const uint8_t *const source8 = source_data_;
192 const uint8_t *const second_pred8 = second_pred_;
Johannd5d92892015-04-17 16:11:38 -0400193 const uint16_t *const reference16 =
194 CONVERT_TO_SHORTPTR(GetReference(block_idx));
195 const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
196 const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
Johannfbea8972012-06-28 11:43:58 -0700197 for (int h = 0; h < height_; ++h) {
198 for (int w = 0; w < width_; ++w) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100199 if (!use_high_bit_depth_) {
200 const int tmp = second_pred8[h * width_ + w] +
clang-format3a826f12016-08-11 17:46:05 -0700201 reference8[h * reference_stride_ + w];
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100202 const uint8_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
203 sad += abs(source8[h * source_stride_ + w] - comp_pred);
204 } else {
205 const int tmp = second_pred16[h * width_ + w] +
clang-format3a826f12016-08-11 17:46:05 -0700206 reference16[h * reference_stride_ + w];
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100207 const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
208 sad += abs(source16[h * source_stride_ + w] - comp_pred);
209 }
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100210 }
211 }
212 return sad;
213 }
214
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800215 void ReferenceDistWtdCompAvg(int block_idx) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800216 const uint8_t *const reference8 = GetReference(block_idx);
217 const uint8_t *const second_pred8 = second_pred_;
218 uint8_t *const comp_pred8 = comp_pred_;
Cheng Chena0367dc2017-11-16 19:20:42 -0800219 const uint16_t *const reference16 =
220 CONVERT_TO_SHORTPTR(GetReference(block_idx));
221 const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
222 uint16_t *const comp_pred16 = CONVERT_TO_SHORTPTR(comp_pred_);
Cheng Chena0367dc2017-11-16 19:20:42 -0800223 for (int h = 0; h < height_; ++h) {
224 for (int w = 0; w < width_; ++w) {
225 if (!use_high_bit_depth_) {
226 const int tmp =
227 second_pred8[h * width_ + w] * jcp_param_.bck_offset +
228 reference8[h * reference_stride_ + w] * jcp_param_.fwd_offset;
229 comp_pred8[h * width_ + w] = ROUND_POWER_OF_TWO(tmp, 4);
Cheng Chena0367dc2017-11-16 19:20:42 -0800230 } else {
231 const int tmp =
232 second_pred16[h * width_ + w] * jcp_param_.bck_offset +
233 reference16[h * reference_stride_ + w] * jcp_param_.fwd_offset;
234 comp_pred16[h * width_ + w] = ROUND_POWER_OF_TWO(tmp, 4);
Cheng Chena0367dc2017-11-16 19:20:42 -0800235 }
236 }
237 }
238 }
239
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800240 unsigned int ReferenceDistWtdSADavg(int block_idx) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800241 unsigned int sad = 0;
242 const uint8_t *const reference8 = GetReference(block_idx);
243 const uint8_t *const source8 = source_data_;
244 const uint8_t *const second_pred8 = second_pred_;
Cheng Chena0367dc2017-11-16 19:20:42 -0800245 const uint16_t *const reference16 =
246 CONVERT_TO_SHORTPTR(GetReference(block_idx));
247 const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
248 const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
Cheng Chena0367dc2017-11-16 19:20:42 -0800249 for (int h = 0; h < height_; ++h) {
250 for (int w = 0; w < width_; ++w) {
251 if (!use_high_bit_depth_) {
252 const int tmp =
253 second_pred8[h * width_ + w] * jcp_param_.bck_offset +
254 reference8[h * reference_stride_ + w] * jcp_param_.fwd_offset;
255 const uint8_t comp_pred = ROUND_POWER_OF_TWO(tmp, 4);
256 sad += abs(source8[h * source_stride_ + w] - comp_pred);
Cheng Chena0367dc2017-11-16 19:20:42 -0800257 } else {
258 const int tmp =
259 second_pred16[h * width_ + w] * jcp_param_.bck_offset +
260 reference16[h * reference_stride_ + w] * jcp_param_.fwd_offset;
261 const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 4);
262 sad += abs(source16[h * source_stride_ + w] - comp_pred);
Cheng Chena0367dc2017-11-16 19:20:42 -0800263 }
264 }
265 }
266 return sad;
267 }
Cheng Chena0367dc2017-11-16 19:20:42 -0800268
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100269 void FillConstant(uint8_t *data, int stride, uint16_t fill_constant) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100270 uint8_t *data8 = data;
271 uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100272 for (int h = 0; h < height_; ++h) {
273 for (int w = 0; w < width_; ++w) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100274 if (!use_high_bit_depth_) {
Deb Mukherjee00c385f2014-11-14 15:12:01 -0800275 data8[h * stride + w] = static_cast<uint8_t>(fill_constant);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100276 } else {
277 data16[h * stride + w] = fill_constant;
278 }
Johannfbea8972012-06-28 11:43:58 -0700279 }
280 }
281 }
282
283 void FillRandom(uint8_t *data, int stride) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100284 uint8_t *data8 = data;
285 uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
Johannfbea8972012-06-28 11:43:58 -0700286 for (int h = 0; h < height_; ++h) {
287 for (int w = 0; w < width_; ++w) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100288 if (!use_high_bit_depth_) {
289 data8[h * stride + w] = rnd_.Rand8();
290 } else {
291 data16[h * stride + w] = rnd_.Rand16() & mask_;
292 }
Johannfbea8972012-06-28 11:43:58 -0700293 }
294 }
295 }
296
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100297 int width_, height_, mask_, bd_;
Yaowu Xuf883b422016-08-30 14:01:10 -0700298 aom_bit_depth_t bit_depth_;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100299 static uint8_t *source_data_;
300 static uint8_t *reference_data_;
301 static uint8_t *second_pred_;
John Koleszar1cfc86e2013-03-01 12:43:41 -0800302 int source_stride_;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100303 bool use_high_bit_depth_;
304 static uint8_t *source_data8_;
305 static uint8_t *reference_data8_;
306 static uint8_t *second_pred8_;
307 static uint16_t *source_data16_;
308 static uint16_t *reference_data16_;
309 static uint16_t *second_pred16_;
John Koleszar1cfc86e2013-03-01 12:43:41 -0800310 int reference_stride_;
Cheng Chena0367dc2017-11-16 19:20:42 -0800311 static uint8_t *comp_pred_;
312 static uint8_t *comp_pred8_;
313 static uint16_t *comp_pred16_;
314 static uint8_t *comp_pred_test_;
315 static uint8_t *comp_pred8_test_;
316 static uint16_t *comp_pred16_test_;
Debargha Mukherjeef90004a2018-12-20 13:35:06 -0800317 DIST_WTD_COMP_PARAMS jcp_param_;
John Koleszar1cfc86e2013-03-01 12:43:41 -0800318
319 ACMRandom rnd_;
320};
321
Sebastien Alaiwan4322bc12017-06-05 10:18:28 +0200322class SADx4Test : public ::testing::WithParamInterface<SadMxNx4Param>,
323 public SADTestBase {
John Koleszar1cfc86e2013-03-01 12:43:41 -0800324 public:
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100325 SADx4Test() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
John Koleszar1cfc86e2013-03-01 12:43:41 -0800326
327 protected:
328 void SADs(unsigned int *results) {
clang-format3a826f12016-08-11 17:46:05 -0700329 const uint8_t *references[] = { GetReference(0), GetReference(1),
330 GetReference(2), GetReference(3) };
John Koleszar1cfc86e2013-03-01 12:43:41 -0800331
clang-format3a826f12016-08-11 17:46:05 -0700332 ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(
333 source_data_, source_stride_, references, reference_stride_, results));
John Koleszar1cfc86e2013-03-01 12:43:41 -0800334 }
335
336 void CheckSADs() {
337 unsigned int reference_sad, exp_sad[4];
338
339 SADs(exp_sad);
Deb Mukherjeefc882922014-05-13 10:11:42 -0700340 for (int block = 0; block < 4; ++block) {
Johannd5d92892015-04-17 16:11:38 -0400341 reference_sad = ReferenceSAD(block);
John Koleszar1cfc86e2013-03-01 12:43:41 -0800342
Deb Mukherjeefc882922014-05-13 10:11:42 -0700343 EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
John Koleszar1cfc86e2013-03-01 12:43:41 -0800344 }
345 }
346};
347
Ruiling Song8dc32d72020-01-20 15:33:37 +0800348class SADx4AvgTest : public ::testing::WithParamInterface<SadMxNx4AvgParam>,
349 public SADTestBase {
350 public:
351 SADx4AvgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
352
353 protected:
354 void SADs(unsigned int *results) {
355 const uint8_t *references[] = { GetReference(0), GetReference(1),
356 GetReference(2), GetReference(3) };
357
358 ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(source_data_, source_stride_,
359 references, reference_stride_,
360 second_pred_, results));
361 }
362
363 void CheckSADs() {
364 unsigned int reference_sad, exp_sad[4];
365
366 SADs(exp_sad);
367 for (int block = 0; block < 4; ++block) {
368 reference_sad = ReferenceSADavg(block);
369
370 EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
371 }
372 }
373
374 void SpeedSAD() {
375 int test_count = 200000;
376 unsigned int exp_sad[4];
377 while (test_count > 0) {
378 SADs(exp_sad);
379 test_count -= 1;
380 }
381 }
382};
383
Sebastien Alaiwan4322bc12017-06-05 10:18:28 +0200384class SADTest : public ::testing::WithParamInterface<SadMxNParam>,
385 public SADTestBase {
Deb Mukherjeefc882922014-05-13 10:11:42 -0700386 public:
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100387 SADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
Deb Mukherjeefc882922014-05-13 10:11:42 -0700388
389 protected:
Deb Mukherjeefc882922014-05-13 10:11:42 -0700390 unsigned int SAD(int block_idx) {
391 unsigned int ret;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100392 const uint8_t *const reference = GetReference(block_idx);
Deb Mukherjeefc882922014-05-13 10:11:42 -0700393
James Zern29e1b1a2014-07-09 21:02:02 -0700394 ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
395 reference, reference_stride_));
Deb Mukherjeefc882922014-05-13 10:11:42 -0700396 return ret;
397 }
398
399 void CheckSAD() {
Johannd5d92892015-04-17 16:11:38 -0400400 const unsigned int reference_sad = ReferenceSAD(0);
Deb Mukherjeefc882922014-05-13 10:11:42 -0700401 const unsigned int exp_sad = SAD(0);
402
403 ASSERT_EQ(reference_sad, exp_sad);
404 }
Yi Luoe9832582016-11-29 19:38:12 -0800405
406 void SpeedSAD() {
407 int test_count = 20000000;
408 while (test_count > 0) {
409 SAD(0);
410 test_count -= 1;
411 }
412 }
Deb Mukherjeefc882922014-05-13 10:11:42 -0700413};
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100414
Sebastien Alaiwan4322bc12017-06-05 10:18:28 +0200415class SADavgTest : public ::testing::WithParamInterface<SadMxNAvgParam>,
416 public SADTestBase {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100417 public:
Johannd5d92892015-04-17 16:11:38 -0400418 SADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100419
420 protected:
421 unsigned int SAD_avg(int block_idx) {
422 unsigned int ret;
423 const uint8_t *const reference = GetReference(block_idx);
424
425 ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
426 reference, reference_stride_,
427 second_pred_));
428 return ret;
429 }
430
431 void CheckSAD() {
Johannd5d92892015-04-17 16:11:38 -0400432 const unsigned int reference_sad = ReferenceSADavg(0);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100433 const unsigned int exp_sad = SAD_avg(0);
434
435 ASSERT_EQ(reference_sad, exp_sad);
436 }
437};
Deb Mukherjeefc882922014-05-13 10:11:42 -0700438
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800439class DistWtdCompAvgTest
440 : public ::testing::WithParamInterface<DistWtdCompAvgParam>,
441 public SADTestBase {
Cheng Chena0367dc2017-11-16 19:20:42 -0800442 public:
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800443 DistWtdCompAvgTest()
444 : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
Cheng Chena0367dc2017-11-16 19:20:42 -0800445
446 protected:
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800447 void dist_wtd_comp_avg(int block_idx) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800448 const uint8_t *const reference = GetReference(block_idx);
449
450 ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(comp_pred_test_, second_pred_, width_,
451 height_, reference, reference_stride_,
452 &jcp_param_));
453 }
454
455 void CheckCompAvg() {
456 for (int j = 0; j < 2; ++j) {
457 for (int i = 0; i < 4; ++i) {
458 jcp_param_.fwd_offset = quant_dist_lookup_table[j][i][0];
459 jcp_param_.bck_offset = quant_dist_lookup_table[j][i][1];
460
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800461 ReferenceDistWtdCompAvg(0);
462 dist_wtd_comp_avg(0);
Cheng Chena0367dc2017-11-16 19:20:42 -0800463
464 for (int y = 0; y < height_; ++y)
465 for (int x = 0; x < width_; ++x)
466 ASSERT_EQ(comp_pred_[y * width_ + x],
467 comp_pred_test_[y * width_ + x]);
468 }
469 }
470 }
471};
472
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800473class DistWtdSADTest : public ::testing::WithParamInterface<DistWtdSadMxhParam>,
474 public SADTestBase {
Cheng Chena0367dc2017-11-16 19:20:42 -0800475 public:
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800476 DistWtdSADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
Cheng Chena0367dc2017-11-16 19:20:42 -0800477
478 protected:
479 unsigned int SAD(int block_idx) {
480 unsigned int ret;
481 const uint8_t *const reference = GetReference(block_idx);
482
483 ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
484 reference, reference_stride_,
485 GET_PARAM(0), GET_PARAM(1)));
486 return ret;
487 }
488
489 void CheckSAD() {
490 const unsigned int reference_sad = ReferenceSAD(0);
491 const unsigned int exp_sad = SAD(0);
492
493 ASSERT_EQ(reference_sad, exp_sad);
494 }
495
496 void SpeedSAD() {
497 int test_count = 20000000;
498 while (test_count > 0) {
499 SAD(0);
500 test_count -= 1;
501 }
502 }
503};
504
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800505class DistWtdSADavgTest
506 : public ::testing::WithParamInterface<DistWtdSadMxNAvgParam>,
507 public SADTestBase {
Cheng Chena0367dc2017-11-16 19:20:42 -0800508 public:
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800509 DistWtdSADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}
Cheng Chena0367dc2017-11-16 19:20:42 -0800510
511 protected:
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800512 unsigned int dist_wtd_SAD_avg(int block_idx) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800513 unsigned int ret;
514 const uint8_t *const reference = GetReference(block_idx);
515
516 ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
517 reference, reference_stride_,
518 second_pred_, &jcp_param_));
519 return ret;
520 }
521
522 void CheckSAD() {
523 for (int j = 0; j < 2; ++j) {
524 for (int i = 0; i < 4; ++i) {
525 jcp_param_.fwd_offset = quant_dist_lookup_table[j][i][0];
526 jcp_param_.bck_offset = quant_dist_lookup_table[j][i][1];
527
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800528 const unsigned int reference_sad = ReferenceDistWtdSADavg(0);
529 const unsigned int exp_sad = dist_wtd_SAD_avg(0);
Cheng Chena0367dc2017-11-16 19:20:42 -0800530
531 ASSERT_EQ(reference_sad, exp_sad);
532 }
533 }
534 }
535};
Cheng Chena0367dc2017-11-16 19:20:42 -0800536
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100537uint8_t *SADTestBase::source_data_ = NULL;
538uint8_t *SADTestBase::reference_data_ = NULL;
539uint8_t *SADTestBase::second_pred_ = NULL;
Cheng Chena0367dc2017-11-16 19:20:42 -0800540uint8_t *SADTestBase::comp_pred_ = NULL;
541uint8_t *SADTestBase::comp_pred_test_ = NULL;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100542uint8_t *SADTestBase::source_data8_ = NULL;
543uint8_t *SADTestBase::reference_data8_ = NULL;
544uint8_t *SADTestBase::second_pred8_ = NULL;
Cheng Chena0367dc2017-11-16 19:20:42 -0800545uint8_t *SADTestBase::comp_pred8_ = NULL;
546uint8_t *SADTestBase::comp_pred8_test_ = NULL;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100547uint16_t *SADTestBase::source_data16_ = NULL;
548uint16_t *SADTestBase::reference_data16_ = NULL;
549uint16_t *SADTestBase::second_pred16_ = NULL;
Cheng Chena0367dc2017-11-16 19:20:42 -0800550uint16_t *SADTestBase::comp_pred16_ = NULL;
551uint16_t *SADTestBase::comp_pred16_test_ = NULL;
James Zern10f8b362012-08-27 17:13:09 -0700552
Johannfbea8972012-06-28 11:43:58 -0700553TEST_P(SADTest, MaxRef) {
554 FillConstant(source_data_, source_stride_, 0);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100555 FillConstant(reference_data_, reference_stride_, mask_);
Johannd5d92892015-04-17 16:11:38 -0400556 CheckSAD();
Johannfbea8972012-06-28 11:43:58 -0700557}
558
Deb Mukherjeefc882922014-05-13 10:11:42 -0700559TEST_P(SADTest, MaxSrc) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100560 FillConstant(source_data_, source_stride_, mask_);
Deb Mukherjeefc882922014-05-13 10:11:42 -0700561 FillConstant(reference_data_, reference_stride_, 0);
Johannd5d92892015-04-17 16:11:38 -0400562 CheckSAD();
Deb Mukherjeefc882922014-05-13 10:11:42 -0700563}
564
565TEST_P(SADTest, ShortRef) {
Johannd5d92892015-04-17 16:11:38 -0400566 const int tmp_stride = reference_stride_;
Deb Mukherjeefc882922014-05-13 10:11:42 -0700567 reference_stride_ >>= 1;
568 FillRandom(source_data_, source_stride_);
569 FillRandom(reference_data_, reference_stride_);
Johannd5d92892015-04-17 16:11:38 -0400570 CheckSAD();
Deb Mukherjeefc882922014-05-13 10:11:42 -0700571 reference_stride_ = tmp_stride;
572}
573
574TEST_P(SADTest, UnalignedRef) {
575 // The reference frame, but not the source frame, may be unaligned for
576 // certain types of searches.
577 const int tmp_stride = reference_stride_;
578 reference_stride_ -= 1;
579 FillRandom(source_data_, source_stride_);
580 FillRandom(reference_data_, reference_stride_);
Johannd5d92892015-04-17 16:11:38 -0400581 CheckSAD();
Deb Mukherjeefc882922014-05-13 10:11:42 -0700582 reference_stride_ = tmp_stride;
583}
584
585TEST_P(SADTest, ShortSrc) {
586 const int tmp_stride = source_stride_;
587 source_stride_ >>= 1;
Yi Luoe9832582016-11-29 19:38:12 -0800588 int test_count = 2000;
589 while (test_count > 0) {
590 FillRandom(source_data_, source_stride_);
591 FillRandom(reference_data_, reference_stride_);
592 CheckSAD();
593 test_count -= 1;
594 }
Deb Mukherjeefc882922014-05-13 10:11:42 -0700595 source_stride_ = tmp_stride;
596}
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100597
Yi Luoe9832582016-11-29 19:38:12 -0800598#define SPEED_TEST (0)
599#if SPEED_TEST
600TEST_P(SADTest, Speed) {
601 const int tmp_stride = source_stride_;
602 source_stride_ >>= 1;
603 FillRandom(source_data_, source_stride_);
604 FillRandom(reference_data_, reference_stride_);
605 SpeedSAD();
606 source_stride_ = tmp_stride;
607}
608#endif
609
Johannd5d92892015-04-17 16:11:38 -0400610TEST_P(SADavgTest, MaxRef) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100611 FillConstant(source_data_, source_stride_, 0);
612 FillConstant(reference_data_, reference_stride_, mask_);
613 FillConstant(second_pred_, width_, 0);
614 CheckSAD();
615}
Johannd5d92892015-04-17 16:11:38 -0400616TEST_P(SADavgTest, MaxSrc) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100617 FillConstant(source_data_, source_stride_, mask_);
618 FillConstant(reference_data_, reference_stride_, 0);
619 FillConstant(second_pred_, width_, 0);
620 CheckSAD();
621}
622
Johannd5d92892015-04-17 16:11:38 -0400623TEST_P(SADavgTest, ShortRef) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100624 const int tmp_stride = reference_stride_;
625 reference_stride_ >>= 1;
626 FillRandom(source_data_, source_stride_);
627 FillRandom(reference_data_, reference_stride_);
628 FillRandom(second_pred_, width_);
629 CheckSAD();
630 reference_stride_ = tmp_stride;
631}
632
Johannd5d92892015-04-17 16:11:38 -0400633TEST_P(SADavgTest, UnalignedRef) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100634 // The reference frame, but not the source frame, may be unaligned for
635 // certain types of searches.
636 const int tmp_stride = reference_stride_;
637 reference_stride_ -= 1;
638 FillRandom(source_data_, source_stride_);
639 FillRandom(reference_data_, reference_stride_);
640 FillRandom(second_pred_, width_);
641 CheckSAD();
642 reference_stride_ = tmp_stride;
643}
644
Johannd5d92892015-04-17 16:11:38 -0400645TEST_P(SADavgTest, ShortSrc) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100646 const int tmp_stride = source_stride_;
647 source_stride_ >>= 1;
Yi Luoe9832582016-11-29 19:38:12 -0800648 int test_count = 2000;
649 while (test_count > 0) {
650 FillRandom(source_data_, source_stride_);
651 FillRandom(reference_data_, reference_stride_);
652 FillRandom(second_pred_, width_);
653 CheckSAD();
654 test_count -= 1;
655 }
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100656 source_stride_ = tmp_stride;
657}
Deb Mukherjeefc882922014-05-13 10:11:42 -0700658
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800659TEST_P(DistWtdCompAvgTest, MaxRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800660 FillConstant(reference_data_, reference_stride_, mask_);
661 FillConstant(second_pred_, width_, 0);
662 CheckCompAvg();
663}
664
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800665TEST_P(DistWtdCompAvgTest, MaxSecondPred) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800666 FillConstant(reference_data_, reference_stride_, 0);
667 FillConstant(second_pred_, width_, mask_);
668 CheckCompAvg();
669}
670
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800671TEST_P(DistWtdCompAvgTest, ShortRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800672 const int tmp_stride = reference_stride_;
673 reference_stride_ >>= 1;
674 FillRandom(reference_data_, reference_stride_);
675 FillRandom(second_pred_, width_);
676 CheckCompAvg();
677 reference_stride_ = tmp_stride;
678}
679
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800680TEST_P(DistWtdCompAvgTest, UnalignedRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800681 // The reference frame, but not the source frame, may be unaligned for
682 // certain types of searches.
683 const int tmp_stride = reference_stride_;
684 reference_stride_ -= 1;
685 FillRandom(reference_data_, reference_stride_);
686 FillRandom(second_pred_, width_);
687 CheckCompAvg();
688 reference_stride_ = tmp_stride;
689}
690
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800691TEST_P(DistWtdSADTest, MaxRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800692 FillConstant(source_data_, source_stride_, 0);
693 FillConstant(reference_data_, reference_stride_, mask_);
694 CheckSAD();
695}
696
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800697TEST_P(DistWtdSADTest, MaxSrc) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800698 FillConstant(source_data_, source_stride_, mask_);
699 FillConstant(reference_data_, reference_stride_, 0);
700 CheckSAD();
701}
702
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800703TEST_P(DistWtdSADTest, ShortRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800704 const int tmp_stride = reference_stride_;
705 reference_stride_ >>= 1;
706 FillRandom(source_data_, source_stride_);
707 FillRandom(reference_data_, reference_stride_);
708 CheckSAD();
709 reference_stride_ = tmp_stride;
710}
711
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800712TEST_P(DistWtdSADTest, UnalignedRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800713 // The reference frame, but not the source frame, may be unaligned for
714 // certain types of searches.
715 const int tmp_stride = reference_stride_;
716 reference_stride_ -= 1;
717 FillRandom(source_data_, source_stride_);
718 FillRandom(reference_data_, reference_stride_);
719 CheckSAD();
720 reference_stride_ = tmp_stride;
721}
722
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800723TEST_P(DistWtdSADTest, ShortSrc) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800724 const int tmp_stride = source_stride_;
725 source_stride_ >>= 1;
726 int test_count = 2000;
727 while (test_count > 0) {
728 FillRandom(source_data_, source_stride_);
729 FillRandom(reference_data_, reference_stride_);
730 CheckSAD();
731 test_count -= 1;
732 }
733 source_stride_ = tmp_stride;
734}
735
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800736TEST_P(DistWtdSADavgTest, MaxRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800737 FillConstant(source_data_, source_stride_, 0);
738 FillConstant(reference_data_, reference_stride_, mask_);
739 FillConstant(second_pred_, width_, 0);
740 CheckSAD();
741}
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800742TEST_P(DistWtdSADavgTest, MaxSrc) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800743 FillConstant(source_data_, source_stride_, mask_);
744 FillConstant(reference_data_, reference_stride_, 0);
745 FillConstant(second_pred_, width_, 0);
746 CheckSAD();
747}
748
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800749TEST_P(DistWtdSADavgTest, ShortRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800750 const int tmp_stride = reference_stride_;
751 reference_stride_ >>= 1;
752 FillRandom(source_data_, source_stride_);
753 FillRandom(reference_data_, reference_stride_);
754 FillRandom(second_pred_, width_);
755 CheckSAD();
756 reference_stride_ = tmp_stride;
757}
758
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800759TEST_P(DistWtdSADavgTest, UnalignedRef) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800760 // The reference frame, but not the source frame, may be unaligned for
761 // certain types of searches.
762 const int tmp_stride = reference_stride_;
763 reference_stride_ -= 1;
764 FillRandom(source_data_, source_stride_);
765 FillRandom(reference_data_, reference_stride_);
766 FillRandom(second_pred_, width_);
767 CheckSAD();
768 reference_stride_ = tmp_stride;
769}
770
Debargha Mukherjee0c96c112018-12-20 16:04:18 -0800771TEST_P(DistWtdSADavgTest, ShortSrc) {
Cheng Chena0367dc2017-11-16 19:20:42 -0800772 const int tmp_stride = source_stride_;
773 source_stride_ >>= 1;
774 int test_count = 2000;
775 while (test_count > 0) {
776 FillRandom(source_data_, source_stride_);
777 FillRandom(reference_data_, reference_stride_);
778 FillRandom(second_pred_, width_);
779 CheckSAD();
780 test_count -= 1;
781 }
782 source_stride_ = tmp_stride;
783}
Cheng Chena0367dc2017-11-16 19:20:42 -0800784
John Koleszar1cfc86e2013-03-01 12:43:41 -0800785TEST_P(SADx4Test, MaxRef) {
786 FillConstant(source_data_, source_stride_, 0);
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100787 FillConstant(GetReference(0), reference_stride_, mask_);
788 FillConstant(GetReference(1), reference_stride_, mask_);
789 FillConstant(GetReference(2), reference_stride_, mask_);
790 FillConstant(GetReference(3), reference_stride_, mask_);
John Koleszar1cfc86e2013-03-01 12:43:41 -0800791 CheckSADs();
792}
793
John Koleszar1cfc86e2013-03-01 12:43:41 -0800794TEST_P(SADx4Test, MaxSrc) {
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100795 FillConstant(source_data_, source_stride_, mask_);
John Koleszar1cfc86e2013-03-01 12:43:41 -0800796 FillConstant(GetReference(0), reference_stride_, 0);
797 FillConstant(GetReference(1), reference_stride_, 0);
798 FillConstant(GetReference(2), reference_stride_, 0);
799 FillConstant(GetReference(3), reference_stride_, 0);
800 CheckSADs();
801}
802
John Koleszar1cfc86e2013-03-01 12:43:41 -0800803TEST_P(SADx4Test, ShortRef) {
804 int tmp_stride = reference_stride_;
805 reference_stride_ >>= 1;
806 FillRandom(source_data_, source_stride_);
807 FillRandom(GetReference(0), reference_stride_);
808 FillRandom(GetReference(1), reference_stride_);
809 FillRandom(GetReference(2), reference_stride_);
810 FillRandom(GetReference(3), reference_stride_);
811 CheckSADs();
812 reference_stride_ = tmp_stride;
813}
814
John Koleszar1cfc86e2013-03-01 12:43:41 -0800815TEST_P(SADx4Test, UnalignedRef) {
816 // The reference frame, but not the source frame, may be unaligned for
817 // certain types of searches.
818 int tmp_stride = reference_stride_;
819 reference_stride_ -= 1;
820 FillRandom(source_data_, source_stride_);
821 FillRandom(GetReference(0), reference_stride_);
822 FillRandom(GetReference(1), reference_stride_);
823 FillRandom(GetReference(2), reference_stride_);
824 FillRandom(GetReference(3), reference_stride_);
825 CheckSADs();
826 reference_stride_ = tmp_stride;
827}
828
John Koleszar1cfc86e2013-03-01 12:43:41 -0800829TEST_P(SADx4Test, ShortSrc) {
830 int tmp_stride = source_stride_;
831 source_stride_ >>= 1;
Yi Luoe9832582016-11-29 19:38:12 -0800832 int test_count = 1000;
833 while (test_count > 0) {
834 FillRandom(source_data_, source_stride_);
835 FillRandom(GetReference(0), reference_stride_);
836 FillRandom(GetReference(1), reference_stride_);
837 FillRandom(GetReference(2), reference_stride_);
838 FillRandom(GetReference(3), reference_stride_);
839 CheckSADs();
840 test_count -= 1;
841 }
John Koleszar1cfc86e2013-03-01 12:43:41 -0800842 source_stride_ = tmp_stride;
843}
844
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100845TEST_P(SADx4Test, SrcAlignedByWidth) {
clang-format3a826f12016-08-11 17:46:05 -0700846 uint8_t *tmp_source_data = source_data_;
Peter de Rivaz7eee4872014-10-16 13:41:55 +0100847 source_data_ += width_;
848 FillRandom(source_data_, source_stride_);
849 FillRandom(GetReference(0), reference_stride_);
850 FillRandom(GetReference(1), reference_stride_);
851 FillRandom(GetReference(2), reference_stride_);
852 FillRandom(GetReference(3), reference_stride_);
853 CheckSADs();
854 source_data_ = tmp_source_data;
855}
856
sarahparkera543df52018-11-02 16:02:05 -0700857using std::make_tuple;
James Zern12ddb752012-08-15 11:54:41 -0700858
Ruiling Song8dc32d72020-01-20 15:33:37 +0800859#if SPEED_TEST
860TEST_P(SADx4AvgTest, Speed) {
861 int tmp_stride = reference_stride_;
862 reference_stride_ >>= 1;
863 FillRandom(source_data_, source_stride_);
864 FillRandom(GetReference(0), reference_stride_);
865 FillRandom(GetReference(1), reference_stride_);
866 FillRandom(GetReference(2), reference_stride_);
867 FillRandom(GetReference(3), reference_stride_);
868 FillRandom(second_pred_, width_);
869 SpeedSAD();
870 reference_stride_ = tmp_stride;
871}
872#endif
873
874TEST_P(SADx4AvgTest, MaxRef) {
875 FillConstant(source_data_, source_stride_, 0);
876 FillConstant(GetReference(0), reference_stride_, mask_);
877 FillConstant(GetReference(1), reference_stride_, mask_);
878 FillConstant(GetReference(2), reference_stride_, mask_);
879 FillConstant(GetReference(3), reference_stride_, mask_);
880 FillConstant(second_pred_, width_, 0);
881 CheckSADs();
882}
883
884TEST_P(SADx4AvgTest, MaxSrc) {
885 FillConstant(source_data_, source_stride_, mask_);
886 FillConstant(GetReference(0), reference_stride_, 0);
887 FillConstant(GetReference(1), reference_stride_, 0);
888 FillConstant(GetReference(2), reference_stride_, 0);
889 FillConstant(GetReference(3), reference_stride_, 0);
890 FillConstant(second_pred_, width_, 0);
891 CheckSADs();
892}
893
894TEST_P(SADx4AvgTest, ShortRef) {
895 int tmp_stride = reference_stride_;
896 reference_stride_ >>= 1;
897 FillRandom(source_data_, source_stride_);
898 FillRandom(GetReference(0), reference_stride_);
899 FillRandom(GetReference(1), reference_stride_);
900 FillRandom(GetReference(2), reference_stride_);
901 FillRandom(GetReference(3), reference_stride_);
902 FillRandom(second_pred_, width_);
903 CheckSADs();
904 reference_stride_ = tmp_stride;
905}
906
907TEST_P(SADx4AvgTest, UnalignedRef) {
908 // The reference frame, but not the source frame, may be unaligned for
909 // certain types of searches.
910 int tmp_stride = reference_stride_;
911 reference_stride_ -= 1;
912 FillRandom(source_data_, source_stride_);
913 FillRandom(GetReference(0), reference_stride_);
914 FillRandom(GetReference(1), reference_stride_);
915 FillRandom(GetReference(2), reference_stride_);
916 FillRandom(GetReference(3), reference_stride_);
917 FillRandom(second_pred_, width_);
918 CheckSADs();
919 reference_stride_ = tmp_stride;
920}
921
James Zernd7cff282014-02-27 12:49:02 -0800922//------------------------------------------------------------------------------
923// C functions
James Zern18e733b2014-07-16 18:59:28 -0700924const SadMxNParam c_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700925 make_tuple(128, 128, &aom_sad128x128_c, -1),
926 make_tuple(128, 64, &aom_sad128x64_c, -1),
927 make_tuple(64, 128, &aom_sad64x128_c, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -0700928 make_tuple(64, 64, &aom_sad64x64_c, -1),
929 make_tuple(64, 32, &aom_sad64x32_c, -1),
930 make_tuple(32, 64, &aom_sad32x64_c, -1),
931 make_tuple(32, 32, &aom_sad32x32_c, -1),
932 make_tuple(32, 16, &aom_sad32x16_c, -1),
933 make_tuple(16, 32, &aom_sad16x32_c, -1),
934 make_tuple(16, 16, &aom_sad16x16_c, -1),
935 make_tuple(16, 8, &aom_sad16x8_c, -1),
936 make_tuple(8, 16, &aom_sad8x16_c, -1),
937 make_tuple(8, 8, &aom_sad8x8_c, -1),
938 make_tuple(8, 4, &aom_sad8x4_c, -1),
939 make_tuple(4, 8, &aom_sad4x8_c, -1),
940 make_tuple(4, 4, &aom_sad4x4_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -0700941#if CONFIG_AV1_HIGHBITDEPTH
Yaowu Xuf883b422016-08-30 14:01:10 -0700942 make_tuple(128, 128, &aom_highbd_sad128x128_c, 8),
943 make_tuple(128, 64, &aom_highbd_sad128x64_c, 8),
944 make_tuple(64, 128, &aom_highbd_sad64x128_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -0700945 make_tuple(64, 64, &aom_highbd_sad64x64_c, 8),
946 make_tuple(64, 32, &aom_highbd_sad64x32_c, 8),
947 make_tuple(32, 64, &aom_highbd_sad32x64_c, 8),
948 make_tuple(32, 32, &aom_highbd_sad32x32_c, 8),
949 make_tuple(32, 16, &aom_highbd_sad32x16_c, 8),
950 make_tuple(16, 32, &aom_highbd_sad16x32_c, 8),
951 make_tuple(16, 16, &aom_highbd_sad16x16_c, 8),
952 make_tuple(16, 8, &aom_highbd_sad16x8_c, 8),
953 make_tuple(8, 16, &aom_highbd_sad8x16_c, 8),
954 make_tuple(8, 8, &aom_highbd_sad8x8_c, 8),
955 make_tuple(8, 4, &aom_highbd_sad8x4_c, 8),
956 make_tuple(4, 8, &aom_highbd_sad4x8_c, 8),
957 make_tuple(4, 4, &aom_highbd_sad4x4_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -0700958 make_tuple(128, 128, &aom_highbd_sad128x128_c, 10),
959 make_tuple(128, 64, &aom_highbd_sad128x64_c, 10),
960 make_tuple(64, 128, &aom_highbd_sad64x128_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -0700961 make_tuple(64, 64, &aom_highbd_sad64x64_c, 10),
962 make_tuple(64, 32, &aom_highbd_sad64x32_c, 10),
963 make_tuple(32, 64, &aom_highbd_sad32x64_c, 10),
964 make_tuple(32, 32, &aom_highbd_sad32x32_c, 10),
965 make_tuple(32, 16, &aom_highbd_sad32x16_c, 10),
966 make_tuple(16, 32, &aom_highbd_sad16x32_c, 10),
967 make_tuple(16, 16, &aom_highbd_sad16x16_c, 10),
968 make_tuple(16, 8, &aom_highbd_sad16x8_c, 10),
969 make_tuple(8, 16, &aom_highbd_sad8x16_c, 10),
970 make_tuple(8, 8, &aom_highbd_sad8x8_c, 10),
971 make_tuple(8, 4, &aom_highbd_sad8x4_c, 10),
972 make_tuple(4, 8, &aom_highbd_sad4x8_c, 10),
973 make_tuple(4, 4, &aom_highbd_sad4x4_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -0700974 make_tuple(128, 128, &aom_highbd_sad128x128_c, 12),
975 make_tuple(128, 64, &aom_highbd_sad128x64_c, 12),
976 make_tuple(64, 128, &aom_highbd_sad64x128_c, 12),
Yaowu Xuf883b422016-08-30 14:01:10 -0700977 make_tuple(64, 64, &aom_highbd_sad64x64_c, 12),
978 make_tuple(64, 32, &aom_highbd_sad64x32_c, 12),
979 make_tuple(32, 64, &aom_highbd_sad32x64_c, 12),
980 make_tuple(32, 32, &aom_highbd_sad32x32_c, 12),
981 make_tuple(32, 16, &aom_highbd_sad32x16_c, 12),
982 make_tuple(16, 32, &aom_highbd_sad16x32_c, 12),
983 make_tuple(16, 16, &aom_highbd_sad16x16_c, 12),
984 make_tuple(16, 8, &aom_highbd_sad16x8_c, 12),
985 make_tuple(8, 16, &aom_highbd_sad8x16_c, 12),
986 make_tuple(8, 8, &aom_highbd_sad8x8_c, 12),
987 make_tuple(8, 4, &aom_highbd_sad8x4_c, 12),
988 make_tuple(4, 8, &aom_highbd_sad4x8_c, 12),
989 make_tuple(4, 4, &aom_highbd_sad4x4_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -0700990#endif // CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -0700991 make_tuple(64, 16, &aom_sad64x16_c, -1),
992 make_tuple(16, 64, &aom_sad16x64_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -0700993#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -0700994 make_tuple(64, 16, &aom_highbd_sad64x16_c, 8),
995 make_tuple(16, 64, &aom_highbd_sad16x64_c, 8),
996 make_tuple(64, 16, &aom_highbd_sad64x16_c, 10),
997 make_tuple(16, 64, &aom_highbd_sad16x64_c, 10),
998 make_tuple(64, 16, &aom_highbd_sad64x16_c, 12),
999 make_tuple(16, 64, &aom_highbd_sad16x64_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001000#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001001 make_tuple(32, 8, &aom_sad32x8_c, -1),
1002 make_tuple(8, 32, &aom_sad8x32_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001003#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001004 make_tuple(32, 8, &aom_highbd_sad32x8_c, 8),
1005 make_tuple(8, 32, &aom_highbd_sad8x32_c, 8),
1006 make_tuple(32, 8, &aom_highbd_sad32x8_c, 10),
1007 make_tuple(8, 32, &aom_highbd_sad8x32_c, 10),
1008 make_tuple(32, 8, &aom_highbd_sad32x8_c, 12),
1009 make_tuple(8, 32, &aom_highbd_sad8x32_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001010#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001011 make_tuple(16, 4, &aom_sad16x4_c, -1),
1012 make_tuple(4, 16, &aom_sad4x16_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001013#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001014 make_tuple(16, 4, &aom_highbd_sad16x4_c, 8),
1015 make_tuple(4, 16, &aom_highbd_sad4x16_c, 8),
1016 make_tuple(16, 4, &aom_highbd_sad16x4_c, 10),
1017 make_tuple(4, 16, &aom_highbd_sad4x16_c, 10),
1018 make_tuple(16, 4, &aom_highbd_sad16x4_c, 12),
1019 make_tuple(4, 16, &aom_highbd_sad4x16_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001020#endif
Deb Mukherjeefc882922014-05-13 10:11:42 -07001021};
Cheng Chen96786fe2020-02-14 17:28:25 -08001022INSTANTIATE_TEST_SUITE_P(C, SADTest, ::testing::ValuesIn(c_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -07001023
Johannd5d92892015-04-17 16:11:38 -04001024const SadMxNAvgParam avg_c_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001025 make_tuple(128, 128, &aom_sad128x128_avg_c, -1),
1026 make_tuple(128, 64, &aom_sad128x64_avg_c, -1),
1027 make_tuple(64, 128, &aom_sad64x128_avg_c, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001028 make_tuple(64, 64, &aom_sad64x64_avg_c, -1),
1029 make_tuple(64, 32, &aom_sad64x32_avg_c, -1),
1030 make_tuple(32, 64, &aom_sad32x64_avg_c, -1),
1031 make_tuple(32, 32, &aom_sad32x32_avg_c, -1),
1032 make_tuple(32, 16, &aom_sad32x16_avg_c, -1),
1033 make_tuple(16, 32, &aom_sad16x32_avg_c, -1),
1034 make_tuple(16, 16, &aom_sad16x16_avg_c, -1),
1035 make_tuple(16, 8, &aom_sad16x8_avg_c, -1),
1036 make_tuple(8, 16, &aom_sad8x16_avg_c, -1),
1037 make_tuple(8, 8, &aom_sad8x8_avg_c, -1),
1038 make_tuple(8, 4, &aom_sad8x4_avg_c, -1),
1039 make_tuple(4, 8, &aom_sad4x8_avg_c, -1),
1040 make_tuple(4, 4, &aom_sad4x4_avg_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001041#if CONFIG_AV1_HIGHBITDEPTH
Yaowu Xuf883b422016-08-30 14:01:10 -07001042 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 8),
1043 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 8),
1044 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -07001045 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 8),
1046 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 8),
1047 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 8),
1048 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 8),
1049 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 8),
1050 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 8),
1051 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 8),
1052 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 8),
1053 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 8),
1054 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 8),
1055 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 8),
1056 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 8),
1057 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -07001058 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 10),
1059 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 10),
1060 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -07001061 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 10),
1062 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 10),
1063 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 10),
1064 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 10),
1065 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 10),
1066 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 10),
1067 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 10),
1068 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 10),
1069 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 10),
1070 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 10),
1071 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 10),
1072 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 10),
1073 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -07001074 make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 12),
1075 make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 12),
1076 make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 12),
Yaowu Xuf883b422016-08-30 14:01:10 -07001077 make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 12),
1078 make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 12),
1079 make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 12),
1080 make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 12),
1081 make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 12),
1082 make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 12),
1083 make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 12),
1084 make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 12),
1085 make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 12),
1086 make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 12),
1087 make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 12),
1088 make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 12),
1089 make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001090#endif // CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001091 make_tuple(64, 16, &aom_sad64x16_avg_c, -1),
1092 make_tuple(16, 64, &aom_sad16x64_avg_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001093#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001094 make_tuple(64, 16, &aom_highbd_sad64x16_avg_c, 8),
1095 make_tuple(16, 64, &aom_highbd_sad16x64_avg_c, 8),
1096 make_tuple(64, 16, &aom_highbd_sad64x16_avg_c, 10),
1097 make_tuple(16, 64, &aom_highbd_sad16x64_avg_c, 10),
1098 make_tuple(64, 16, &aom_highbd_sad64x16_avg_c, 12),
1099 make_tuple(16, 64, &aom_highbd_sad16x64_avg_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001100#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001101 make_tuple(32, 8, &aom_sad32x8_avg_c, -1),
1102 make_tuple(8, 32, &aom_sad8x32_avg_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001103#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001104 make_tuple(32, 8, &aom_highbd_sad32x8_avg_c, 8),
1105 make_tuple(8, 32, &aom_highbd_sad8x32_avg_c, 8),
1106 make_tuple(32, 8, &aom_highbd_sad32x8_avg_c, 10),
1107 make_tuple(8, 32, &aom_highbd_sad8x32_avg_c, 10),
1108 make_tuple(32, 8, &aom_highbd_sad32x8_avg_c, 12),
1109 make_tuple(8, 32, &aom_highbd_sad8x32_avg_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001110#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001111 make_tuple(16, 4, &aom_sad16x4_avg_c, -1),
1112 make_tuple(4, 16, &aom_sad4x16_avg_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001113#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001114 make_tuple(16, 4, &aom_highbd_sad16x4_avg_c, 8),
1115 make_tuple(4, 16, &aom_highbd_sad4x16_avg_c, 8),
1116 make_tuple(16, 4, &aom_highbd_sad16x4_avg_c, 10),
1117 make_tuple(4, 16, &aom_highbd_sad4x16_avg_c, 10),
1118 make_tuple(16, 4, &aom_highbd_sad16x4_avg_c, 12),
1119 make_tuple(4, 16, &aom_highbd_sad4x16_avg_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001120#endif
Johannd5d92892015-04-17 16:11:38 -04001121};
Cheng Chen96786fe2020-02-14 17:28:25 -08001122INSTANTIATE_TEST_SUITE_P(C, SADavgTest, ::testing::ValuesIn(avg_c_tests));
Johannd5d92892015-04-17 16:11:38 -04001123
Cheng Chena0367dc2017-11-16 19:20:42 -08001124// TODO(chengchen): add highbd tests
Debargha Mukherjee0c96c112018-12-20 16:04:18 -08001125const DistWtdCompAvgParam dist_wtd_comp_avg_c_tests[] = {
1126 make_tuple(128, 128, &aom_dist_wtd_comp_avg_pred_c, -1),
1127 make_tuple(128, 64, &aom_dist_wtd_comp_avg_pred_c, -1),
1128 make_tuple(64, 128, &aom_dist_wtd_comp_avg_pred_c, -1),
1129 make_tuple(64, 64, &aom_dist_wtd_comp_avg_pred_c, -1),
1130 make_tuple(64, 32, &aom_dist_wtd_comp_avg_pred_c, -1),
1131 make_tuple(32, 64, &aom_dist_wtd_comp_avg_pred_c, -1),
1132 make_tuple(32, 32, &aom_dist_wtd_comp_avg_pred_c, -1),
1133 make_tuple(32, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
1134 make_tuple(16, 32, &aom_dist_wtd_comp_avg_pred_c, -1),
1135 make_tuple(16, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
1136 make_tuple(16, 8, &aom_dist_wtd_comp_avg_pred_c, -1),
1137 make_tuple(8, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
1138 make_tuple(8, 8, &aom_dist_wtd_comp_avg_pred_c, -1),
1139 make_tuple(8, 4, &aom_dist_wtd_comp_avg_pred_c, -1),
1140 make_tuple(4, 8, &aom_dist_wtd_comp_avg_pred_c, -1),
1141 make_tuple(4, 4, &aom_dist_wtd_comp_avg_pred_c, -1),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001142
1143 make_tuple(64, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
1144 make_tuple(16, 64, &aom_dist_wtd_comp_avg_pred_c, -1),
1145 make_tuple(32, 8, &aom_dist_wtd_comp_avg_pred_c, -1),
1146 make_tuple(8, 32, &aom_dist_wtd_comp_avg_pred_c, -1),
1147 make_tuple(16, 4, &aom_dist_wtd_comp_avg_pred_c, -1),
1148 make_tuple(4, 16, &aom_dist_wtd_comp_avg_pred_c, -1),
Cheng Chena0367dc2017-11-16 19:20:42 -08001149};
1150
Cheng Chen96786fe2020-02-14 17:28:25 -08001151INSTANTIATE_TEST_SUITE_P(C, DistWtdCompAvgTest,
1152 ::testing::ValuesIn(dist_wtd_comp_avg_c_tests));
Cheng Chena0367dc2017-11-16 19:20:42 -08001153
Debargha Mukherjee0c96c112018-12-20 16:04:18 -08001154const DistWtdSadMxNAvgParam dist_wtd_avg_c_tests[] = {
1155 make_tuple(128, 128, &aom_dist_wtd_sad128x128_avg_c, -1),
1156 make_tuple(128, 64, &aom_dist_wtd_sad128x64_avg_c, -1),
1157 make_tuple(64, 128, &aom_dist_wtd_sad64x128_avg_c, -1),
1158 make_tuple(64, 64, &aom_dist_wtd_sad64x64_avg_c, -1),
1159 make_tuple(64, 32, &aom_dist_wtd_sad64x32_avg_c, -1),
1160 make_tuple(32, 64, &aom_dist_wtd_sad32x64_avg_c, -1),
1161 make_tuple(32, 32, &aom_dist_wtd_sad32x32_avg_c, -1),
1162 make_tuple(32, 16, &aom_dist_wtd_sad32x16_avg_c, -1),
1163 make_tuple(16, 32, &aom_dist_wtd_sad16x32_avg_c, -1),
1164 make_tuple(16, 16, &aom_dist_wtd_sad16x16_avg_c, -1),
1165 make_tuple(16, 8, &aom_dist_wtd_sad16x8_avg_c, -1),
1166 make_tuple(8, 16, &aom_dist_wtd_sad8x16_avg_c, -1),
1167 make_tuple(8, 8, &aom_dist_wtd_sad8x8_avg_c, -1),
1168 make_tuple(8, 4, &aom_dist_wtd_sad8x4_avg_c, -1),
1169 make_tuple(4, 8, &aom_dist_wtd_sad4x8_avg_c, -1),
1170 make_tuple(4, 4, &aom_dist_wtd_sad4x4_avg_c, -1),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001171
1172 make_tuple(64, 16, &aom_dist_wtd_sad64x16_avg_c, -1),
1173 make_tuple(16, 64, &aom_dist_wtd_sad16x64_avg_c, -1),
1174 make_tuple(32, 8, &aom_dist_wtd_sad32x8_avg_c, -1),
1175 make_tuple(8, 32, &aom_dist_wtd_sad8x32_avg_c, -1),
1176 make_tuple(16, 4, &aom_dist_wtd_sad16x4_avg_c, -1),
1177 make_tuple(4, 16, &aom_dist_wtd_sad4x16_avg_c, -1),
Cheng Chena0367dc2017-11-16 19:20:42 -08001178};
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001179
Cheng Chen96786fe2020-02-14 17:28:25 -08001180INSTANTIATE_TEST_SUITE_P(C, DistWtdSADavgTest,
1181 ::testing::ValuesIn(dist_wtd_avg_c_tests));
Cheng Chena0367dc2017-11-16 19:20:42 -08001182
Johannd5d92892015-04-17 16:11:38 -04001183const SadMxNx4Param x4d_c_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001184 make_tuple(128, 128, &aom_sad128x128x4d_c, -1),
1185 make_tuple(128, 64, &aom_sad128x64x4d_c, -1),
1186 make_tuple(64, 128, &aom_sad64x128x4d_c, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001187 make_tuple(64, 64, &aom_sad64x64x4d_c, -1),
1188 make_tuple(64, 32, &aom_sad64x32x4d_c, -1),
1189 make_tuple(32, 64, &aom_sad32x64x4d_c, -1),
1190 make_tuple(32, 32, &aom_sad32x32x4d_c, -1),
1191 make_tuple(32, 16, &aom_sad32x16x4d_c, -1),
1192 make_tuple(16, 32, &aom_sad16x32x4d_c, -1),
1193 make_tuple(16, 16, &aom_sad16x16x4d_c, -1),
1194 make_tuple(16, 8, &aom_sad16x8x4d_c, -1),
1195 make_tuple(8, 16, &aom_sad8x16x4d_c, -1),
1196 make_tuple(8, 8, &aom_sad8x8x4d_c, -1),
1197 make_tuple(8, 4, &aom_sad8x4x4d_c, -1),
1198 make_tuple(4, 8, &aom_sad4x8x4d_c, -1),
1199 make_tuple(4, 4, &aom_sad4x4x4d_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001200#if CONFIG_AV1_HIGHBITDEPTH
Yaowu Xuf883b422016-08-30 14:01:10 -07001201 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 8),
1202 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 8),
1203 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -07001204 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 8),
1205 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 8),
1206 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 8),
1207 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 8),
1208 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 8),
1209 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 8),
1210 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 8),
1211 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 8),
1212 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 8),
1213 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 8),
1214 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 8),
1215 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 8),
1216 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -07001217 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 10),
1218 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 10),
1219 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -07001220 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 10),
1221 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 10),
1222 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 10),
1223 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 10),
1224 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 10),
1225 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 10),
1226 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 10),
1227 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 10),
1228 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 10),
1229 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 10),
1230 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 10),
1231 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 10),
1232 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -07001233 make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 12),
1234 make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 12),
1235 make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 12),
Yaowu Xuf883b422016-08-30 14:01:10 -07001236 make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 12),
1237 make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 12),
1238 make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 12),
1239 make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 12),
1240 make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 12),
1241 make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 12),
1242 make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 12),
1243 make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 12),
1244 make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 12),
1245 make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 12),
1246 make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 12),
1247 make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 12),
1248 make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001249#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001250 make_tuple(64, 16, &aom_sad64x16x4d_c, -1),
1251 make_tuple(16, 64, &aom_sad16x64x4d_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001252#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001253 make_tuple(64, 16, &aom_highbd_sad64x16x4d_c, 8),
1254 make_tuple(16, 64, &aom_highbd_sad16x64x4d_c, 8),
1255 make_tuple(64, 16, &aom_highbd_sad64x16x4d_c, 10),
1256 make_tuple(16, 64, &aom_highbd_sad16x64x4d_c, 10),
1257 make_tuple(64, 16, &aom_highbd_sad64x16x4d_c, 12),
1258 make_tuple(16, 64, &aom_highbd_sad16x64x4d_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001259#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001260 make_tuple(32, 8, &aom_sad32x8x4d_c, -1),
1261 make_tuple(8, 32, &aom_sad8x32x4d_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001262#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001263 make_tuple(32, 8, &aom_highbd_sad32x8x4d_c, 8),
1264 make_tuple(8, 32, &aom_highbd_sad8x32x4d_c, 8),
1265 make_tuple(32, 8, &aom_highbd_sad32x8x4d_c, 10),
1266 make_tuple(8, 32, &aom_highbd_sad8x32x4d_c, 10),
1267 make_tuple(32, 8, &aom_highbd_sad32x8x4d_c, 12),
1268 make_tuple(8, 32, &aom_highbd_sad8x32x4d_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001269#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001270 make_tuple(16, 4, &aom_sad16x4x4d_c, -1),
1271 make_tuple(4, 16, &aom_sad4x16x4d_c, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001272#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001273 make_tuple(16, 4, &aom_highbd_sad16x4x4d_c, 8),
1274 make_tuple(4, 16, &aom_highbd_sad4x16x4d_c, 8),
1275 make_tuple(16, 4, &aom_highbd_sad16x4x4d_c, 10),
1276 make_tuple(4, 16, &aom_highbd_sad4x16x4d_c, 10),
1277 make_tuple(16, 4, &aom_highbd_sad16x4x4d_c, 12),
1278 make_tuple(4, 16, &aom_highbd_sad4x16x4d_c, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001279#endif
Johannd5d92892015-04-17 16:11:38 -04001280};
Cheng Chen96786fe2020-02-14 17:28:25 -08001281INSTANTIATE_TEST_SUITE_P(C, SADx4Test, ::testing::ValuesIn(x4d_c_tests));
John Koleszar1cfc86e2013-03-01 12:43:41 -08001282
Ruiling Song8dc32d72020-01-20 15:33:37 +08001283const SadMxNx4AvgParam x4d_avg_c_tests[] = {
1284 make_tuple(128, 128, &aom_sad128x128x4d_avg_c, -1),
1285 make_tuple(128, 64, &aom_sad128x64x4d_avg_c, -1),
1286 make_tuple(64, 128, &aom_sad64x128x4d_avg_c, -1),
1287 make_tuple(64, 64, &aom_sad64x64x4d_avg_c, -1),
1288 make_tuple(64, 32, &aom_sad64x32x4d_avg_c, -1),
1289 make_tuple(32, 64, &aom_sad32x64x4d_avg_c, -1),
1290 make_tuple(32, 32, &aom_sad32x32x4d_avg_c, -1),
1291 make_tuple(32, 16, &aom_sad32x16x4d_avg_c, -1),
1292 make_tuple(16, 32, &aom_sad16x32x4d_avg_c, -1),
1293 make_tuple(16, 16, &aom_sad16x16x4d_avg_c, -1),
1294 make_tuple(16, 8, &aom_sad16x8x4d_avg_c, -1),
1295 make_tuple(8, 16, &aom_sad8x16x4d_avg_c, -1),
1296 make_tuple(8, 8, &aom_sad8x8x4d_avg_c, -1),
1297 make_tuple(8, 4, &aom_sad8x4x4d_avg_c, -1),
1298 make_tuple(4, 8, &aom_sad4x8x4d_avg_c, -1),
1299 make_tuple(4, 4, &aom_sad4x4x4d_avg_c, -1),
1300 make_tuple(64, 16, &aom_sad64x16x4d_avg_c, -1),
1301 make_tuple(16, 64, &aom_sad16x64x4d_avg_c, -1),
1302 make_tuple(32, 8, &aom_sad32x8x4d_avg_c, -1),
1303 make_tuple(8, 32, &aom_sad8x32x4d_avg_c, -1),
1304 make_tuple(16, 4, &aom_sad16x4x4d_avg_c, -1),
1305 make_tuple(4, 16, &aom_sad4x16x4d_avg_c, -1),
1306};
1307INSTANTIATE_TEST_SUITE_P(C, SADx4AvgTest, ::testing::ValuesIn(x4d_avg_c_tests));
1308
James Zernd7cff282014-02-27 12:49:02 -08001309//------------------------------------------------------------------------------
1310// ARM functions
Johannfbea8972012-06-28 11:43:58 -07001311#if HAVE_NEON
Johannd5d92892015-04-17 16:11:38 -04001312const SadMxNParam neon_tests[] = {
Jerome Jiang2f0cc172020-04-21 13:44:48 -07001313 make_tuple(128, 128, &aom_sad128x128_neon, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001314 make_tuple(64, 64, &aom_sad64x64_neon, -1),
1315 make_tuple(32, 32, &aom_sad32x32_neon, -1),
1316 make_tuple(16, 16, &aom_sad16x16_neon, -1),
1317 make_tuple(16, 8, &aom_sad16x8_neon, -1),
1318 make_tuple(8, 16, &aom_sad8x16_neon, -1),
1319 make_tuple(8, 8, &aom_sad8x8_neon, -1),
1320 make_tuple(4, 4, &aom_sad4x4_neon, -1),
Scott LaVarnway696fa522014-07-16 12:54:46 -07001321};
Cheng Chen96786fe2020-02-14 17:28:25 -08001322INSTANTIATE_TEST_SUITE_P(NEON, SADTest, ::testing::ValuesIn(neon_tests));
Johannd5d92892015-04-17 16:11:38 -04001323
Johannd5d92892015-04-17 16:11:38 -04001324const SadMxNx4Param x4d_neon_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001325 make_tuple(64, 64, &aom_sad64x64x4d_neon, -1),
1326 make_tuple(32, 32, &aom_sad32x32x4d_neon, -1),
1327 make_tuple(16, 16, &aom_sad16x16x4d_neon, -1),
Johannd5d92892015-04-17 16:11:38 -04001328};
Cheng Chen96786fe2020-02-14 17:28:25 -08001329INSTANTIATE_TEST_SUITE_P(NEON, SADx4Test, ::testing::ValuesIn(x4d_neon_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -07001330#endif // HAVE_NEON
Johannfbea8972012-06-28 11:43:58 -07001331
James Zernd7cff282014-02-27 12:49:02 -08001332//------------------------------------------------------------------------------
1333// x86 functions
Johannfbea8972012-06-28 11:43:58 -07001334#if HAVE_SSE2
James Zern18e733b2014-07-16 18:59:28 -07001335const SadMxNParam sse2_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001336 make_tuple(128, 128, &aom_sad128x128_sse2, -1),
1337 make_tuple(128, 64, &aom_sad128x64_sse2, -1),
1338 make_tuple(64, 128, &aom_sad64x128_sse2, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001339 make_tuple(64, 64, &aom_sad64x64_sse2, -1),
1340 make_tuple(64, 32, &aom_sad64x32_sse2, -1),
1341 make_tuple(32, 64, &aom_sad32x64_sse2, -1),
1342 make_tuple(32, 32, &aom_sad32x32_sse2, -1),
1343 make_tuple(32, 16, &aom_sad32x16_sse2, -1),
1344 make_tuple(16, 32, &aom_sad16x32_sse2, -1),
1345 make_tuple(16, 16, &aom_sad16x16_sse2, -1),
1346 make_tuple(16, 8, &aom_sad16x8_sse2, -1),
1347 make_tuple(8, 16, &aom_sad8x16_sse2, -1),
1348 make_tuple(8, 8, &aom_sad8x8_sse2, -1),
1349 make_tuple(8, 4, &aom_sad8x4_sse2, -1),
1350 make_tuple(4, 8, &aom_sad4x8_sse2, -1),
1351 make_tuple(4, 4, &aom_sad4x4_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001352#if CONFIG_AV1_HIGHBITDEPTH
Yaowu Xuf883b422016-08-30 14:01:10 -07001353 make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 8),
1354 make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 8),
1355 make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 8),
1356 make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 8),
1357 make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 8),
1358 make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 8),
1359 make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 8),
1360 make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 8),
1361 make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 8),
1362 make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 8),
1363 make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 8),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001364 make_tuple(4, 8, &aom_highbd_sad4x8_sse2, 8),
1365 make_tuple(4, 4, &aom_highbd_sad4x4_sse2, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -07001366 make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 10),
1367 make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 10),
1368 make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 10),
1369 make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 10),
1370 make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 10),
1371 make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 10),
1372 make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 10),
1373 make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 10),
1374 make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 10),
1375 make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 10),
1376 make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 10),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001377 make_tuple(4, 8, &aom_highbd_sad4x8_sse2, 10),
1378 make_tuple(4, 4, &aom_highbd_sad4x4_sse2, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -07001379 make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 12),
1380 make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 12),
1381 make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 12),
1382 make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 12),
1383 make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 12),
1384 make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 12),
1385 make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 12),
1386 make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 12),
1387 make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 12),
1388 make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 12),
1389 make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 12),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001390 make_tuple(4, 8, &aom_highbd_sad4x8_sse2, 12),
1391 make_tuple(4, 4, &aom_highbd_sad4x4_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001392#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001393 make_tuple(64, 16, &aom_sad64x16_sse2, -1),
1394 make_tuple(16, 64, &aom_sad16x64_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001395#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001396 make_tuple(64, 16, &aom_highbd_sad64x16_sse2, 8),
1397 make_tuple(16, 64, &aom_highbd_sad16x64_sse2, 8),
1398 make_tuple(64, 16, &aom_highbd_sad64x16_sse2, 10),
1399 make_tuple(16, 64, &aom_highbd_sad16x64_sse2, 10),
1400 make_tuple(64, 16, &aom_highbd_sad64x16_sse2, 12),
1401 make_tuple(16, 64, &aom_highbd_sad16x64_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001402#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001403 make_tuple(32, 8, &aom_sad32x8_sse2, -1),
1404 make_tuple(8, 32, &aom_sad8x32_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001405#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001406 make_tuple(32, 8, &aom_highbd_sad32x8_sse2, 8),
1407 make_tuple(8, 32, &aom_highbd_sad8x32_sse2, 8),
1408 make_tuple(32, 8, &aom_highbd_sad32x8_sse2, 10),
1409 make_tuple(8, 32, &aom_highbd_sad8x32_sse2, 10),
1410 make_tuple(32, 8, &aom_highbd_sad32x8_sse2, 12),
1411 make_tuple(8, 32, &aom_highbd_sad8x32_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001412#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001413 make_tuple(16, 4, &aom_sad16x4_sse2, -1),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001414 make_tuple(4, 16, &aom_sad4x16_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001415#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001416 make_tuple(16, 4, &aom_highbd_sad16x4_sse2, 8),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001417 make_tuple(4, 16, &aom_highbd_sad4x16_sse2, 8),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001418 make_tuple(16, 4, &aom_highbd_sad16x4_sse2, 10),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001419 make_tuple(4, 16, &aom_highbd_sad4x16_sse2, 10),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001420 make_tuple(16, 4, &aom_highbd_sad16x4_sse2, 12),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001421 make_tuple(4, 16, &aom_highbd_sad4x16_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001422#endif
Deb Mukherjeefc882922014-05-13 10:11:42 -07001423};
Cheng Chen96786fe2020-02-14 17:28:25 -08001424INSTANTIATE_TEST_SUITE_P(SSE2, SADTest, ::testing::ValuesIn(sse2_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -07001425
Johannd5d92892015-04-17 16:11:38 -04001426const SadMxNAvgParam avg_sse2_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001427 make_tuple(128, 128, &aom_sad128x128_avg_sse2, -1),
1428 make_tuple(128, 64, &aom_sad128x64_avg_sse2, -1),
1429 make_tuple(64, 128, &aom_sad64x128_avg_sse2, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001430 make_tuple(64, 64, &aom_sad64x64_avg_sse2, -1),
1431 make_tuple(64, 32, &aom_sad64x32_avg_sse2, -1),
1432 make_tuple(32, 64, &aom_sad32x64_avg_sse2, -1),
1433 make_tuple(32, 32, &aom_sad32x32_avg_sse2, -1),
1434 make_tuple(32, 16, &aom_sad32x16_avg_sse2, -1),
1435 make_tuple(16, 32, &aom_sad16x32_avg_sse2, -1),
1436 make_tuple(16, 16, &aom_sad16x16_avg_sse2, -1),
1437 make_tuple(16, 8, &aom_sad16x8_avg_sse2, -1),
1438 make_tuple(8, 16, &aom_sad8x16_avg_sse2, -1),
1439 make_tuple(8, 8, &aom_sad8x8_avg_sse2, -1),
1440 make_tuple(8, 4, &aom_sad8x4_avg_sse2, -1),
1441 make_tuple(4, 8, &aom_sad4x8_avg_sse2, -1),
1442 make_tuple(4, 4, &aom_sad4x4_avg_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001443#if CONFIG_AV1_HIGHBITDEPTH
Yaowu Xuf883b422016-08-30 14:01:10 -07001444 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 8),
1445 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 8),
1446 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 8),
1447 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 8),
1448 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 8),
1449 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 8),
1450 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 8),
1451 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 8),
1452 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 8),
1453 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 8),
1454 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 8),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001455 make_tuple(4, 8, &aom_highbd_sad4x8_avg_sse2, 8),
1456 make_tuple(4, 4, &aom_highbd_sad4x4_avg_sse2, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -07001457 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 10),
1458 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 10),
1459 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 10),
1460 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 10),
1461 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 10),
1462 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 10),
1463 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 10),
1464 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 10),
1465 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 10),
1466 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 10),
1467 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 10),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001468 make_tuple(4, 8, &aom_highbd_sad4x8_avg_sse2, 10),
1469 make_tuple(4, 4, &aom_highbd_sad4x4_avg_sse2, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -07001470 make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 12),
1471 make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 12),
1472 make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 12),
1473 make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 12),
1474 make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 12),
1475 make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 12),
1476 make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 12),
1477 make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 12),
1478 make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 12),
1479 make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 12),
1480 make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 12),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001481 make_tuple(4, 8, &aom_highbd_sad4x8_avg_sse2, 12),
1482 make_tuple(4, 4, &aom_highbd_sad4x4_avg_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001483#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001484 make_tuple(64, 16, &aom_sad64x16_avg_sse2, -1),
1485 make_tuple(16, 64, &aom_sad16x64_avg_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001486#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001487 make_tuple(64, 16, &aom_highbd_sad64x16_avg_sse2, 8),
1488 make_tuple(16, 64, &aom_highbd_sad16x64_avg_sse2, 8),
1489 make_tuple(64, 16, &aom_highbd_sad64x16_avg_sse2, 10),
1490 make_tuple(16, 64, &aom_highbd_sad16x64_avg_sse2, 10),
1491 make_tuple(64, 16, &aom_highbd_sad64x16_avg_sse2, 12),
1492 make_tuple(16, 64, &aom_highbd_sad16x64_avg_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001493#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001494 make_tuple(32, 8, &aom_sad32x8_avg_sse2, -1),
1495 make_tuple(8, 32, &aom_sad8x32_avg_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001496#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001497 make_tuple(32, 8, &aom_highbd_sad32x8_avg_sse2, 8),
1498 make_tuple(8, 32, &aom_highbd_sad8x32_avg_sse2, 8),
1499 make_tuple(32, 8, &aom_highbd_sad32x8_avg_sse2, 10),
1500 make_tuple(8, 32, &aom_highbd_sad8x32_avg_sse2, 10),
1501 make_tuple(32, 8, &aom_highbd_sad32x8_avg_sse2, 12),
1502 make_tuple(8, 32, &aom_highbd_sad8x32_avg_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001503#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001504 make_tuple(16, 4, &aom_sad16x4_avg_sse2, -1),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001505 make_tuple(4, 16, &aom_sad4x16_avg_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001506#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001507 make_tuple(16, 4, &aom_highbd_sad16x4_avg_sse2, 8),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001508 make_tuple(4, 16, &aom_highbd_sad4x16_avg_sse2, 8),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001509 make_tuple(16, 4, &aom_highbd_sad16x4_avg_sse2, 10),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001510 make_tuple(4, 16, &aom_highbd_sad4x16_avg_sse2, 10),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001511 make_tuple(16, 4, &aom_highbd_sad16x4_avg_sse2, 12),
chiyotsaic6b9f6b2019-07-16 10:39:32 -07001512 make_tuple(4, 16, &aom_highbd_sad4x16_avg_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001513#endif
Johannd5d92892015-04-17 16:11:38 -04001514};
Cheng Chen96786fe2020-02-14 17:28:25 -08001515INSTANTIATE_TEST_SUITE_P(SSE2, SADavgTest, ::testing::ValuesIn(avg_sse2_tests));
Johannd5d92892015-04-17 16:11:38 -04001516
Johannd5d92892015-04-17 16:11:38 -04001517const SadMxNx4Param x4d_sse2_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001518 make_tuple(128, 128, &aom_sad128x128x4d_sse2, -1),
1519 make_tuple(128, 64, &aom_sad128x64x4d_sse2, -1),
1520 make_tuple(64, 128, &aom_sad64x128x4d_sse2, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001521 make_tuple(64, 64, &aom_sad64x64x4d_sse2, -1),
1522 make_tuple(64, 32, &aom_sad64x32x4d_sse2, -1),
1523 make_tuple(32, 64, &aom_sad32x64x4d_sse2, -1),
1524 make_tuple(32, 32, &aom_sad32x32x4d_sse2, -1),
1525 make_tuple(32, 16, &aom_sad32x16x4d_sse2, -1),
1526 make_tuple(16, 32, &aom_sad16x32x4d_sse2, -1),
1527 make_tuple(16, 16, &aom_sad16x16x4d_sse2, -1),
1528 make_tuple(16, 8, &aom_sad16x8x4d_sse2, -1),
1529 make_tuple(8, 16, &aom_sad8x16x4d_sse2, -1),
1530 make_tuple(8, 8, &aom_sad8x8x4d_sse2, -1),
1531 make_tuple(8, 4, &aom_sad8x4x4d_sse2, -1),
1532 make_tuple(4, 8, &aom_sad4x8x4d_sse2, -1),
1533 make_tuple(4, 4, &aom_sad4x4x4d_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001534#if CONFIG_AV1_HIGHBITDEPTH
Yaowu Xuf883b422016-08-30 14:01:10 -07001535 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 8),
1536 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 8),
1537 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 8),
1538 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 8),
1539 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 8),
1540 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 8),
1541 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 8),
1542 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 8),
1543 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 8),
1544 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 8),
1545 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 8),
1546 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 8),
1547 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 8),
1548 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 10),
1549 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 10),
1550 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 10),
1551 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 10),
1552 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 10),
1553 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 10),
1554 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 10),
1555 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 10),
1556 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 10),
1557 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 10),
1558 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 10),
1559 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 10),
1560 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 10),
1561 make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 12),
1562 make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 12),
1563 make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 12),
1564 make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 12),
1565 make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 12),
1566 make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 12),
1567 make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 12),
1568 make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 12),
1569 make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 12),
1570 make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 12),
1571 make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 12),
1572 make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 12),
1573 make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001574#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001575 make_tuple(64, 16, &aom_sad64x16x4d_sse2, -1),
1576 make_tuple(16, 64, &aom_sad16x64x4d_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001577#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001578 make_tuple(64, 16, &aom_highbd_sad64x16x4d_sse2, 8),
1579 make_tuple(16, 64, &aom_highbd_sad16x64x4d_sse2, 8),
1580 make_tuple(64, 16, &aom_highbd_sad64x16x4d_sse2, 10),
1581 make_tuple(16, 64, &aom_highbd_sad16x64x4d_sse2, 10),
1582 make_tuple(64, 16, &aom_highbd_sad64x16x4d_sse2, 12),
1583 make_tuple(16, 64, &aom_highbd_sad16x64x4d_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001584#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001585 make_tuple(32, 8, &aom_sad32x8x4d_sse2, -1),
1586 make_tuple(8, 32, &aom_sad8x32x4d_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001587#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001588 make_tuple(32, 8, &aom_highbd_sad32x8x4d_sse2, 8),
1589 make_tuple(8, 32, &aom_highbd_sad8x32x4d_sse2, 8),
1590 make_tuple(32, 8, &aom_highbd_sad32x8x4d_sse2, 10),
1591 make_tuple(8, 32, &aom_highbd_sad8x32x4d_sse2, 10),
1592 make_tuple(32, 8, &aom_highbd_sad32x8x4d_sse2, 12),
1593 make_tuple(8, 32, &aom_highbd_sad8x32x4d_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001594#endif
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001595 make_tuple(16, 4, &aom_sad16x4x4d_sse2, -1),
1596 make_tuple(4, 16, &aom_sad4x16x4d_sse2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001597#if CONFIG_AV1_HIGHBITDEPTH
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001598 make_tuple(16, 4, &aom_highbd_sad16x4x4d_sse2, 8),
1599 make_tuple(4, 16, &aom_highbd_sad4x16x4d_sse2, 8),
1600 make_tuple(16, 4, &aom_highbd_sad16x4x4d_sse2, 10),
1601 make_tuple(4, 16, &aom_highbd_sad4x16x4d_sse2, 10),
1602 make_tuple(16, 4, &aom_highbd_sad16x4x4d_sse2, 12),
1603 make_tuple(4, 16, &aom_highbd_sad4x16x4d_sse2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001604#endif
Johannd5d92892015-04-17 16:11:38 -04001605};
Cheng Chen96786fe2020-02-14 17:28:25 -08001606INSTANTIATE_TEST_SUITE_P(SSE2, SADx4Test, ::testing::ValuesIn(x4d_sse2_tests));
Ruiling Song8dc32d72020-01-20 15:33:37 +08001607
1608const SadMxNx4AvgParam x4d_avg_sse2_tests[] = {
1609 make_tuple(128, 128, &aom_sad128x128x4d_avg_sse2, -1),
1610 make_tuple(128, 64, &aom_sad128x64x4d_avg_sse2, -1),
1611 make_tuple(64, 128, &aom_sad64x128x4d_avg_sse2, -1),
1612 make_tuple(64, 64, &aom_sad64x64x4d_avg_sse2, -1),
1613 make_tuple(64, 32, &aom_sad64x32x4d_avg_sse2, -1),
1614 make_tuple(32, 64, &aom_sad32x64x4d_avg_sse2, -1),
1615 make_tuple(32, 32, &aom_sad32x32x4d_avg_sse2, -1),
1616 make_tuple(32, 16, &aom_sad32x16x4d_avg_sse2, -1),
1617 make_tuple(16, 32, &aom_sad16x32x4d_avg_sse2, -1),
1618 make_tuple(16, 16, &aom_sad16x16x4d_avg_sse2, -1),
1619 make_tuple(16, 8, &aom_sad16x8x4d_avg_sse2, -1),
1620 make_tuple(8, 16, &aom_sad8x16x4d_avg_sse2, -1),
1621 make_tuple(8, 8, &aom_sad8x8x4d_avg_sse2, -1),
1622 make_tuple(8, 4, &aom_sad8x4x4d_avg_sse2, -1),
1623 make_tuple(4, 8, &aom_sad4x8x4d_avg_sse2, -1),
1624 make_tuple(4, 4, &aom_sad4x4x4d_avg_sse2, -1),
1625 make_tuple(64, 16, &aom_sad64x16x4d_avg_sse2, -1),
1626 make_tuple(16, 64, &aom_sad16x64x4d_avg_sse2, -1),
1627 make_tuple(32, 8, &aom_sad32x8x4d_avg_sse2, -1),
1628 make_tuple(8, 32, &aom_sad8x32x4d_avg_sse2, -1),
1629 make_tuple(16, 4, &aom_sad16x4x4d_avg_sse2, -1),
1630 make_tuple(4, 16, &aom_sad4x16x4d_avg_sse2, -1),
1631};
1632INSTANTIATE_TEST_SUITE_P(SSE2, SADx4AvgTest,
1633 ::testing::ValuesIn(x4d_avg_sse2_tests));
Urvang Joshib8b8dad2018-05-08 19:23:30 -04001634#endif // HAVE_SSE2
Cheng Chena0367dc2017-11-16 19:20:42 -08001635
Urvang Joshib8b8dad2018-05-08 19:23:30 -04001636#if HAVE_SSSE3
1637// Note: These are named sse2, but part of ssse3 file and only built and linked
1638// when ssse3 is enabled.
Debargha Mukherjee0c96c112018-12-20 16:04:18 -08001639const DistWtdSadMxhParam dist_wtd_sad_sse2_tests[] = {
Cheng Chena0367dc2017-11-16 19:20:42 -08001640 make_tuple(4, 4, &aom_sad4xh_sse2, -1),
1641 make_tuple(4, 8, &aom_sad4xh_sse2, -1),
1642 make_tuple(8, 4, &aom_sad8xh_sse2, -1),
1643 make_tuple(8, 8, &aom_sad8xh_sse2, -1),
1644 make_tuple(8, 16, &aom_sad8xh_sse2, -1),
1645 make_tuple(16, 8, &aom_sad16xh_sse2, -1),
1646 make_tuple(16, 16, &aom_sad16xh_sse2, -1),
1647 make_tuple(16, 32, &aom_sad16xh_sse2, -1),
1648 make_tuple(32, 16, &aom_sad32xh_sse2, -1),
1649 make_tuple(32, 32, &aom_sad32xh_sse2, -1),
1650 make_tuple(32, 64, &aom_sad32xh_sse2, -1),
1651 make_tuple(64, 32, &aom_sad64xh_sse2, -1),
1652 make_tuple(64, 64, &aom_sad64xh_sse2, -1),
Cheng Chena0367dc2017-11-16 19:20:42 -08001653 make_tuple(128, 128, &aom_sad128xh_sse2, -1),
1654 make_tuple(128, 64, &aom_sad128xh_sse2, -1),
1655 make_tuple(64, 128, &aom_sad64xh_sse2, -1),
Cheng Chena0367dc2017-11-16 19:20:42 -08001656 make_tuple(4, 16, &aom_sad4xh_sse2, -1),
1657 make_tuple(16, 4, &aom_sad16xh_sse2, -1),
1658 make_tuple(8, 32, &aom_sad8xh_sse2, -1),
1659 make_tuple(32, 8, &aom_sad32xh_sse2, -1),
1660 make_tuple(16, 64, &aom_sad16xh_sse2, -1),
1661 make_tuple(64, 16, &aom_sad64xh_sse2, -1),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001662
1663 make_tuple(16, 64, &aom_sad16xh_sse2, -1),
1664 make_tuple(64, 16, &aom_sad64xh_sse2, -1),
1665 make_tuple(8, 32, &aom_sad8xh_sse2, -1),
1666 make_tuple(32, 8, &aom_sad32xh_sse2, -1),
1667 make_tuple(4, 16, &aom_sad4xh_sse2, -1),
1668 make_tuple(16, 4, &aom_sad16xh_sse2, -1),
Cheng Chena0367dc2017-11-16 19:20:42 -08001669};
Cheng Chen96786fe2020-02-14 17:28:25 -08001670INSTANTIATE_TEST_SUITE_P(SSE2, DistWtdSADTest,
1671 ::testing::ValuesIn(dist_wtd_sad_sse2_tests));
Cheng Chena0367dc2017-11-16 19:20:42 -08001672
Urvang Joshib8b8dad2018-05-08 19:23:30 -04001673#endif // HAVE_SSSE3
John Koleszar1cfc86e2013-03-01 12:43:41 -08001674
1675#if HAVE_SSE3
Johannd5d92892015-04-17 16:11:38 -04001676// Only functions are x3, which do not have tests.
Deb Mukherjeefc882922014-05-13 10:11:42 -07001677#endif // HAVE_SSE3
John Koleszar6b653cb2013-02-28 17:03:02 -08001678
Johannfbea8972012-06-28 11:43:58 -07001679#if HAVE_SSSE3
Debargha Mukherjee0c96c112018-12-20 16:04:18 -08001680const DistWtdCompAvgParam dist_wtd_comp_avg_ssse3_tests[] = {
1681 make_tuple(128, 128, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1682 make_tuple(128, 64, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1683 make_tuple(64, 128, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1684 make_tuple(64, 64, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1685 make_tuple(64, 32, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1686 make_tuple(32, 64, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1687 make_tuple(32, 32, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1688 make_tuple(32, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1689 make_tuple(16, 32, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1690 make_tuple(16, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1691 make_tuple(16, 8, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1692 make_tuple(8, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1693 make_tuple(8, 8, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1694 make_tuple(8, 4, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1695 make_tuple(4, 8, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1696 make_tuple(4, 4, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1697 make_tuple(16, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001698
1699 make_tuple(64, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1700 make_tuple(16, 64, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1701 make_tuple(32, 8, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1702 make_tuple(8, 32, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1703 make_tuple(16, 4, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
1704 make_tuple(4, 16, &aom_dist_wtd_comp_avg_pred_ssse3, -1),
Cheng Chena0367dc2017-11-16 19:20:42 -08001705};
1706
Cheng Chen96786fe2020-02-14 17:28:25 -08001707INSTANTIATE_TEST_SUITE_P(SSSE3, DistWtdCompAvgTest,
1708 ::testing::ValuesIn(dist_wtd_comp_avg_ssse3_tests));
Cheng Chena0367dc2017-11-16 19:20:42 -08001709
Debargha Mukherjee0c96c112018-12-20 16:04:18 -08001710const DistWtdSadMxNAvgParam dist_wtd_avg_ssse3_tests[] = {
1711 make_tuple(128, 128, &aom_dist_wtd_sad128x128_avg_ssse3, -1),
1712 make_tuple(128, 64, &aom_dist_wtd_sad128x64_avg_ssse3, -1),
1713 make_tuple(64, 128, &aom_dist_wtd_sad64x128_avg_ssse3, -1),
1714 make_tuple(64, 64, &aom_dist_wtd_sad64x64_avg_ssse3, -1),
1715 make_tuple(64, 32, &aom_dist_wtd_sad64x32_avg_ssse3, -1),
1716 make_tuple(32, 64, &aom_dist_wtd_sad32x64_avg_ssse3, -1),
1717 make_tuple(32, 32, &aom_dist_wtd_sad32x32_avg_ssse3, -1),
1718 make_tuple(32, 16, &aom_dist_wtd_sad32x16_avg_ssse3, -1),
1719 make_tuple(16, 32, &aom_dist_wtd_sad16x32_avg_ssse3, -1),
1720 make_tuple(16, 16, &aom_dist_wtd_sad16x16_avg_ssse3, -1),
1721 make_tuple(16, 8, &aom_dist_wtd_sad16x8_avg_ssse3, -1),
1722 make_tuple(8, 16, &aom_dist_wtd_sad8x16_avg_ssse3, -1),
1723 make_tuple(8, 8, &aom_dist_wtd_sad8x8_avg_ssse3, -1),
1724 make_tuple(8, 4, &aom_dist_wtd_sad8x4_avg_ssse3, -1),
1725 make_tuple(4, 8, &aom_dist_wtd_sad4x8_avg_ssse3, -1),
1726 make_tuple(4, 4, &aom_dist_wtd_sad4x4_avg_ssse3, -1),
Debargha Mukherjee5b5cbbd2019-07-15 15:43:57 -07001727
1728 make_tuple(64, 16, &aom_dist_wtd_sad64x16_avg_ssse3, -1),
1729 make_tuple(16, 64, &aom_dist_wtd_sad16x64_avg_ssse3, -1),
1730 make_tuple(32, 8, &aom_dist_wtd_sad32x8_avg_ssse3, -1),
1731 make_tuple(8, 32, &aom_dist_wtd_sad8x32_avg_ssse3, -1),
1732 make_tuple(16, 4, &aom_dist_wtd_sad16x4_avg_ssse3, -1),
1733 make_tuple(4, 16, &aom_dist_wtd_sad4x16_avg_ssse3, -1),
Cheng Chena0367dc2017-11-16 19:20:42 -08001734};
Cheng Chen96786fe2020-02-14 17:28:25 -08001735INSTANTIATE_TEST_SUITE_P(SSSE3, DistWtdSADavgTest,
1736 ::testing::ValuesIn(dist_wtd_avg_ssse3_tests));
Deb Mukherjeefc882922014-05-13 10:11:42 -07001737#endif // HAVE_SSSE3
Johannfbea8972012-06-28 11:43:58 -07001738
Johannd5d92892015-04-17 16:11:38 -04001739#if HAVE_SSE4_1
1740// Only functions are x8, which do not have tests.
1741#endif // HAVE_SSE4_1
James Zernd3ff0092014-06-08 18:25:37 -07001742
Johannd5d92892015-04-17 16:11:38 -04001743#if HAVE_AVX2
Johannd5d92892015-04-17 16:11:38 -04001744const SadMxNParam avx2_tests[] = {
Yi Luo1f496242016-11-09 13:39:51 -08001745 make_tuple(64, 128, &aom_sad64x128_avx2, -1),
1746 make_tuple(128, 64, &aom_sad128x64_avx2, -1),
1747 make_tuple(128, 128, &aom_sad128x128_avx2, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001748 make_tuple(64, 64, &aom_sad64x64_avx2, -1),
1749 make_tuple(64, 32, &aom_sad64x32_avx2, -1),
1750 make_tuple(32, 64, &aom_sad32x64_avx2, -1),
1751 make_tuple(32, 32, &aom_sad32x32_avx2, -1),
1752 make_tuple(32, 16, &aom_sad32x16_avx2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001753#if CONFIG_AV1_HIGHBITDEPTH
Yi Luoe9832582016-11-29 19:38:12 -08001754 make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 8),
1755 make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 10),
1756 make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 12),
1757 make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 8),
1758 make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 10),
1759 make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 12),
1760 make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 8),
1761 make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 10),
1762 make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 12),
Yi Luoe9832582016-11-29 19:38:12 -08001763 make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 8),
1764 make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 10),
1765 make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 12),
1766 make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 8),
1767 make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 10),
1768 make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 12),
1769 make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 8),
1770 make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 10),
1771 make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 12),
1772 make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 8),
1773 make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 10),
1774 make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 12),
1775 make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 8),
1776 make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 10),
1777 make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 12),
1778 make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 8),
1779 make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 10),
1780 make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 12),
1781 make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 8),
1782 make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 10),
1783 make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 12),
1784 make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 8),
1785 make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 10),
1786 make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 12),
Debargha Mukherjee42451f72019-07-16 00:45:13 -07001787
1788 make_tuple(64, 16, &aom_highbd_sad64x16_avx2, 8),
1789 make_tuple(64, 16, &aom_highbd_sad64x16_avx2, 10),
1790 make_tuple(64, 16, &aom_highbd_sad64x16_avx2, 12),
1791 make_tuple(16, 64, &aom_highbd_sad16x64_avx2, 8),
1792 make_tuple(16, 64, &aom_highbd_sad16x64_avx2, 10),
1793 make_tuple(16, 64, &aom_highbd_sad16x64_avx2, 12),
1794 make_tuple(32, 8, &aom_highbd_sad32x8_avx2, 8),
1795 make_tuple(32, 8, &aom_highbd_sad32x8_avx2, 10),
1796 make_tuple(32, 8, &aom_highbd_sad32x8_avx2, 12),
1797 make_tuple(16, 4, &aom_highbd_sad16x4_avx2, 8),
1798 make_tuple(16, 4, &aom_highbd_sad16x4_avx2, 10),
1799 make_tuple(16, 4, &aom_highbd_sad16x4_avx2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001800#endif
Johannd5d92892015-04-17 16:11:38 -04001801};
Cheng Chen96786fe2020-02-14 17:28:25 -08001802INSTANTIATE_TEST_SUITE_P(AVX2, SADTest, ::testing::ValuesIn(avx2_tests));
Johannd5d92892015-04-17 16:11:38 -04001803
Johannd5d92892015-04-17 16:11:38 -04001804const SadMxNAvgParam avg_avx2_tests[] = {
Yi Luo9e218742016-11-22 11:50:12 -08001805 make_tuple(64, 128, &aom_sad64x128_avg_avx2, -1),
1806 make_tuple(128, 64, &aom_sad128x64_avg_avx2, -1),
1807 make_tuple(128, 128, &aom_sad128x128_avg_avx2, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001808 make_tuple(64, 64, &aom_sad64x64_avg_avx2, -1),
1809 make_tuple(64, 32, &aom_sad64x32_avg_avx2, -1),
1810 make_tuple(32, 64, &aom_sad32x64_avg_avx2, -1),
1811 make_tuple(32, 32, &aom_sad32x32_avg_avx2, -1),
1812 make_tuple(32, 16, &aom_sad32x16_avg_avx2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001813#if CONFIG_AV1_HIGHBITDEPTH
Yi Luoe9832582016-11-29 19:38:12 -08001814 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 8),
1815 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 10),
1816 make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 12),
1817 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 8),
1818 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 10),
1819 make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 12),
1820 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 8),
1821 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 10),
1822 make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 12),
Yi Luoe9832582016-11-29 19:38:12 -08001823 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 8),
1824 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 10),
1825 make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 12),
1826 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 8),
1827 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 10),
1828 make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 12),
1829 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 8),
1830 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 10),
1831 make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 12),
1832 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 8),
1833 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 10),
1834 make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 12),
1835 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 8),
1836 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 10),
1837 make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 12),
1838 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 8),
1839 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 10),
1840 make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 12),
1841 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 8),
1842 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 10),
1843 make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 12),
1844 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 8),
1845 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 10),
1846 make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 12),
Debargha Mukherjee42451f72019-07-16 00:45:13 -07001847
1848 make_tuple(64, 16, &aom_highbd_sad64x16_avg_avx2, 8),
1849 make_tuple(64, 16, &aom_highbd_sad64x16_avg_avx2, 10),
1850 make_tuple(64, 16, &aom_highbd_sad64x16_avg_avx2, 12),
1851 make_tuple(16, 64, &aom_highbd_sad16x64_avg_avx2, 8),
1852 make_tuple(16, 64, &aom_highbd_sad16x64_avg_avx2, 10),
1853 make_tuple(16, 64, &aom_highbd_sad16x64_avg_avx2, 12),
1854 make_tuple(32, 8, &aom_highbd_sad32x8_avg_avx2, 8),
1855 make_tuple(32, 8, &aom_highbd_sad32x8_avg_avx2, 10),
1856 make_tuple(32, 8, &aom_highbd_sad32x8_avg_avx2, 12),
1857 make_tuple(16, 4, &aom_highbd_sad16x4_avg_avx2, 8),
1858 make_tuple(16, 4, &aom_highbd_sad16x4_avg_avx2, 10),
1859 make_tuple(16, 4, &aom_highbd_sad16x4_avg_avx2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001860#endif
Johannd5d92892015-04-17 16:11:38 -04001861};
Cheng Chen96786fe2020-02-14 17:28:25 -08001862INSTANTIATE_TEST_SUITE_P(AVX2, SADavgTest, ::testing::ValuesIn(avg_avx2_tests));
Johannd5d92892015-04-17 16:11:38 -04001863
Johannd5d92892015-04-17 16:11:38 -04001864const SadMxNx4Param x4d_avx2_tests[] = {
Yi Luo9e218742016-11-22 11:50:12 -08001865 make_tuple(32, 64, &aom_sad32x64x4d_avx2, -1),
Yaowu Xuf883b422016-08-30 14:01:10 -07001866 make_tuple(32, 32, &aom_sad32x32x4d_avx2, -1),
Victoria Zhislina4c09b452019-10-16 19:30:02 +03001867 make_tuple(32, 16, &aom_sad32x16x4d_avx2, -1),
1868 make_tuple(32, 8, &aom_sad32x8x4d_avx2, -1),
1869 make_tuple(64, 128, &aom_sad64x128x4d_avx2, -1),
1870 make_tuple(64, 64, &aom_sad64x64x4d_avx2, -1),
1871 make_tuple(64, 32, &aom_sad64x32x4d_avx2, -1),
1872 make_tuple(64, 16, &aom_sad64x16x4d_avx2, -1),
1873 make_tuple(128, 128, &aom_sad128x128x4d_avx2, -1),
1874 make_tuple(128, 64, &aom_sad128x64x4d_avx2, -1),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001875#if CONFIG_AV1_HIGHBITDEPTH
Yi Luoe9832582016-11-29 19:38:12 -08001876 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 8),
1877 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 10),
1878 make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 12),
1879 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 8),
1880 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 10),
1881 make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 12),
1882 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 8),
1883 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 10),
1884 make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 12),
Yi Luoe9832582016-11-29 19:38:12 -08001885 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 8),
1886 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 10),
1887 make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 12),
1888 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 8),
1889 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 10),
1890 make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 12),
1891 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 8),
1892 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 10),
1893 make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 12),
1894 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 8),
1895 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 10),
1896 make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 12),
1897 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 8),
1898 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 10),
1899 make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 12),
1900 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 8),
1901 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 10),
1902 make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 12),
1903 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 8),
1904 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 10),
1905 make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 12),
1906 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 8),
1907 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 10),
1908 make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 12),
Debargha Mukherjee42451f72019-07-16 00:45:13 -07001909
1910 make_tuple(16, 64, &aom_highbd_sad16x64x4d_avx2, 8),
1911 make_tuple(16, 64, &aom_highbd_sad16x64x4d_avx2, 10),
1912 make_tuple(16, 64, &aom_highbd_sad16x64x4d_avx2, 12),
1913 make_tuple(64, 16, &aom_highbd_sad64x16x4d_avx2, 8),
1914 make_tuple(64, 16, &aom_highbd_sad64x16x4d_avx2, 10),
1915 make_tuple(64, 16, &aom_highbd_sad64x16x4d_avx2, 12),
1916 make_tuple(32, 8, &aom_highbd_sad32x8x4d_avx2, 8),
1917 make_tuple(32, 8, &aom_highbd_sad32x8x4d_avx2, 10),
1918 make_tuple(32, 8, &aom_highbd_sad32x8x4d_avx2, 12),
1919 make_tuple(16, 4, &aom_highbd_sad16x4x4d_avx2, 8),
1920 make_tuple(16, 4, &aom_highbd_sad16x4x4d_avx2, 10),
1921 make_tuple(16, 4, &aom_highbd_sad16x4x4d_avx2, 12),
Jerome Jiangfa1d1732019-08-06 10:31:20 -07001922#endif
Johannd5d92892015-04-17 16:11:38 -04001923};
Cheng Chen96786fe2020-02-14 17:28:25 -08001924INSTANTIATE_TEST_SUITE_P(AVX2, SADx4Test, ::testing::ValuesIn(x4d_avx2_tests));
Johannd5d92892015-04-17 16:11:38 -04001925#endif // HAVE_AVX2
Frank Galligan54fa9562015-01-24 12:11:16 -08001926
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301927//------------------------------------------------------------------------------
1928// MIPS functions
1929#if HAVE_MSA
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301930const SadMxNParam msa_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001931 make_tuple(64, 64, &aom_sad64x64_msa, -1),
1932 make_tuple(64, 32, &aom_sad64x32_msa, -1),
1933 make_tuple(32, 64, &aom_sad32x64_msa, -1),
1934 make_tuple(32, 32, &aom_sad32x32_msa, -1),
1935 make_tuple(32, 16, &aom_sad32x16_msa, -1),
1936 make_tuple(16, 32, &aom_sad16x32_msa, -1),
1937 make_tuple(16, 16, &aom_sad16x16_msa, -1),
1938 make_tuple(16, 8, &aom_sad16x8_msa, -1),
1939 make_tuple(8, 16, &aom_sad8x16_msa, -1),
1940 make_tuple(8, 8, &aom_sad8x8_msa, -1),
1941 make_tuple(8, 4, &aom_sad8x4_msa, -1),
1942 make_tuple(4, 8, &aom_sad4x8_msa, -1),
1943 make_tuple(4, 4, &aom_sad4x4_msa, -1),
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301944};
Cheng Chen96786fe2020-02-14 17:28:25 -08001945INSTANTIATE_TEST_SUITE_P(MSA, SADTest, ::testing::ValuesIn(msa_tests));
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301946
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301947const SadMxNAvgParam avg_msa_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001948 make_tuple(64, 64, &aom_sad64x64_avg_msa, -1),
1949 make_tuple(64, 32, &aom_sad64x32_avg_msa, -1),
1950 make_tuple(32, 64, &aom_sad32x64_avg_msa, -1),
1951 make_tuple(32, 32, &aom_sad32x32_avg_msa, -1),
1952 make_tuple(32, 16, &aom_sad32x16_avg_msa, -1),
1953 make_tuple(16, 32, &aom_sad16x32_avg_msa, -1),
1954 make_tuple(16, 16, &aom_sad16x16_avg_msa, -1),
1955 make_tuple(16, 8, &aom_sad16x8_avg_msa, -1),
1956 make_tuple(8, 16, &aom_sad8x16_avg_msa, -1),
1957 make_tuple(8, 8, &aom_sad8x8_avg_msa, -1),
1958 make_tuple(8, 4, &aom_sad8x4_avg_msa, -1),
1959 make_tuple(4, 8, &aom_sad4x8_avg_msa, -1),
1960 make_tuple(4, 4, &aom_sad4x4_avg_msa, -1),
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301961};
Cheng Chen96786fe2020-02-14 17:28:25 -08001962INSTANTIATE_TEST_SUITE_P(MSA, SADavgTest, ::testing::ValuesIn(avg_msa_tests));
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301963
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301964const SadMxNx4Param x4d_msa_tests[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -07001965 make_tuple(64, 64, &aom_sad64x64x4d_msa, -1),
1966 make_tuple(64, 32, &aom_sad64x32x4d_msa, -1),
1967 make_tuple(32, 64, &aom_sad32x64x4d_msa, -1),
1968 make_tuple(32, 32, &aom_sad32x32x4d_msa, -1),
1969 make_tuple(32, 16, &aom_sad32x16x4d_msa, -1),
1970 make_tuple(16, 32, &aom_sad16x32x4d_msa, -1),
1971 make_tuple(16, 16, &aom_sad16x16x4d_msa, -1),
1972 make_tuple(16, 8, &aom_sad16x8x4d_msa, -1),
1973 make_tuple(8, 16, &aom_sad8x16x4d_msa, -1),
1974 make_tuple(8, 8, &aom_sad8x8x4d_msa, -1),
1975 make_tuple(8, 4, &aom_sad8x4x4d_msa, -1),
1976 make_tuple(4, 8, &aom_sad4x8x4d_msa, -1),
1977 make_tuple(4, 4, &aom_sad4x4x4d_msa, -1),
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301978};
Cheng Chen96786fe2020-02-14 17:28:25 -08001979INSTANTIATE_TEST_SUITE_P(MSA, SADx4Test, ::testing::ValuesIn(x4d_msa_tests));
Parag Salasakarbc3ec8e2015-07-01 11:19:42 +05301980#endif // HAVE_MSA
1981
Johannfbea8972012-06-28 11:43:58 -07001982} // namespace