1 /*
2 * Copyright (c) 2014 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 <string>
12
13 #include "gtest/gtest.h"
14
15 #include "./vpx_config.h"
16 #include "./vpx_dsp_rtcd.h"
17 #include "test/acm_random.h"
18 #include "test/clear_system_state.h"
19 #include "test/register_state_check.h"
20 #include "test/util.h"
21 #include "vp9/common/vp9_blockd.h"
22 #include "vp9/common/vp9_pred_common.h"
23 #include "vpx_mem/vpx_mem.h"
24
25 namespace {
26
27 using libvpx_test::ACMRandom;
28
29 const int count_test_block = 100000;
30
31 typedef void (*IntraPredFunc)(uint8_t *dst, ptrdiff_t stride,
32 const uint8_t *above, const uint8_t *left);
33
34 struct IntraPredParam {
IntraPredParam__anon5fd91a740111::IntraPredParam35 IntraPredParam(IntraPredFunc pred = nullptr, IntraPredFunc ref = nullptr,
36 int block_size_value = 0, int bit_depth_value = 0)
37 : pred_fn(pred), ref_fn(ref), block_size(block_size_value),
38 bit_depth(bit_depth_value) {}
39
40 IntraPredFunc pred_fn;
41 IntraPredFunc ref_fn;
42 int block_size;
43 int bit_depth;
44 };
45
46 template <typename Pixel, typename PredParam>
47 class IntraPredTest : public ::testing::TestWithParam<PredParam> {
48 public:
RunTest(Pixel * left_col,Pixel * above_data,Pixel * dst,Pixel * ref_dst)49 void RunTest(Pixel *left_col, Pixel *above_data, Pixel *dst, Pixel *ref_dst) {
50 ACMRandom rnd(ACMRandom::DeterministicSeed());
51 const int block_size = params_.block_size;
52 above_row_ = above_data + 16;
53 left_col_ = left_col;
54 dst_ = dst;
55 ref_dst_ = ref_dst;
56 int error_count = 0;
57 for (int i = 0; i < count_test_block; ++i) {
58 // TODO(webm:1797): Some of the optimised predictor implementations rely
59 // on the trailing half of the above_row_ being a copy of the final
60 // element, however relying on this in some cases can cause the MD5 tests
61 // to fail. We have fixed all of these cases for Neon, so fill the whole
62 // of above_row_ randomly.
63 #if HAVE_NEON
64 // Fill edges with random data, try first with saturated values.
65 for (int x = -1; x < 2 * block_size; x++) {
66 if (i == 0) {
67 above_row_[x] = mask_;
68 } else {
69 above_row_[x] = rnd.Rand16() & mask_;
70 }
71 }
72 #else
73 // Fill edges with random data, try first with saturated values.
74 for (int x = -1; x < block_size; x++) {
75 if (i == 0) {
76 above_row_[x] = mask_;
77 } else {
78 above_row_[x] = rnd.Rand16() & mask_;
79 }
80 }
81 for (int x = block_size; x < 2 * block_size; x++) {
82 above_row_[x] = above_row_[block_size - 1];
83 }
84 #endif
85 for (int y = 0; y < block_size; y++) {
86 if (i == 0) {
87 left_col_[y] = mask_;
88 } else {
89 left_col_[y] = rnd.Rand16() & mask_;
90 }
91 }
92 Predict();
93 CheckPrediction(i, &error_count);
94 }
95 ASSERT_EQ(0, error_count);
96 }
97
98 protected:
SetUp()99 void SetUp() override {
100 params_ = this->GetParam();
101 stride_ = params_.block_size * 3;
102 mask_ = (1 << params_.bit_depth) - 1;
103 }
104
105 void Predict();
106
CheckPrediction(int test_case_number,int * error_count) const107 void CheckPrediction(int test_case_number, int *error_count) const {
108 // For each pixel ensure that the calculated value is the same as reference.
109 const int block_size = params_.block_size;
110 for (int y = 0; y < block_size; y++) {
111 for (int x = 0; x < block_size; x++) {
112 *error_count += ref_dst_[x + y * stride_] != dst_[x + y * stride_];
113 if (*error_count == 1) {
114 ASSERT_EQ(ref_dst_[x + y * stride_], dst_[x + y * stride_])
115 << " Failed on Test Case Number " << test_case_number;
116 }
117 }
118 }
119 }
120
121 Pixel *above_row_;
122 Pixel *left_col_;
123 Pixel *dst_;
124 Pixel *ref_dst_;
125 ptrdiff_t stride_;
126 int mask_;
127
128 PredParam params_;
129 };
130
131 template <>
Predict()132 void IntraPredTest<uint8_t, IntraPredParam>::Predict() {
133 params_.ref_fn(ref_dst_, stride_, above_row_, left_col_);
134 ASM_REGISTER_STATE_CHECK(
135 params_.pred_fn(dst_, stride_, above_row_, left_col_));
136 }
137
138 typedef IntraPredTest<uint8_t, IntraPredParam> VP9IntraPredTest;
139
TEST_P(VP9IntraPredTest,IntraPredTests)140 TEST_P(VP9IntraPredTest, IntraPredTests) {
141 // max block size is 32
142 DECLARE_ALIGNED(16, uint8_t, left_col[2 * 32]);
143 DECLARE_ALIGNED(16, uint8_t, above_data[2 * 32 + 32]);
144 DECLARE_ALIGNED(16, uint8_t, dst[3 * 32 * 32]);
145 DECLARE_ALIGNED(16, uint8_t, ref_dst[3 * 32 * 32]);
146 RunTest(left_col, above_data, dst, ref_dst);
147 }
148
149 // Instantiate a token test to avoid -Wuninitialized warnings when none of the
150 // other tests are enabled.
151 INSTANTIATE_TEST_SUITE_P(
152 C, VP9IntraPredTest,
153 ::testing::Values(IntraPredParam(&vpx_d45_predictor_4x4_c,
154 &vpx_d45_predictor_4x4_c, 4, 8)));
155 #if HAVE_SSE2
156 INSTANTIATE_TEST_SUITE_P(
157 SSE2, VP9IntraPredTest,
158 ::testing::Values(
159 IntraPredParam(&vpx_d45_predictor_4x4_sse2, &vpx_d45_predictor_4x4_c, 4,
160 8),
161 IntraPredParam(&vpx_d45_predictor_8x8_sse2, &vpx_d45_predictor_8x8_c, 8,
162 8),
163 IntraPredParam(&vpx_d207_predictor_4x4_sse2, &vpx_d207_predictor_4x4_c,
164 4, 8),
165 IntraPredParam(&vpx_dc_128_predictor_4x4_sse2,
166 &vpx_dc_128_predictor_4x4_c, 4, 8),
167 IntraPredParam(&vpx_dc_128_predictor_8x8_sse2,
168 &vpx_dc_128_predictor_8x8_c, 8, 8),
169 IntraPredParam(&vpx_dc_128_predictor_16x16_sse2,
170 &vpx_dc_128_predictor_16x16_c, 16, 8),
171 IntraPredParam(&vpx_dc_128_predictor_32x32_sse2,
172 &vpx_dc_128_predictor_32x32_c, 32, 8),
173 IntraPredParam(&vpx_dc_left_predictor_4x4_sse2,
174 &vpx_dc_left_predictor_4x4_c, 4, 8),
175 IntraPredParam(&vpx_dc_left_predictor_8x8_sse2,
176 &vpx_dc_left_predictor_8x8_c, 8, 8),
177 IntraPredParam(&vpx_dc_left_predictor_16x16_sse2,
178 &vpx_dc_left_predictor_16x16_c, 16, 8),
179 IntraPredParam(&vpx_dc_left_predictor_32x32_sse2,
180 &vpx_dc_left_predictor_32x32_c, 32, 8),
181 IntraPredParam(&vpx_dc_predictor_4x4_sse2, &vpx_dc_predictor_4x4_c, 4,
182 8),
183 IntraPredParam(&vpx_dc_predictor_8x8_sse2, &vpx_dc_predictor_8x8_c, 8,
184 8),
185 IntraPredParam(&vpx_dc_predictor_16x16_sse2, &vpx_dc_predictor_16x16_c,
186 16, 8),
187 IntraPredParam(&vpx_dc_predictor_32x32_sse2, &vpx_dc_predictor_32x32_c,
188 32, 8),
189 IntraPredParam(&vpx_dc_top_predictor_4x4_sse2,
190 &vpx_dc_top_predictor_4x4_c, 4, 8),
191 IntraPredParam(&vpx_dc_top_predictor_8x8_sse2,
192 &vpx_dc_top_predictor_8x8_c, 8, 8),
193 IntraPredParam(&vpx_dc_top_predictor_16x16_sse2,
194 &vpx_dc_top_predictor_16x16_c, 16, 8),
195 IntraPredParam(&vpx_dc_top_predictor_32x32_sse2,
196 &vpx_dc_top_predictor_32x32_c, 32, 8),
197 IntraPredParam(&vpx_h_predictor_4x4_sse2, &vpx_h_predictor_4x4_c, 4, 8),
198 IntraPredParam(&vpx_h_predictor_8x8_sse2, &vpx_h_predictor_8x8_c, 8, 8),
199 IntraPredParam(&vpx_h_predictor_16x16_sse2, &vpx_h_predictor_16x16_c,
200 16, 8),
201 IntraPredParam(&vpx_h_predictor_32x32_sse2, &vpx_h_predictor_32x32_c,
202 32, 8),
203 IntraPredParam(&vpx_tm_predictor_4x4_sse2, &vpx_tm_predictor_4x4_c, 4,
204 8),
205 IntraPredParam(&vpx_tm_predictor_8x8_sse2, &vpx_tm_predictor_8x8_c, 8,
206 8),
207 IntraPredParam(&vpx_tm_predictor_16x16_sse2, &vpx_tm_predictor_16x16_c,
208 16, 8),
209 IntraPredParam(&vpx_tm_predictor_32x32_sse2, &vpx_tm_predictor_32x32_c,
210 32, 8),
211 IntraPredParam(&vpx_v_predictor_4x4_sse2, &vpx_v_predictor_4x4_c, 4, 8),
212 IntraPredParam(&vpx_v_predictor_8x8_sse2, &vpx_v_predictor_8x8_c, 8, 8),
213 IntraPredParam(&vpx_v_predictor_16x16_sse2, &vpx_v_predictor_16x16_c,
214 16, 8),
215 IntraPredParam(&vpx_v_predictor_32x32_sse2, &vpx_v_predictor_32x32_c,
216 32, 8)));
217 #endif // HAVE_SSE2
218
219 #if HAVE_SSSE3
220 INSTANTIATE_TEST_SUITE_P(
221 SSSE3, VP9IntraPredTest,
222 ::testing::Values(IntraPredParam(&vpx_d45_predictor_16x16_ssse3,
223 &vpx_d45_predictor_16x16_c, 16, 8),
224 IntraPredParam(&vpx_d45_predictor_32x32_ssse3,
225 &vpx_d45_predictor_32x32_c, 32, 8),
226 IntraPredParam(&vpx_d63_predictor_4x4_ssse3,
227 &vpx_d63_predictor_4x4_c, 4, 8),
228 IntraPredParam(&vpx_d63_predictor_8x8_ssse3,
229 &vpx_d63_predictor_8x8_c, 8, 8),
230 IntraPredParam(&vpx_d63_predictor_16x16_ssse3,
231 &vpx_d63_predictor_16x16_c, 16, 8),
232 IntraPredParam(&vpx_d63_predictor_32x32_ssse3,
233 &vpx_d63_predictor_32x32_c, 32, 8),
234 IntraPredParam(&vpx_d153_predictor_4x4_ssse3,
235 &vpx_d153_predictor_4x4_c, 4, 8),
236 IntraPredParam(&vpx_d153_predictor_8x8_ssse3,
237 &vpx_d153_predictor_8x8_c, 8, 8),
238 IntraPredParam(&vpx_d153_predictor_16x16_ssse3,
239 &vpx_d153_predictor_16x16_c, 16, 8),
240 IntraPredParam(&vpx_d153_predictor_32x32_ssse3,
241 &vpx_d153_predictor_32x32_c, 32, 8),
242 IntraPredParam(&vpx_d207_predictor_8x8_ssse3,
243 &vpx_d207_predictor_8x8_c, 8, 8),
244 IntraPredParam(&vpx_d207_predictor_16x16_ssse3,
245 &vpx_d207_predictor_16x16_c, 16, 8),
246 IntraPredParam(&vpx_d207_predictor_32x32_ssse3,
247 &vpx_d207_predictor_32x32_c, 32, 8)));
248 #endif // HAVE_SSSE3
249
250 #if HAVE_NEON
251 INSTANTIATE_TEST_SUITE_P(
252 NEON, VP9IntraPredTest,
253 ::testing::Values(
254 IntraPredParam(&vpx_d45_predictor_4x4_neon, &vpx_d45_predictor_4x4_c, 4,
255 8),
256 IntraPredParam(&vpx_d45_predictor_8x8_neon, &vpx_d45_predictor_8x8_c, 8,
257 8),
258 IntraPredParam(&vpx_d45_predictor_16x16_neon,
259 &vpx_d45_predictor_16x16_c, 16, 8),
260 IntraPredParam(&vpx_d45_predictor_32x32_neon,
261 &vpx_d45_predictor_32x32_c, 32, 8),
262 IntraPredParam(&vpx_d63_predictor_4x4_neon, &vpx_d63_predictor_4x4_c, 4,
263 8),
264 IntraPredParam(&vpx_d63_predictor_8x8_neon, &vpx_d63_predictor_8x8_c, 8,
265 8),
266 IntraPredParam(&vpx_d63_predictor_16x16_neon,
267 &vpx_d63_predictor_16x16_c, 16, 8),
268 IntraPredParam(&vpx_d63_predictor_32x32_neon,
269 &vpx_d63_predictor_32x32_c, 32, 8),
270 IntraPredParam(&vpx_d117_predictor_4x4_neon, &vpx_d117_predictor_4x4_c,
271 4, 8),
272 IntraPredParam(&vpx_d117_predictor_8x8_neon, &vpx_d117_predictor_8x8_c,
273 8, 8),
274 IntraPredParam(&vpx_d117_predictor_16x16_neon,
275 &vpx_d117_predictor_16x16_c, 16, 8),
276 IntraPredParam(&vpx_d117_predictor_32x32_neon,
277 &vpx_d117_predictor_32x32_c, 32, 8),
278 IntraPredParam(&vpx_d135_predictor_4x4_neon, &vpx_d135_predictor_4x4_c,
279 4, 8),
280 IntraPredParam(&vpx_d135_predictor_8x8_neon, &vpx_d135_predictor_8x8_c,
281 8, 8),
282 IntraPredParam(&vpx_d135_predictor_16x16_neon,
283 &vpx_d135_predictor_16x16_c, 16, 8),
284 IntraPredParam(&vpx_d135_predictor_32x32_neon,
285 &vpx_d135_predictor_32x32_c, 32, 8),
286 IntraPredParam(&vpx_d153_predictor_4x4_neon, &vpx_d153_predictor_4x4_c,
287 4, 8),
288 IntraPredParam(&vpx_d153_predictor_8x8_neon, &vpx_d153_predictor_8x8_c,
289 8, 8),
290 IntraPredParam(&vpx_d153_predictor_16x16_neon,
291 &vpx_d153_predictor_16x16_c, 16, 8),
292 IntraPredParam(&vpx_d153_predictor_32x32_neon,
293 &vpx_d153_predictor_32x32_c, 32, 8),
294 IntraPredParam(&vpx_d207_predictor_4x4_neon, &vpx_d207_predictor_4x4_c,
295 4, 8),
296 IntraPredParam(&vpx_d207_predictor_8x8_neon, &vpx_d207_predictor_8x8_c,
297 8, 8),
298 IntraPredParam(&vpx_d207_predictor_16x16_neon,
299 &vpx_d207_predictor_16x16_c, 16, 8),
300 IntraPredParam(&vpx_d207_predictor_32x32_neon,
301 &vpx_d207_predictor_32x32_c, 32, 8),
302 IntraPredParam(&vpx_dc_128_predictor_4x4_neon,
303 &vpx_dc_128_predictor_4x4_c, 4, 8),
304 IntraPredParam(&vpx_dc_128_predictor_8x8_neon,
305 &vpx_dc_128_predictor_8x8_c, 8, 8),
306 IntraPredParam(&vpx_dc_128_predictor_16x16_neon,
307 &vpx_dc_128_predictor_16x16_c, 16, 8),
308 IntraPredParam(&vpx_dc_128_predictor_32x32_neon,
309 &vpx_dc_128_predictor_32x32_c, 32, 8),
310 IntraPredParam(&vpx_dc_left_predictor_4x4_neon,
311 &vpx_dc_left_predictor_4x4_c, 4, 8),
312 IntraPredParam(&vpx_dc_left_predictor_8x8_neon,
313 &vpx_dc_left_predictor_8x8_c, 8, 8),
314 IntraPredParam(&vpx_dc_left_predictor_16x16_neon,
315 &vpx_dc_left_predictor_16x16_c, 16, 8),
316 IntraPredParam(&vpx_dc_left_predictor_32x32_neon,
317 &vpx_dc_left_predictor_32x32_c, 32, 8),
318 IntraPredParam(&vpx_dc_predictor_4x4_neon, &vpx_dc_predictor_4x4_c, 4,
319 8),
320 IntraPredParam(&vpx_dc_predictor_8x8_neon, &vpx_dc_predictor_8x8_c, 8,
321 8),
322 IntraPredParam(&vpx_dc_predictor_16x16_neon, &vpx_dc_predictor_16x16_c,
323 16, 8),
324 IntraPredParam(&vpx_dc_predictor_32x32_neon, &vpx_dc_predictor_32x32_c,
325 32, 8),
326 IntraPredParam(&vpx_dc_top_predictor_4x4_neon,
327 &vpx_dc_top_predictor_4x4_c, 4, 8),
328 IntraPredParam(&vpx_dc_top_predictor_8x8_neon,
329 &vpx_dc_top_predictor_8x8_c, 8, 8),
330 IntraPredParam(&vpx_dc_top_predictor_16x16_neon,
331 &vpx_dc_top_predictor_16x16_c, 16, 8),
332 IntraPredParam(&vpx_dc_top_predictor_32x32_neon,
333 &vpx_dc_top_predictor_32x32_c, 32, 8),
334 IntraPredParam(&vpx_h_predictor_4x4_neon, &vpx_h_predictor_4x4_c, 4, 8),
335 IntraPredParam(&vpx_h_predictor_8x8_neon, &vpx_h_predictor_8x8_c, 8, 8),
336 IntraPredParam(&vpx_h_predictor_16x16_neon, &vpx_h_predictor_16x16_c,
337 16, 8),
338 IntraPredParam(&vpx_h_predictor_32x32_neon, &vpx_h_predictor_32x32_c,
339 32, 8),
340 IntraPredParam(&vpx_tm_predictor_4x4_neon, &vpx_tm_predictor_4x4_c, 4,
341 8),
342 IntraPredParam(&vpx_tm_predictor_8x8_neon, &vpx_tm_predictor_8x8_c, 8,
343 8),
344 IntraPredParam(&vpx_tm_predictor_16x16_neon, &vpx_tm_predictor_16x16_c,
345 16, 8),
346 IntraPredParam(&vpx_tm_predictor_32x32_neon, &vpx_tm_predictor_32x32_c,
347 32, 8),
348 IntraPredParam(&vpx_v_predictor_4x4_neon, &vpx_v_predictor_4x4_c, 4, 8),
349 IntraPredParam(&vpx_v_predictor_8x8_neon, &vpx_v_predictor_8x8_c, 8, 8),
350 IntraPredParam(&vpx_v_predictor_16x16_neon, &vpx_v_predictor_16x16_c,
351 16, 8),
352 IntraPredParam(&vpx_v_predictor_32x32_neon, &vpx_v_predictor_32x32_c,
353 32, 8)));
354 #endif // HAVE_NEON
355
356 #if HAVE_DSPR2
357 INSTANTIATE_TEST_SUITE_P(
358 DSPR2, VP9IntraPredTest,
359 ::testing::Values(IntraPredParam(&vpx_dc_predictor_4x4_dspr2,
360 &vpx_dc_predictor_4x4_c, 4, 8),
361 IntraPredParam(&vpx_dc_predictor_8x8_dspr2,
362 &vpx_dc_predictor_8x8_c, 8, 8),
363 IntraPredParam(&vpx_dc_predictor_16x16_dspr2,
364 &vpx_dc_predictor_16x16_c, 16, 8),
365 IntraPredParam(&vpx_h_predictor_4x4_dspr2,
366 &vpx_h_predictor_4x4_c, 4, 8),
367 IntraPredParam(&vpx_h_predictor_8x8_dspr2,
368 &vpx_h_predictor_8x8_c, 8, 8),
369 IntraPredParam(&vpx_h_predictor_16x16_dspr2,
370 &vpx_h_predictor_16x16_c, 16, 8),
371 IntraPredParam(&vpx_tm_predictor_4x4_dspr2,
372 &vpx_tm_predictor_4x4_c, 4, 8),
373 IntraPredParam(&vpx_tm_predictor_8x8_dspr2,
374 &vpx_tm_predictor_8x8_c, 8, 8)));
375 #endif // HAVE_DSPR2
376
377 #if HAVE_MSA
378 INSTANTIATE_TEST_SUITE_P(
379 MSA, VP9IntraPredTest,
380 ::testing::Values(
381 IntraPredParam(&vpx_dc_128_predictor_4x4_msa,
382 &vpx_dc_128_predictor_4x4_c, 4, 8),
383 IntraPredParam(&vpx_dc_128_predictor_8x8_msa,
384 &vpx_dc_128_predictor_8x8_c, 8, 8),
385 IntraPredParam(&vpx_dc_128_predictor_16x16_msa,
386 &vpx_dc_128_predictor_16x16_c, 16, 8),
387 IntraPredParam(&vpx_dc_128_predictor_32x32_msa,
388 &vpx_dc_128_predictor_32x32_c, 32, 8),
389 IntraPredParam(&vpx_dc_left_predictor_4x4_msa,
390 &vpx_dc_left_predictor_4x4_c, 4, 8),
391 IntraPredParam(&vpx_dc_left_predictor_8x8_msa,
392 &vpx_dc_left_predictor_8x8_c, 8, 8),
393 IntraPredParam(&vpx_dc_left_predictor_16x16_msa,
394 &vpx_dc_left_predictor_16x16_c, 16, 8),
395 IntraPredParam(&vpx_dc_left_predictor_32x32_msa,
396 &vpx_dc_left_predictor_32x32_c, 32, 8),
397 IntraPredParam(&vpx_dc_predictor_4x4_msa, &vpx_dc_predictor_4x4_c, 4,
398 8),
399 IntraPredParam(&vpx_dc_predictor_8x8_msa, &vpx_dc_predictor_8x8_c, 8,
400 8),
401 IntraPredParam(&vpx_dc_predictor_16x16_msa, &vpx_dc_predictor_16x16_c,
402 16, 8),
403 IntraPredParam(&vpx_dc_predictor_32x32_msa, &vpx_dc_predictor_32x32_c,
404 32, 8),
405 IntraPredParam(&vpx_dc_top_predictor_4x4_msa,
406 &vpx_dc_top_predictor_4x4_c, 4, 8),
407 IntraPredParam(&vpx_dc_top_predictor_8x8_msa,
408 &vpx_dc_top_predictor_8x8_c, 8, 8),
409 IntraPredParam(&vpx_dc_top_predictor_16x16_msa,
410 &vpx_dc_top_predictor_16x16_c, 16, 8),
411 IntraPredParam(&vpx_dc_top_predictor_32x32_msa,
412 &vpx_dc_top_predictor_32x32_c, 32, 8),
413 IntraPredParam(&vpx_h_predictor_4x4_msa, &vpx_h_predictor_4x4_c, 4, 8),
414 IntraPredParam(&vpx_h_predictor_8x8_msa, &vpx_h_predictor_8x8_c, 8, 8),
415 IntraPredParam(&vpx_h_predictor_16x16_msa, &vpx_h_predictor_16x16_c, 16,
416 8),
417 IntraPredParam(&vpx_h_predictor_32x32_msa, &vpx_h_predictor_32x32_c, 32,
418 8),
419 IntraPredParam(&vpx_tm_predictor_4x4_msa, &vpx_tm_predictor_4x4_c, 4,
420 8),
421 IntraPredParam(&vpx_tm_predictor_8x8_msa, &vpx_tm_predictor_8x8_c, 8,
422 8),
423 IntraPredParam(&vpx_tm_predictor_16x16_msa, &vpx_tm_predictor_16x16_c,
424 16, 8),
425 IntraPredParam(&vpx_tm_predictor_32x32_msa, &vpx_tm_predictor_32x32_c,
426 32, 8),
427 IntraPredParam(&vpx_v_predictor_4x4_msa, &vpx_v_predictor_4x4_c, 4, 8),
428 IntraPredParam(&vpx_v_predictor_8x8_msa, &vpx_v_predictor_8x8_c, 8, 8),
429 IntraPredParam(&vpx_v_predictor_16x16_msa, &vpx_v_predictor_16x16_c, 16,
430 8),
431 IntraPredParam(&vpx_v_predictor_32x32_msa, &vpx_v_predictor_32x32_c, 32,
432 8)));
433 #endif // HAVE_MSA
434
435 // TODO(crbug.com/webm/1522): Fix test failures.
436 #if 0
437 IntraPredParam(&vpx_d45_predictor_8x8_vsx, &vpx_d45_predictor_8x8_c, 8,
438 8),
439 IntraPredParam(&vpx_d63_predictor_8x8_vsx, &vpx_d63_predictor_8x8_c, 8,
440 8),
441 IntraPredParam(&vpx_dc_predictor_8x8_vsx, &vpx_dc_predictor_8x8_c, 8,
442 8),
443 IntraPredParam(&vpx_h_predictor_4x4_vsx, &vpx_h_predictor_4x4_c, 4, 8),
444 IntraPredParam(&vpx_h_predictor_8x8_vsx, &vpx_h_predictor_8x8_c, 8, 8),
445 IntraPredParam(&vpx_tm_predictor_4x4_vsx, &vpx_tm_predictor_4x4_c, 4,
446 8),
447 IntraPredParam(&vpx_tm_predictor_8x8_vsx, &vpx_tm_predictor_8x8_c, 8,
448 8),
449 #endif
450
451 #if HAVE_VSX
452 INSTANTIATE_TEST_SUITE_P(
453 VSX, VP9IntraPredTest,
454 ::testing::Values(IntraPredParam(&vpx_d45_predictor_16x16_vsx,
455 &vpx_d45_predictor_16x16_c, 16, 8),
456 IntraPredParam(&vpx_d45_predictor_32x32_vsx,
457 &vpx_d45_predictor_32x32_c, 32, 8),
458 IntraPredParam(&vpx_d63_predictor_16x16_vsx,
459 &vpx_d63_predictor_16x16_c, 16, 8),
460 IntraPredParam(&vpx_d63_predictor_32x32_vsx,
461 &vpx_d63_predictor_32x32_c, 32, 8),
462 IntraPredParam(&vpx_dc_128_predictor_16x16_vsx,
463 &vpx_dc_128_predictor_16x16_c, 16, 8),
464 IntraPredParam(&vpx_dc_128_predictor_32x32_vsx,
465 &vpx_dc_128_predictor_32x32_c, 32, 8),
466 IntraPredParam(&vpx_dc_left_predictor_16x16_vsx,
467 &vpx_dc_left_predictor_16x16_c, 16, 8),
468 IntraPredParam(&vpx_dc_left_predictor_32x32_vsx,
469 &vpx_dc_left_predictor_32x32_c, 32, 8),
470 IntraPredParam(&vpx_dc_predictor_16x16_vsx,
471 &vpx_dc_predictor_16x16_c, 16, 8),
472 IntraPredParam(&vpx_dc_predictor_32x32_vsx,
473 &vpx_dc_predictor_32x32_c, 32, 8),
474 IntraPredParam(&vpx_dc_top_predictor_16x16_vsx,
475 &vpx_dc_top_predictor_16x16_c, 16, 8),
476 IntraPredParam(&vpx_dc_top_predictor_32x32_vsx,
477 &vpx_dc_top_predictor_32x32_c, 32, 8),
478 IntraPredParam(&vpx_h_predictor_16x16_vsx,
479 &vpx_h_predictor_16x16_c, 16, 8),
480 IntraPredParam(&vpx_h_predictor_32x32_vsx,
481 &vpx_h_predictor_32x32_c, 32, 8),
482 IntraPredParam(&vpx_tm_predictor_16x16_vsx,
483 &vpx_tm_predictor_16x16_c, 16, 8),
484 IntraPredParam(&vpx_tm_predictor_32x32_vsx,
485 &vpx_tm_predictor_32x32_c, 32, 8),
486 IntraPredParam(&vpx_v_predictor_16x16_vsx,
487 &vpx_v_predictor_16x16_c, 16, 8),
488 IntraPredParam(&vpx_v_predictor_32x32_vsx,
489 &vpx_v_predictor_32x32_c, 32, 8)));
490 #endif // HAVE_VSX
491
492 #if HAVE_LSX
493 INSTANTIATE_TEST_SUITE_P(
494 LSX, VP9IntraPredTest,
495 ::testing::Values(IntraPredParam(&vpx_dc_predictor_8x8_lsx,
496 &vpx_dc_predictor_8x8_c, 8, 8),
497 IntraPredParam(&vpx_dc_predictor_16x16_lsx,
498 &vpx_dc_predictor_16x16_c, 16, 8)));
499 #endif // HAVE_LSX
500
501 #if CONFIG_VP9_HIGHBITDEPTH
502 typedef void (*HighbdIntraPred)(uint16_t *dst, ptrdiff_t stride,
503 const uint16_t *above, const uint16_t *left,
504 int bps);
505 struct HighbdIntraPredParam {
HighbdIntraPredParam__anon5fd91a740111::HighbdIntraPredParam506 HighbdIntraPredParam(HighbdIntraPred pred = nullptr,
507 HighbdIntraPred ref = nullptr, int block_size_value = 0,
508 int bit_depth_value = 0)
509 : pred_fn(pred), ref_fn(ref), block_size(block_size_value),
510 bit_depth(bit_depth_value) {}
511
512 HighbdIntraPred pred_fn;
513 HighbdIntraPred ref_fn;
514 int block_size;
515 int bit_depth;
516 };
517
518 #if HAVE_SSSE3 || HAVE_NEON || HAVE_SSE2
519 template <>
Predict()520 void IntraPredTest<uint16_t, HighbdIntraPredParam>::Predict() {
521 const int bit_depth = params_.bit_depth;
522 params_.ref_fn(ref_dst_, stride_, above_row_, left_col_, bit_depth);
523 ASM_REGISTER_STATE_CHECK(
524 params_.pred_fn(dst_, stride_, above_row_, left_col_, bit_depth));
525 }
526
527 typedef IntraPredTest<uint16_t, HighbdIntraPredParam> VP9HighbdIntraPredTest;
528 GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(VP9HighbdIntraPredTest);
529
TEST_P(VP9HighbdIntraPredTest,HighbdIntraPredTests)530 TEST_P(VP9HighbdIntraPredTest, HighbdIntraPredTests) {
531 // max block size is 32
532 DECLARE_ALIGNED(16, uint16_t, left_col[2 * 32]);
533 DECLARE_ALIGNED(16, uint16_t, above_data[2 * 32 + 32]);
534 DECLARE_ALIGNED(16, uint16_t, dst[3 * 32 * 32]);
535 DECLARE_ALIGNED(16, uint16_t, ref_dst[3 * 32 * 32]);
536 RunTest(left_col, above_data, dst, ref_dst);
537 }
538 #endif
539
540 #if HAVE_SSSE3
541 INSTANTIATE_TEST_SUITE_P(
542 SSSE3_TO_C_8, VP9HighbdIntraPredTest,
543 ::testing::Values(
544 HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_ssse3,
545 &vpx_highbd_d45_predictor_4x4_c, 4, 8),
546 HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_ssse3,
547 &vpx_highbd_d45_predictor_8x8_c, 8, 8),
548 HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_ssse3,
549 &vpx_highbd_d45_predictor_16x16_c, 16, 8),
550 HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_ssse3,
551 &vpx_highbd_d45_predictor_32x32_c, 32, 8),
552 HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_ssse3,
553 &vpx_highbd_d63_predictor_8x8_c, 8, 8),
554 HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_ssse3,
555 &vpx_highbd_d63_predictor_16x16_c, 16, 8),
556 HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_c,
557 &vpx_highbd_d63_predictor_32x32_ssse3, 32, 8),
558 HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_ssse3,
559 &vpx_highbd_d117_predictor_8x8_c, 8, 8),
560 HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_ssse3,
561 &vpx_highbd_d117_predictor_16x16_c, 16, 8),
562 HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_c,
563 &vpx_highbd_d117_predictor_32x32_ssse3, 32, 8),
564 HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_ssse3,
565 &vpx_highbd_d135_predictor_8x8_c, 8, 8),
566 HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_ssse3,
567 &vpx_highbd_d135_predictor_16x16_c, 16, 8),
568 HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_ssse3,
569 &vpx_highbd_d135_predictor_32x32_c, 32, 8),
570 HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_ssse3,
571 &vpx_highbd_d153_predictor_8x8_c, 8, 8),
572 HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_ssse3,
573 &vpx_highbd_d153_predictor_16x16_c, 16, 8),
574 HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_ssse3,
575 &vpx_highbd_d153_predictor_32x32_c, 32, 8),
576 HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_ssse3,
577 &vpx_highbd_d207_predictor_8x8_c, 8, 8),
578 HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_ssse3,
579 &vpx_highbd_d207_predictor_16x16_c, 16, 8),
580 HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_ssse3,
581 &vpx_highbd_d207_predictor_32x32_c, 32, 8)));
582
583 INSTANTIATE_TEST_SUITE_P(
584 SSSE3_TO_C_10, VP9HighbdIntraPredTest,
585 ::testing::Values(
586 HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_ssse3,
587 &vpx_highbd_d45_predictor_4x4_c, 4, 10),
588 HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_ssse3,
589 &vpx_highbd_d45_predictor_8x8_c, 8, 10),
590 HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_ssse3,
591 &vpx_highbd_d45_predictor_16x16_c, 16, 10),
592 HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_ssse3,
593 &vpx_highbd_d45_predictor_32x32_c, 32, 10),
594 HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_ssse3,
595 &vpx_highbd_d63_predictor_8x8_c, 8, 10),
596 HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_ssse3,
597 &vpx_highbd_d63_predictor_16x16_c, 16, 10),
598 HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_c,
599 &vpx_highbd_d63_predictor_32x32_ssse3, 32, 10),
600 HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_ssse3,
601 &vpx_highbd_d117_predictor_8x8_c, 8, 10),
602 HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_ssse3,
603 &vpx_highbd_d117_predictor_16x16_c, 16, 10),
604 HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_c,
605 &vpx_highbd_d117_predictor_32x32_ssse3, 32, 10),
606 HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_ssse3,
607 &vpx_highbd_d135_predictor_8x8_c, 8, 10),
608 HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_ssse3,
609 &vpx_highbd_d135_predictor_16x16_c, 16, 10),
610 HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_ssse3,
611 &vpx_highbd_d135_predictor_32x32_c, 32, 10),
612 HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_ssse3,
613 &vpx_highbd_d153_predictor_8x8_c, 8, 10),
614 HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_ssse3,
615 &vpx_highbd_d153_predictor_16x16_c, 16, 10),
616 HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_ssse3,
617 &vpx_highbd_d153_predictor_32x32_c, 32, 10),
618 HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_ssse3,
619 &vpx_highbd_d207_predictor_8x8_c, 8, 10),
620 HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_ssse3,
621 &vpx_highbd_d207_predictor_16x16_c, 16, 10),
622 HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_ssse3,
623 &vpx_highbd_d207_predictor_32x32_c, 32, 10)));
624
625 INSTANTIATE_TEST_SUITE_P(
626 SSSE3_TO_C_12, VP9HighbdIntraPredTest,
627 ::testing::Values(
628 HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_ssse3,
629 &vpx_highbd_d45_predictor_4x4_c, 4, 12),
630 HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_ssse3,
631 &vpx_highbd_d45_predictor_8x8_c, 8, 12),
632 HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_ssse3,
633 &vpx_highbd_d45_predictor_16x16_c, 16, 12),
634 HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_ssse3,
635 &vpx_highbd_d45_predictor_32x32_c, 32, 12),
636 HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_ssse3,
637 &vpx_highbd_d63_predictor_8x8_c, 8, 12),
638 HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_ssse3,
639 &vpx_highbd_d63_predictor_16x16_c, 16, 12),
640 HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_c,
641 &vpx_highbd_d63_predictor_32x32_ssse3, 32, 12),
642 HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_ssse3,
643 &vpx_highbd_d117_predictor_8x8_c, 8, 12),
644 HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_ssse3,
645 &vpx_highbd_d117_predictor_16x16_c, 16, 12),
646 HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_c,
647 &vpx_highbd_d117_predictor_32x32_ssse3, 32, 12),
648 HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_ssse3,
649 &vpx_highbd_d135_predictor_8x8_c, 8, 12),
650 HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_ssse3,
651 &vpx_highbd_d135_predictor_16x16_c, 16, 12),
652 HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_ssse3,
653 &vpx_highbd_d135_predictor_32x32_c, 32, 12),
654 HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_ssse3,
655 &vpx_highbd_d153_predictor_8x8_c, 8, 12),
656 HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_ssse3,
657 &vpx_highbd_d153_predictor_16x16_c, 16, 12),
658 HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_ssse3,
659 &vpx_highbd_d153_predictor_32x32_c, 32, 12),
660 HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_ssse3,
661 &vpx_highbd_d207_predictor_8x8_c, 8, 12),
662 HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_ssse3,
663 &vpx_highbd_d207_predictor_16x16_c, 16, 12),
664 HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_ssse3,
665 &vpx_highbd_d207_predictor_32x32_c, 32, 12)));
666 #endif // HAVE_SSSE3
667
668 #if HAVE_SSE2
669 INSTANTIATE_TEST_SUITE_P(
670 SSE2_TO_C_8, VP9HighbdIntraPredTest,
671 ::testing::Values(
672 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_sse2,
673 &vpx_highbd_dc_128_predictor_4x4_c, 4, 8),
674 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_sse2,
675 &vpx_highbd_dc_128_predictor_8x8_c, 8, 8),
676 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_sse2,
677 &vpx_highbd_dc_128_predictor_16x16_c, 16, 8),
678 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_sse2,
679 &vpx_highbd_dc_128_predictor_32x32_c, 32, 8),
680 HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_sse2,
681 &vpx_highbd_d63_predictor_4x4_c, 4, 8),
682 HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_sse2,
683 &vpx_highbd_d117_predictor_4x4_c, 4, 8),
684 HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_sse2,
685 &vpx_highbd_d135_predictor_4x4_c, 4, 8),
686 HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_sse2,
687 &vpx_highbd_d153_predictor_4x4_c, 4, 8),
688 HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_sse2,
689 &vpx_highbd_d207_predictor_4x4_c, 4, 8),
690 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_sse2,
691 &vpx_highbd_dc_left_predictor_4x4_c, 4, 8),
692 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_sse2,
693 &vpx_highbd_dc_left_predictor_8x8_c, 8, 8),
694 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_sse2,
695 &vpx_highbd_dc_left_predictor_16x16_c, 16, 8),
696 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_sse2,
697 &vpx_highbd_dc_left_predictor_32x32_c, 32, 8),
698 HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
699 &vpx_highbd_dc_predictor_4x4_c, 4, 8),
700 HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
701 &vpx_highbd_dc_predictor_8x8_c, 8, 8),
702 HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
703 &vpx_highbd_dc_predictor_16x16_c, 16, 8),
704 HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
705 &vpx_highbd_dc_predictor_32x32_c, 32, 8),
706 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_sse2,
707 &vpx_highbd_dc_top_predictor_4x4_c, 4, 8),
708 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_sse2,
709 &vpx_highbd_dc_top_predictor_8x8_c, 8, 8),
710 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_sse2,
711 &vpx_highbd_dc_top_predictor_16x16_c, 16, 8),
712 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_sse2,
713 &vpx_highbd_dc_top_predictor_32x32_c, 32, 8),
714 HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
715 &vpx_highbd_tm_predictor_4x4_c, 4, 8),
716 HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
717 &vpx_highbd_tm_predictor_8x8_c, 8, 8),
718 HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
719 &vpx_highbd_tm_predictor_16x16_c, 16, 8),
720 HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
721 &vpx_highbd_tm_predictor_32x32_c, 32, 8),
722 HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_sse2,
723 &vpx_highbd_h_predictor_4x4_c, 4, 8),
724 HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_sse2,
725 &vpx_highbd_h_predictor_8x8_c, 8, 8),
726 HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_sse2,
727 &vpx_highbd_h_predictor_16x16_c, 16, 8),
728 HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_sse2,
729 &vpx_highbd_h_predictor_32x32_c, 32, 8),
730 HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
731 &vpx_highbd_v_predictor_4x4_c, 4, 8),
732 HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
733 &vpx_highbd_v_predictor_8x8_c, 8, 8),
734 HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
735 &vpx_highbd_v_predictor_16x16_c, 16, 8),
736 HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
737 &vpx_highbd_v_predictor_32x32_c, 32, 8)));
738
739 INSTANTIATE_TEST_SUITE_P(
740 SSE2_TO_C_10, VP9HighbdIntraPredTest,
741 ::testing::Values(
742 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_sse2,
743 &vpx_highbd_dc_128_predictor_4x4_c, 4, 10),
744 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_sse2,
745 &vpx_highbd_dc_128_predictor_8x8_c, 8, 10),
746 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_sse2,
747 &vpx_highbd_dc_128_predictor_16x16_c, 16, 10),
748 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_sse2,
749 &vpx_highbd_dc_128_predictor_32x32_c, 32, 10),
750 HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_sse2,
751 &vpx_highbd_d63_predictor_4x4_c, 4, 10),
752 HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_sse2,
753 &vpx_highbd_d117_predictor_4x4_c, 4, 10),
754 HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_sse2,
755 &vpx_highbd_d135_predictor_4x4_c, 4, 10),
756 HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_sse2,
757 &vpx_highbd_d153_predictor_4x4_c, 4, 10),
758 HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_sse2,
759 &vpx_highbd_d207_predictor_4x4_c, 4, 10),
760 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_sse2,
761 &vpx_highbd_dc_left_predictor_4x4_c, 4, 10),
762 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_sse2,
763 &vpx_highbd_dc_left_predictor_8x8_c, 8, 10),
764 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_sse2,
765 &vpx_highbd_dc_left_predictor_16x16_c, 16, 10),
766 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_sse2,
767 &vpx_highbd_dc_left_predictor_32x32_c, 32, 10),
768 HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
769 &vpx_highbd_dc_predictor_4x4_c, 4, 10),
770 HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
771 &vpx_highbd_dc_predictor_8x8_c, 8, 10),
772 HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
773 &vpx_highbd_dc_predictor_16x16_c, 16, 10),
774 HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
775 &vpx_highbd_dc_predictor_32x32_c, 32, 10),
776 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_sse2,
777 &vpx_highbd_dc_top_predictor_4x4_c, 4, 10),
778 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_sse2,
779 &vpx_highbd_dc_top_predictor_8x8_c, 8, 10),
780 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_sse2,
781 &vpx_highbd_dc_top_predictor_16x16_c, 16, 10),
782 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_sse2,
783 &vpx_highbd_dc_top_predictor_32x32_c, 32, 10),
784 HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
785 &vpx_highbd_tm_predictor_4x4_c, 4, 10),
786 HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
787 &vpx_highbd_tm_predictor_8x8_c, 8, 10),
788 HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
789 &vpx_highbd_tm_predictor_16x16_c, 16, 10),
790 HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
791 &vpx_highbd_tm_predictor_32x32_c, 32, 10),
792 HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_sse2,
793 &vpx_highbd_h_predictor_4x4_c, 4, 10),
794 HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_sse2,
795 &vpx_highbd_h_predictor_8x8_c, 8, 10),
796 HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_sse2,
797 &vpx_highbd_h_predictor_16x16_c, 16, 10),
798 HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_sse2,
799 &vpx_highbd_h_predictor_32x32_c, 32, 10),
800 HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
801 &vpx_highbd_v_predictor_4x4_c, 4, 10),
802 HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
803 &vpx_highbd_v_predictor_8x8_c, 8, 10),
804 HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
805 &vpx_highbd_v_predictor_16x16_c, 16, 10),
806 HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
807 &vpx_highbd_v_predictor_32x32_c, 32, 10)));
808
809 INSTANTIATE_TEST_SUITE_P(
810 SSE2_TO_C_12, VP9HighbdIntraPredTest,
811 ::testing::Values(
812 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_sse2,
813 &vpx_highbd_dc_128_predictor_4x4_c, 4, 12),
814 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_sse2,
815 &vpx_highbd_dc_128_predictor_8x8_c, 8, 12),
816 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_sse2,
817 &vpx_highbd_dc_128_predictor_16x16_c, 16, 12),
818 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_sse2,
819 &vpx_highbd_dc_128_predictor_32x32_c, 32, 12),
820 HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_sse2,
821 &vpx_highbd_d63_predictor_4x4_c, 4, 12),
822 HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_sse2,
823 &vpx_highbd_d117_predictor_4x4_c, 4, 12),
824 HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_sse2,
825 &vpx_highbd_d135_predictor_4x4_c, 4, 12),
826 HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_sse2,
827 &vpx_highbd_d153_predictor_4x4_c, 4, 12),
828 HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_sse2,
829 &vpx_highbd_d207_predictor_4x4_c, 4, 12),
830 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_sse2,
831 &vpx_highbd_dc_left_predictor_4x4_c, 4, 12),
832 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_sse2,
833 &vpx_highbd_dc_left_predictor_8x8_c, 8, 12),
834 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_sse2,
835 &vpx_highbd_dc_left_predictor_16x16_c, 16, 12),
836 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_sse2,
837 &vpx_highbd_dc_left_predictor_32x32_c, 32, 12),
838 HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
839 &vpx_highbd_dc_predictor_4x4_c, 4, 12),
840 HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
841 &vpx_highbd_dc_predictor_8x8_c, 8, 12),
842 HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
843 &vpx_highbd_dc_predictor_16x16_c, 16, 12),
844 HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
845 &vpx_highbd_dc_predictor_32x32_c, 32, 12),
846 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_sse2,
847 &vpx_highbd_dc_top_predictor_4x4_c, 4, 12),
848 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_sse2,
849 &vpx_highbd_dc_top_predictor_8x8_c, 8, 12),
850 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_sse2,
851 &vpx_highbd_dc_top_predictor_16x16_c, 16, 12),
852 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_sse2,
853 &vpx_highbd_dc_top_predictor_32x32_c, 32, 12),
854 HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
855 &vpx_highbd_tm_predictor_4x4_c, 4, 12),
856 HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
857 &vpx_highbd_tm_predictor_8x8_c, 8, 12),
858 HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
859 &vpx_highbd_tm_predictor_16x16_c, 16, 12),
860 HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
861 &vpx_highbd_tm_predictor_32x32_c, 32, 12),
862 HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_sse2,
863 &vpx_highbd_h_predictor_4x4_c, 4, 12),
864 HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_sse2,
865 &vpx_highbd_h_predictor_8x8_c, 8, 12),
866 HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_sse2,
867 &vpx_highbd_h_predictor_16x16_c, 16, 12),
868 HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_sse2,
869 &vpx_highbd_h_predictor_32x32_c, 32, 12),
870 HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
871 &vpx_highbd_v_predictor_4x4_c, 4, 12),
872 HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
873 &vpx_highbd_v_predictor_8x8_c, 8, 12),
874 HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
875 &vpx_highbd_v_predictor_16x16_c, 16, 12),
876 HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
877 &vpx_highbd_v_predictor_32x32_c, 32, 12)));
878 #endif // HAVE_SSE2
879
880 #if HAVE_NEON
881 INSTANTIATE_TEST_SUITE_P(
882 NEON_TO_C_8, VP9HighbdIntraPredTest,
883 ::testing::Values(
884 HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
885 &vpx_highbd_d45_predictor_4x4_c, 4, 8),
886 HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
887 &vpx_highbd_d45_predictor_8x8_c, 8, 8),
888 HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
889 &vpx_highbd_d45_predictor_16x16_c, 16, 8),
890 HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
891 &vpx_highbd_d45_predictor_32x32_c, 32, 8),
892 HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_neon,
893 &vpx_highbd_d63_predictor_4x4_c, 4, 8),
894 HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_neon,
895 &vpx_highbd_d63_predictor_8x8_c, 8, 8),
896 HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_neon,
897 &vpx_highbd_d63_predictor_16x16_c, 16, 8),
898 HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_neon,
899 &vpx_highbd_d63_predictor_32x32_c, 32, 8),
900 HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_neon,
901 &vpx_highbd_d117_predictor_4x4_c, 4, 8),
902 HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_neon,
903 &vpx_highbd_d117_predictor_8x8_c, 8, 8),
904 HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_neon,
905 &vpx_highbd_d117_predictor_16x16_c, 16, 8),
906 HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_neon,
907 &vpx_highbd_d117_predictor_32x32_c, 32, 8),
908 HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
909 &vpx_highbd_d135_predictor_4x4_c, 4, 8),
910 HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
911 &vpx_highbd_d135_predictor_8x8_c, 8, 8),
912 HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
913 &vpx_highbd_d135_predictor_16x16_c, 16, 8),
914 HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
915 &vpx_highbd_d135_predictor_32x32_c, 32, 8),
916 HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_neon,
917 &vpx_highbd_d153_predictor_4x4_c, 4, 8),
918 HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_neon,
919 &vpx_highbd_d153_predictor_8x8_c, 8, 8),
920 HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_neon,
921 &vpx_highbd_d153_predictor_16x16_c, 16, 8),
922 HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_neon,
923 &vpx_highbd_d153_predictor_32x32_c, 32, 8),
924 HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_neon,
925 &vpx_highbd_d207_predictor_4x4_c, 4, 8),
926 HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_neon,
927 &vpx_highbd_d207_predictor_8x8_c, 8, 8),
928 HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_neon,
929 &vpx_highbd_d207_predictor_16x16_c, 16, 8),
930 HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_neon,
931 &vpx_highbd_d207_predictor_32x32_c, 32, 8),
932 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
933 &vpx_highbd_dc_128_predictor_4x4_c, 4, 8),
934 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
935 &vpx_highbd_dc_128_predictor_8x8_c, 8, 8),
936 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
937 &vpx_highbd_dc_128_predictor_16x16_c, 16, 8),
938 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
939 &vpx_highbd_dc_128_predictor_32x32_c, 32, 8),
940 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
941 &vpx_highbd_dc_left_predictor_4x4_c, 4, 8),
942 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
943 &vpx_highbd_dc_left_predictor_8x8_c, 8, 8),
944 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
945 &vpx_highbd_dc_left_predictor_16x16_c, 16, 8),
946 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
947 &vpx_highbd_dc_left_predictor_32x32_c, 32, 8),
948 HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
949 &vpx_highbd_dc_predictor_4x4_c, 4, 8),
950 HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
951 &vpx_highbd_dc_predictor_8x8_c, 8, 8),
952 HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
953 &vpx_highbd_dc_predictor_16x16_c, 16, 8),
954 HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
955 &vpx_highbd_dc_predictor_32x32_c, 32, 8),
956 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
957 &vpx_highbd_dc_top_predictor_4x4_c, 4, 8),
958 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
959 &vpx_highbd_dc_top_predictor_8x8_c, 8, 8),
960 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
961 &vpx_highbd_dc_top_predictor_16x16_c, 16, 8),
962 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
963 &vpx_highbd_dc_top_predictor_32x32_c, 32, 8),
964 HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
965 &vpx_highbd_h_predictor_4x4_c, 4, 8),
966 HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
967 &vpx_highbd_h_predictor_8x8_c, 8, 8),
968 HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
969 &vpx_highbd_h_predictor_16x16_c, 16, 8),
970 HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
971 &vpx_highbd_h_predictor_32x32_c, 32, 8),
972 HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
973 &vpx_highbd_tm_predictor_4x4_c, 4, 8),
974 HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
975 &vpx_highbd_tm_predictor_8x8_c, 8, 8),
976 HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
977 &vpx_highbd_tm_predictor_16x16_c, 16, 8),
978 HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
979 &vpx_highbd_tm_predictor_32x32_c, 32, 8),
980 HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
981 &vpx_highbd_v_predictor_4x4_c, 4, 8),
982 HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
983 &vpx_highbd_v_predictor_8x8_c, 8, 8),
984 HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
985 &vpx_highbd_v_predictor_16x16_c, 16, 8),
986 HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
987 &vpx_highbd_v_predictor_32x32_c, 32, 8)));
988
989 INSTANTIATE_TEST_SUITE_P(
990 NEON_TO_C_10, VP9HighbdIntraPredTest,
991 ::testing::Values(
992 HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
993 &vpx_highbd_d45_predictor_4x4_c, 4, 10),
994 HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
995 &vpx_highbd_d45_predictor_8x8_c, 8, 10),
996 HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
997 &vpx_highbd_d45_predictor_16x16_c, 16, 10),
998 HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
999 &vpx_highbd_d45_predictor_32x32_c, 32, 10),
1000 HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_neon,
1001 &vpx_highbd_d63_predictor_4x4_c, 4, 10),
1002 HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_neon,
1003 &vpx_highbd_d63_predictor_8x8_c, 8, 10),
1004 HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_neon,
1005 &vpx_highbd_d63_predictor_16x16_c, 16, 10),
1006 HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_neon,
1007 &vpx_highbd_d63_predictor_32x32_c, 32, 10),
1008 HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_neon,
1009 &vpx_highbd_d117_predictor_4x4_c, 4, 10),
1010 HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_neon,
1011 &vpx_highbd_d117_predictor_8x8_c, 8, 10),
1012 HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_neon,
1013 &vpx_highbd_d117_predictor_16x16_c, 16, 10),
1014 HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_neon,
1015 &vpx_highbd_d117_predictor_32x32_c, 32, 10),
1016 HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
1017 &vpx_highbd_d135_predictor_4x4_c, 4, 10),
1018 HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
1019 &vpx_highbd_d135_predictor_8x8_c, 8, 10),
1020 HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
1021 &vpx_highbd_d135_predictor_16x16_c, 16, 10),
1022 HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
1023 &vpx_highbd_d135_predictor_32x32_c, 32, 10),
1024 HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_neon,
1025 &vpx_highbd_d153_predictor_4x4_c, 4, 10),
1026 HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_neon,
1027 &vpx_highbd_d153_predictor_8x8_c, 8, 10),
1028 HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_neon,
1029 &vpx_highbd_d153_predictor_16x16_c, 16, 10),
1030 HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_neon,
1031 &vpx_highbd_d153_predictor_32x32_c, 32, 10),
1032 HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_neon,
1033 &vpx_highbd_d207_predictor_4x4_c, 4, 10),
1034 HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_neon,
1035 &vpx_highbd_d207_predictor_8x8_c, 8, 10),
1036 HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_neon,
1037 &vpx_highbd_d207_predictor_16x16_c, 16, 10),
1038 HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_neon,
1039 &vpx_highbd_d207_predictor_32x32_c, 32, 10),
1040 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
1041 &vpx_highbd_dc_128_predictor_4x4_c, 4, 10),
1042 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
1043 &vpx_highbd_dc_128_predictor_8x8_c, 8, 10),
1044 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
1045 &vpx_highbd_dc_128_predictor_16x16_c, 16, 10),
1046 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
1047 &vpx_highbd_dc_128_predictor_32x32_c, 32, 10),
1048 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
1049 &vpx_highbd_dc_left_predictor_4x4_c, 4, 10),
1050 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
1051 &vpx_highbd_dc_left_predictor_8x8_c, 8, 10),
1052 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
1053 &vpx_highbd_dc_left_predictor_16x16_c, 16, 10),
1054 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
1055 &vpx_highbd_dc_left_predictor_32x32_c, 32, 10),
1056 HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
1057 &vpx_highbd_dc_predictor_4x4_c, 4, 10),
1058 HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
1059 &vpx_highbd_dc_predictor_8x8_c, 8, 10),
1060 HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
1061 &vpx_highbd_dc_predictor_16x16_c, 16, 10),
1062 HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
1063 &vpx_highbd_dc_predictor_32x32_c, 32, 10),
1064 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
1065 &vpx_highbd_dc_top_predictor_4x4_c, 4, 10),
1066 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
1067 &vpx_highbd_dc_top_predictor_8x8_c, 8, 10),
1068 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
1069 &vpx_highbd_dc_top_predictor_16x16_c, 16, 10),
1070 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
1071 &vpx_highbd_dc_top_predictor_32x32_c, 32, 10),
1072 HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
1073 &vpx_highbd_h_predictor_4x4_c, 4, 10),
1074 HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
1075 &vpx_highbd_h_predictor_8x8_c, 8, 10),
1076 HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
1077 &vpx_highbd_h_predictor_16x16_c, 16, 10),
1078 HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
1079 &vpx_highbd_h_predictor_32x32_c, 32, 10),
1080 HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
1081 &vpx_highbd_tm_predictor_4x4_c, 4, 10),
1082 HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
1083 &vpx_highbd_tm_predictor_8x8_c, 8, 10),
1084 HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
1085 &vpx_highbd_tm_predictor_16x16_c, 16, 10),
1086 HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
1087 &vpx_highbd_tm_predictor_32x32_c, 32, 10),
1088 HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
1089 &vpx_highbd_v_predictor_4x4_c, 4, 10),
1090 HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
1091 &vpx_highbd_v_predictor_8x8_c, 8, 10),
1092 HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
1093 &vpx_highbd_v_predictor_16x16_c, 16, 10),
1094 HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
1095 &vpx_highbd_v_predictor_32x32_c, 32, 10)));
1096
1097 INSTANTIATE_TEST_SUITE_P(
1098 NEON_TO_C_12, VP9HighbdIntraPredTest,
1099 ::testing::Values(
1100 HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
1101 &vpx_highbd_d45_predictor_4x4_c, 4, 12),
1102 HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
1103 &vpx_highbd_d45_predictor_8x8_c, 8, 12),
1104 HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
1105 &vpx_highbd_d45_predictor_16x16_c, 16, 12),
1106 HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
1107 &vpx_highbd_d45_predictor_32x32_c, 32, 12),
1108 HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_neon,
1109 &vpx_highbd_d63_predictor_4x4_c, 4, 12),
1110 HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_neon,
1111 &vpx_highbd_d63_predictor_8x8_c, 8, 12),
1112 HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_neon,
1113 &vpx_highbd_d63_predictor_16x16_c, 16, 12),
1114 HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_neon,
1115 &vpx_highbd_d63_predictor_32x32_c, 32, 12),
1116 HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_neon,
1117 &vpx_highbd_d117_predictor_4x4_c, 4, 10),
1118 HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_neon,
1119 &vpx_highbd_d117_predictor_8x8_c, 8, 10),
1120 HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_neon,
1121 &vpx_highbd_d117_predictor_16x16_c, 16, 10),
1122 HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_neon,
1123 &vpx_highbd_d117_predictor_32x32_c, 32, 10),
1124 HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
1125 &vpx_highbd_d135_predictor_4x4_c, 4, 12),
1126 HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
1127 &vpx_highbd_d135_predictor_8x8_c, 8, 12),
1128 HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
1129 &vpx_highbd_d135_predictor_16x16_c, 16, 12),
1130 HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
1131 &vpx_highbd_d135_predictor_32x32_c, 32, 12),
1132 HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_neon,
1133 &vpx_highbd_d153_predictor_4x4_c, 4, 12),
1134 HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_neon,
1135 &vpx_highbd_d153_predictor_8x8_c, 8, 12),
1136 HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_neon,
1137 &vpx_highbd_d153_predictor_16x16_c, 16, 12),
1138 HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_neon,
1139 &vpx_highbd_d153_predictor_32x32_c, 32, 12),
1140 HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_neon,
1141 &vpx_highbd_d207_predictor_4x4_c, 4, 12),
1142 HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_neon,
1143 &vpx_highbd_d207_predictor_8x8_c, 8, 12),
1144 HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_neon,
1145 &vpx_highbd_d207_predictor_16x16_c, 16, 12),
1146 HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_neon,
1147 &vpx_highbd_d207_predictor_32x32_c, 32, 12),
1148 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
1149 &vpx_highbd_dc_128_predictor_4x4_c, 4, 12),
1150 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
1151 &vpx_highbd_dc_128_predictor_8x8_c, 8, 12),
1152 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
1153 &vpx_highbd_dc_128_predictor_16x16_c, 16, 12),
1154 HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
1155 &vpx_highbd_dc_128_predictor_32x32_c, 32, 12),
1156 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
1157 &vpx_highbd_dc_left_predictor_4x4_c, 4, 12),
1158 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
1159 &vpx_highbd_dc_left_predictor_8x8_c, 8, 12),
1160 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
1161 &vpx_highbd_dc_left_predictor_16x16_c, 16, 12),
1162 HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
1163 &vpx_highbd_dc_left_predictor_32x32_c, 32, 12),
1164 HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
1165 &vpx_highbd_dc_predictor_4x4_c, 4, 12),
1166 HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
1167 &vpx_highbd_dc_predictor_8x8_c, 8, 12),
1168 HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
1169 &vpx_highbd_dc_predictor_16x16_c, 16, 12),
1170 HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
1171 &vpx_highbd_dc_predictor_32x32_c, 32, 12),
1172 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
1173 &vpx_highbd_dc_top_predictor_4x4_c, 4, 12),
1174 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
1175 &vpx_highbd_dc_top_predictor_8x8_c, 8, 12),
1176 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
1177 &vpx_highbd_dc_top_predictor_16x16_c, 16, 12),
1178 HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
1179 &vpx_highbd_dc_top_predictor_32x32_c, 32, 12),
1180 HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
1181 &vpx_highbd_h_predictor_4x4_c, 4, 12),
1182 HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
1183 &vpx_highbd_h_predictor_8x8_c, 8, 12),
1184 HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
1185 &vpx_highbd_h_predictor_16x16_c, 16, 12),
1186 HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
1187 &vpx_highbd_h_predictor_32x32_c, 32, 12),
1188 HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
1189 &vpx_highbd_tm_predictor_4x4_c, 4, 12),
1190 HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
1191 &vpx_highbd_tm_predictor_8x8_c, 8, 12),
1192 HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
1193 &vpx_highbd_tm_predictor_16x16_c, 16, 12),
1194 HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
1195 &vpx_highbd_tm_predictor_32x32_c, 32, 12),
1196 HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
1197 &vpx_highbd_v_predictor_4x4_c, 4, 12),
1198 HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
1199 &vpx_highbd_v_predictor_8x8_c, 8, 12),
1200 HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
1201 &vpx_highbd_v_predictor_16x16_c, 16, 12),
1202 HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
1203 &vpx_highbd_v_predictor_32x32_c, 32, 12)));
1204 #endif // HAVE_NEON
1205
1206 #endif // CONFIG_VP9_HIGHBITDEPTH
1207 } // namespace
1208