blob: 2f5c2228332fb1c82c1388c6b233e92b62f2bbe3 [file] [log] [blame]
James Zern98473442012-11-06 16:58:11 -08001/*
Yaowu Xu2ab7ff02016-09-02 12:04:54 -07002 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
James Zern98473442012-11-06 16:58:11 -08003 *
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.
10*/
Peter de Rivaz48032bf2014-10-16 14:00:54 +010011
12#include <cstdlib>
James Zern98473442012-11-06 16:58:11 -080013#include <new>
14
Tom Finegan7a07ece2017-02-07 17:14:05 -080015#include "third_party/googletest/src/googletest/include/gtest/gtest.h"
James Zern5b756742013-06-17 22:58:40 -070016
Yaowu Xuf883b422016-08-30 14:01:10 -070017#include "./aom_config.h"
18#include "./aom_dsp_rtcd.h"
Jingning Han097d59c2015-07-29 14:51:36 -070019#include "test/acm_random.h"
20#include "test/clear_system_state.h"
21#include "test/register_state_check.h"
Yaowu Xuf883b422016-08-30 14:01:10 -070022#include "aom/aom_codec.h"
23#include "aom/aom_integer.h"
24#include "aom_mem/aom_mem.h"
Yaowu Xuc27fc142016-08-22 16:08:15 -070025#include "aom_ports/mem.h"
James Zern98473442012-11-06 16:58:11 -080026
27namespace {
28
Johannc3bdffb2015-05-15 11:52:03 -070029typedef unsigned int (*VarianceMxNFunc)(const uint8_t *a, int a_stride,
30 const uint8_t *b, int b_stride,
31 unsigned int *sse);
Johanneb88b172015-05-26 11:30:25 -070032typedef unsigned int (*SubpixVarMxNFunc)(const uint8_t *a, int a_stride,
33 int xoffset, int yoffset,
34 const uint8_t *b, int b_stride,
35 unsigned int *sse);
Johann6a82f0d2015-06-05 09:54:19 -070036typedef unsigned int (*SubpixAvgVarMxNFunc)(const uint8_t *a, int a_stride,
37 int xoffset, int yoffset,
38 const uint8_t *b, int b_stride,
39 uint32_t *sse,
40 const uint8_t *second_pred);
Johannc5a7c892015-05-27 11:38:43 -070041typedef unsigned int (*Get4x4SseFunc)(const uint8_t *a, int a_stride,
Johannc3bdffb2015-05-15 11:52:03 -070042 const uint8_t *b, int b_stride);
Johann6a82f0d2015-06-05 09:54:19 -070043typedef unsigned int (*SumOfSquaresFunction)(const int16_t *src);
44
Yaowu Xuc27fc142016-08-22 16:08:15 -070045using libaom_test::ACMRandom;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -070046
Johannc855ed72015-05-27 14:37:31 -070047// Truncate high bit depth results by downshifting (with rounding) by:
48// 2 * (bit_depth - 8) for sse
49// (bit_depth - 8) for se
50static void RoundHighBitDepth(int bit_depth, int64_t *se, uint64_t *sse) {
51 switch (bit_depth) {
Yaowu Xuf883b422016-08-30 14:01:10 -070052 case AOM_BITS_12:
Johannc855ed72015-05-27 14:37:31 -070053 *sse = (*sse + 128) >> 8;
54 *se = (*se + 8) >> 4;
55 break;
Yaowu Xuf883b422016-08-30 14:01:10 -070056 case AOM_BITS_10:
Johannc855ed72015-05-27 14:37:31 -070057 *sse = (*sse + 8) >> 4;
58 *se = (*se + 2) >> 2;
59 break;
Yaowu Xuf883b422016-08-30 14:01:10 -070060 case AOM_BITS_8:
skal8dbbcda2016-07-13 17:33:22 -070061 default: break;
Johannc855ed72015-05-27 14:37:31 -070062 }
63}
64
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -070065static unsigned int mb_ss_ref(const int16_t *src) {
66 unsigned int res = 0;
67 for (int i = 0; i < 256; ++i) {
68 res += src[i] * src[i];
69 }
70 return res;
71}
72
Yi Luoc3e07b22016-04-04 09:44:56 -070073/* Note:
74 * Our codebase calculates the "diff" value in the variance algorithm by
75 * (src - ref).
76 */
skal8dbbcda2016-07-13 17:33:22 -070077static uint32_t variance_ref(const uint8_t *src, const uint8_t *ref, int l2w,
78 int l2h, int src_stride, int ref_stride,
79 uint32_t *sse_ptr, bool use_high_bit_depth_,
Yaowu Xuf883b422016-08-30 14:01:10 -070080 aom_bit_depth_t bit_depth) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +010081 int64_t se = 0;
82 uint64_t sse = 0;
83 const int w = 1 << l2w;
84 const int h = 1 << l2h;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -070085 for (int y = 0; y < h; y++) {
86 for (int x = 0; x < w; x++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +010087 int diff;
88 if (!use_high_bit_depth_) {
skal8dbbcda2016-07-13 17:33:22 -070089 diff = src[y * src_stride + x] - ref[y * ref_stride + x];
Peter de Rivaz48032bf2014-10-16 14:00:54 +010090 se += diff;
91 sse += diff * diff;
Sebastien Alaiwan71e87842017-04-12 16:03:28 +020092#if CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +010093 } else {
skal8dbbcda2016-07-13 17:33:22 -070094 diff = CONVERT_TO_SHORTPTR(src)[y * src_stride + x] -
95 CONVERT_TO_SHORTPTR(ref)[y * ref_stride + x];
Peter de Rivaz48032bf2014-10-16 14:00:54 +010096 se += diff;
97 sse += diff * diff;
Sebastien Alaiwan71e87842017-04-12 16:03:28 +020098#endif // CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +010099 }
100 }
101 }
Johannc855ed72015-05-27 14:37:31 -0700102 RoundHighBitDepth(bit_depth, &se, &sse);
Johannd90536c2015-06-01 13:03:30 -0700103 *sse_ptr = static_cast<uint32_t>(sse);
Urvang Joshi77853e52016-07-15 12:47:01 -0700104 return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700105}
106
Johanneb88b172015-05-26 11:30:25 -0700107/* The subpel reference functions differ from the codec version in one aspect:
108 * they calculate the bilinear factors directly instead of using a lookup table
109 * and therefore upshift xoff and yoff by 1. Only every other calculated value
110 * is used so the codec version shrinks the table to save space and maintain
111 * compatibility with vp8.
112 */
Johannd90536c2015-06-01 13:03:30 -0700113static uint32_t subpel_variance_ref(const uint8_t *ref, const uint8_t *src,
114 int l2w, int l2h, int xoff, int yoff,
skal8dbbcda2016-07-13 17:33:22 -0700115 uint32_t *sse_ptr, bool use_high_bit_depth_,
Yaowu Xuf883b422016-08-30 14:01:10 -0700116 aom_bit_depth_t bit_depth) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100117 int64_t se = 0;
118 uint64_t sse = 0;
119 const int w = 1 << l2w;
120 const int h = 1 << l2h;
Johanneb88b172015-05-26 11:30:25 -0700121
122 xoff <<= 1;
123 yoff <<= 1;
124
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700125 for (int y = 0; y < h; y++) {
126 for (int x = 0; x < w; x++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100127 // Bilinear interpolation at a 16th pel step.
128 if (!use_high_bit_depth_) {
129 const int a1 = ref[(w + 1) * (y + 0) + x + 0];
130 const int a2 = ref[(w + 1) * (y + 0) + x + 1];
131 const int b1 = ref[(w + 1) * (y + 1) + x + 0];
132 const int b2 = ref[(w + 1) * (y + 1) + x + 1];
133 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
134 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
135 const int r = a + (((b - a) * yoff + 8) >> 4);
136 const int diff = r - src[w * y + x];
137 se += diff;
138 sse += diff * diff;
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200139#if CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100140 } else {
141 uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
142 uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
143 const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
144 const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
145 const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
146 const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
147 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
148 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
149 const int r = a + (((b - a) * yoff + 8) >> 4);
150 const int diff = r - src16[w * y + x];
151 se += diff;
152 sse += diff * diff;
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200153#endif // CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100154 }
155 }
156 }
Johannc855ed72015-05-27 14:37:31 -0700157 RoundHighBitDepth(bit_depth, &se, &sse);
Johannd90536c2015-06-01 13:03:30 -0700158 *sse_ptr = static_cast<uint32_t>(sse);
Urvang Joshi77853e52016-07-15 12:47:01 -0700159 return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700160}
James Zern98473442012-11-06 16:58:11 -0800161
skal8dbbcda2016-07-13 17:33:22 -0700162static uint32_t subpel_avg_variance_ref(const uint8_t *ref, const uint8_t *src,
163 const uint8_t *second_pred, int l2w,
164 int l2h, int xoff, int yoff,
165 uint32_t *sse_ptr,
166 bool use_high_bit_depth,
Yaowu Xuf883b422016-08-30 14:01:10 -0700167 aom_bit_depth_t bit_depth) {
skal8dbbcda2016-07-13 17:33:22 -0700168 int64_t se = 0;
169 uint64_t sse = 0;
170 const int w = 1 << l2w;
171 const int h = 1 << l2h;
172
173 xoff <<= 1;
174 yoff <<= 1;
175
176 for (int y = 0; y < h; y++) {
177 for (int x = 0; x < w; x++) {
178 // bilinear interpolation at a 16th pel step
179 if (!use_high_bit_depth) {
180 const int a1 = ref[(w + 1) * (y + 0) + x + 0];
181 const int a2 = ref[(w + 1) * (y + 0) + x + 1];
182 const int b1 = ref[(w + 1) * (y + 1) + x + 0];
183 const int b2 = ref[(w + 1) * (y + 1) + x + 1];
184 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
185 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
186 const int r = a + (((b - a) * yoff + 8) >> 4);
187 const int diff =
188 ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x];
189 se += diff;
190 sse += diff * diff;
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200191#if CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700192 } else {
193 const uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
194 const uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
195 const uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred);
196 const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
197 const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
198 const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
199 const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
200 const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
201 const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
202 const int r = a + (((b - a) * yoff + 8) >> 4);
203 const int diff = ((r + sec16[w * y + x] + 1) >> 1) - src16[w * y + x];
204 se += diff;
205 sse += diff * diff;
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200206#endif // CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700207 }
208 }
209 }
210 RoundHighBitDepth(bit_depth, &se, &sse);
211 *sse_ptr = static_cast<uint32_t>(sse);
Urvang Joshi77853e52016-07-15 12:47:01 -0700212 return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
skal8dbbcda2016-07-13 17:33:22 -0700213}
214
215////////////////////////////////////////////////////////////////////////////////
216
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -0700217class SumOfSquaresTest : public ::testing::TestWithParam<SumOfSquaresFunction> {
218 public:
219 SumOfSquaresTest() : func_(GetParam()) {}
220
Yaowu Xuc27fc142016-08-22 16:08:15 -0700221 virtual ~SumOfSquaresTest() { libaom_test::ClearSystemState(); }
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -0700222
223 protected:
224 void ConstTest();
225 void RefTest();
226
227 SumOfSquaresFunction func_;
228 ACMRandom rnd_;
229};
230
231void SumOfSquaresTest::ConstTest() {
232 int16_t mem[256];
233 unsigned int res;
234 for (int v = 0; v < 256; ++v) {
235 for (int i = 0; i < 256; ++i) {
236 mem[i] = v;
237 }
238 ASM_REGISTER_STATE_CHECK(res = func_(mem));
239 EXPECT_EQ(256u * (v * v), res);
240 }
241}
242
243void SumOfSquaresTest::RefTest() {
244 int16_t mem[256];
245 for (int i = 0; i < 100; ++i) {
246 for (int j = 0; j < 256; ++j) {
247 mem[j] = rnd_.Rand8() - rnd_.Rand8();
248 }
249
250 const unsigned int expected = mb_ss_ref(mem);
251 unsigned int res;
252 ASM_REGISTER_STATE_CHECK(res = func_(mem));
253 EXPECT_EQ(expected, res);
254 }
255}
256
skal8dbbcda2016-07-13 17:33:22 -0700257////////////////////////////////////////////////////////////////////////////////
258// Encapsulating struct to store the function to test along with
259// some testing context.
260// Can be used for MSE, SSE, Variance, etc.
261
262template <typename Func>
263struct TestParams {
264 TestParams(int log2w = 0, int log2h = 0, Func function = NULL,
265 int bit_depth_value = 0)
266 : log2width(log2w), log2height(log2h), func(function) {
267 use_high_bit_depth = (bit_depth_value > 0);
268 if (use_high_bit_depth) {
Yaowu Xuf883b422016-08-30 14:01:10 -0700269 bit_depth = static_cast<aom_bit_depth_t>(bit_depth_value);
skal8dbbcda2016-07-13 17:33:22 -0700270 } else {
Yaowu Xuf883b422016-08-30 14:01:10 -0700271 bit_depth = AOM_BITS_8;
skal8dbbcda2016-07-13 17:33:22 -0700272 }
273 width = 1 << log2width;
274 height = 1 << log2height;
275 block_size = width * height;
276 mask = (1u << bit_depth) - 1;
277 }
278
279 int log2width, log2height;
280 int width, height;
281 int block_size;
282 Func func;
Yaowu Xuf883b422016-08-30 14:01:10 -0700283 aom_bit_depth_t bit_depth;
skal8dbbcda2016-07-13 17:33:22 -0700284 bool use_high_bit_depth;
285 uint32_t mask;
286};
287
288template <typename Func>
289std::ostream &operator<<(std::ostream &os, const TestParams<Func> &p) {
290 return os << "log2width/height:" << p.log2width << "/" << p.log2height
291 << " function:" << reinterpret_cast<const void *>(p.func)
292 << " bit-depth:" << p.bit_depth;
293}
294
295// Main class for testing a function type
296template <typename FunctionType>
297class MainTestClass
298 : public ::testing::TestWithParam<TestParams<FunctionType> > {
James Zern98473442012-11-06 16:58:11 -0800299 public:
300 virtual void SetUp() {
skal8dbbcda2016-07-13 17:33:22 -0700301 params_ = this->GetParam();
302
303 rnd_.Reset(ACMRandom::DeterministicSeed());
304 const size_t unit =
305 use_high_bit_depth() ? sizeof(uint16_t) : sizeof(uint8_t);
Yaowu Xuf883b422016-08-30 14:01:10 -0700306 src_ = reinterpret_cast<uint8_t *>(aom_memalign(16, block_size() * unit));
skal8dbbcda2016-07-13 17:33:22 -0700307 ref_ = new uint8_t[block_size() * unit];
308 ASSERT_TRUE(src_ != NULL);
309 ASSERT_TRUE(ref_ != NULL);
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200310#if CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700311 if (use_high_bit_depth()) {
312 // TODO(skal): remove!
313 src_ = CONVERT_TO_BYTEPTR(src_);
314 ref_ = CONVERT_TO_BYTEPTR(ref_);
315 }
316#endif
317 }
318
319 virtual void TearDown() {
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200320#if CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700321 if (use_high_bit_depth()) {
322 // TODO(skal): remove!
323 src_ = reinterpret_cast<uint8_t *>(CONVERT_TO_SHORTPTR(src_));
324 ref_ = reinterpret_cast<uint8_t *>(CONVERT_TO_SHORTPTR(ref_));
325 }
326#endif
327
Yaowu Xuf883b422016-08-30 14:01:10 -0700328 aom_free(src_);
skal8dbbcda2016-07-13 17:33:22 -0700329 delete[] ref_;
330 src_ = NULL;
331 ref_ = NULL;
Yaowu Xuc27fc142016-08-22 16:08:15 -0700332 libaom_test::ClearSystemState();
skal8dbbcda2016-07-13 17:33:22 -0700333 }
334
335 protected:
336 // We could sub-class MainTestClass into dedicated class for Variance
337 // and MSE/SSE, but it involves a lot of 'this->xxx' dereferencing
338 // to access top class fields xxx. That's cumbersome, so for now we'll just
339 // implement the testing methods here:
340
341 // Variance tests
342 void ZeroTest();
343 void RefTest();
344 void RefStrideTest();
345 void OneQuarterTest();
346
347 // MSE/SSE tests
348 void RefTestMse();
349 void RefTestSse();
350 void MaxTestMse();
351 void MaxTestSse();
352
353 protected:
354 ACMRandom rnd_;
355 uint8_t *src_;
356 uint8_t *ref_;
357 TestParams<FunctionType> params_;
358
359 // some relay helpers
360 bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
361 int byte_shift() const { return params_.bit_depth - 8; }
362 int block_size() const { return params_.block_size; }
363 int width() const { return params_.width; }
364 uint32_t mask() const { return params_.mask; }
365};
366
367////////////////////////////////////////////////////////////////////////////////
368// Tests related to variance.
369
370template <typename VarianceFunctionType>
371void MainTestClass<VarianceFunctionType>::ZeroTest() {
372 for (int i = 0; i <= 255; ++i) {
373 if (!use_high_bit_depth()) {
374 memset(src_, i, block_size());
375 } else {
376 uint16_t *const src16 = CONVERT_TO_SHORTPTR(src_);
377 for (int k = 0; k < block_size(); ++k) src16[k] = i << byte_shift();
378 }
379 for (int j = 0; j <= 255; ++j) {
380 if (!use_high_bit_depth()) {
381 memset(ref_, j, block_size());
382 } else {
383 uint16_t *const ref16 = CONVERT_TO_SHORTPTR(ref_);
384 for (int k = 0; k < block_size(); ++k) ref16[k] = j << byte_shift();
385 }
386 unsigned int sse, var;
387 ASM_REGISTER_STATE_CHECK(
388 var = params_.func(src_, width(), ref_, width(), &sse));
389 EXPECT_EQ(0u, var) << "src values: " << i << " ref values: " << j;
390 }
391 }
392}
393
394template <typename VarianceFunctionType>
395void MainTestClass<VarianceFunctionType>::RefTest() {
396 for (int i = 0; i < 10; ++i) {
397 for (int j = 0; j < block_size(); j++) {
398 if (!use_high_bit_depth()) {
399 src_[j] = rnd_.Rand8();
400 ref_[j] = rnd_.Rand8();
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200401#if CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700402 } else {
403 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
404 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200405#endif // CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700406 }
407 }
408 unsigned int sse1, sse2, var1, var2;
409 const int stride = width();
410 ASM_REGISTER_STATE_CHECK(
411 var1 = params_.func(src_, stride, ref_, stride, &sse1));
412 var2 =
413 variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
414 stride, &sse2, use_high_bit_depth(), params_.bit_depth);
415 EXPECT_EQ(sse1, sse2) << "Error at test index: " << i;
416 EXPECT_EQ(var1, var2) << "Error at test index: " << i;
417 }
418}
419
420template <typename VarianceFunctionType>
421void MainTestClass<VarianceFunctionType>::RefStrideTest() {
422 for (int i = 0; i < 10; ++i) {
423 const int ref_stride = (i & 1) * width();
424 const int src_stride = ((i >> 1) & 1) * width();
425 for (int j = 0; j < block_size(); j++) {
426 const int ref_ind = (j / width()) * ref_stride + j % width();
427 const int src_ind = (j / width()) * src_stride + j % width();
428 if (!use_high_bit_depth()) {
429 src_[src_ind] = rnd_.Rand8();
430 ref_[ref_ind] = rnd_.Rand8();
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200431#if CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700432 } else {
433 CONVERT_TO_SHORTPTR(src_)[src_ind] = rnd_.Rand16() & mask();
434 CONVERT_TO_SHORTPTR(ref_)[ref_ind] = rnd_.Rand16() & mask();
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200435#endif // CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700436 }
437 }
438 unsigned int sse1, sse2;
439 unsigned int var1, var2;
440
441 ASM_REGISTER_STATE_CHECK(
442 var1 = params_.func(src_, src_stride, ref_, ref_stride, &sse1));
443 var2 = variance_ref(src_, ref_, params_.log2width, params_.log2height,
444 src_stride, ref_stride, &sse2, use_high_bit_depth(),
445 params_.bit_depth);
446 EXPECT_EQ(sse1, sse2) << "Error at test index: " << i;
447 EXPECT_EQ(var1, var2) << "Error at test index: " << i;
448 }
449}
450
451template <typename VarianceFunctionType>
452void MainTestClass<VarianceFunctionType>::OneQuarterTest() {
453 const int half = block_size() / 2;
454 if (!use_high_bit_depth()) {
455 memset(src_, 255, block_size());
456 memset(ref_, 255, half);
457 memset(ref_ + half, 0, half);
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200458#if CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700459 } else {
Yaowu Xuf883b422016-08-30 14:01:10 -0700460 aom_memset16(CONVERT_TO_SHORTPTR(src_), 255 << byte_shift(), block_size());
461 aom_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << byte_shift(), half);
462 aom_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half);
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200463#endif // CONFIG_HIGHBITDEPTH
skal8dbbcda2016-07-13 17:33:22 -0700464 }
465 unsigned int sse, var, expected;
466 ASM_REGISTER_STATE_CHECK(
467 var = params_.func(src_, width(), ref_, width(), &sse));
468 expected = block_size() * 255 * 255 / 4;
469 EXPECT_EQ(expected, var);
470}
471
472////////////////////////////////////////////////////////////////////////////////
473// Tests related to MSE / SSE.
474
475template <typename FunctionType>
476void MainTestClass<FunctionType>::RefTestMse() {
477 for (int i = 0; i < 10; ++i) {
478 for (int j = 0; j < block_size(); ++j) {
479 src_[j] = rnd_.Rand8();
480 ref_[j] = rnd_.Rand8();
481 }
482 unsigned int sse1, sse2;
483 const int stride = width();
484 ASM_REGISTER_STATE_CHECK(params_.func(src_, stride, ref_, stride, &sse1));
485 variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
Yaowu Xuf883b422016-08-30 14:01:10 -0700486 stride, &sse2, false, AOM_BITS_8);
skal8dbbcda2016-07-13 17:33:22 -0700487 EXPECT_EQ(sse1, sse2);
488 }
489}
490
491template <typename FunctionType>
492void MainTestClass<FunctionType>::RefTestSse() {
493 for (int i = 0; i < 10; ++i) {
494 for (int j = 0; j < block_size(); ++j) {
495 src_[j] = rnd_.Rand8();
496 ref_[j] = rnd_.Rand8();
497 }
498 unsigned int sse2;
499 unsigned int var1;
500 const int stride = width();
501 ASM_REGISTER_STATE_CHECK(var1 = params_.func(src_, stride, ref_, stride));
502 variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
Yaowu Xuf883b422016-08-30 14:01:10 -0700503 stride, &sse2, false, AOM_BITS_8);
skal8dbbcda2016-07-13 17:33:22 -0700504 EXPECT_EQ(var1, sse2);
505 }
506}
507
508template <typename FunctionType>
509void MainTestClass<FunctionType>::MaxTestMse() {
510 memset(src_, 255, block_size());
511 memset(ref_, 0, block_size());
512 unsigned int sse;
513 ASM_REGISTER_STATE_CHECK(params_.func(src_, width(), ref_, width(), &sse));
514 const unsigned int expected = block_size() * 255 * 255;
515 EXPECT_EQ(expected, sse);
516}
517
518template <typename FunctionType>
519void MainTestClass<FunctionType>::MaxTestSse() {
520 memset(src_, 255, block_size());
521 memset(ref_, 0, block_size());
522 unsigned int var;
523 ASM_REGISTER_STATE_CHECK(var = params_.func(src_, width(), ref_, width()));
524 const unsigned int expected = block_size() * 255 * 255;
525 EXPECT_EQ(expected, var);
526}
527
528////////////////////////////////////////////////////////////////////////////////
529
530using ::std::tr1::get;
531using ::std::tr1::make_tuple;
532using ::std::tr1::tuple;
533
James Zernd598f042017-06-20 23:34:05 -0700534template <typename FunctionType>
skal8dbbcda2016-07-13 17:33:22 -0700535class SubpelVarianceTest
James Zernd598f042017-06-20 23:34:05 -0700536 : public ::testing::TestWithParam<TestParams<FunctionType> > {
skal8dbbcda2016-07-13 17:33:22 -0700537 public:
538 virtual void SetUp() {
James Zernd598f042017-06-20 23:34:05 -0700539 params_ = this->GetParam();
James Zern98473442012-11-06 16:58:11 -0800540
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700541 rnd_.Reset(ACMRandom::DeterministicSeed());
James Zernd598f042017-06-20 23:34:05 -0700542 if (!use_high_bit_depth()) {
543 src_ = reinterpret_cast<uint8_t *>(aom_memalign(16, block_size()));
544 sec_ = reinterpret_cast<uint8_t *>(aom_memalign(16, block_size()));
545 ref_ = new uint8_t[block_size() + width() + height() + 1];
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200546#if CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100547 } else {
skal8dbbcda2016-07-13 17:33:22 -0700548 src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
James Zernd598f042017-06-20 23:34:05 -0700549 aom_memalign(16, block_size() * sizeof(uint16_t))));
skal8dbbcda2016-07-13 17:33:22 -0700550 sec_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
James Zernd598f042017-06-20 23:34:05 -0700551 aom_memalign(16, block_size() * sizeof(uint16_t))));
Sebastien Alaiwan92400ab2017-03-14 10:39:29 +0100552 ref_ = CONVERT_TO_BYTEPTR(aom_memalign(
James Zernd598f042017-06-20 23:34:05 -0700553 16, (block_size() + width() + height() + 1) * sizeof(uint16_t)));
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200554#endif // CONFIG_HIGHBITDEPTH
Johannc3bdffb2015-05-15 11:52:03 -0700555 }
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700556 ASSERT_TRUE(src_ != NULL);
Ronald S. Bultjeac6ea2a2013-06-21 17:03:57 -0700557 ASSERT_TRUE(sec_ != NULL);
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700558 ASSERT_TRUE(ref_ != NULL);
559 }
560
561 virtual void TearDown() {
James Zernd598f042017-06-20 23:34:05 -0700562 if (!use_high_bit_depth()) {
Yaowu Xuf883b422016-08-30 14:01:10 -0700563 aom_free(src_);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100564 delete[] ref_;
Yaowu Xuf883b422016-08-30 14:01:10 -0700565 aom_free(sec_);
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200566#if CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100567 } else {
Yaowu Xuf883b422016-08-30 14:01:10 -0700568 aom_free(CONVERT_TO_SHORTPTR(src_));
Sebastien Alaiwan92400ab2017-03-14 10:39:29 +0100569 aom_free(CONVERT_TO_SHORTPTR(ref_));
Yaowu Xuf883b422016-08-30 14:01:10 -0700570 aom_free(CONVERT_TO_SHORTPTR(sec_));
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200571#endif // CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100572 }
Yaowu Xuc27fc142016-08-22 16:08:15 -0700573 libaom_test::ClearSystemState();
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700574 }
575
576 protected:
577 void RefTest();
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100578 void ExtremeRefTest();
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700579
Dmitry Kovalev202edb32014-09-04 12:24:52 -0700580 ACMRandom rnd_;
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700581 uint8_t *src_;
582 uint8_t *ref_;
583 uint8_t *sec_;
James Zernd598f042017-06-20 23:34:05 -0700584 TestParams<FunctionType> params_;
585
586 // some relay helpers
587 bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
588 int byte_shift() const { return params_.bit_depth - 8; }
589 int block_size() const { return params_.block_size; }
590 int width() const { return params_.width; }
591 int height() const { return params_.height; }
592 uint32_t mask() const { return params_.mask; }
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700593};
594
skal8dbbcda2016-07-13 17:33:22 -0700595template <typename SubpelVarianceFunctionType>
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700596void SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() {
Johanneb88b172015-05-26 11:30:25 -0700597 for (int x = 0; x < 8; ++x) {
598 for (int y = 0; y < 8; ++y) {
James Zernd598f042017-06-20 23:34:05 -0700599 if (!use_high_bit_depth()) {
600 for (int j = 0; j < block_size(); j++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100601 src_[j] = rnd_.Rand8();
602 }
James Zernd598f042017-06-20 23:34:05 -0700603 for (int j = 0; j < block_size() + width() + height() + 1; j++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100604 ref_[j] = rnd_.Rand8();
605 }
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200606#if CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100607 } else {
James Zernd598f042017-06-20 23:34:05 -0700608 for (int j = 0; j < block_size(); j++) {
609 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100610 }
James Zernd598f042017-06-20 23:34:05 -0700611 for (int j = 0; j < block_size() + width() + height() + 1; j++) {
612 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100613 }
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200614#endif // CONFIG_HIGHBITDEPTH
Johannc3bdffb2015-05-15 11:52:03 -0700615 }
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700616 unsigned int sse1, sse2;
James Zerncc774c82013-06-18 19:15:56 -0700617 unsigned int var1;
skal8dbbcda2016-07-13 17:33:22 -0700618 ASM_REGISTER_STATE_CHECK(
James Zernd598f042017-06-20 23:34:05 -0700619 var1 = params_.func(ref_, width() + 1, x, y, src_, width(), &sse1));
620 const unsigned int var2 = subpel_variance_ref(
621 ref_, src_, params_.log2width, params_.log2height, x, y, &sse2,
622 use_high_bit_depth(), params_.bit_depth);
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100623 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
624 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
625 }
626 }
627}
628
skal8dbbcda2016-07-13 17:33:22 -0700629template <typename SubpelVarianceFunctionType>
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100630void SubpelVarianceTest<SubpelVarianceFunctionType>::ExtremeRefTest() {
631 // Compare against reference.
632 // Src: Set the first half of values to 0, the second half to the maximum.
633 // Ref: Set the first half of values to the maximum, the second half to 0.
Johanneb88b172015-05-26 11:30:25 -0700634 for (int x = 0; x < 8; ++x) {
635 for (int y = 0; y < 8; ++y) {
James Zernd598f042017-06-20 23:34:05 -0700636 const int half = block_size() / 2;
637 if (!use_high_bit_depth()) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100638 memset(src_, 0, half);
639 memset(src_ + half, 255, half);
640 memset(ref_, 255, half);
James Zernd598f042017-06-20 23:34:05 -0700641 memset(ref_ + half, 0, half + width() + height() + 1);
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200642#if CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100643 } else {
James Zernd598f042017-06-20 23:34:05 -0700644 aom_memset16(CONVERT_TO_SHORTPTR(src_), mask(), half);
Yaowu Xuf883b422016-08-30 14:01:10 -0700645 aom_memset16(CONVERT_TO_SHORTPTR(src_) + half, 0, half);
646 aom_memset16(CONVERT_TO_SHORTPTR(ref_), 0, half);
James Zernd598f042017-06-20 23:34:05 -0700647 aom_memset16(CONVERT_TO_SHORTPTR(ref_) + half, mask(),
648 half + width() + height() + 1);
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200649#endif // CONFIG_HIGHBITDEPTH
Johannc3bdffb2015-05-15 11:52:03 -0700650 }
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100651 unsigned int sse1, sse2;
652 unsigned int var1;
653 ASM_REGISTER_STATE_CHECK(
James Zernd598f042017-06-20 23:34:05 -0700654 var1 = params_.func(ref_, width() + 1, x, y, src_, width(), &sse1));
655 const unsigned int var2 = subpel_variance_ref(
656 ref_, src_, params_.log2width, params_.log2height, x, y, &sse2,
657 use_high_bit_depth(), params_.bit_depth);
Johanneb88b172015-05-26 11:30:25 -0700658 EXPECT_EQ(sse1, sse2) << "for xoffset " << x << " and yoffset " << y;
659 EXPECT_EQ(var1, var2) << "for xoffset " << x << " and yoffset " << y;
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -0700660 }
661 }
662}
663
skal8dbbcda2016-07-13 17:33:22 -0700664template <>
Johann6a82f0d2015-06-05 09:54:19 -0700665void SubpelVarianceTest<SubpixAvgVarMxNFunc>::RefTest() {
Johanneb88b172015-05-26 11:30:25 -0700666 for (int x = 0; x < 8; ++x) {
667 for (int y = 0; y < 8; ++y) {
James Zernd598f042017-06-20 23:34:05 -0700668 if (!use_high_bit_depth()) {
669 for (int j = 0; j < block_size(); j++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100670 src_[j] = rnd_.Rand8();
671 sec_[j] = rnd_.Rand8();
672 }
James Zernd598f042017-06-20 23:34:05 -0700673 for (int j = 0; j < block_size() + width() + height() + 1; j++) {
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100674 ref_[j] = rnd_.Rand8();
675 }
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200676#if CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100677 } else {
James Zernd598f042017-06-20 23:34:05 -0700678 for (int j = 0; j < block_size(); j++) {
679 CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
680 CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask();
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100681 }
James Zernd598f042017-06-20 23:34:05 -0700682 for (int j = 0; j < block_size() + width() + height() + 1; j++) {
683 CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100684 }
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200685#endif // CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +0100686 }
skal8dbbcda2016-07-13 17:33:22 -0700687 uint32_t sse1, sse2;
688 uint32_t var1, var2;
James Zernd598f042017-06-20 23:34:05 -0700689 ASM_REGISTER_STATE_CHECK(var1 = params_.func(ref_, width() + 1, x, y,
690 src_, width(), &sse1, sec_));
691 var2 = subpel_avg_variance_ref(ref_, src_, sec_, params_.log2width,
692 params_.log2height, x, y, &sse2,
693 use_high_bit_depth(), params_.bit_depth);
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -0700694 EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
695 EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
696 }
697 }
698}
James Zerna0fcbcf2013-09-17 18:47:25 -0700699
Yaowu Xuf883b422016-08-30 14:01:10 -0700700typedef MainTestClass<Get4x4SseFunc> AvxSseTest;
701typedef MainTestClass<VarianceMxNFunc> AvxMseTest;
702typedef MainTestClass<VarianceMxNFunc> AvxVarianceTest;
703typedef SubpelVarianceTest<SubpixVarMxNFunc> AvxSubpelVarianceTest;
704typedef SubpelVarianceTest<SubpixAvgVarMxNFunc> AvxSubpelAvgVarianceTest;
James Zern1711cf22013-02-22 16:23:36 -0800705
Yaowu Xuf883b422016-08-30 14:01:10 -0700706TEST_P(AvxSseTest, RefSse) { RefTestSse(); }
707TEST_P(AvxSseTest, MaxSse) { MaxTestSse(); }
708TEST_P(AvxMseTest, RefMse) { RefTestMse(); }
709TEST_P(AvxMseTest, MaxMse) { MaxTestMse(); }
710TEST_P(AvxVarianceTest, Zero) { ZeroTest(); }
711TEST_P(AvxVarianceTest, Ref) { RefTest(); }
712TEST_P(AvxVarianceTest, RefStride) { RefStrideTest(); }
713TEST_P(AvxVarianceTest, OneQuarter) { OneQuarterTest(); }
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -0700714TEST_P(SumOfSquaresTest, Const) { ConstTest(); }
715TEST_P(SumOfSquaresTest, Ref) { RefTest(); }
Yaowu Xuf883b422016-08-30 14:01:10 -0700716TEST_P(AvxSubpelVarianceTest, Ref) { RefTest(); }
717TEST_P(AvxSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
718TEST_P(AvxSubpelAvgVarianceTest, Ref) { RefTest(); }
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -0700719
720INSTANTIATE_TEST_CASE_P(C, SumOfSquaresTest,
Yaowu Xuf883b422016-08-30 14:01:10 -0700721 ::testing::Values(aom_get_mb_ss_c));
Dmitry Kovalev1f19ebb2014-09-06 00:10:25 -0700722
skal8dbbcda2016-07-13 17:33:22 -0700723typedef TestParams<Get4x4SseFunc> SseParams;
Yaowu Xuf883b422016-08-30 14:01:10 -0700724INSTANTIATE_TEST_CASE_P(C, AvxSseTest,
skal8dbbcda2016-07-13 17:33:22 -0700725 ::testing::Values(SseParams(2, 2,
Yaowu Xuf883b422016-08-30 14:01:10 -0700726 &aom_get4x4sse_cs_c)));
Johannc3bdffb2015-05-15 11:52:03 -0700727
skal8dbbcda2016-07-13 17:33:22 -0700728typedef TestParams<VarianceMxNFunc> MseParams;
Yaowu Xuf883b422016-08-30 14:01:10 -0700729INSTANTIATE_TEST_CASE_P(C, AvxMseTest,
730 ::testing::Values(MseParams(4, 4, &aom_mse16x16_c),
731 MseParams(4, 3, &aom_mse16x8_c),
732 MseParams(3, 4, &aom_mse8x16_c),
733 MseParams(3, 3, &aom_mse8x8_c)));
Johannc3bdffb2015-05-15 11:52:03 -0700734
skal8dbbcda2016-07-13 17:33:22 -0700735typedef TestParams<VarianceMxNFunc> VarianceParams;
Johannc3bdffb2015-05-15 11:52:03 -0700736INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -0700737 C, AvxVarianceTest,
738 ::testing::Values(VarianceParams(6, 6, &aom_variance64x64_c),
739 VarianceParams(6, 5, &aom_variance64x32_c),
740 VarianceParams(5, 6, &aom_variance32x64_c),
741 VarianceParams(5, 5, &aom_variance32x32_c),
742 VarianceParams(5, 4, &aom_variance32x16_c),
743 VarianceParams(4, 5, &aom_variance16x32_c),
744 VarianceParams(4, 4, &aom_variance16x16_c),
745 VarianceParams(4, 3, &aom_variance16x8_c),
746 VarianceParams(3, 4, &aom_variance8x16_c),
747 VarianceParams(3, 3, &aom_variance8x8_c),
748 VarianceParams(3, 2, &aom_variance8x4_c),
749 VarianceParams(2, 3, &aom_variance4x8_c),
750 VarianceParams(2, 2, &aom_variance4x4_c)));
Johannc3bdffb2015-05-15 11:52:03 -0700751
James Zernd598f042017-06-20 23:34:05 -0700752typedef TestParams<SubpixVarMxNFunc> SubpelVarianceParams;
Johann6a82f0d2015-06-05 09:54:19 -0700753INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -0700754 C, AvxSubpelVarianceTest,
James Zernd598f042017-06-20 23:34:05 -0700755 ::testing::Values(
756 SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_c, 0),
757 SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_c, 0),
758 SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_c, 0),
759 SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_c, 0),
760 SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_c, 0),
761 SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_c, 0),
762 SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_c, 0),
763 SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_c, 0),
764 SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_c, 0),
765 SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_c, 0),
766 SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_c, 0),
767 SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_c, 0),
768 SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_c, 0)));
Johann6a82f0d2015-06-05 09:54:19 -0700769
James Zernd598f042017-06-20 23:34:05 -0700770typedef TestParams<SubpixAvgVarMxNFunc> SubpelAvgVarianceParams;
Johann6a82f0d2015-06-05 09:54:19 -0700771INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -0700772 C, AvxSubpelAvgVarianceTest,
James Zernd598f042017-06-20 23:34:05 -0700773 ::testing::Values(
774 SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_c, 0),
775 SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_c, 0),
776 SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_c, 0),
777 SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_c, 0),
778 SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_c, 0),
779 SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_c, 0),
780 SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_c, 0),
781 SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_c, 0),
782 SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_c, 0),
783 SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_c, 0),
784 SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_c, 0),
785 SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_c, 0),
786 SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_c, 0)));
Johann6a82f0d2015-06-05 09:54:19 -0700787
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200788#if CONFIG_HIGHBITDEPTH
Yaowu Xuf883b422016-08-30 14:01:10 -0700789typedef MainTestClass<VarianceMxNFunc> AvxHBDMseTest;
790typedef MainTestClass<VarianceMxNFunc> AvxHBDVarianceTest;
791typedef SubpelVarianceTest<SubpixVarMxNFunc> AvxHBDSubpelVarianceTest;
792typedef SubpelVarianceTest<SubpixAvgVarMxNFunc> AvxHBDSubpelAvgVarianceTest;
Johannc3bdffb2015-05-15 11:52:03 -0700793
Yaowu Xuf883b422016-08-30 14:01:10 -0700794TEST_P(AvxHBDMseTest, RefMse) { RefTestMse(); }
795TEST_P(AvxHBDMseTest, MaxMse) { MaxTestMse(); }
796TEST_P(AvxHBDVarianceTest, Zero) { ZeroTest(); }
797TEST_P(AvxHBDVarianceTest, Ref) { RefTest(); }
798TEST_P(AvxHBDVarianceTest, RefStride) { RefStrideTest(); }
799TEST_P(AvxHBDVarianceTest, OneQuarter) { OneQuarterTest(); }
800TEST_P(AvxHBDSubpelVarianceTest, Ref) { RefTest(); }
801TEST_P(AvxHBDSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
802TEST_P(AvxHBDSubpelAvgVarianceTest, Ref) { RefTest(); }
Johannc3bdffb2015-05-15 11:52:03 -0700803
804/* TODO(debargha): This test does not support the highbd version
Johannc3bdffb2015-05-15 11:52:03 -0700805INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -0700806 C, AvxHBDMseTest,
807 ::testing::Values(make_tuple(4, 4, &aom_highbd_12_mse16x16_c),
808 make_tuple(4, 4, &aom_highbd_12_mse16x8_c),
809 make_tuple(4, 4, &aom_highbd_12_mse8x16_c),
810 make_tuple(4, 4, &aom_highbd_12_mse8x8_c),
811 make_tuple(4, 4, &aom_highbd_10_mse16x16_c),
812 make_tuple(4, 4, &aom_highbd_10_mse16x8_c),
813 make_tuple(4, 4, &aom_highbd_10_mse8x16_c),
814 make_tuple(4, 4, &aom_highbd_10_mse8x8_c),
815 make_tuple(4, 4, &aom_highbd_8_mse16x16_c),
816 make_tuple(4, 4, &aom_highbd_8_mse16x8_c),
817 make_tuple(4, 4, &aom_highbd_8_mse8x16_c),
818 make_tuple(4, 4, &aom_highbd_8_mse8x8_c)));
Johannc3bdffb2015-05-15 11:52:03 -0700819*/
820
skal8dbbcda2016-07-13 17:33:22 -0700821const VarianceParams kArrayHBDVariance_c[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700822#if CONFIG_AV1 && CONFIG_EXT_PARTITION
823 VarianceParams(7, 7, &aom_highbd_12_variance128x128_c, 12),
824 VarianceParams(7, 6, &aom_highbd_12_variance128x64_c, 12),
825 VarianceParams(6, 7, &aom_highbd_12_variance64x128_c, 12),
826#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
827 VarianceParams(6, 6, &aom_highbd_12_variance64x64_c, 12),
828 VarianceParams(6, 5, &aom_highbd_12_variance64x32_c, 12),
829 VarianceParams(5, 6, &aom_highbd_12_variance32x64_c, 12),
830 VarianceParams(5, 5, &aom_highbd_12_variance32x32_c, 12),
831 VarianceParams(5, 4, &aom_highbd_12_variance32x16_c, 12),
832 VarianceParams(4, 5, &aom_highbd_12_variance16x32_c, 12),
833 VarianceParams(4, 4, &aom_highbd_12_variance16x16_c, 12),
834 VarianceParams(4, 3, &aom_highbd_12_variance16x8_c, 12),
835 VarianceParams(3, 4, &aom_highbd_12_variance8x16_c, 12),
836 VarianceParams(3, 3, &aom_highbd_12_variance8x8_c, 12),
837 VarianceParams(3, 2, &aom_highbd_12_variance8x4_c, 12),
838 VarianceParams(2, 3, &aom_highbd_12_variance4x8_c, 12),
839 VarianceParams(2, 2, &aom_highbd_12_variance4x4_c, 12),
840#if CONFIG_AV1 && CONFIG_EXT_PARTITION
841 VarianceParams(7, 7, &aom_highbd_10_variance128x128_c, 10),
842 VarianceParams(7, 6, &aom_highbd_10_variance128x64_c, 10),
843 VarianceParams(6, 7, &aom_highbd_10_variance64x128_c, 10),
844#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
845 VarianceParams(6, 6, &aom_highbd_10_variance64x64_c, 10),
846 VarianceParams(6, 5, &aom_highbd_10_variance64x32_c, 10),
847 VarianceParams(5, 6, &aom_highbd_10_variance32x64_c, 10),
848 VarianceParams(5, 5, &aom_highbd_10_variance32x32_c, 10),
849 VarianceParams(5, 4, &aom_highbd_10_variance32x16_c, 10),
850 VarianceParams(4, 5, &aom_highbd_10_variance16x32_c, 10),
851 VarianceParams(4, 4, &aom_highbd_10_variance16x16_c, 10),
852 VarianceParams(4, 3, &aom_highbd_10_variance16x8_c, 10),
853 VarianceParams(3, 4, &aom_highbd_10_variance8x16_c, 10),
854 VarianceParams(3, 3, &aom_highbd_10_variance8x8_c, 10),
855 VarianceParams(3, 2, &aom_highbd_10_variance8x4_c, 10),
856 VarianceParams(2, 3, &aom_highbd_10_variance4x8_c, 10),
857 VarianceParams(2, 2, &aom_highbd_10_variance4x4_c, 10),
858#if CONFIG_AV1 && CONFIG_EXT_PARTITION
859 VarianceParams(7, 7, &aom_highbd_8_variance128x128_c, 8),
860 VarianceParams(7, 6, &aom_highbd_8_variance128x64_c, 8),
861 VarianceParams(6, 7, &aom_highbd_8_variance64x128_c, 8),
862#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
863 VarianceParams(6, 6, &aom_highbd_8_variance64x64_c, 8),
864 VarianceParams(6, 5, &aom_highbd_8_variance64x32_c, 8),
865 VarianceParams(5, 6, &aom_highbd_8_variance32x64_c, 8),
866 VarianceParams(5, 5, &aom_highbd_8_variance32x32_c, 8),
867 VarianceParams(5, 4, &aom_highbd_8_variance32x16_c, 8),
868 VarianceParams(4, 5, &aom_highbd_8_variance16x32_c, 8),
869 VarianceParams(4, 4, &aom_highbd_8_variance16x16_c, 8),
870 VarianceParams(4, 3, &aom_highbd_8_variance16x8_c, 8),
871 VarianceParams(3, 4, &aom_highbd_8_variance8x16_c, 8),
872 VarianceParams(3, 3, &aom_highbd_8_variance8x8_c, 8),
873 VarianceParams(3, 2, &aom_highbd_8_variance8x4_c, 8),
874 VarianceParams(2, 3, &aom_highbd_8_variance4x8_c, 8),
875 VarianceParams(2, 2, &aom_highbd_8_variance4x4_c, 8)
skal8dbbcda2016-07-13 17:33:22 -0700876};
Yaowu Xuf883b422016-08-30 14:01:10 -0700877INSTANTIATE_TEST_CASE_P(C, AvxHBDVarianceTest,
clang-format3a826f12016-08-11 17:46:05 -0700878 ::testing::ValuesIn(kArrayHBDVariance_c));
Johann6a82f0d2015-06-05 09:54:19 -0700879
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200880#if HAVE_SSE4_1 && CONFIG_HIGHBITDEPTH
Yi Luoc2496892016-04-08 11:16:30 -0700881INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -0700882 SSE4_1, AvxHBDVarianceTest,
skal8dbbcda2016-07-13 17:33:22 -0700883 ::testing::Values(
Yaowu Xuf883b422016-08-30 14:01:10 -0700884 VarianceParams(2, 2, &aom_highbd_8_variance4x4_sse4_1, 8),
885 VarianceParams(2, 2, &aom_highbd_10_variance4x4_sse4_1, 10),
886 VarianceParams(2, 2, &aom_highbd_12_variance4x4_sse4_1, 12)));
Sebastien Alaiwan71e87842017-04-12 16:03:28 +0200887#endif // HAVE_SSE4_1 && CONFIG_HIGHBITDEPTH
Yi Luoc2496892016-04-08 11:16:30 -0700888
James Zernd598f042017-06-20 23:34:05 -0700889const SubpelVarianceParams kArrayHBDSubpelVariance_c[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700890#if CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700891 SubpelVarianceParams(7, 7, &aom_highbd_8_sub_pixel_variance128x128_c, 8),
892 SubpelVarianceParams(7, 6, &aom_highbd_8_sub_pixel_variance128x64_c, 8),
893 SubpelVarianceParams(6, 7, &aom_highbd_8_sub_pixel_variance64x128_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -0700894#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700895 SubpelVarianceParams(6, 6, &aom_highbd_8_sub_pixel_variance64x64_c, 8),
896 SubpelVarianceParams(6, 5, &aom_highbd_8_sub_pixel_variance64x32_c, 8),
897 SubpelVarianceParams(5, 6, &aom_highbd_8_sub_pixel_variance32x64_c, 8),
898 SubpelVarianceParams(5, 5, &aom_highbd_8_sub_pixel_variance32x32_c, 8),
899 SubpelVarianceParams(5, 4, &aom_highbd_8_sub_pixel_variance32x16_c, 8),
900 SubpelVarianceParams(4, 5, &aom_highbd_8_sub_pixel_variance16x32_c, 8),
901 SubpelVarianceParams(4, 4, &aom_highbd_8_sub_pixel_variance16x16_c, 8),
902 SubpelVarianceParams(4, 3, &aom_highbd_8_sub_pixel_variance16x8_c, 8),
903 SubpelVarianceParams(3, 4, &aom_highbd_8_sub_pixel_variance8x16_c, 8),
904 SubpelVarianceParams(3, 3, &aom_highbd_8_sub_pixel_variance8x8_c, 8),
905 SubpelVarianceParams(3, 2, &aom_highbd_8_sub_pixel_variance8x4_c, 8),
906 SubpelVarianceParams(2, 3, &aom_highbd_8_sub_pixel_variance4x8_c, 8),
907 SubpelVarianceParams(2, 2, &aom_highbd_8_sub_pixel_variance4x4_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -0700908#if CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700909 SubpelVarianceParams(7, 7, &aom_highbd_10_sub_pixel_variance128x128_c, 10),
910 SubpelVarianceParams(7, 6, &aom_highbd_10_sub_pixel_variance128x64_c, 10),
911 SubpelVarianceParams(6, 7, &aom_highbd_10_sub_pixel_variance64x128_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -0700912#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700913 SubpelVarianceParams(6, 6, &aom_highbd_10_sub_pixel_variance64x64_c, 10),
914 SubpelVarianceParams(6, 5, &aom_highbd_10_sub_pixel_variance64x32_c, 10),
915 SubpelVarianceParams(5, 6, &aom_highbd_10_sub_pixel_variance32x64_c, 10),
916 SubpelVarianceParams(5, 5, &aom_highbd_10_sub_pixel_variance32x32_c, 10),
917 SubpelVarianceParams(5, 4, &aom_highbd_10_sub_pixel_variance32x16_c, 10),
918 SubpelVarianceParams(4, 5, &aom_highbd_10_sub_pixel_variance16x32_c, 10),
919 SubpelVarianceParams(4, 4, &aom_highbd_10_sub_pixel_variance16x16_c, 10),
920 SubpelVarianceParams(4, 3, &aom_highbd_10_sub_pixel_variance16x8_c, 10),
921 SubpelVarianceParams(3, 4, &aom_highbd_10_sub_pixel_variance8x16_c, 10),
922 SubpelVarianceParams(3, 3, &aom_highbd_10_sub_pixel_variance8x8_c, 10),
923 SubpelVarianceParams(3, 2, &aom_highbd_10_sub_pixel_variance8x4_c, 10),
924 SubpelVarianceParams(2, 3, &aom_highbd_10_sub_pixel_variance4x8_c, 10),
925 SubpelVarianceParams(2, 2, &aom_highbd_10_sub_pixel_variance4x4_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -0700926#if CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700927 SubpelVarianceParams(7, 7, &aom_highbd_12_sub_pixel_variance128x128_c, 12),
928 SubpelVarianceParams(7, 6, &aom_highbd_12_sub_pixel_variance128x64_c, 12),
929 SubpelVarianceParams(6, 7, &aom_highbd_12_sub_pixel_variance64x128_c, 12),
Yaowu Xuf883b422016-08-30 14:01:10 -0700930#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700931 SubpelVarianceParams(6, 6, &aom_highbd_12_sub_pixel_variance64x64_c, 12),
932 SubpelVarianceParams(6, 5, &aom_highbd_12_sub_pixel_variance64x32_c, 12),
933 SubpelVarianceParams(5, 6, &aom_highbd_12_sub_pixel_variance32x64_c, 12),
934 SubpelVarianceParams(5, 5, &aom_highbd_12_sub_pixel_variance32x32_c, 12),
935 SubpelVarianceParams(5, 4, &aom_highbd_12_sub_pixel_variance32x16_c, 12),
936 SubpelVarianceParams(4, 5, &aom_highbd_12_sub_pixel_variance16x32_c, 12),
937 SubpelVarianceParams(4, 4, &aom_highbd_12_sub_pixel_variance16x16_c, 12),
938 SubpelVarianceParams(4, 3, &aom_highbd_12_sub_pixel_variance16x8_c, 12),
939 SubpelVarianceParams(3, 4, &aom_highbd_12_sub_pixel_variance8x16_c, 12),
940 SubpelVarianceParams(3, 3, &aom_highbd_12_sub_pixel_variance8x8_c, 12),
941 SubpelVarianceParams(3, 2, &aom_highbd_12_sub_pixel_variance8x4_c, 12),
942 SubpelVarianceParams(2, 3, &aom_highbd_12_sub_pixel_variance4x8_c, 12),
943 SubpelVarianceParams(2, 2, &aom_highbd_12_sub_pixel_variance4x4_c, 12),
Alex Converse25de2e12016-04-27 12:23:00 -0700944};
Yaowu Xuf883b422016-08-30 14:01:10 -0700945INSTANTIATE_TEST_CASE_P(C, AvxHBDSubpelVarianceTest,
skal8dbbcda2016-07-13 17:33:22 -0700946 ::testing::ValuesIn(kArrayHBDSubpelVariance_c));
Johann6a82f0d2015-06-05 09:54:19 -0700947
James Zernd598f042017-06-20 23:34:05 -0700948const SubpelAvgVarianceParams kArrayHBDSubpelAvgVariance_c[] = {
Yaowu Xuf883b422016-08-30 14:01:10 -0700949#if CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700950 SubpelAvgVarianceParams(7, 7, &aom_highbd_8_sub_pixel_avg_variance128x128_c,
951 8),
952 SubpelAvgVarianceParams(7, 6, &aom_highbd_8_sub_pixel_avg_variance128x64_c,
953 8),
954 SubpelAvgVarianceParams(6, 7, &aom_highbd_8_sub_pixel_avg_variance64x128_c,
955 8),
Yaowu Xuf883b422016-08-30 14:01:10 -0700956#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700957 SubpelAvgVarianceParams(6, 6, &aom_highbd_8_sub_pixel_avg_variance64x64_c, 8),
958 SubpelAvgVarianceParams(6, 5, &aom_highbd_8_sub_pixel_avg_variance64x32_c, 8),
959 SubpelAvgVarianceParams(5, 6, &aom_highbd_8_sub_pixel_avg_variance32x64_c, 8),
960 SubpelAvgVarianceParams(5, 5, &aom_highbd_8_sub_pixel_avg_variance32x32_c, 8),
961 SubpelAvgVarianceParams(5, 4, &aom_highbd_8_sub_pixel_avg_variance32x16_c, 8),
962 SubpelAvgVarianceParams(4, 5, &aom_highbd_8_sub_pixel_avg_variance16x32_c, 8),
963 SubpelAvgVarianceParams(4, 4, &aom_highbd_8_sub_pixel_avg_variance16x16_c, 8),
964 SubpelAvgVarianceParams(4, 3, &aom_highbd_8_sub_pixel_avg_variance16x8_c, 8),
965 SubpelAvgVarianceParams(3, 4, &aom_highbd_8_sub_pixel_avg_variance8x16_c, 8),
966 SubpelAvgVarianceParams(3, 3, &aom_highbd_8_sub_pixel_avg_variance8x8_c, 8),
967 SubpelAvgVarianceParams(3, 2, &aom_highbd_8_sub_pixel_avg_variance8x4_c, 8),
968 SubpelAvgVarianceParams(2, 3, &aom_highbd_8_sub_pixel_avg_variance4x8_c, 8),
969 SubpelAvgVarianceParams(2, 2, &aom_highbd_8_sub_pixel_avg_variance4x4_c, 8),
Yaowu Xuf883b422016-08-30 14:01:10 -0700970#if CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700971 SubpelAvgVarianceParams(7, 7, &aom_highbd_10_sub_pixel_avg_variance128x128_c,
972 10),
973 SubpelAvgVarianceParams(7, 6, &aom_highbd_10_sub_pixel_avg_variance128x64_c,
974 10),
975 SubpelAvgVarianceParams(6, 7, &aom_highbd_10_sub_pixel_avg_variance64x128_c,
976 10),
Yaowu Xuf883b422016-08-30 14:01:10 -0700977#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -0700978 SubpelAvgVarianceParams(6, 6, &aom_highbd_10_sub_pixel_avg_variance64x64_c,
979 10),
980 SubpelAvgVarianceParams(6, 5, &aom_highbd_10_sub_pixel_avg_variance64x32_c,
981 10),
982 SubpelAvgVarianceParams(5, 6, &aom_highbd_10_sub_pixel_avg_variance32x64_c,
983 10),
984 SubpelAvgVarianceParams(5, 5, &aom_highbd_10_sub_pixel_avg_variance32x32_c,
985 10),
986 SubpelAvgVarianceParams(5, 4, &aom_highbd_10_sub_pixel_avg_variance32x16_c,
987 10),
988 SubpelAvgVarianceParams(4, 5, &aom_highbd_10_sub_pixel_avg_variance16x32_c,
989 10),
990 SubpelAvgVarianceParams(4, 4, &aom_highbd_10_sub_pixel_avg_variance16x16_c,
991 10),
992 SubpelAvgVarianceParams(4, 3, &aom_highbd_10_sub_pixel_avg_variance16x8_c,
993 10),
994 SubpelAvgVarianceParams(3, 4, &aom_highbd_10_sub_pixel_avg_variance8x16_c,
995 10),
996 SubpelAvgVarianceParams(3, 3, &aom_highbd_10_sub_pixel_avg_variance8x8_c, 10),
997 SubpelAvgVarianceParams(3, 2, &aom_highbd_10_sub_pixel_avg_variance8x4_c, 10),
998 SubpelAvgVarianceParams(2, 3, &aom_highbd_10_sub_pixel_avg_variance4x8_c, 10),
999 SubpelAvgVarianceParams(2, 2, &aom_highbd_10_sub_pixel_avg_variance4x4_c, 10),
Yaowu Xuf883b422016-08-30 14:01:10 -07001000#if CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -07001001 SubpelAvgVarianceParams(7, 7, &aom_highbd_12_sub_pixel_avg_variance128x128_c,
1002 12),
1003 SubpelAvgVarianceParams(7, 6, &aom_highbd_12_sub_pixel_avg_variance128x64_c,
1004 12),
1005 SubpelAvgVarianceParams(6, 7, &aom_highbd_12_sub_pixel_avg_variance64x128_c,
1006 12),
Yaowu Xuf883b422016-08-30 14:01:10 -07001007#endif // CONFIG_AV1 && CONFIG_EXT_PARTITION
James Zernd598f042017-06-20 23:34:05 -07001008 SubpelAvgVarianceParams(6, 6, &aom_highbd_12_sub_pixel_avg_variance64x64_c,
1009 12),
1010 SubpelAvgVarianceParams(6, 5, &aom_highbd_12_sub_pixel_avg_variance64x32_c,
1011 12),
1012 SubpelAvgVarianceParams(5, 6, &aom_highbd_12_sub_pixel_avg_variance32x64_c,
1013 12),
1014 SubpelAvgVarianceParams(5, 5, &aom_highbd_12_sub_pixel_avg_variance32x32_c,
1015 12),
1016 SubpelAvgVarianceParams(5, 4, &aom_highbd_12_sub_pixel_avg_variance32x16_c,
1017 12),
1018 SubpelAvgVarianceParams(4, 5, &aom_highbd_12_sub_pixel_avg_variance16x32_c,
1019 12),
1020 SubpelAvgVarianceParams(4, 4, &aom_highbd_12_sub_pixel_avg_variance16x16_c,
1021 12),
1022 SubpelAvgVarianceParams(4, 3, &aom_highbd_12_sub_pixel_avg_variance16x8_c,
1023 12),
1024 SubpelAvgVarianceParams(3, 4, &aom_highbd_12_sub_pixel_avg_variance8x16_c,
1025 12),
1026 SubpelAvgVarianceParams(3, 3, &aom_highbd_12_sub_pixel_avg_variance8x8_c, 12),
1027 SubpelAvgVarianceParams(3, 2, &aom_highbd_12_sub_pixel_avg_variance8x4_c, 12),
1028 SubpelAvgVarianceParams(2, 3, &aom_highbd_12_sub_pixel_avg_variance4x8_c, 12),
1029 SubpelAvgVarianceParams(2, 2, &aom_highbd_12_sub_pixel_avg_variance4x4_c, 12)
Alex Converse25de2e12016-04-27 12:23:00 -07001030};
Yaowu Xuf883b422016-08-30 14:01:10 -07001031INSTANTIATE_TEST_CASE_P(C, AvxHBDSubpelAvgVarianceTest,
skal8dbbcda2016-07-13 17:33:22 -07001032 ::testing::ValuesIn(kArrayHBDSubpelAvgVariance_c));
Sebastien Alaiwan71e87842017-04-12 16:03:28 +02001033#endif // CONFIG_HIGHBITDEPTH
Johannc3bdffb2015-05-15 11:52:03 -07001034
Johannc3bdffb2015-05-15 11:52:03 -07001035#if HAVE_SSE2
1036INSTANTIATE_TEST_CASE_P(SSE2, SumOfSquaresTest,
Yaowu Xuf883b422016-08-30 14:01:10 -07001037 ::testing::Values(aom_get_mb_ss_sse2));
Johannc3bdffb2015-05-15 11:52:03 -07001038
Yaowu Xuf883b422016-08-30 14:01:10 -07001039INSTANTIATE_TEST_CASE_P(SSE2, AvxMseTest,
1040 ::testing::Values(MseParams(4, 4, &aom_mse16x16_sse2),
1041 MseParams(4, 3, &aom_mse16x8_sse2),
1042 MseParams(3, 4, &aom_mse8x16_sse2),
1043 MseParams(3, 3, &aom_mse8x8_sse2)));
Johannc3bdffb2015-05-15 11:52:03 -07001044
Johannc3bdffb2015-05-15 11:52:03 -07001045INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001046 SSE2, AvxVarianceTest,
1047 ::testing::Values(VarianceParams(6, 6, &aom_variance64x64_sse2),
1048 VarianceParams(6, 5, &aom_variance64x32_sse2),
1049 VarianceParams(5, 6, &aom_variance32x64_sse2),
1050 VarianceParams(5, 5, &aom_variance32x32_sse2),
1051 VarianceParams(5, 4, &aom_variance32x16_sse2),
1052 VarianceParams(4, 5, &aom_variance16x32_sse2),
1053 VarianceParams(4, 4, &aom_variance16x16_sse2),
1054 VarianceParams(4, 3, &aom_variance16x8_sse2),
1055 VarianceParams(3, 4, &aom_variance8x16_sse2),
1056 VarianceParams(3, 3, &aom_variance8x8_sse2),
1057 VarianceParams(3, 2, &aom_variance8x4_sse2),
1058 VarianceParams(2, 3, &aom_variance4x8_sse2),
1059 VarianceParams(2, 2, &aom_variance4x4_sse2)));
Johann6a82f0d2015-06-05 09:54:19 -07001060
Johann6a82f0d2015-06-05 09:54:19 -07001061INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001062 SSE2, AvxSubpelVarianceTest,
James Zernd598f042017-06-20 23:34:05 -07001063 ::testing::Values(
1064 SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_sse2, 0),
1065 SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_sse2, 0),
1066 SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_sse2, 0),
1067 SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_sse2, 0),
1068 SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_sse2, 0),
1069 SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_sse2, 0),
1070 SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_sse2, 0),
1071 SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_sse2, 0),
1072 SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_sse2, 0),
1073 SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_sse2, 0),
1074 SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_sse2, 0),
1075 SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_sse2, 0),
1076 SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_sse2, 0)));
Johann6a82f0d2015-06-05 09:54:19 -07001077
Johann6a82f0d2015-06-05 09:54:19 -07001078INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001079 SSE2, AvxSubpelAvgVarianceTest,
Johann6a82f0d2015-06-05 09:54:19 -07001080 ::testing::Values(
James Zernd598f042017-06-20 23:34:05 -07001081 SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_sse2, 0),
1082 SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_sse2, 0),
1083 SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_sse2, 0),
1084 SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_sse2, 0),
1085 SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_sse2, 0),
1086 SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_sse2, 0),
1087 SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_sse2, 0),
1088 SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_sse2, 0),
1089 SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_sse2, 0),
1090 SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_sse2, 0),
1091 SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_sse2, 0),
1092 SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_sse2, 0),
1093 SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_sse2, 0)));
Johann6a82f0d2015-06-05 09:54:19 -07001094
Sebastien Alaiwan71e87842017-04-12 16:03:28 +02001095#if HAVE_SSE4_1 && CONFIG_HIGHBITDEPTH
Yi Luoc2496892016-04-08 11:16:30 -07001096INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001097 SSE4_1, AvxSubpelVarianceTest,
Yi Luoc2496892016-04-08 11:16:30 -07001098 ::testing::Values(
James Zernd598f042017-06-20 23:34:05 -07001099 SubpelVarianceParams(2, 2, &aom_highbd_8_sub_pixel_variance4x4_sse4_1,
1100 8),
1101 SubpelVarianceParams(2, 2, &aom_highbd_10_sub_pixel_variance4x4_sse4_1,
1102 10),
1103 SubpelVarianceParams(2, 2, &aom_highbd_12_sub_pixel_variance4x4_sse4_1,
1104 12)));
Yi Luoc2496892016-04-08 11:16:30 -07001105
1106INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001107 SSE4_1, AvxSubpelAvgVarianceTest,
Yi Luoc2496892016-04-08 11:16:30 -07001108 ::testing::Values(
James Zernd598f042017-06-20 23:34:05 -07001109 SubpelAvgVarianceParams(2, 2,
1110 &aom_highbd_8_sub_pixel_avg_variance4x4_sse4_1,
1111 8),
1112 SubpelAvgVarianceParams(2, 2,
1113 &aom_highbd_10_sub_pixel_avg_variance4x4_sse4_1,
1114 10),
1115 SubpelAvgVarianceParams(2, 2,
1116 &aom_highbd_12_sub_pixel_avg_variance4x4_sse4_1,
1117 12)));
Sebastien Alaiwan71e87842017-04-12 16:03:28 +02001118#endif // HAVE_SSE4_1 && CONFIG_HIGHBITDEPTH
Yi Luoc2496892016-04-08 11:16:30 -07001119
Sebastien Alaiwan71e87842017-04-12 16:03:28 +02001120#if CONFIG_HIGHBITDEPTH
Johannc3bdffb2015-05-15 11:52:03 -07001121/* TODO(debargha): This test does not support the highbd version
Johannc3bdffb2015-05-15 11:52:03 -07001122INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001123 SSE2, AvxHBDMseTest,
1124 ::testing::Values(MseParams(4, 4, &aom_highbd_12_mse16x16_sse2),
1125 MseParams(4, 3, &aom_highbd_12_mse16x8_sse2),
1126 MseParams(3, 4, &aom_highbd_12_mse8x16_sse2),
1127 MseParams(3, 3, &aom_highbd_12_mse8x8_sse2),
1128 MseParams(4, 4, &aom_highbd_10_mse16x16_sse2),
1129 MseParams(4, 3, &aom_highbd_10_mse16x8_sse2),
1130 MseParams(3, 4, &aom_highbd_10_mse8x16_sse2),
1131 MseParams(3, 3, &aom_highbd_10_mse8x8_sse2),
1132 MseParams(4, 4, &aom_highbd_8_mse16x16_sse2),
1133 MseParams(4, 3, &aom_highbd_8_mse16x8_sse2),
1134 MseParams(3, 4, &aom_highbd_8_mse8x16_sse2),
1135 MseParams(3, 3, &aom_highbd_8_mse8x8_sse2)));
Johannc3bdffb2015-05-15 11:52:03 -07001136*/
1137
Johannc3bdffb2015-05-15 11:52:03 -07001138INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001139 SSE2, AvxHBDVarianceTest,
skal8dbbcda2016-07-13 17:33:22 -07001140 ::testing::Values(
Yaowu Xuf883b422016-08-30 14:01:10 -07001141 VarianceParams(6, 6, &aom_highbd_12_variance64x64_sse2, 12),
1142 VarianceParams(6, 5, &aom_highbd_12_variance64x32_sse2, 12),
1143 VarianceParams(5, 6, &aom_highbd_12_variance32x64_sse2, 12),
1144 VarianceParams(5, 5, &aom_highbd_12_variance32x32_sse2, 12),
1145 VarianceParams(5, 4, &aom_highbd_12_variance32x16_sse2, 12),
1146 VarianceParams(4, 5, &aom_highbd_12_variance16x32_sse2, 12),
1147 VarianceParams(4, 4, &aom_highbd_12_variance16x16_sse2, 12),
1148 VarianceParams(4, 3, &aom_highbd_12_variance16x8_sse2, 12),
1149 VarianceParams(3, 4, &aom_highbd_12_variance8x16_sse2, 12),
1150 VarianceParams(3, 3, &aom_highbd_12_variance8x8_sse2, 12),
1151 VarianceParams(6, 6, &aom_highbd_10_variance64x64_sse2, 10),
1152 VarianceParams(6, 5, &aom_highbd_10_variance64x32_sse2, 10),
1153 VarianceParams(5, 6, &aom_highbd_10_variance32x64_sse2, 10),
1154 VarianceParams(5, 5, &aom_highbd_10_variance32x32_sse2, 10),
1155 VarianceParams(5, 4, &aom_highbd_10_variance32x16_sse2, 10),
1156 VarianceParams(4, 5, &aom_highbd_10_variance16x32_sse2, 10),
1157 VarianceParams(4, 4, &aom_highbd_10_variance16x16_sse2, 10),
1158 VarianceParams(4, 3, &aom_highbd_10_variance16x8_sse2, 10),
1159 VarianceParams(3, 4, &aom_highbd_10_variance8x16_sse2, 10),
1160 VarianceParams(3, 3, &aom_highbd_10_variance8x8_sse2, 10),
1161 VarianceParams(6, 6, &aom_highbd_8_variance64x64_sse2, 8),
1162 VarianceParams(6, 5, &aom_highbd_8_variance64x32_sse2, 8),
1163 VarianceParams(5, 6, &aom_highbd_8_variance32x64_sse2, 8),
1164 VarianceParams(5, 5, &aom_highbd_8_variance32x32_sse2, 8),
1165 VarianceParams(5, 4, &aom_highbd_8_variance32x16_sse2, 8),
1166 VarianceParams(4, 5, &aom_highbd_8_variance16x32_sse2, 8),
1167 VarianceParams(4, 4, &aom_highbd_8_variance16x16_sse2, 8),
1168 VarianceParams(4, 3, &aom_highbd_8_variance16x8_sse2, 8),
1169 VarianceParams(3, 4, &aom_highbd_8_variance8x16_sse2, 8),
1170 VarianceParams(3, 3, &aom_highbd_8_variance8x8_sse2, 8)));
Johannc3bdffb2015-05-15 11:52:03 -07001171
James Zernd598f042017-06-20 23:34:05 -07001172const SubpelVarianceParams kArrayHBDSubpelVariance_sse2[] = {
1173 SubpelVarianceParams(6, 6, &aom_highbd_12_sub_pixel_variance64x64_sse2, 12),
1174 SubpelVarianceParams(6, 5, &aom_highbd_12_sub_pixel_variance64x32_sse2, 12),
1175 SubpelVarianceParams(5, 6, &aom_highbd_12_sub_pixel_variance32x64_sse2, 12),
1176 SubpelVarianceParams(5, 5, &aom_highbd_12_sub_pixel_variance32x32_sse2, 12),
1177 SubpelVarianceParams(5, 4, &aom_highbd_12_sub_pixel_variance32x16_sse2, 12),
1178 SubpelVarianceParams(4, 5, &aom_highbd_12_sub_pixel_variance16x32_sse2, 12),
1179 SubpelVarianceParams(4, 4, &aom_highbd_12_sub_pixel_variance16x16_sse2, 12),
1180 SubpelVarianceParams(4, 3, &aom_highbd_12_sub_pixel_variance16x8_sse2, 12),
1181 SubpelVarianceParams(3, 4, &aom_highbd_12_sub_pixel_variance8x16_sse2, 12),
1182 SubpelVarianceParams(3, 3, &aom_highbd_12_sub_pixel_variance8x8_sse2, 12),
1183 SubpelVarianceParams(3, 2, &aom_highbd_12_sub_pixel_variance8x4_sse2, 12),
1184 SubpelVarianceParams(6, 6, &aom_highbd_10_sub_pixel_variance64x64_sse2, 10),
1185 SubpelVarianceParams(6, 5, &aom_highbd_10_sub_pixel_variance64x32_sse2, 10),
1186 SubpelVarianceParams(5, 6, &aom_highbd_10_sub_pixel_variance32x64_sse2, 10),
1187 SubpelVarianceParams(5, 5, &aom_highbd_10_sub_pixel_variance32x32_sse2, 10),
1188 SubpelVarianceParams(5, 4, &aom_highbd_10_sub_pixel_variance32x16_sse2, 10),
1189 SubpelVarianceParams(4, 5, &aom_highbd_10_sub_pixel_variance16x32_sse2, 10),
1190 SubpelVarianceParams(4, 4, &aom_highbd_10_sub_pixel_variance16x16_sse2, 10),
1191 SubpelVarianceParams(4, 3, &aom_highbd_10_sub_pixel_variance16x8_sse2, 10),
1192 SubpelVarianceParams(3, 4, &aom_highbd_10_sub_pixel_variance8x16_sse2, 10),
1193 SubpelVarianceParams(3, 3, &aom_highbd_10_sub_pixel_variance8x8_sse2, 10),
1194 SubpelVarianceParams(3, 2, &aom_highbd_10_sub_pixel_variance8x4_sse2, 10),
1195 SubpelVarianceParams(6, 6, &aom_highbd_8_sub_pixel_variance64x64_sse2, 8),
1196 SubpelVarianceParams(6, 5, &aom_highbd_8_sub_pixel_variance64x32_sse2, 8),
1197 SubpelVarianceParams(5, 6, &aom_highbd_8_sub_pixel_variance32x64_sse2, 8),
1198 SubpelVarianceParams(5, 5, &aom_highbd_8_sub_pixel_variance32x32_sse2, 8),
1199 SubpelVarianceParams(5, 4, &aom_highbd_8_sub_pixel_variance32x16_sse2, 8),
1200 SubpelVarianceParams(4, 5, &aom_highbd_8_sub_pixel_variance16x32_sse2, 8),
1201 SubpelVarianceParams(4, 4, &aom_highbd_8_sub_pixel_variance16x16_sse2, 8),
1202 SubpelVarianceParams(4, 3, &aom_highbd_8_sub_pixel_variance16x8_sse2, 8),
1203 SubpelVarianceParams(3, 4, &aom_highbd_8_sub_pixel_variance8x16_sse2, 8),
1204 SubpelVarianceParams(3, 3, &aom_highbd_8_sub_pixel_variance8x8_sse2, 8),
1205 SubpelVarianceParams(3, 2, &aom_highbd_8_sub_pixel_variance8x4_sse2, 8)
James Zerna9b275f2017-06-20 22:59:23 -07001206};
Johann6a82f0d2015-06-05 09:54:19 -07001207
James Zerna9b275f2017-06-20 22:59:23 -07001208INSTANTIATE_TEST_CASE_P(SSE2, AvxHBDSubpelVarianceTest,
1209 ::testing::ValuesIn(kArrayHBDSubpelVariance_sse2));
1210
James Zernd598f042017-06-20 23:34:05 -07001211const SubpelAvgVarianceParams kArrayHBDSubpelAvgVariance_sse2[] = {
1212 SubpelAvgVarianceParams(6, 6, &aom_highbd_12_sub_pixel_avg_variance64x64_sse2,
1213 12),
1214 SubpelAvgVarianceParams(6, 5, &aom_highbd_12_sub_pixel_avg_variance64x32_sse2,
1215 12),
1216 SubpelAvgVarianceParams(5, 6, &aom_highbd_12_sub_pixel_avg_variance32x64_sse2,
1217 12),
1218 SubpelAvgVarianceParams(5, 5, &aom_highbd_12_sub_pixel_avg_variance32x32_sse2,
1219 12),
1220 SubpelAvgVarianceParams(5, 4, &aom_highbd_12_sub_pixel_avg_variance32x16_sse2,
1221 12),
1222 SubpelAvgVarianceParams(4, 5, &aom_highbd_12_sub_pixel_avg_variance16x32_sse2,
1223 12),
1224 SubpelAvgVarianceParams(4, 4, &aom_highbd_12_sub_pixel_avg_variance16x16_sse2,
1225 12),
1226 SubpelAvgVarianceParams(4, 3, &aom_highbd_12_sub_pixel_avg_variance16x8_sse2,
1227 12),
1228 SubpelAvgVarianceParams(3, 4, &aom_highbd_12_sub_pixel_avg_variance8x16_sse2,
1229 12),
1230 SubpelAvgVarianceParams(3, 3, &aom_highbd_12_sub_pixel_avg_variance8x8_sse2,
1231 12),
1232 SubpelAvgVarianceParams(3, 2, &aom_highbd_12_sub_pixel_avg_variance8x4_sse2,
1233 12),
1234 SubpelAvgVarianceParams(6, 6, &aom_highbd_10_sub_pixel_avg_variance64x64_sse2,
1235 10),
1236 SubpelAvgVarianceParams(6, 5, &aom_highbd_10_sub_pixel_avg_variance64x32_sse2,
1237 10),
1238 SubpelAvgVarianceParams(5, 6, &aom_highbd_10_sub_pixel_avg_variance32x64_sse2,
1239 10),
1240 SubpelAvgVarianceParams(5, 5, &aom_highbd_10_sub_pixel_avg_variance32x32_sse2,
1241 10),
1242 SubpelAvgVarianceParams(5, 4, &aom_highbd_10_sub_pixel_avg_variance32x16_sse2,
1243 10),
1244 SubpelAvgVarianceParams(4, 5, &aom_highbd_10_sub_pixel_avg_variance16x32_sse2,
1245 10),
1246 SubpelAvgVarianceParams(4, 4, &aom_highbd_10_sub_pixel_avg_variance16x16_sse2,
1247 10),
1248 SubpelAvgVarianceParams(4, 3, &aom_highbd_10_sub_pixel_avg_variance16x8_sse2,
1249 10),
1250 SubpelAvgVarianceParams(3, 4, &aom_highbd_10_sub_pixel_avg_variance8x16_sse2,
1251 10),
1252 SubpelAvgVarianceParams(3, 3, &aom_highbd_10_sub_pixel_avg_variance8x8_sse2,
1253 10),
1254 SubpelAvgVarianceParams(3, 2, &aom_highbd_10_sub_pixel_avg_variance8x4_sse2,
1255 10),
1256 SubpelAvgVarianceParams(6, 6, &aom_highbd_8_sub_pixel_avg_variance64x64_sse2,
1257 8),
1258 SubpelAvgVarianceParams(6, 5, &aom_highbd_8_sub_pixel_avg_variance64x32_sse2,
1259 8),
1260 SubpelAvgVarianceParams(5, 6, &aom_highbd_8_sub_pixel_avg_variance32x64_sse2,
1261 8),
1262 SubpelAvgVarianceParams(5, 5, &aom_highbd_8_sub_pixel_avg_variance32x32_sse2,
1263 8),
1264 SubpelAvgVarianceParams(5, 4, &aom_highbd_8_sub_pixel_avg_variance32x16_sse2,
1265 8),
1266 SubpelAvgVarianceParams(4, 5, &aom_highbd_8_sub_pixel_avg_variance16x32_sse2,
1267 8),
1268 SubpelAvgVarianceParams(4, 4, &aom_highbd_8_sub_pixel_avg_variance16x16_sse2,
1269 8),
1270 SubpelAvgVarianceParams(4, 3, &aom_highbd_8_sub_pixel_avg_variance16x8_sse2,
1271 8),
1272 SubpelAvgVarianceParams(3, 4, &aom_highbd_8_sub_pixel_avg_variance8x16_sse2,
1273 8),
1274 SubpelAvgVarianceParams(3, 3, &aom_highbd_8_sub_pixel_avg_variance8x8_sse2,
1275 8),
1276 SubpelAvgVarianceParams(3, 2, &aom_highbd_8_sub_pixel_avg_variance8x4_sse2, 8)
1277};
James Zerna9b275f2017-06-20 22:59:23 -07001278
1279INSTANTIATE_TEST_CASE_P(SSE2, AvxHBDSubpelAvgVarianceTest,
1280 ::testing::ValuesIn(kArrayHBDSubpelAvgVariance_sse2));
Sebastien Alaiwan71e87842017-04-12 16:03:28 +02001281#endif // CONFIG_HIGHBITDEPTH
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001282#endif // HAVE_SSE2
Johannc3bdffb2015-05-15 11:52:03 -07001283
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -07001284#if HAVE_SSSE3
Ronald S. Bultje8fb6c582013-06-20 09:34:25 -07001285INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001286 SSSE3, AvxSubpelVarianceTest,
James Zernd598f042017-06-20 23:34:05 -07001287 ::testing::Values(
1288 SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_ssse3, 0),
1289 SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_ssse3, 0),
1290 SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_ssse3, 0),
1291 SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_ssse3, 0),
1292 SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_ssse3, 0),
1293 SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_ssse3, 0),
1294 SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_ssse3, 0),
1295 SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_ssse3, 0),
1296 SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_ssse3, 0),
1297 SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_ssse3, 0),
1298 SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_ssse3, 0),
1299 SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_ssse3, 0),
1300 SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_ssse3, 0)));
Johann6a82f0d2015-06-05 09:54:19 -07001301
Ronald S. Bultje1e6a32f2013-06-20 15:59:48 -07001302INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001303 SSSE3, AvxSubpelAvgVarianceTest,
James Zern837cea42015-11-05 19:00:45 -08001304 ::testing::Values(
James Zernd598f042017-06-20 23:34:05 -07001305 SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_ssse3,
1306 0),
1307 SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_ssse3,
1308 0),
1309 SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_ssse3,
1310 0),
1311 SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_ssse3,
1312 0),
1313 SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_ssse3,
1314 0),
1315 SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_ssse3,
1316 0),
1317 SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_ssse3,
1318 0),
1319 SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_ssse3, 0),
1320 SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_ssse3, 0),
1321 SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_ssse3, 0),
1322 SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_ssse3, 0),
1323 SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_ssse3, 0),
1324 SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_ssse3,
1325 0)));
Peter de Rivaz48032bf2014-10-16 14:00:54 +01001326#endif // HAVE_SSSE3
Johanneb88b172015-05-26 11:30:25 -07001327
James Zern520cb3f2014-06-08 18:25:37 -07001328#if HAVE_AVX2
Yaowu Xuf883b422016-08-30 14:01:10 -07001329INSTANTIATE_TEST_CASE_P(AVX2, AvxMseTest,
1330 ::testing::Values(MseParams(4, 4, &aom_mse16x16_avx2)));
levytamar8269a5f5e2014-07-24 00:20:19 -07001331
James Zern520cb3f2014-06-08 18:25:37 -07001332INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001333 AVX2, AvxVarianceTest,
1334 ::testing::Values(VarianceParams(6, 6, &aom_variance64x64_avx2),
1335 VarianceParams(6, 5, &aom_variance64x32_avx2),
1336 VarianceParams(5, 5, &aom_variance32x32_avx2),
1337 VarianceParams(5, 4, &aom_variance32x16_avx2),
1338 VarianceParams(4, 4, &aom_variance16x16_avx2)));
James Zern520cb3f2014-06-08 18:25:37 -07001339
James Zern520cb3f2014-06-08 18:25:37 -07001340INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001341 AVX2, AvxSubpelVarianceTest,
James Zernd598f042017-06-20 23:34:05 -07001342 ::testing::Values(
1343 SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_avx2, 0),
1344 SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_avx2, 0)));
James Zern520cb3f2014-06-08 18:25:37 -07001345
James Zern520cb3f2014-06-08 18:25:37 -07001346INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001347 AVX2, AvxSubpelAvgVarianceTest,
James Zern837cea42015-11-05 19:00:45 -08001348 ::testing::Values(
James Zernd598f042017-06-20 23:34:05 -07001349 SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_avx2, 0),
1350 SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_avx2,
1351 0)));
James Zern520cb3f2014-06-08 18:25:37 -07001352#endif // HAVE_AVX2
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001353
Johannc3bdffb2015-05-15 11:52:03 -07001354#if HAVE_NEON
Yaowu Xuf883b422016-08-30 14:01:10 -07001355INSTANTIATE_TEST_CASE_P(NEON, AvxSseTest,
skal8dbbcda2016-07-13 17:33:22 -07001356 ::testing::Values(SseParams(2, 2,
Yaowu Xuf883b422016-08-30 14:01:10 -07001357 &aom_get4x4sse_cs_neon)));
Johannc3bdffb2015-05-15 11:52:03 -07001358
Yaowu Xuf883b422016-08-30 14:01:10 -07001359INSTANTIATE_TEST_CASE_P(NEON, AvxMseTest,
1360 ::testing::Values(MseParams(4, 4, &aom_mse16x16_neon)));
Johannc3bdffb2015-05-15 11:52:03 -07001361
Johannc3bdffb2015-05-15 11:52:03 -07001362INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001363 NEON, AvxVarianceTest,
1364 ::testing::Values(VarianceParams(6, 6, &aom_variance64x64_neon),
1365 VarianceParams(6, 5, &aom_variance64x32_neon),
1366 VarianceParams(5, 6, &aom_variance32x64_neon),
1367 VarianceParams(5, 5, &aom_variance32x32_neon),
1368 VarianceParams(4, 4, &aom_variance16x16_neon),
1369 VarianceParams(4, 3, &aom_variance16x8_neon),
1370 VarianceParams(3, 4, &aom_variance8x16_neon),
1371 VarianceParams(3, 3, &aom_variance8x8_neon)));
Johannc3bdffb2015-05-15 11:52:03 -07001372
Scott LaVarnway521cf7e2014-07-29 16:47:34 -07001373INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001374 NEON, AvxSubpelVarianceTest,
James Zernd598f042017-06-20 23:34:05 -07001375 ::testing::Values(
1376 SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_neon, 0),
1377 SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_neon, 0),
1378 SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_neon, 0),
1379 SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_neon, 0)));
Johannc3bdffb2015-05-15 11:52:03 -07001380#endif // HAVE_NEON
James Zern1711cf22013-02-22 16:23:36 -08001381
Parag Salasakar2d730a22015-06-26 14:02:16 +05301382#if HAVE_MSA
1383INSTANTIATE_TEST_CASE_P(MSA, SumOfSquaresTest,
Yaowu Xuf883b422016-08-30 14:01:10 -07001384 ::testing::Values(aom_get_mb_ss_msa));
Parag Salasakar2d730a22015-06-26 14:02:16 +05301385
Yaowu Xuf883b422016-08-30 14:01:10 -07001386INSTANTIATE_TEST_CASE_P(MSA, AvxSseTest,
skal8dbbcda2016-07-13 17:33:22 -07001387 ::testing::Values(SseParams(2, 2,
Yaowu Xuf883b422016-08-30 14:01:10 -07001388 &aom_get4x4sse_cs_msa)));
Parag Salasakar2d730a22015-06-26 14:02:16 +05301389
Yaowu Xuf883b422016-08-30 14:01:10 -07001390INSTANTIATE_TEST_CASE_P(MSA, AvxMseTest,
1391 ::testing::Values(MseParams(4, 4, &aom_mse16x16_msa),
1392 MseParams(4, 3, &aom_mse16x8_msa),
1393 MseParams(3, 4, &aom_mse8x16_msa),
1394 MseParams(3, 3, &aom_mse8x8_msa)));
Parag Salasakar2d730a22015-06-26 14:02:16 +05301395
Parag Salasakar2d730a22015-06-26 14:02:16 +05301396INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001397 MSA, AvxVarianceTest,
1398 ::testing::Values(VarianceParams(6, 6, &aom_variance64x64_msa),
1399 VarianceParams(6, 5, &aom_variance64x32_msa),
1400 VarianceParams(5, 6, &aom_variance32x64_msa),
1401 VarianceParams(5, 5, &aom_variance32x32_msa),
1402 VarianceParams(5, 4, &aom_variance32x16_msa),
1403 VarianceParams(4, 5, &aom_variance16x32_msa),
1404 VarianceParams(4, 4, &aom_variance16x16_msa),
1405 VarianceParams(4, 3, &aom_variance16x8_msa),
1406 VarianceParams(3, 4, &aom_variance8x16_msa),
1407 VarianceParams(3, 3, &aom_variance8x8_msa),
1408 VarianceParams(3, 2, &aom_variance8x4_msa),
1409 VarianceParams(2, 3, &aom_variance4x8_msa),
1410 VarianceParams(2, 2, &aom_variance4x4_msa)));
Parag Salasakarfbe67d32015-07-05 21:44:06 +05301411
Parag Salasakarfbe67d32015-07-05 21:44:06 +05301412INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001413 MSA, AvxSubpelVarianceTest,
James Zernd598f042017-06-20 23:34:05 -07001414 ::testing::Values(
1415 SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_msa, 0),
1416 SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_msa, 0),
1417 SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_msa, 0),
1418 SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_msa, 0),
1419 SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_msa, 0),
1420 SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_msa, 0),
1421 SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_msa, 0),
1422 SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_msa, 0),
1423 SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_msa, 0),
1424 SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_msa, 0),
1425 SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_msa, 0),
1426 SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_msa, 0),
1427 SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_msa, 0)));
Parag Salasakar1d7f1ca2015-07-08 12:07:28 +05301428
Parag Salasakar1d7f1ca2015-07-08 12:07:28 +05301429INSTANTIATE_TEST_CASE_P(
Yaowu Xuf883b422016-08-30 14:01:10 -07001430 MSA, AvxSubpelAvgVarianceTest,
James Zernd598f042017-06-20 23:34:05 -07001431 ::testing::Values(
1432 SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_msa, 0),
1433 SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_msa, 0),
1434 SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_msa, 0),
1435 SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_msa, 0),
1436 SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_msa, 0),
1437 SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_msa, 0),
1438 SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_msa, 0),
1439 SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_msa, 0),
1440 SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_msa, 0),
1441 SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_msa, 0),
1442 SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_msa, 0),
1443 SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_msa, 0),
1444 SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_msa, 0)));
Parag Salasakar2d730a22015-06-26 14:02:16 +05301445#endif // HAVE_MSA
James Zern98473442012-11-06 16:58:11 -08001446} // namespace