| Index: source/libvpx/test/convolve_test.cc
|
| ===================================================================
|
| --- source/libvpx/test/convolve_test.cc (revision 278778)
|
| +++ source/libvpx/test/convolve_test.cc (working copy)
|
| @@ -221,8 +221,12 @@
|
| }
|
|
|
| ::libvpx_test::ACMRandom prng;
|
| - for (int i = 0; i < kInputBufferSize; ++i)
|
| - input_[i] = prng.Rand8Extremes();
|
| + for (int i = 0; i < kInputBufferSize; ++i) {
|
| + if (i & 1)
|
| + input_[i] = 255;
|
| + else
|
| + input_[i] = prng.Rand8Extremes();
|
| + }
|
| }
|
|
|
| void SetConstantInput(int value) {
|
| @@ -341,6 +345,9 @@
|
| for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
|
| const InterpKernel *filters =
|
| vp9_get_interp_kernel(static_cast<INTERP_FILTER>(filter_bank));
|
| + const InterpKernel *const eighttap_smooth =
|
| + vp9_get_interp_kernel(EIGHTTAP_SMOOTH);
|
| +
|
| for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {
|
| for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) {
|
| filter_block2d_8_c(in, kInputStride,
|
| @@ -348,7 +355,7 @@
|
| ref, kOutputStride,
|
| Width(), Height());
|
|
|
| - if (filters == vp9_sub_pel_filters_8lp || (filter_x && filter_y))
|
| + if (filters == eighttap_smooth || (filter_x && filter_y))
|
| REGISTER_STATE_CHECK(
|
| UUT_->hv8_(in, kInputStride, out, kOutputStride,
|
| filters[filter_x], 16, filters[filter_y], 16,
|
| @@ -396,6 +403,8 @@
|
| for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
|
| const InterpKernel *filters =
|
| vp9_get_interp_kernel(static_cast<INTERP_FILTER>(filter_bank));
|
| + const InterpKernel *const eighttap_smooth =
|
| + vp9_get_interp_kernel(EIGHTTAP_SMOOTH);
|
|
|
| for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {
|
| for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) {
|
| @@ -404,7 +413,7 @@
|
| ref, kOutputStride,
|
| Width(), Height());
|
|
|
| - if (filters == vp9_sub_pel_filters_8lp || (filter_x && filter_y))
|
| + if (filters == eighttap_smooth || (filter_x && filter_y))
|
| REGISTER_STATE_CHECK(
|
| UUT_->hv8_avg_(in, kInputStride, out, kOutputStride,
|
| filters[filter_x], 16, filters[filter_y], 16,
|
| @@ -544,6 +553,7 @@
|
| TEST_P(ConvolveTest, CheckScalingFiltering) {
|
| uint8_t* const in = input();
|
| uint8_t* const out = output();
|
| + const InterpKernel *const eighttap = vp9_get_interp_kernel(EIGHTTAP);
|
|
|
| SetConstantInput(127);
|
|
|
| @@ -551,8 +561,8 @@
|
| for (int step = 1; step <= 32; ++step) {
|
| /* Test the horizontal and vertical filters in combination. */
|
| REGISTER_STATE_CHECK(UUT_->hv8_(in, kInputStride, out, kOutputStride,
|
| - vp9_sub_pel_filters_8[frac], step,
|
| - vp9_sub_pel_filters_8[frac], step,
|
| + eighttap[frac], step,
|
| + eighttap[frac], step,
|
| Width(), Height()));
|
|
|
| CheckGuardBlocks();
|
| @@ -634,6 +644,50 @@
|
| make_tuple(64, 64, &convolve8_ssse3)));
|
| #endif
|
|
|
| +#if HAVE_AVX2
|
| +// TODO(jzern): these prototypes can be removed after the avx2 versions are
|
| +// reenabled in vp9_rtcd_defs.pl.
|
| +extern "C" {
|
| +void vp9_convolve8_vert_avx2(const uint8_t *src, ptrdiff_t src_stride,
|
| + uint8_t *dst, ptrdiff_t dst_stride,
|
| + const int16_t *filter_x, int x_step_q4,
|
| + const int16_t *filter_y, int y_step_q4,
|
| + int w, int h);
|
| +void vp9_convolve8_horiz_avx2(const uint8_t *src, ptrdiff_t src_stride,
|
| + uint8_t *dst, ptrdiff_t dst_stride,
|
| + const int16_t *filter_x, int x_step_q4,
|
| + const int16_t *filter_y, int y_step_q4,
|
| + int w, int h);
|
| +void vp9_convolve8_avx2(const uint8_t *src, ptrdiff_t src_stride,
|
| + uint8_t *dst, ptrdiff_t dst_stride,
|
| + const int16_t *filter_x, int x_step_q4,
|
| + const int16_t *filter_y, int y_step_q4,
|
| + int w, int h);
|
| +}
|
| +
|
| +const ConvolveFunctions convolve8_avx2(
|
| + vp9_convolve8_horiz_avx2, vp9_convolve8_avg_horiz_ssse3,
|
| + vp9_convolve8_vert_avx2, vp9_convolve8_avg_vert_ssse3,
|
| + vp9_convolve8_avx2, vp9_convolve8_avg_ssse3);
|
| +
|
| +INSTANTIATE_TEST_CASE_P(AVX2, ConvolveTest, ::testing::Values(
|
| + make_tuple(4, 4, &convolve8_avx2),
|
| + make_tuple(8, 4, &convolve8_avx2),
|
| + make_tuple(4, 8, &convolve8_avx2),
|
| + make_tuple(8, 8, &convolve8_avx2),
|
| + make_tuple(8, 16, &convolve8_avx2)));
|
| +
|
| +INSTANTIATE_TEST_CASE_P(DISABLED_AVX2, ConvolveTest, ::testing::Values(
|
| + make_tuple(16, 8, &convolve8_avx2),
|
| + make_tuple(16, 16, &convolve8_avx2),
|
| + make_tuple(32, 16, &convolve8_avx2),
|
| + make_tuple(16, 32, &convolve8_avx2),
|
| + make_tuple(32, 32, &convolve8_avx2),
|
| + make_tuple(64, 32, &convolve8_avx2),
|
| + make_tuple(32, 64, &convolve8_avx2),
|
| + make_tuple(64, 64, &convolve8_avx2)));
|
| +#endif
|
| +
|
| #if HAVE_NEON_ASM
|
| const ConvolveFunctions convolve8_neon(
|
| vp9_convolve8_horiz_neon, vp9_convolve8_avg_horiz_neon,
|
|
|