blob: c7726bfd681bc5a202820938f90db6647e26f782 [file] [log] [blame]
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -08001/*
2 * Copyright (c) 2015 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include <math.h>
12#include <stdlib.h>
13#include <string.h>
14
15#include "third_party/googletest/src/include/gtest/gtest.h"
16#include "test/acm_random.h"
17#include "test/clear_system_state.h"
18#include "test/register_state_check.h"
19#include "test/util.h"
20
Yaowu Xuf883b422016-08-30 14:01:10 -070021#include "./aom_config.h"
22#include "./aom_dsp_rtcd.h"
23#include "aom/aom_codec.h"
24#include "aom/aom_integer.h"
25#include "aom_dsp/aom_filter.h"
26#include "aom_mem/aom_mem.h"
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080027
Yaowu Xuc27fc142016-08-22 16:08:15 -070028using libaom_test::ACMRandom;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080029
30namespace {
31const int number_of_iterations = 500;
32
33typedef unsigned int (*MaskedVarianceFunc)(const uint8_t *a, int a_stride,
34 const uint8_t *b, int b_stride,
35 const uint8_t *m, int m_stride,
36 unsigned int *sse);
37
clang-format3a826f12016-08-11 17:46:05 -070038typedef std::tr1::tuple<MaskedVarianceFunc, MaskedVarianceFunc>
39 MaskedVarianceParam;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080040
clang-format3a826f12016-08-11 17:46:05 -070041class MaskedVarianceTest
42 : public ::testing::TestWithParam<MaskedVarianceParam> {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080043 public:
44 virtual ~MaskedVarianceTest() {}
45 virtual void SetUp() {
46 opt_func_ = GET_PARAM(0);
47 ref_func_ = GET_PARAM(1);
48 }
49
Yaowu Xuc27fc142016-08-22 16:08:15 -070050 virtual void TearDown() { libaom_test::ClearSystemState(); }
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080051
52 protected:
53 MaskedVarianceFunc opt_func_;
54 MaskedVarianceFunc ref_func_;
55};
56
57TEST_P(MaskedVarianceTest, OperationCheck) {
58 unsigned int ref_ret, opt_ret;
59 unsigned int ref_sse, opt_sse;
60 ACMRandom rnd(ACMRandom::DeterministicSeed());
clang-format3a826f12016-08-11 17:46:05 -070061 DECLARE_ALIGNED(16, uint8_t, src_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
62 DECLARE_ALIGNED(16, uint8_t, ref_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
63 DECLARE_ALIGNED(16, uint8_t, msk_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080064 int err_count = 0;
65 int first_failure = -1;
Geza Lore552d5cd2016-03-07 13:46:39 +000066 int src_stride = MAX_SB_SIZE;
67 int ref_stride = MAX_SB_SIZE;
68 int msk_stride = MAX_SB_SIZE;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080069
70 for (int i = 0; i < number_of_iterations; ++i) {
clang-format3a826f12016-08-11 17:46:05 -070071 for (int j = 0; j < MAX_SB_SIZE * MAX_SB_SIZE; j++) {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080072 src_ptr[j] = rnd.Rand8();
73 ref_ptr[j] = rnd.Rand8();
74 msk_ptr[j] = rnd(65);
75 }
76
clang-format3a826f12016-08-11 17:46:05 -070077 ref_ret = ref_func_(src_ptr, src_stride, ref_ptr, ref_stride, msk_ptr,
78 msk_stride, &ref_sse);
79 ASM_REGISTER_STATE_CHECK(opt_ret = opt_func_(src_ptr, src_stride, ref_ptr,
80 ref_stride, msk_ptr,
81 msk_stride, &opt_sse));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080082
83 if (opt_ret != ref_ret || opt_sse != ref_sse) {
84 err_count++;
clang-format3a826f12016-08-11 17:46:05 -070085 if (first_failure == -1) first_failure = i;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080086 }
87 }
88
clang-format3a826f12016-08-11 17:46:05 -070089 EXPECT_EQ(0, err_count) << "Error: Masked Variance Test OperationCheck,"
90 << "C output doesn't match SSSE3 output. "
91 << "First failed at test case " << first_failure;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -080092}
93
94TEST_P(MaskedVarianceTest, ExtremeValues) {
95 unsigned int ref_ret, opt_ret;
96 unsigned int ref_sse, opt_sse;
97 ACMRandom rnd(ACMRandom::DeterministicSeed());
clang-format3a826f12016-08-11 17:46:05 -070098 DECLARE_ALIGNED(16, uint8_t, src_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
99 DECLARE_ALIGNED(16, uint8_t, ref_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
100 DECLARE_ALIGNED(16, uint8_t, msk_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800101 int err_count = 0;
102 int first_failure = -1;
Geza Lore552d5cd2016-03-07 13:46:39 +0000103 int src_stride = MAX_SB_SIZE;
104 int ref_stride = MAX_SB_SIZE;
105 int msk_stride = MAX_SB_SIZE;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800106
107 for (int i = 0; i < 8; ++i) {
clang-format3a826f12016-08-11 17:46:05 -0700108 memset(src_ptr, (i & 0x1) ? 255 : 0, MAX_SB_SIZE * MAX_SB_SIZE);
109 memset(ref_ptr, (i & 0x2) ? 255 : 0, MAX_SB_SIZE * MAX_SB_SIZE);
110 memset(msk_ptr, (i & 0x4) ? 64 : 0, MAX_SB_SIZE * MAX_SB_SIZE);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800111
clang-format3a826f12016-08-11 17:46:05 -0700112 ref_ret = ref_func_(src_ptr, src_stride, ref_ptr, ref_stride, msk_ptr,
113 msk_stride, &ref_sse);
114 ASM_REGISTER_STATE_CHECK(opt_ret = opt_func_(src_ptr, src_stride, ref_ptr,
115 ref_stride, msk_ptr,
116 msk_stride, &opt_sse));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800117
118 if (opt_ret != ref_ret || opt_sse != ref_sse) {
119 err_count++;
clang-format3a826f12016-08-11 17:46:05 -0700120 if (first_failure == -1) first_failure = i;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800121 }
122 }
123
clang-format3a826f12016-08-11 17:46:05 -0700124 EXPECT_EQ(0, err_count) << "Error: Masked Variance Test ExtremeValues,"
125 << "C output doesn't match SSSE3 output. "
126 << "First failed at test case " << first_failure;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800127}
128
129typedef unsigned int (*MaskedSubPixelVarianceFunc)(
clang-format3a826f12016-08-11 17:46:05 -0700130 const uint8_t *a, int a_stride, int xoffset, int yoffset, const uint8_t *b,
131 int b_stride, const uint8_t *m, int m_stride, unsigned int *sse);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800132
clang-format3a826f12016-08-11 17:46:05 -0700133typedef std::tr1::tuple<MaskedSubPixelVarianceFunc, MaskedSubPixelVarianceFunc>
134 MaskedSubPixelVarianceParam;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800135
clang-format3a826f12016-08-11 17:46:05 -0700136class MaskedSubPixelVarianceTest
137 : public ::testing::TestWithParam<MaskedSubPixelVarianceParam> {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800138 public:
139 virtual ~MaskedSubPixelVarianceTest() {}
140 virtual void SetUp() {
141 opt_func_ = GET_PARAM(0);
142 ref_func_ = GET_PARAM(1);
143 }
144
Yaowu Xuc27fc142016-08-22 16:08:15 -0700145 virtual void TearDown() { libaom_test::ClearSystemState(); }
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800146
147 protected:
148 MaskedSubPixelVarianceFunc opt_func_;
149 MaskedSubPixelVarianceFunc ref_func_;
150};
151
152TEST_P(MaskedSubPixelVarianceTest, OperationCheck) {
153 unsigned int ref_ret, opt_ret;
154 unsigned int ref_sse, opt_sse;
155 ACMRandom rnd(ACMRandom::DeterministicSeed());
clang-format3a826f12016-08-11 17:46:05 -0700156 DECLARE_ALIGNED(16, uint8_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
157 DECLARE_ALIGNED(16, uint8_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
158 DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800159 int err_count = 0;
160 int first_failure = -1;
clang-format3a826f12016-08-11 17:46:05 -0700161 int src_stride = (MAX_SB_SIZE + 1);
162 int ref_stride = (MAX_SB_SIZE + 1);
163 int msk_stride = (MAX_SB_SIZE + 1);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800164 int xoffset;
165 int yoffset;
166
167 for (int i = 0; i < number_of_iterations; ++i) {
clang-format3a826f12016-08-11 17:46:05 -0700168 int xoffsets[] = { 0, 4, rnd(BIL_SUBPEL_SHIFTS) };
169 int yoffsets[] = { 0, 4, rnd(BIL_SUBPEL_SHIFTS) };
170 for (int j = 0; j < (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1); j++) {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800171 src_ptr[j] = rnd.Rand8();
172 ref_ptr[j] = rnd.Rand8();
173 msk_ptr[j] = rnd(65);
174 }
175 for (int k = 0; k < 3; k++) {
176 xoffset = xoffsets[k];
177 for (int l = 0; l < 3; l++) {
178 xoffset = xoffsets[k];
179 yoffset = yoffsets[l];
180
clang-format3a826f12016-08-11 17:46:05 -0700181 ref_ret = ref_func_(src_ptr, src_stride, xoffset, yoffset, ref_ptr,
182 ref_stride, msk_ptr, msk_stride, &ref_sse);
183 ASM_REGISTER_STATE_CHECK(
184 opt_ret = opt_func_(src_ptr, src_stride, xoffset, yoffset, ref_ptr,
185 ref_stride, msk_ptr, msk_stride, &opt_sse));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800186
187 if (opt_ret != ref_ret || opt_sse != ref_sse) {
clang-format3a826f12016-08-11 17:46:05 -0700188 err_count++;
189 if (first_failure == -1) first_failure = i;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800190 }
191 }
192 }
193 }
194
195 EXPECT_EQ(0, err_count)
clang-format3a826f12016-08-11 17:46:05 -0700196 << "Error: Masked Sub Pixel Variance Test OperationCheck,"
197 << "C output doesn't match SSSE3 output. "
198 << "First failed at test case " << first_failure;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800199}
200
201TEST_P(MaskedSubPixelVarianceTest, ExtremeValues) {
202 unsigned int ref_ret, opt_ret;
203 unsigned int ref_sse, opt_sse;
204 ACMRandom rnd(ACMRandom::DeterministicSeed());
clang-format3a826f12016-08-11 17:46:05 -0700205 DECLARE_ALIGNED(16, uint8_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
206 DECLARE_ALIGNED(16, uint8_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
207 DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800208 int first_failure_x = -1;
209 int first_failure_y = -1;
210 int err_count = 0;
211 int first_failure = -1;
clang-format3a826f12016-08-11 17:46:05 -0700212 int src_stride = (MAX_SB_SIZE + 1);
213 int ref_stride = (MAX_SB_SIZE + 1);
214 int msk_stride = (MAX_SB_SIZE + 1);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800215
clang-format3a826f12016-08-11 17:46:05 -0700216 for (int xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
217 for (int yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800218 for (int i = 0; i < 8; ++i) {
clang-format3a826f12016-08-11 17:46:05 -0700219 memset(src_ptr, (i & 0x1) ? 255 : 0,
220 (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1));
221 memset(ref_ptr, (i & 0x2) ? 255 : 0,
222 (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1));
223 memset(msk_ptr, (i & 0x4) ? 64 : 0,
224 (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800225
clang-format3a826f12016-08-11 17:46:05 -0700226 ref_ret = ref_func_(src_ptr, src_stride, xoffset, yoffset, ref_ptr,
227 ref_stride, msk_ptr, msk_stride, &ref_sse);
228 ASM_REGISTER_STATE_CHECK(
229 opt_ret = opt_func_(src_ptr, src_stride, xoffset, yoffset, ref_ptr,
230 ref_stride, msk_ptr, msk_stride, &opt_sse));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800231
232 if (opt_ret != ref_ret || opt_sse != ref_sse) {
233 err_count++;
234 if (first_failure == -1) {
235 first_failure = i;
236 first_failure_x = xoffset;
237 first_failure_y = yoffset;
238 }
239 }
240 }
241 }
242 }
243
clang-format3a826f12016-08-11 17:46:05 -0700244 EXPECT_EQ(0, err_count) << "Error: Masked Variance Test ExtremeValues,"
245 << "C output doesn't match SSSE3 output. "
246 << "First failed at test case " << first_failure
247 << " x_offset = " << first_failure_x
248 << " y_offset = " << first_failure_y;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800249}
250
Yaowu Xuf883b422016-08-30 14:01:10 -0700251#if CONFIG_AOM_HIGHBITDEPTH
252typedef std::tr1::tuple<MaskedVarianceFunc, MaskedVarianceFunc, aom_bit_depth_t>
clang-format3a826f12016-08-11 17:46:05 -0700253 HighbdMaskedVarianceParam;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800254
clang-format3a826f12016-08-11 17:46:05 -0700255class HighbdMaskedVarianceTest
256 : public ::testing::TestWithParam<HighbdMaskedVarianceParam> {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800257 public:
258 virtual ~HighbdMaskedVarianceTest() {}
259 virtual void SetUp() {
260 opt_func_ = GET_PARAM(0);
261 ref_func_ = GET_PARAM(1);
262 bit_depth_ = GET_PARAM(2);
263 }
264
Yaowu Xuc27fc142016-08-22 16:08:15 -0700265 virtual void TearDown() { libaom_test::ClearSystemState(); }
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800266
267 protected:
268 MaskedVarianceFunc opt_func_;
269 MaskedVarianceFunc ref_func_;
Yaowu Xuf883b422016-08-30 14:01:10 -0700270 aom_bit_depth_t bit_depth_;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800271};
272
273TEST_P(HighbdMaskedVarianceTest, OperationCheck) {
274 unsigned int ref_ret, opt_ret;
275 unsigned int ref_sse, opt_sse;
276 ACMRandom rnd(ACMRandom::DeterministicSeed());
clang-format3a826f12016-08-11 17:46:05 -0700277 DECLARE_ALIGNED(16, uint16_t, src_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
278 DECLARE_ALIGNED(16, uint16_t, ref_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
279 DECLARE_ALIGNED(16, uint8_t, msk_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
280 uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
281 uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800282 int err_count = 0;
283 int first_failure = -1;
Geza Lore552d5cd2016-03-07 13:46:39 +0000284 int src_stride = MAX_SB_SIZE;
285 int ref_stride = MAX_SB_SIZE;
286 int msk_stride = MAX_SB_SIZE;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800287
288 for (int i = 0; i < number_of_iterations; ++i) {
clang-format3a826f12016-08-11 17:46:05 -0700289 for (int j = 0; j < MAX_SB_SIZE * MAX_SB_SIZE; j++) {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800290 src_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
291 ref_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
292 msk_ptr[j] = rnd(65);
293 }
294
clang-format3a826f12016-08-11 17:46:05 -0700295 ref_ret = ref_func_(src8_ptr, src_stride, ref8_ptr, ref_stride, msk_ptr,
296 msk_stride, &ref_sse);
297 ASM_REGISTER_STATE_CHECK(opt_ret = opt_func_(src8_ptr, src_stride, ref8_ptr,
298 ref_stride, msk_ptr,
299 msk_stride, &opt_sse));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800300
301 if (opt_ret != ref_ret || opt_sse != ref_sse) {
302 err_count++;
clang-format3a826f12016-08-11 17:46:05 -0700303 if (first_failure == -1) first_failure = i;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800304 }
305 }
306
clang-format3a826f12016-08-11 17:46:05 -0700307 EXPECT_EQ(0, err_count) << "Error: Masked Variance Test OperationCheck,"
308 << "C output doesn't match SSSE3 output. "
309 << "First failed at test case " << first_failure;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800310}
311
312TEST_P(HighbdMaskedVarianceTest, ExtremeValues) {
313 unsigned int ref_ret, opt_ret;
314 unsigned int ref_sse, opt_sse;
315 ACMRandom rnd(ACMRandom::DeterministicSeed());
clang-format3a826f12016-08-11 17:46:05 -0700316 DECLARE_ALIGNED(16, uint16_t, src_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
317 DECLARE_ALIGNED(16, uint16_t, ref_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
318 DECLARE_ALIGNED(16, uint8_t, msk_ptr[MAX_SB_SIZE * MAX_SB_SIZE]);
319 uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
320 uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800321 int err_count = 0;
322 int first_failure = -1;
Geza Lore552d5cd2016-03-07 13:46:39 +0000323 int src_stride = MAX_SB_SIZE;
324 int ref_stride = MAX_SB_SIZE;
325 int msk_stride = MAX_SB_SIZE;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800326
327 for (int i = 0; i < 8; ++i) {
Yaowu Xuf883b422016-08-30 14:01:10 -0700328 aom_memset16(src_ptr, (i & 0x1) ? ((1 << bit_depth_) - 1) : 0,
clang-format3a826f12016-08-11 17:46:05 -0700329 MAX_SB_SIZE * MAX_SB_SIZE);
Yaowu Xuf883b422016-08-30 14:01:10 -0700330 aom_memset16(ref_ptr, (i & 0x2) ? ((1 << bit_depth_) - 1) : 0,
clang-format3a826f12016-08-11 17:46:05 -0700331 MAX_SB_SIZE * MAX_SB_SIZE);
332 memset(msk_ptr, (i & 0x4) ? 64 : 0, MAX_SB_SIZE * MAX_SB_SIZE);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800333
clang-format3a826f12016-08-11 17:46:05 -0700334 ref_ret = ref_func_(src8_ptr, src_stride, ref8_ptr, ref_stride, msk_ptr,
335 msk_stride, &ref_sse);
336 ASM_REGISTER_STATE_CHECK(opt_ret = opt_func_(src8_ptr, src_stride, ref8_ptr,
337 ref_stride, msk_ptr,
338 msk_stride, &opt_sse));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800339
340 if (opt_ret != ref_ret || opt_sse != ref_sse) {
341 err_count++;
clang-format3a826f12016-08-11 17:46:05 -0700342 if (first_failure == -1) first_failure = i;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800343 }
344 }
345
clang-format3a826f12016-08-11 17:46:05 -0700346 EXPECT_EQ(0, err_count) << "Error: Masked Variance Test ExtremeValues,"
347 << "C output doesn't match SSSE3 output. "
348 << "First failed at test case " << first_failure;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800349}
350
clang-format3a826f12016-08-11 17:46:05 -0700351typedef std::tr1::tuple<MaskedSubPixelVarianceFunc, MaskedSubPixelVarianceFunc,
clang-format67948d32016-09-07 22:40:40 -0700352 aom_bit_depth_t>
353 HighbdMaskedSubPixelVarianceParam;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800354
clang-format3a826f12016-08-11 17:46:05 -0700355class HighbdMaskedSubPixelVarianceTest
356 : public ::testing::TestWithParam<HighbdMaskedSubPixelVarianceParam> {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800357 public:
358 virtual ~HighbdMaskedSubPixelVarianceTest() {}
359 virtual void SetUp() {
360 opt_func_ = GET_PARAM(0);
361 ref_func_ = GET_PARAM(1);
362 bit_depth_ = GET_PARAM(2);
363 }
364
Yaowu Xuc27fc142016-08-22 16:08:15 -0700365 virtual void TearDown() { libaom_test::ClearSystemState(); }
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800366
367 protected:
368 MaskedSubPixelVarianceFunc opt_func_;
369 MaskedSubPixelVarianceFunc ref_func_;
Yaowu Xuf883b422016-08-30 14:01:10 -0700370 aom_bit_depth_t bit_depth_;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800371};
372
373TEST_P(HighbdMaskedSubPixelVarianceTest, OperationCheck) {
374 unsigned int ref_ret, opt_ret;
375 unsigned int ref_sse, opt_sse;
376 ACMRandom rnd(ACMRandom::DeterministicSeed());
clang-format3a826f12016-08-11 17:46:05 -0700377 DECLARE_ALIGNED(16, uint16_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
378 DECLARE_ALIGNED(16, uint16_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
379 DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
380 uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
381 uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800382 int err_count = 0;
383 int first_failure = -1;
384 int first_failure_x = -1;
385 int first_failure_y = -1;
clang-format3a826f12016-08-11 17:46:05 -0700386 int src_stride = (MAX_SB_SIZE + 1);
387 int ref_stride = (MAX_SB_SIZE + 1);
388 int msk_stride = (MAX_SB_SIZE + 1);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800389 int xoffset, yoffset;
390
391 for (int i = 0; i < number_of_iterations; ++i) {
392 for (xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
393 for (yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
clang-format3a826f12016-08-11 17:46:05 -0700394 for (int j = 0; j < (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1); j++) {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800395 src_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
396 ref_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
397 msk_ptr[j] = rnd(65);
398 }
399
clang-format3a826f12016-08-11 17:46:05 -0700400 ref_ret = ref_func_(src8_ptr, src_stride, xoffset, yoffset, ref8_ptr,
401 ref_stride, msk_ptr, msk_stride, &ref_sse);
402 ASM_REGISTER_STATE_CHECK(opt_ret =
403 opt_func_(src8_ptr, src_stride, xoffset,
404 yoffset, ref8_ptr, ref_stride,
405 msk_ptr, msk_stride, &opt_sse));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800406
407 if (opt_ret != ref_ret || opt_sse != ref_sse) {
408 err_count++;
409 if (first_failure == -1) {
410 first_failure = i;
411 first_failure_x = xoffset;
412 first_failure_y = yoffset;
413 }
414 }
415 }
416 }
417 }
418
419 EXPECT_EQ(0, err_count)
clang-format3a826f12016-08-11 17:46:05 -0700420 << "Error: Masked Sub Pixel Variance Test OperationCheck,"
421 << "C output doesn't match SSSE3 output. "
422 << "First failed at test case " << first_failure
423 << " x_offset = " << first_failure_x << " y_offset = " << first_failure_y;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800424}
425
426TEST_P(HighbdMaskedSubPixelVarianceTest, ExtremeValues) {
427 unsigned int ref_ret, opt_ret;
428 unsigned int ref_sse, opt_sse;
429 ACMRandom rnd(ACMRandom::DeterministicSeed());
clang-format3a826f12016-08-11 17:46:05 -0700430 DECLARE_ALIGNED(16, uint16_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
431 DECLARE_ALIGNED(16, uint16_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
432 DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1)]);
433 uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
434 uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800435 int first_failure_x = -1;
436 int first_failure_y = -1;
437 int err_count = 0;
438 int first_failure = -1;
clang-format3a826f12016-08-11 17:46:05 -0700439 int src_stride = (MAX_SB_SIZE + 1);
440 int ref_stride = (MAX_SB_SIZE + 1);
441 int msk_stride = (MAX_SB_SIZE + 1);
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800442
clang-format3a826f12016-08-11 17:46:05 -0700443 for (int xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
444 for (int yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800445 for (int i = 0; i < 8; ++i) {
Yaowu Xuf883b422016-08-30 14:01:10 -0700446 aom_memset16(src_ptr, (i & 0x1) ? ((1 << bit_depth_) - 1) : 0,
clang-format3a826f12016-08-11 17:46:05 -0700447 (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1));
Yaowu Xuf883b422016-08-30 14:01:10 -0700448 aom_memset16(ref_ptr, (i & 0x2) ? ((1 << bit_depth_) - 1) : 0,
clang-format3a826f12016-08-11 17:46:05 -0700449 (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1));
450 memset(msk_ptr, (i & 0x4) ? 64 : 0,
451 (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 1));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800452
clang-format3a826f12016-08-11 17:46:05 -0700453 ref_ret = ref_func_(src8_ptr, src_stride, xoffset, yoffset, ref8_ptr,
454 ref_stride, msk_ptr, msk_stride, &ref_sse);
455 ASM_REGISTER_STATE_CHECK(opt_ret =
456 opt_func_(src8_ptr, src_stride, xoffset,
457 yoffset, ref8_ptr, ref_stride,
458 msk_ptr, msk_stride, &opt_sse));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800459
460 if (opt_ret != ref_ret || opt_sse != ref_sse) {
461 err_count++;
462 if (first_failure == -1) {
463 first_failure = i;
464 first_failure_x = xoffset;
465 first_failure_y = yoffset;
466 }
467 }
468 }
469 }
470 }
471
clang-format3a826f12016-08-11 17:46:05 -0700472 EXPECT_EQ(0, err_count) << "Error: Masked Variance Test ExtremeValues,"
473 << "C output doesn't match SSSE3 output. "
474 << "First failed at test case " << first_failure
475 << " x_offset = " << first_failure_x
476 << " y_offset = " << first_failure_y;
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800477}
Yaowu Xuf883b422016-08-30 14:01:10 -0700478#endif // CONFIG_AOM_HIGHBITDEPTH
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800479
480using std::tr1::make_tuple;
481
482#if HAVE_SSSE3
483INSTANTIATE_TEST_CASE_P(
clang-format3a826f12016-08-11 17:46:05 -0700484 SSSE3_C_COMPARE, MaskedVarianceTest,
485 ::testing::Values(
Geza Lore697bf5b2016-03-02 11:12:52 +0000486#if CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700487 make_tuple(&aom_masked_variance128x128_ssse3,
488 &aom_masked_variance128x128_c),
489 make_tuple(&aom_masked_variance128x64_ssse3,
490 &aom_masked_variance128x64_c),
491 make_tuple(&aom_masked_variance64x128_ssse3,
492 &aom_masked_variance64x128_c),
Geza Lore697bf5b2016-03-02 11:12:52 +0000493#endif // CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700494 make_tuple(&aom_masked_variance64x64_ssse3,
495 &aom_masked_variance64x64_c),
496 make_tuple(&aom_masked_variance64x32_ssse3,
497 &aom_masked_variance64x32_c),
498 make_tuple(&aom_masked_variance32x64_ssse3,
499 &aom_masked_variance32x64_c),
500 make_tuple(&aom_masked_variance32x32_ssse3,
501 &aom_masked_variance32x32_c),
502 make_tuple(&aom_masked_variance32x16_ssse3,
503 &aom_masked_variance32x16_c),
504 make_tuple(&aom_masked_variance16x32_ssse3,
505 &aom_masked_variance16x32_c),
506 make_tuple(&aom_masked_variance16x16_ssse3,
507 &aom_masked_variance16x16_c),
508 make_tuple(&aom_masked_variance16x8_ssse3, &aom_masked_variance16x8_c),
509 make_tuple(&aom_masked_variance8x16_ssse3, &aom_masked_variance8x16_c),
510 make_tuple(&aom_masked_variance8x8_ssse3, &aom_masked_variance8x8_c),
511 make_tuple(&aom_masked_variance8x4_ssse3, &aom_masked_variance8x4_c),
512 make_tuple(&aom_masked_variance4x8_ssse3, &aom_masked_variance4x8_c),
513 make_tuple(&aom_masked_variance4x4_ssse3, &aom_masked_variance4x4_c)));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800514
515INSTANTIATE_TEST_CASE_P(
clang-format3a826f12016-08-11 17:46:05 -0700516 SSSE3_C_COMPARE, MaskedSubPixelVarianceTest,
517 ::testing::Values(
Geza Lore697bf5b2016-03-02 11:12:52 +0000518#if CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700519 make_tuple(&aom_masked_sub_pixel_variance128x128_ssse3,
520 &aom_masked_sub_pixel_variance128x128_c),
521 make_tuple(&aom_masked_sub_pixel_variance128x64_ssse3,
522 &aom_masked_sub_pixel_variance128x64_c),
523 make_tuple(&aom_masked_sub_pixel_variance64x128_ssse3,
524 &aom_masked_sub_pixel_variance64x128_c),
Geza Lore697bf5b2016-03-02 11:12:52 +0000525#endif // CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700526 make_tuple(&aom_masked_sub_pixel_variance64x64_ssse3,
527 &aom_masked_sub_pixel_variance64x64_c),
528 make_tuple(&aom_masked_sub_pixel_variance64x32_ssse3,
529 &aom_masked_sub_pixel_variance64x32_c),
530 make_tuple(&aom_masked_sub_pixel_variance32x64_ssse3,
531 &aom_masked_sub_pixel_variance32x64_c),
532 make_tuple(&aom_masked_sub_pixel_variance32x32_ssse3,
533 &aom_masked_sub_pixel_variance32x32_c),
534 make_tuple(&aom_masked_sub_pixel_variance32x16_ssse3,
535 &aom_masked_sub_pixel_variance32x16_c),
536 make_tuple(&aom_masked_sub_pixel_variance16x32_ssse3,
537 &aom_masked_sub_pixel_variance16x32_c),
538 make_tuple(&aom_masked_sub_pixel_variance16x16_ssse3,
539 &aom_masked_sub_pixel_variance16x16_c),
540 make_tuple(&aom_masked_sub_pixel_variance16x8_ssse3,
541 &aom_masked_sub_pixel_variance16x8_c),
542 make_tuple(&aom_masked_sub_pixel_variance8x16_ssse3,
543 &aom_masked_sub_pixel_variance8x16_c),
544 make_tuple(&aom_masked_sub_pixel_variance8x8_ssse3,
545 &aom_masked_sub_pixel_variance8x8_c),
546 make_tuple(&aom_masked_sub_pixel_variance8x4_ssse3,
547 &aom_masked_sub_pixel_variance8x4_c),
548 make_tuple(&aom_masked_sub_pixel_variance4x8_ssse3,
549 &aom_masked_sub_pixel_variance4x8_c),
550 make_tuple(&aom_masked_sub_pixel_variance4x4_ssse3,
551 &aom_masked_sub_pixel_variance4x4_c)));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800552
Yaowu Xuf883b422016-08-30 14:01:10 -0700553#if CONFIG_AOM_HIGHBITDEPTH
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800554INSTANTIATE_TEST_CASE_P(
clang-format3a826f12016-08-11 17:46:05 -0700555 SSSE3_C_COMPARE, HighbdMaskedVarianceTest,
556 ::testing::Values(
Geza Lore697bf5b2016-03-02 11:12:52 +0000557#if CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700558 make_tuple(&aom_highbd_masked_variance128x128_ssse3,
559 &aom_highbd_masked_variance128x128_c, AOM_BITS_8),
560 make_tuple(&aom_highbd_masked_variance128x64_ssse3,
561 &aom_highbd_masked_variance128x64_c, AOM_BITS_8),
562 make_tuple(&aom_highbd_masked_variance64x128_ssse3,
563 &aom_highbd_masked_variance64x128_c, AOM_BITS_8),
Geza Lore697bf5b2016-03-02 11:12:52 +0000564#endif // CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700565 make_tuple(&aom_highbd_masked_variance64x64_ssse3,
566 &aom_highbd_masked_variance64x64_c, AOM_BITS_8),
567 make_tuple(&aom_highbd_masked_variance64x32_ssse3,
568 &aom_highbd_masked_variance64x32_c, AOM_BITS_8),
569 make_tuple(&aom_highbd_masked_variance32x64_ssse3,
570 &aom_highbd_masked_variance32x64_c, AOM_BITS_8),
571 make_tuple(&aom_highbd_masked_variance32x32_ssse3,
572 &aom_highbd_masked_variance32x32_c, AOM_BITS_8),
573 make_tuple(&aom_highbd_masked_variance32x16_ssse3,
574 &aom_highbd_masked_variance32x16_c, AOM_BITS_8),
575 make_tuple(&aom_highbd_masked_variance16x32_ssse3,
576 &aom_highbd_masked_variance16x32_c, AOM_BITS_8),
577 make_tuple(&aom_highbd_masked_variance16x16_ssse3,
578 &aom_highbd_masked_variance16x16_c, AOM_BITS_8),
579 make_tuple(&aom_highbd_masked_variance16x8_ssse3,
580 &aom_highbd_masked_variance16x8_c, AOM_BITS_8),
581 make_tuple(&aom_highbd_masked_variance8x16_ssse3,
582 &aom_highbd_masked_variance8x16_c, AOM_BITS_8),
583 make_tuple(&aom_highbd_masked_variance8x8_ssse3,
584 &aom_highbd_masked_variance8x8_c, AOM_BITS_8),
585 make_tuple(&aom_highbd_masked_variance8x4_ssse3,
586 &aom_highbd_masked_variance8x4_c, AOM_BITS_8),
587 make_tuple(&aom_highbd_masked_variance4x8_ssse3,
588 &aom_highbd_masked_variance4x8_c, AOM_BITS_8),
589 make_tuple(&aom_highbd_masked_variance4x4_ssse3,
590 &aom_highbd_masked_variance4x4_c, AOM_BITS_8),
Geza Lore697bf5b2016-03-02 11:12:52 +0000591#if CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700592 make_tuple(&aom_highbd_10_masked_variance128x128_ssse3,
593 &aom_highbd_10_masked_variance128x128_c, AOM_BITS_10),
594 make_tuple(&aom_highbd_10_masked_variance128x64_ssse3,
595 &aom_highbd_10_masked_variance128x64_c, AOM_BITS_10),
596 make_tuple(&aom_highbd_10_masked_variance64x128_ssse3,
597 &aom_highbd_10_masked_variance64x128_c, AOM_BITS_10),
Geza Lore697bf5b2016-03-02 11:12:52 +0000598#endif // CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700599 make_tuple(&aom_highbd_10_masked_variance64x64_ssse3,
600 &aom_highbd_10_masked_variance64x64_c, AOM_BITS_10),
601 make_tuple(&aom_highbd_10_masked_variance64x32_ssse3,
602 &aom_highbd_10_masked_variance64x32_c, AOM_BITS_10),
603 make_tuple(&aom_highbd_10_masked_variance32x64_ssse3,
604 &aom_highbd_10_masked_variance32x64_c, AOM_BITS_10),
605 make_tuple(&aom_highbd_10_masked_variance32x32_ssse3,
606 &aom_highbd_10_masked_variance32x32_c, AOM_BITS_10),
607 make_tuple(&aom_highbd_10_masked_variance32x16_ssse3,
608 &aom_highbd_10_masked_variance32x16_c, AOM_BITS_10),
609 make_tuple(&aom_highbd_10_masked_variance16x32_ssse3,
610 &aom_highbd_10_masked_variance16x32_c, AOM_BITS_10),
611 make_tuple(&aom_highbd_10_masked_variance16x16_ssse3,
612 &aom_highbd_10_masked_variance16x16_c, AOM_BITS_10),
613 make_tuple(&aom_highbd_10_masked_variance16x8_ssse3,
614 &aom_highbd_10_masked_variance16x8_c, AOM_BITS_10),
615 make_tuple(&aom_highbd_10_masked_variance8x16_ssse3,
616 &aom_highbd_10_masked_variance8x16_c, AOM_BITS_10),
617 make_tuple(&aom_highbd_10_masked_variance8x8_ssse3,
618 &aom_highbd_10_masked_variance8x8_c, AOM_BITS_10),
619 make_tuple(&aom_highbd_10_masked_variance8x4_ssse3,
620 &aom_highbd_10_masked_variance8x4_c, AOM_BITS_10),
621 make_tuple(&aom_highbd_10_masked_variance4x8_ssse3,
622 &aom_highbd_10_masked_variance4x8_c, AOM_BITS_10),
623 make_tuple(&aom_highbd_10_masked_variance4x4_ssse3,
624 &aom_highbd_10_masked_variance4x4_c, AOM_BITS_10),
Geza Lore697bf5b2016-03-02 11:12:52 +0000625#if CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700626 make_tuple(&aom_highbd_12_masked_variance128x128_ssse3,
627 &aom_highbd_12_masked_variance128x128_c, AOM_BITS_12),
628 make_tuple(&aom_highbd_12_masked_variance128x64_ssse3,
629 &aom_highbd_12_masked_variance128x64_c, AOM_BITS_12),
630 make_tuple(&aom_highbd_12_masked_variance64x128_ssse3,
631 &aom_highbd_12_masked_variance64x128_c, AOM_BITS_12),
Geza Lore697bf5b2016-03-02 11:12:52 +0000632#endif // CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700633 make_tuple(&aom_highbd_12_masked_variance64x64_ssse3,
634 &aom_highbd_12_masked_variance64x64_c, AOM_BITS_12),
635 make_tuple(&aom_highbd_12_masked_variance64x32_ssse3,
636 &aom_highbd_12_masked_variance64x32_c, AOM_BITS_12),
637 make_tuple(&aom_highbd_12_masked_variance32x64_ssse3,
638 &aom_highbd_12_masked_variance32x64_c, AOM_BITS_12),
639 make_tuple(&aom_highbd_12_masked_variance32x32_ssse3,
640 &aom_highbd_12_masked_variance32x32_c, AOM_BITS_12),
641 make_tuple(&aom_highbd_12_masked_variance32x16_ssse3,
642 &aom_highbd_12_masked_variance32x16_c, AOM_BITS_12),
643 make_tuple(&aom_highbd_12_masked_variance16x32_ssse3,
644 &aom_highbd_12_masked_variance16x32_c, AOM_BITS_12),
645 make_tuple(&aom_highbd_12_masked_variance16x16_ssse3,
646 &aom_highbd_12_masked_variance16x16_c, AOM_BITS_12),
647 make_tuple(&aom_highbd_12_masked_variance16x8_ssse3,
648 &aom_highbd_12_masked_variance16x8_c, AOM_BITS_12),
649 make_tuple(&aom_highbd_12_masked_variance8x16_ssse3,
650 &aom_highbd_12_masked_variance8x16_c, AOM_BITS_12),
651 make_tuple(&aom_highbd_12_masked_variance8x8_ssse3,
652 &aom_highbd_12_masked_variance8x8_c, AOM_BITS_12),
653 make_tuple(&aom_highbd_12_masked_variance8x4_ssse3,
654 &aom_highbd_12_masked_variance8x4_c, AOM_BITS_12),
655 make_tuple(&aom_highbd_12_masked_variance4x8_ssse3,
656 &aom_highbd_12_masked_variance4x8_c, AOM_BITS_12),
657 make_tuple(&aom_highbd_12_masked_variance4x4_ssse3,
658 &aom_highbd_12_masked_variance4x4_c, AOM_BITS_12)));
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800659
660INSTANTIATE_TEST_CASE_P(
clang-format3a826f12016-08-11 17:46:05 -0700661 SSSE3_C_COMPARE, HighbdMaskedSubPixelVarianceTest,
662 ::testing::Values(
Geza Lore697bf5b2016-03-02 11:12:52 +0000663#if CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700664 make_tuple(&aom_highbd_masked_sub_pixel_variance128x128_ssse3,
665 &aom_highbd_masked_sub_pixel_variance128x128_c, AOM_BITS_8),
666 make_tuple(&aom_highbd_masked_sub_pixel_variance128x64_ssse3,
667 &aom_highbd_masked_sub_pixel_variance128x64_c, AOM_BITS_8),
668 make_tuple(&aom_highbd_masked_sub_pixel_variance64x128_ssse3,
669 &aom_highbd_masked_sub_pixel_variance64x128_c, AOM_BITS_8),
Geza Lore697bf5b2016-03-02 11:12:52 +0000670#endif // CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700671 make_tuple(&aom_highbd_masked_sub_pixel_variance64x64_ssse3,
672 &aom_highbd_masked_sub_pixel_variance64x64_c, AOM_BITS_8),
673 make_tuple(&aom_highbd_masked_sub_pixel_variance64x32_ssse3,
674 &aom_highbd_masked_sub_pixel_variance64x32_c, AOM_BITS_8),
675 make_tuple(&aom_highbd_masked_sub_pixel_variance32x64_ssse3,
676 &aom_highbd_masked_sub_pixel_variance32x64_c, AOM_BITS_8),
677 make_tuple(&aom_highbd_masked_sub_pixel_variance32x32_ssse3,
678 &aom_highbd_masked_sub_pixel_variance32x32_c, AOM_BITS_8),
679 make_tuple(&aom_highbd_masked_sub_pixel_variance32x16_ssse3,
680 &aom_highbd_masked_sub_pixel_variance32x16_c, AOM_BITS_8),
681 make_tuple(&aom_highbd_masked_sub_pixel_variance16x32_ssse3,
682 &aom_highbd_masked_sub_pixel_variance16x32_c, AOM_BITS_8),
683 make_tuple(&aom_highbd_masked_sub_pixel_variance16x16_ssse3,
684 &aom_highbd_masked_sub_pixel_variance16x16_c, AOM_BITS_8),
685 make_tuple(&aom_highbd_masked_sub_pixel_variance16x8_ssse3,
686 &aom_highbd_masked_sub_pixel_variance16x8_c, AOM_BITS_8),
687 make_tuple(&aom_highbd_masked_sub_pixel_variance8x16_ssse3,
688 &aom_highbd_masked_sub_pixel_variance8x16_c, AOM_BITS_8),
689 make_tuple(&aom_highbd_masked_sub_pixel_variance8x8_ssse3,
690 &aom_highbd_masked_sub_pixel_variance8x8_c, AOM_BITS_8),
691 make_tuple(&aom_highbd_masked_sub_pixel_variance8x4_ssse3,
692 &aom_highbd_masked_sub_pixel_variance8x4_c, AOM_BITS_8),
693 make_tuple(&aom_highbd_masked_sub_pixel_variance4x8_ssse3,
694 &aom_highbd_masked_sub_pixel_variance4x8_c, AOM_BITS_8),
695 make_tuple(&aom_highbd_masked_sub_pixel_variance4x4_ssse3,
696 &aom_highbd_masked_sub_pixel_variance4x4_c, AOM_BITS_8),
Geza Lore697bf5b2016-03-02 11:12:52 +0000697#if CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700698 make_tuple(&aom_highbd_10_masked_sub_pixel_variance128x128_ssse3,
699 &aom_highbd_10_masked_sub_pixel_variance128x128_c,
700 AOM_BITS_10),
701 make_tuple(&aom_highbd_10_masked_sub_pixel_variance128x64_ssse3,
702 &aom_highbd_10_masked_sub_pixel_variance128x64_c,
703 AOM_BITS_10),
704 make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x128_ssse3,
705 &aom_highbd_10_masked_sub_pixel_variance64x128_c,
706 AOM_BITS_10),
Geza Lore697bf5b2016-03-02 11:12:52 +0000707#endif // CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700708 make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x64_ssse3,
709 &aom_highbd_10_masked_sub_pixel_variance64x64_c,
710 AOM_BITS_10),
711 make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x32_ssse3,
712 &aom_highbd_10_masked_sub_pixel_variance64x32_c,
713 AOM_BITS_10),
714 make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x64_ssse3,
715 &aom_highbd_10_masked_sub_pixel_variance32x64_c,
716 AOM_BITS_10),
717 make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x32_ssse3,
718 &aom_highbd_10_masked_sub_pixel_variance32x32_c,
719 AOM_BITS_10),
720 make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x16_ssse3,
721 &aom_highbd_10_masked_sub_pixel_variance32x16_c,
722 AOM_BITS_10),
723 make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x32_ssse3,
724 &aom_highbd_10_masked_sub_pixel_variance16x32_c,
725 AOM_BITS_10),
726 make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x16_ssse3,
727 &aom_highbd_10_masked_sub_pixel_variance16x16_c,
728 AOM_BITS_10),
729 make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x8_ssse3,
730 &aom_highbd_10_masked_sub_pixel_variance16x8_c, AOM_BITS_10),
731 make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x16_ssse3,
732 &aom_highbd_10_masked_sub_pixel_variance8x16_c, AOM_BITS_10),
733 make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x8_ssse3,
734 &aom_highbd_10_masked_sub_pixel_variance8x8_c, AOM_BITS_10),
735 make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x4_ssse3,
736 &aom_highbd_10_masked_sub_pixel_variance8x4_c, AOM_BITS_10),
737 make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x8_ssse3,
738 &aom_highbd_10_masked_sub_pixel_variance4x8_c, AOM_BITS_10),
739 make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x4_ssse3,
740 &aom_highbd_10_masked_sub_pixel_variance4x4_c, AOM_BITS_10),
Geza Lore697bf5b2016-03-02 11:12:52 +0000741#if CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700742 make_tuple(&aom_highbd_12_masked_sub_pixel_variance128x128_ssse3,
743 &aom_highbd_12_masked_sub_pixel_variance128x128_c,
744 AOM_BITS_12),
745 make_tuple(&aom_highbd_12_masked_sub_pixel_variance128x64_ssse3,
746 &aom_highbd_12_masked_sub_pixel_variance128x64_c,
747 AOM_BITS_12),
748 make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x128_ssse3,
749 &aom_highbd_12_masked_sub_pixel_variance64x128_c,
750 AOM_BITS_12),
Geza Lore697bf5b2016-03-02 11:12:52 +0000751#endif // CONFIG_EXT_PARTITION
Yaowu Xuf883b422016-08-30 14:01:10 -0700752 make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x64_ssse3,
753 &aom_highbd_12_masked_sub_pixel_variance64x64_c,
754 AOM_BITS_12),
755 make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x32_ssse3,
756 &aom_highbd_12_masked_sub_pixel_variance64x32_c,
757 AOM_BITS_12),
758 make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x64_ssse3,
759 &aom_highbd_12_masked_sub_pixel_variance32x64_c,
760 AOM_BITS_12),
761 make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x32_ssse3,
762 &aom_highbd_12_masked_sub_pixel_variance32x32_c,
763 AOM_BITS_12),
764 make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x16_ssse3,
765 &aom_highbd_12_masked_sub_pixel_variance32x16_c,
766 AOM_BITS_12),
767 make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x32_ssse3,
768 &aom_highbd_12_masked_sub_pixel_variance16x32_c,
769 AOM_BITS_12),
770 make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x16_ssse3,
771 &aom_highbd_12_masked_sub_pixel_variance16x16_c,
772 AOM_BITS_12),
773 make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x8_ssse3,
774 &aom_highbd_12_masked_sub_pixel_variance16x8_c, AOM_BITS_12),
775 make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x16_ssse3,
776 &aom_highbd_12_masked_sub_pixel_variance8x16_c, AOM_BITS_12),
777 make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x8_ssse3,
778 &aom_highbd_12_masked_sub_pixel_variance8x8_c, AOM_BITS_12),
779 make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x4_ssse3,
780 &aom_highbd_12_masked_sub_pixel_variance8x4_c, AOM_BITS_12),
781 make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x8_ssse3,
782 &aom_highbd_12_masked_sub_pixel_variance4x8_c, AOM_BITS_12),
783 make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x4_ssse3,
784 &aom_highbd_12_masked_sub_pixel_variance4x4_c,
785 AOM_BITS_12)));
786#endif // CONFIG_AOM_HIGHBITDEPTH
Debargha Mukherjee1d69cee2016-02-29 16:08:07 -0800787
788#endif // HAVE_SSSE3
789} // namespace