Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: source/libvpx/test/convolve_test.cc

Issue 1302353004: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/libvpx/test/consistency_test.cc ('k') | source/libvpx/test/cpu_speed_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 23 matching lines...) Expand all
34 uint8_t *dst, ptrdiff_t dst_stride, 34 uint8_t *dst, ptrdiff_t dst_stride,
35 const int16_t *filter_x, int filter_x_stride, 35 const int16_t *filter_x, int filter_x_stride,
36 const int16_t *filter_y, int filter_y_stride, 36 const int16_t *filter_y, int filter_y_stride,
37 int w, int h); 37 int w, int h);
38 38
39 struct ConvolveFunctions { 39 struct ConvolveFunctions {
40 ConvolveFunctions(ConvolveFunc copy, ConvolveFunc avg, 40 ConvolveFunctions(ConvolveFunc copy, ConvolveFunc avg,
41 ConvolveFunc h8, ConvolveFunc h8_avg, 41 ConvolveFunc h8, ConvolveFunc h8_avg,
42 ConvolveFunc v8, ConvolveFunc v8_avg, 42 ConvolveFunc v8, ConvolveFunc v8_avg,
43 ConvolveFunc hv8, ConvolveFunc hv8_avg, 43 ConvolveFunc hv8, ConvolveFunc hv8_avg,
44 ConvolveFunc sh8, ConvolveFunc sh8_avg,
45 ConvolveFunc sv8, ConvolveFunc sv8_avg,
46 ConvolveFunc shv8, ConvolveFunc shv8_avg,
44 int bd) 47 int bd)
45 : copy_(copy), avg_(avg), h8_(h8), v8_(v8), hv8_(hv8), h8_avg_(h8_avg), 48 : copy_(copy), avg_(avg), h8_(h8), v8_(v8), hv8_(hv8), h8_avg_(h8_avg),
46 v8_avg_(v8_avg), hv8_avg_(hv8_avg), use_highbd_(bd) {} 49 v8_avg_(v8_avg), hv8_avg_(hv8_avg), sh8_(sh8), sv8_(sv8), shv8_(shv8),
50 sh8_avg_(sh8_avg), sv8_avg_(sv8_avg), shv8_avg_(shv8_avg),
51 use_highbd_(bd) {}
47 52
48 ConvolveFunc copy_; 53 ConvolveFunc copy_;
49 ConvolveFunc avg_; 54 ConvolveFunc avg_;
50 ConvolveFunc h8_; 55 ConvolveFunc h8_;
51 ConvolveFunc v8_; 56 ConvolveFunc v8_;
52 ConvolveFunc hv8_; 57 ConvolveFunc hv8_;
53 ConvolveFunc h8_avg_; 58 ConvolveFunc h8_avg_;
54 ConvolveFunc v8_avg_; 59 ConvolveFunc v8_avg_;
55 ConvolveFunc hv8_avg_; 60 ConvolveFunc hv8_avg_;
61 ConvolveFunc sh8_; // scaled horiz
62 ConvolveFunc sv8_; // scaled vert
63 ConvolveFunc shv8_; // scaled horiz/vert
64 ConvolveFunc sh8_avg_; // scaled avg horiz
65 ConvolveFunc sv8_avg_; // scaled avg vert
66 ConvolveFunc shv8_avg_; // scaled avg horiz/vert
56 int use_highbd_; // 0 if high bitdepth not used, else the actual bit depth. 67 int use_highbd_; // 0 if high bitdepth not used, else the actual bit depth.
57 }; 68 };
58 69
59 typedef std::tr1::tuple<int, int, const ConvolveFunctions *> ConvolveParam; 70 typedef std::tr1::tuple<int, int, const ConvolveFunctions *> ConvolveParam;
60 71
61 // Reference 8-tap subpixel filter, slightly modified to fit into this test. 72 // Reference 8-tap subpixel filter, slightly modified to fit into this test.
62 #define VP9_FILTER_WEIGHT 128 73 #define VP9_FILTER_WEIGHT 128
63 #define VP9_FILTER_SHIFT 7 74 #define VP9_FILTER_SHIFT 7
64 uint8_t clip_pixel(int x) { 75 uint8_t clip_pixel(int x) {
65 return x < 0 ? 0 : 76 return x < 0 ? 0 :
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 lookup(out_ref, y * kOutputStride + x), 1)) 601 lookup(out_ref, y * kOutputStride + x), 1))
591 << "(" << x << "," << y << ")"; 602 << "(" << x << "," << y << ")";
592 } 603 }
593 604
594 TEST_P(ConvolveTest, CopyHoriz) { 605 TEST_P(ConvolveTest, CopyHoriz) {
595 uint8_t* const in = input(); 606 uint8_t* const in = input();
596 uint8_t* const out = output(); 607 uint8_t* const out = output();
597 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; 608 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0};
598 609
599 ASM_REGISTER_STATE_CHECK( 610 ASM_REGISTER_STATE_CHECK(
600 UUT_->h8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, 611 UUT_->sh8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16,
601 Width(), Height())); 612 Width(), Height()));
602 613
603 CheckGuardBlocks(); 614 CheckGuardBlocks();
604 615
605 for (int y = 0; y < Height(); ++y) 616 for (int y = 0; y < Height(); ++y)
606 for (int x = 0; x < Width(); ++x) 617 for (int x = 0; x < Width(); ++x)
607 ASSERT_EQ(lookup(out, y * kOutputStride + x), 618 ASSERT_EQ(lookup(out, y * kOutputStride + x),
608 lookup(in, y * kInputStride + x)) 619 lookup(in, y * kInputStride + x))
609 << "(" << x << "," << y << ")"; 620 << "(" << x << "," << y << ")";
610 } 621 }
611 622
612 TEST_P(ConvolveTest, CopyVert) { 623 TEST_P(ConvolveTest, CopyVert) {
613 uint8_t* const in = input(); 624 uint8_t* const in = input();
614 uint8_t* const out = output(); 625 uint8_t* const out = output();
615 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; 626 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0};
616 627
617 ASM_REGISTER_STATE_CHECK( 628 ASM_REGISTER_STATE_CHECK(
618 UUT_->v8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, 629 UUT_->sv8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16,
619 Width(), Height())); 630 Width(), Height()));
620 631
621 CheckGuardBlocks(); 632 CheckGuardBlocks();
622 633
623 for (int y = 0; y < Height(); ++y) 634 for (int y = 0; y < Height(); ++y)
624 for (int x = 0; x < Width(); ++x) 635 for (int x = 0; x < Width(); ++x)
625 ASSERT_EQ(lookup(out, y * kOutputStride + x), 636 ASSERT_EQ(lookup(out, y * kOutputStride + x),
626 lookup(in, y * kInputStride + x)) 637 lookup(in, y * kInputStride + x))
627 << "(" << x << "," << y << ")"; 638 << "(" << x << "," << y << ")";
628 } 639 }
629 640
630 TEST_P(ConvolveTest, Copy2D) { 641 TEST_P(ConvolveTest, Copy2D) {
631 uint8_t* const in = input(); 642 uint8_t* const in = input();
632 uint8_t* const out = output(); 643 uint8_t* const out = output();
633 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; 644 DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0};
634 645
635 ASM_REGISTER_STATE_CHECK( 646 ASM_REGISTER_STATE_CHECK(
636 UUT_->hv8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, 647 UUT_->shv8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8,
637 Width(), Height())); 648 16, Width(), Height()));
638 649
639 CheckGuardBlocks(); 650 CheckGuardBlocks();
640 651
641 for (int y = 0; y < Height(); ++y) 652 for (int y = 0; y < Height(); ++y)
642 for (int x = 0; x < Width(); ++x) 653 for (int x = 0; x < Width(); ++x)
643 ASSERT_EQ(lookup(out, y * kOutputStride + x), 654 ASSERT_EQ(lookup(out, y * kOutputStride + x),
644 lookup(in, y * kInputStride + x)) 655 lookup(in, y * kInputStride + x))
645 << "(" << x << "," << y << ")"; 656 << "(" << x << "," << y << ")";
646 } 657 }
647 658
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 } else { 694 } else {
684 ref = CONVERT_TO_BYTEPTR(ref16); 695 ref = CONVERT_TO_BYTEPTR(ref16);
685 } 696 }
686 #else 697 #else
687 uint8_t ref[kOutputStride * kMaxDimension]; 698 uint8_t ref[kOutputStride * kMaxDimension];
688 #endif 699 #endif
689 700
690 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { 701 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
691 const InterpKernel *filters = 702 const InterpKernel *filters =
692 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; 703 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)];
693 const InterpKernel *const eighttap_smooth =
694 vp9_filter_kernels[EIGHTTAP_SMOOTH];
695 704
696 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { 705 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {
697 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { 706 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) {
698 wrapper_filter_block2d_8_c(in, kInputStride, 707 wrapper_filter_block2d_8_c(in, kInputStride,
699 filters[filter_x], filters[filter_y], 708 filters[filter_x], filters[filter_y],
700 ref, kOutputStride, 709 ref, kOutputStride,
701 Width(), Height()); 710 Width(), Height());
702 711
703 if (filters == eighttap_smooth || (filter_x && filter_y)) 712 if (filter_x && filter_y)
704 ASM_REGISTER_STATE_CHECK( 713 ASM_REGISTER_STATE_CHECK(
705 UUT_->hv8_(in, kInputStride, out, kOutputStride, 714 UUT_->hv8_(in, kInputStride, out, kOutputStride,
706 filters[filter_x], 16, filters[filter_y], 16, 715 filters[filter_x], 16, filters[filter_y], 16,
707 Width(), Height())); 716 Width(), Height()));
708 else if (filter_y) 717 else if (filter_y)
709 ASM_REGISTER_STATE_CHECK( 718 ASM_REGISTER_STATE_CHECK(
710 UUT_->v8_(in, kInputStride, out, kOutputStride, 719 UUT_->v8_(in, kInputStride, out, kOutputStride,
711 kInvalidFilter, 16, filters[filter_y], 16, 720 kInvalidFilter, 16, filters[filter_y], 16,
712 Width(), Height())); 721 Width(), Height()));
713 else 722 else if (filter_x)
714 ASM_REGISTER_STATE_CHECK( 723 ASM_REGISTER_STATE_CHECK(
715 UUT_->h8_(in, kInputStride, out, kOutputStride, 724 UUT_->h8_(in, kInputStride, out, kOutputStride,
716 filters[filter_x], 16, kInvalidFilter, 16, 725 filters[filter_x], 16, kInvalidFilter, 16,
717 Width(), Height())); 726 Width(), Height()));
727 else
728 ASM_REGISTER_STATE_CHECK(
729 UUT_->copy_(in, kInputStride, out, kOutputStride,
730 kInvalidFilter, 0, kInvalidFilter, 0,
731 Width(), Height()));
718 732
719 CheckGuardBlocks(); 733 CheckGuardBlocks();
720 734
721 for (int y = 0; y < Height(); ++y) 735 for (int y = 0; y < Height(); ++y)
722 for (int x = 0; x < Width(); ++x) 736 for (int x = 0; x < Width(); ++x)
723 ASSERT_EQ(lookup(ref, y * kOutputStride + x), 737 ASSERT_EQ(lookup(ref, y * kOutputStride + x),
724 lookup(out, y * kOutputStride + x)) 738 lookup(out, y * kOutputStride + x))
725 << "mismatch at (" << x << "," << y << "), " 739 << "mismatch at (" << x << "," << y << "), "
726 << "filters (" << filter_bank << "," 740 << "filters (" << filter_bank << ","
727 << filter_x << "," << filter_y << ")"; 741 << filter_x << "," << filter_y << ")";
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 #endif 776 #endif
763 777
764 assign_val(out, y * kOutputStride + x, r); 778 assign_val(out, y * kOutputStride + x, r);
765 assign_val(ref, y * kOutputStride + x, r); 779 assign_val(ref, y * kOutputStride + x, r);
766 } 780 }
767 } 781 }
768 782
769 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { 783 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
770 const InterpKernel *filters = 784 const InterpKernel *filters =
771 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; 785 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)];
772 const InterpKernel *const eighttap_smooth =
773 vp9_filter_kernels[EIGHTTAP_SMOOTH];
774 786
775 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { 787 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {
776 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { 788 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) {
777 wrapper_filter_average_block2d_8_c(in, kInputStride, 789 wrapper_filter_average_block2d_8_c(in, kInputStride,
778 filters[filter_x], filters[filter_y], 790 filters[filter_x], filters[filter_y],
779 ref, kOutputStride, 791 ref, kOutputStride,
780 Width(), Height()); 792 Width(), Height());
781 793
782 if (filters == eighttap_smooth || (filter_x && filter_y)) 794 if (filter_x && filter_y)
783 ASM_REGISTER_STATE_CHECK( 795 ASM_REGISTER_STATE_CHECK(
784 UUT_->hv8_avg_(in, kInputStride, out, kOutputStride, 796 UUT_->hv8_avg_(in, kInputStride, out, kOutputStride,
785 filters[filter_x], 16, filters[filter_y], 16, 797 filters[filter_x], 16, filters[filter_y], 16,
786 Width(), Height())); 798 Width(), Height()));
787 else if (filter_y) 799 else if (filter_y)
788 ASM_REGISTER_STATE_CHECK( 800 ASM_REGISTER_STATE_CHECK(
789 UUT_->v8_avg_(in, kInputStride, out, kOutputStride, 801 UUT_->v8_avg_(in, kInputStride, out, kOutputStride,
790 filters[filter_x], 16, filters[filter_y], 16, 802 kInvalidFilter, 16, filters[filter_y], 16,
803 Width(), Height()));
804 else if (filter_x)
805 ASM_REGISTER_STATE_CHECK(
806 UUT_->h8_avg_(in, kInputStride, out, kOutputStride,
807 filters[filter_x], 16, kInvalidFilter, 16,
791 Width(), Height())); 808 Width(), Height()));
792 else 809 else
793 ASM_REGISTER_STATE_CHECK( 810 ASM_REGISTER_STATE_CHECK(
794 UUT_->h8_avg_(in, kInputStride, out, kOutputStride, 811 UUT_->avg_(in, kInputStride, out, kOutputStride,
795 filters[filter_x], 16, filters[filter_y], 16, 812 kInvalidFilter, 0, kInvalidFilter, 0,
796 Width(), Height())); 813 Width(), Height()));
797 814
798 CheckGuardBlocks(); 815 CheckGuardBlocks();
799 816
800 for (int y = 0; y < Height(); ++y) 817 for (int y = 0; y < Height(); ++y)
801 for (int x = 0; x < Width(); ++x) 818 for (int x = 0; x < Width(); ++x)
802 ASSERT_EQ(lookup(ref, y * kOutputStride + x), 819 ASSERT_EQ(lookup(ref, y * kOutputStride + x),
803 lookup(out, y * kOutputStride + x)) 820 lookup(out, y * kOutputStride + x))
804 << "mismatch at (" << x << "," << y << "), " 821 << "mismatch at (" << x << "," << y << "), "
805 << "filters (" << filter_bank << "," 822 << "filters (" << filter_bank << ","
806 << filter_x << "," << filter_y << ")"; 823 << filter_x << "," << filter_y << ")";
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 if (axis) 878 if (axis)
862 seed_val-= 8; 879 seed_val-= 8;
863 else 880 else
864 seed_val++; 881 seed_val++;
865 } 882 }
866 if (axis) seed_val += 8; 883 if (axis) seed_val += 8;
867 884
868 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { 885 for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) {
869 const InterpKernel *filters = 886 const InterpKernel *filters =
870 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)]; 887 vp9_filter_kernels[static_cast<INTERP_FILTER>(filter_bank)];
871 const InterpKernel *const eighttap_smooth =
872 vp9_filter_kernels[EIGHTTAP_SMOOTH];
873 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { 888 for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {
874 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { 889 for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) {
875 wrapper_filter_block2d_8_c(in, kInputStride, 890 wrapper_filter_block2d_8_c(in, kInputStride,
876 filters[filter_x], filters[filter_y], 891 filters[filter_x], filters[filter_y],
877 ref, kOutputStride, 892 ref, kOutputStride,
878 Width(), Height()); 893 Width(), Height());
879 if (filters == eighttap_smooth || (filter_x && filter_y)) 894 if (filter_x && filter_y)
880 ASM_REGISTER_STATE_CHECK( 895 ASM_REGISTER_STATE_CHECK(
881 UUT_->hv8_(in, kInputStride, out, kOutputStride, 896 UUT_->hv8_(in, kInputStride, out, kOutputStride,
882 filters[filter_x], 16, filters[filter_y], 16, 897 filters[filter_x], 16, filters[filter_y], 16,
883 Width(), Height())); 898 Width(), Height()));
884 else if (filter_y) 899 else if (filter_y)
885 ASM_REGISTER_STATE_CHECK( 900 ASM_REGISTER_STATE_CHECK(
886 UUT_->v8_(in, kInputStride, out, kOutputStride, 901 UUT_->v8_(in, kInputStride, out, kOutputStride,
887 kInvalidFilter, 16, filters[filter_y], 16, 902 kInvalidFilter, 16, filters[filter_y], 16,
888 Width(), Height())); 903 Width(), Height()));
889 else 904 else if (filter_x)
890 ASM_REGISTER_STATE_CHECK( 905 ASM_REGISTER_STATE_CHECK(
891 UUT_->h8_(in, kInputStride, out, kOutputStride, 906 UUT_->h8_(in, kInputStride, out, kOutputStride,
892 filters[filter_x], 16, kInvalidFilter, 16, 907 filters[filter_x], 16, kInvalidFilter, 16,
893 Width(), Height())); 908 Width(), Height()));
909 else
910 ASM_REGISTER_STATE_CHECK(
911 UUT_->copy_(in, kInputStride, out, kOutputStride,
912 kInvalidFilter, 0, kInvalidFilter, 0,
913 Width(), Height()));
894 914
895 for (int y = 0; y < Height(); ++y) 915 for (int y = 0; y < Height(); ++y)
896 for (int x = 0; x < Width(); ++x) 916 for (int x = 0; x < Width(); ++x)
897 ASSERT_EQ(lookup(ref, y * kOutputStride + x), 917 ASSERT_EQ(lookup(ref, y * kOutputStride + x),
898 lookup(out, y * kOutputStride + x)) 918 lookup(out, y * kOutputStride + x))
899 << "mismatch at (" << x << "," << y << "), " 919 << "mismatch at (" << x << "," << y << "), "
900 << "filters (" << filter_bank << "," 920 << "filters (" << filter_bank << ","
901 << filter_x << "," << filter_y << ")"; 921 << filter_x << "," << filter_y << ")";
902 } 922 }
903 } 923 }
904 } 924 }
905 } 925 }
906 } 926 }
907 } 927 }
908 928
909 /* This test exercises that enough rows and columns are filtered with every 929 /* This test exercises that enough rows and columns are filtered with every
910 possible initial fractional positions and scaling steps. */ 930 possible initial fractional positions and scaling steps. */
911 TEST_P(ConvolveTest, CheckScalingFiltering) { 931 TEST_P(ConvolveTest, CheckScalingFiltering) {
912 uint8_t* const in = input(); 932 uint8_t* const in = input();
913 uint8_t* const out = output(); 933 uint8_t* const out = output();
914 const InterpKernel *const eighttap = vp9_filter_kernels[EIGHTTAP]; 934 const InterpKernel *const eighttap = vp9_filter_kernels[EIGHTTAP];
915 935
916 SetConstantInput(127); 936 SetConstantInput(127);
917 937
918 for (int frac = 0; frac < 16; ++frac) { 938 for (int frac = 0; frac < 16; ++frac) {
919 for (int step = 1; step <= 32; ++step) { 939 for (int step = 1; step <= 32; ++step) {
920 /* Test the horizontal and vertical filters in combination. */ 940 /* Test the horizontal and vertical filters in combination. */
921 ASM_REGISTER_STATE_CHECK(UUT_->hv8_(in, kInputStride, out, kOutputStride, 941 ASM_REGISTER_STATE_CHECK(UUT_->shv8_(in, kInputStride, out, kOutputStride,
922 eighttap[frac], step, 942 eighttap[frac], step,
923 eighttap[frac], step, 943 eighttap[frac], step,
924 Width(), Height())); 944 Width(), Height()));
925 945
926 CheckGuardBlocks(); 946 CheckGuardBlocks();
927 947
928 for (int y = 0; y < Height(); ++y) { 948 for (int y = 0; y < Height(); ++y) {
929 for (int x = 0; x < Width(); ++x) { 949 for (int x = 0; x < Width(); ++x) {
930 ASSERT_EQ(lookup(in, y * kInputStride + x), 950 ASSERT_EQ(lookup(in, y * kInputStride + x),
931 lookup(out, y * kOutputStride + x)) 951 lookup(out, y * kOutputStride + x))
932 << "x == " << x << ", y == " << y 952 << "x == " << x << ", y == " << y
933 << ", frac == " << frac << ", step == " << step; 953 << ", frac == " << frac << ", step == " << step;
934 } 954 }
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
1443 int w, int h) { 1463 int w, int h) {
1444 vpx_highbd_convolve8_avg_c(src, src_stride, dst, dst_stride, 1464 vpx_highbd_convolve8_avg_c(src, src_stride, dst, dst_stride,
1445 filter_x, filter_x_stride, 1465 filter_x, filter_x_stride,
1446 filter_y, filter_y_stride, w, h, 12); 1466 filter_y, filter_y_stride, w, h, 12);
1447 } 1467 }
1448 1468
1449 const ConvolveFunctions convolve8_c( 1469 const ConvolveFunctions convolve8_c(
1450 wrap_convolve_copy_c_8, wrap_convolve_avg_c_8, 1470 wrap_convolve_copy_c_8, wrap_convolve_avg_c_8,
1451 wrap_convolve8_horiz_c_8, wrap_convolve8_avg_horiz_c_8, 1471 wrap_convolve8_horiz_c_8, wrap_convolve8_avg_horiz_c_8,
1452 wrap_convolve8_vert_c_8, wrap_convolve8_avg_vert_c_8, 1472 wrap_convolve8_vert_c_8, wrap_convolve8_avg_vert_c_8,
1473 wrap_convolve8_c_8, wrap_convolve8_avg_c_8,
1474 wrap_convolve8_horiz_c_8, wrap_convolve8_avg_horiz_c_8,
1475 wrap_convolve8_vert_c_8, wrap_convolve8_avg_vert_c_8,
1453 wrap_convolve8_c_8, wrap_convolve8_avg_c_8, 8); 1476 wrap_convolve8_c_8, wrap_convolve8_avg_c_8, 8);
1454 INSTANTIATE_TEST_CASE_P(C_8, ConvolveTest, ::testing::Values( 1477 INSTANTIATE_TEST_CASE_P(C_8, ConvolveTest, ::testing::Values(
1455 make_tuple(4, 4, &convolve8_c), 1478 make_tuple(4, 4, &convolve8_c),
1456 make_tuple(8, 4, &convolve8_c), 1479 make_tuple(8, 4, &convolve8_c),
1457 make_tuple(4, 8, &convolve8_c), 1480 make_tuple(4, 8, &convolve8_c),
1458 make_tuple(8, 8, &convolve8_c), 1481 make_tuple(8, 8, &convolve8_c),
1459 make_tuple(16, 8, &convolve8_c), 1482 make_tuple(16, 8, &convolve8_c),
1460 make_tuple(8, 16, &convolve8_c), 1483 make_tuple(8, 16, &convolve8_c),
1461 make_tuple(16, 16, &convolve8_c), 1484 make_tuple(16, 16, &convolve8_c),
1462 make_tuple(32, 16, &convolve8_c), 1485 make_tuple(32, 16, &convolve8_c),
1463 make_tuple(16, 32, &convolve8_c), 1486 make_tuple(16, 32, &convolve8_c),
1464 make_tuple(32, 32, &convolve8_c), 1487 make_tuple(32, 32, &convolve8_c),
1465 make_tuple(64, 32, &convolve8_c), 1488 make_tuple(64, 32, &convolve8_c),
1466 make_tuple(32, 64, &convolve8_c), 1489 make_tuple(32, 64, &convolve8_c),
1467 make_tuple(64, 64, &convolve8_c))); 1490 make_tuple(64, 64, &convolve8_c)));
1468 const ConvolveFunctions convolve10_c( 1491 const ConvolveFunctions convolve10_c(
1469 wrap_convolve_copy_c_10, wrap_convolve_avg_c_10, 1492 wrap_convolve_copy_c_10, wrap_convolve_avg_c_10,
1470 wrap_convolve8_horiz_c_10, wrap_convolve8_avg_horiz_c_10, 1493 wrap_convolve8_horiz_c_10, wrap_convolve8_avg_horiz_c_10,
1471 wrap_convolve8_vert_c_10, wrap_convolve8_avg_vert_c_10, 1494 wrap_convolve8_vert_c_10, wrap_convolve8_avg_vert_c_10,
1495 wrap_convolve8_c_10, wrap_convolve8_avg_c_10,
1496 wrap_convolve8_horiz_c_10, wrap_convolve8_avg_horiz_c_10,
1497 wrap_convolve8_vert_c_10, wrap_convolve8_avg_vert_c_10,
1472 wrap_convolve8_c_10, wrap_convolve8_avg_c_10, 10); 1498 wrap_convolve8_c_10, wrap_convolve8_avg_c_10, 10);
1473 INSTANTIATE_TEST_CASE_P(C_10, ConvolveTest, ::testing::Values( 1499 INSTANTIATE_TEST_CASE_P(C_10, ConvolveTest, ::testing::Values(
1474 make_tuple(4, 4, &convolve10_c), 1500 make_tuple(4, 4, &convolve10_c),
1475 make_tuple(8, 4, &convolve10_c), 1501 make_tuple(8, 4, &convolve10_c),
1476 make_tuple(4, 8, &convolve10_c), 1502 make_tuple(4, 8, &convolve10_c),
1477 make_tuple(8, 8, &convolve10_c), 1503 make_tuple(8, 8, &convolve10_c),
1478 make_tuple(16, 8, &convolve10_c), 1504 make_tuple(16, 8, &convolve10_c),
1479 make_tuple(8, 16, &convolve10_c), 1505 make_tuple(8, 16, &convolve10_c),
1480 make_tuple(16, 16, &convolve10_c), 1506 make_tuple(16, 16, &convolve10_c),
1481 make_tuple(32, 16, &convolve10_c), 1507 make_tuple(32, 16, &convolve10_c),
1482 make_tuple(16, 32, &convolve10_c), 1508 make_tuple(16, 32, &convolve10_c),
1483 make_tuple(32, 32, &convolve10_c), 1509 make_tuple(32, 32, &convolve10_c),
1484 make_tuple(64, 32, &convolve10_c), 1510 make_tuple(64, 32, &convolve10_c),
1485 make_tuple(32, 64, &convolve10_c), 1511 make_tuple(32, 64, &convolve10_c),
1486 make_tuple(64, 64, &convolve10_c))); 1512 make_tuple(64, 64, &convolve10_c)));
1487 const ConvolveFunctions convolve12_c( 1513 const ConvolveFunctions convolve12_c(
1488 wrap_convolve_copy_c_12, wrap_convolve_avg_c_12, 1514 wrap_convolve_copy_c_12, wrap_convolve_avg_c_12,
1489 wrap_convolve8_horiz_c_12, wrap_convolve8_avg_horiz_c_12, 1515 wrap_convolve8_horiz_c_12, wrap_convolve8_avg_horiz_c_12,
1490 wrap_convolve8_vert_c_12, wrap_convolve8_avg_vert_c_12, 1516 wrap_convolve8_vert_c_12, wrap_convolve8_avg_vert_c_12,
1517 wrap_convolve8_c_12, wrap_convolve8_avg_c_12,
1518 wrap_convolve8_horiz_c_12, wrap_convolve8_avg_horiz_c_12,
1519 wrap_convolve8_vert_c_12, wrap_convolve8_avg_vert_c_12,
1491 wrap_convolve8_c_12, wrap_convolve8_avg_c_12, 12); 1520 wrap_convolve8_c_12, wrap_convolve8_avg_c_12, 12);
1492 INSTANTIATE_TEST_CASE_P(C_12, ConvolveTest, ::testing::Values( 1521 INSTANTIATE_TEST_CASE_P(C_12, ConvolveTest, ::testing::Values(
1493 make_tuple(4, 4, &convolve12_c), 1522 make_tuple(4, 4, &convolve12_c),
1494 make_tuple(8, 4, &convolve12_c), 1523 make_tuple(8, 4, &convolve12_c),
1495 make_tuple(4, 8, &convolve12_c), 1524 make_tuple(4, 8, &convolve12_c),
1496 make_tuple(8, 8, &convolve12_c), 1525 make_tuple(8, 8, &convolve12_c),
1497 make_tuple(16, 8, &convolve12_c), 1526 make_tuple(16, 8, &convolve12_c),
1498 make_tuple(8, 16, &convolve12_c), 1527 make_tuple(8, 16, &convolve12_c),
1499 make_tuple(16, 16, &convolve12_c), 1528 make_tuple(16, 16, &convolve12_c),
1500 make_tuple(32, 16, &convolve12_c), 1529 make_tuple(32, 16, &convolve12_c),
1501 make_tuple(16, 32, &convolve12_c), 1530 make_tuple(16, 32, &convolve12_c),
1502 make_tuple(32, 32, &convolve12_c), 1531 make_tuple(32, 32, &convolve12_c),
1503 make_tuple(64, 32, &convolve12_c), 1532 make_tuple(64, 32, &convolve12_c),
1504 make_tuple(32, 64, &convolve12_c), 1533 make_tuple(32, 64, &convolve12_c),
1505 make_tuple(64, 64, &convolve12_c))); 1534 make_tuple(64, 64, &convolve12_c)));
1506 1535
1507 #else 1536 #else
1508 1537
1509 const ConvolveFunctions convolve8_c( 1538 const ConvolveFunctions convolve8_c(
1510 vpx_convolve_copy_c, vpx_convolve_avg_c, 1539 vpx_convolve_copy_c, vpx_convolve_avg_c,
1511 vpx_convolve8_horiz_c, vpx_convolve8_avg_horiz_c, 1540 vpx_convolve8_horiz_c, vpx_convolve8_avg_horiz_c,
1512 vpx_convolve8_vert_c, vpx_convolve8_avg_vert_c, 1541 vpx_convolve8_vert_c, vpx_convolve8_avg_vert_c,
1513 vpx_convolve8_c, vpx_convolve8_avg_c, 0); 1542 vpx_convolve8_c, vpx_convolve8_avg_c,
1543 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c,
1544 vpx_scaled_vert_c, vpx_scaled_avg_vert_c,
1545 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0);
1514 1546
1515 INSTANTIATE_TEST_CASE_P(C, ConvolveTest, ::testing::Values( 1547 INSTANTIATE_TEST_CASE_P(C, ConvolveTest, ::testing::Values(
1516 make_tuple(4, 4, &convolve8_c), 1548 make_tuple(4, 4, &convolve8_c),
1517 make_tuple(8, 4, &convolve8_c), 1549 make_tuple(8, 4, &convolve8_c),
1518 make_tuple(4, 8, &convolve8_c), 1550 make_tuple(4, 8, &convolve8_c),
1519 make_tuple(8, 8, &convolve8_c), 1551 make_tuple(8, 8, &convolve8_c),
1520 make_tuple(16, 8, &convolve8_c), 1552 make_tuple(16, 8, &convolve8_c),
1521 make_tuple(8, 16, &convolve8_c), 1553 make_tuple(8, 16, &convolve8_c),
1522 make_tuple(16, 16, &convolve8_c), 1554 make_tuple(16, 16, &convolve8_c),
1523 make_tuple(32, 16, &convolve8_c), 1555 make_tuple(32, 16, &convolve8_c),
1524 make_tuple(16, 32, &convolve8_c), 1556 make_tuple(16, 32, &convolve8_c),
1525 make_tuple(32, 32, &convolve8_c), 1557 make_tuple(32, 32, &convolve8_c),
1526 make_tuple(64, 32, &convolve8_c), 1558 make_tuple(64, 32, &convolve8_c),
1527 make_tuple(32, 64, &convolve8_c), 1559 make_tuple(32, 64, &convolve8_c),
1528 make_tuple(64, 64, &convolve8_c))); 1560 make_tuple(64, 64, &convolve8_c)));
1529 #endif 1561 #endif
1530 1562
1531 #if HAVE_SSE2 && ARCH_X86_64 1563 #if HAVE_SSE2 && ARCH_X86_64
1532 #if CONFIG_VP9_HIGHBITDEPTH 1564 #if CONFIG_VP9_HIGHBITDEPTH
1533 const ConvolveFunctions convolve8_sse2( 1565 const ConvolveFunctions convolve8_sse2(
1534 wrap_convolve_copy_c_8, wrap_convolve_avg_c_8, 1566 wrap_convolve_copy_c_8, wrap_convolve_avg_c_8,
1535 wrap_convolve8_horiz_sse2_8, wrap_convolve8_avg_horiz_sse2_8, 1567 wrap_convolve8_horiz_sse2_8, wrap_convolve8_avg_horiz_sse2_8,
1536 wrap_convolve8_vert_sse2_8, wrap_convolve8_avg_vert_sse2_8, 1568 wrap_convolve8_vert_sse2_8, wrap_convolve8_avg_vert_sse2_8,
1569 wrap_convolve8_sse2_8, wrap_convolve8_avg_sse2_8,
1570 wrap_convolve8_horiz_sse2_8, wrap_convolve8_avg_horiz_sse2_8,
1571 wrap_convolve8_vert_sse2_8, wrap_convolve8_avg_vert_sse2_8,
1537 wrap_convolve8_sse2_8, wrap_convolve8_avg_sse2_8, 8); 1572 wrap_convolve8_sse2_8, wrap_convolve8_avg_sse2_8, 8);
1538 const ConvolveFunctions convolve10_sse2( 1573 const ConvolveFunctions convolve10_sse2(
1539 wrap_convolve_copy_c_10, wrap_convolve_avg_c_10, 1574 wrap_convolve_copy_c_10, wrap_convolve_avg_c_10,
1540 wrap_convolve8_horiz_sse2_10, wrap_convolve8_avg_horiz_sse2_10, 1575 wrap_convolve8_horiz_sse2_10, wrap_convolve8_avg_horiz_sse2_10,
1541 wrap_convolve8_vert_sse2_10, wrap_convolve8_avg_vert_sse2_10, 1576 wrap_convolve8_vert_sse2_10, wrap_convolve8_avg_vert_sse2_10,
1577 wrap_convolve8_sse2_10, wrap_convolve8_avg_sse2_10,
1578 wrap_convolve8_horiz_sse2_10, wrap_convolve8_avg_horiz_sse2_10,
1579 wrap_convolve8_vert_sse2_10, wrap_convolve8_avg_vert_sse2_10,
1542 wrap_convolve8_sse2_10, wrap_convolve8_avg_sse2_10, 10); 1580 wrap_convolve8_sse2_10, wrap_convolve8_avg_sse2_10, 10);
1543 const ConvolveFunctions convolve12_sse2( 1581 const ConvolveFunctions convolve12_sse2(
1544 wrap_convolve_copy_c_12, wrap_convolve_avg_c_12, 1582 wrap_convolve_copy_c_12, wrap_convolve_avg_c_12,
1545 wrap_convolve8_horiz_sse2_12, wrap_convolve8_avg_horiz_sse2_12, 1583 wrap_convolve8_horiz_sse2_12, wrap_convolve8_avg_horiz_sse2_12,
1546 wrap_convolve8_vert_sse2_12, wrap_convolve8_avg_vert_sse2_12, 1584 wrap_convolve8_vert_sse2_12, wrap_convolve8_avg_vert_sse2_12,
1585 wrap_convolve8_sse2_12, wrap_convolve8_avg_sse2_12,
1586 wrap_convolve8_horiz_sse2_12, wrap_convolve8_avg_horiz_sse2_12,
1587 wrap_convolve8_vert_sse2_12, wrap_convolve8_avg_vert_sse2_12,
1547 wrap_convolve8_sse2_12, wrap_convolve8_avg_sse2_12, 12); 1588 wrap_convolve8_sse2_12, wrap_convolve8_avg_sse2_12, 12);
1548 INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values( 1589 INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values(
1549 make_tuple(4, 4, &convolve8_sse2), 1590 make_tuple(4, 4, &convolve8_sse2),
1550 make_tuple(8, 4, &convolve8_sse2), 1591 make_tuple(8, 4, &convolve8_sse2),
1551 make_tuple(4, 8, &convolve8_sse2), 1592 make_tuple(4, 8, &convolve8_sse2),
1552 make_tuple(8, 8, &convolve8_sse2), 1593 make_tuple(8, 8, &convolve8_sse2),
1553 make_tuple(16, 8, &convolve8_sse2), 1594 make_tuple(16, 8, &convolve8_sse2),
1554 make_tuple(8, 16, &convolve8_sse2), 1595 make_tuple(8, 16, &convolve8_sse2),
1555 make_tuple(16, 16, &convolve8_sse2), 1596 make_tuple(16, 16, &convolve8_sse2),
1556 make_tuple(32, 16, &convolve8_sse2), 1597 make_tuple(32, 16, &convolve8_sse2),
(...skipping 30 matching lines...) Expand all
1587 make_tuple(64, 64, &convolve12_sse2))); 1628 make_tuple(64, 64, &convolve12_sse2)));
1588 #else 1629 #else
1589 const ConvolveFunctions convolve8_sse2( 1630 const ConvolveFunctions convolve8_sse2(
1590 #if CONFIG_USE_X86INC 1631 #if CONFIG_USE_X86INC
1591 vpx_convolve_copy_sse2, vpx_convolve_avg_sse2, 1632 vpx_convolve_copy_sse2, vpx_convolve_avg_sse2,
1592 #else 1633 #else
1593 vpx_convolve_copy_c, vpx_convolve_avg_c, 1634 vpx_convolve_copy_c, vpx_convolve_avg_c,
1594 #endif // CONFIG_USE_X86INC 1635 #endif // CONFIG_USE_X86INC
1595 vpx_convolve8_horiz_sse2, vpx_convolve8_avg_horiz_sse2, 1636 vpx_convolve8_horiz_sse2, vpx_convolve8_avg_horiz_sse2,
1596 vpx_convolve8_vert_sse2, vpx_convolve8_avg_vert_sse2, 1637 vpx_convolve8_vert_sse2, vpx_convolve8_avg_vert_sse2,
1597 vpx_convolve8_sse2, vpx_convolve8_avg_sse2, 0); 1638 vpx_convolve8_sse2, vpx_convolve8_avg_sse2,
1639 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c,
1640 vpx_scaled_vert_c, vpx_scaled_avg_vert_c,
1641 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0);
1598 1642
1599 INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values( 1643 INSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values(
1600 make_tuple(4, 4, &convolve8_sse2), 1644 make_tuple(4, 4, &convolve8_sse2),
1601 make_tuple(8, 4, &convolve8_sse2), 1645 make_tuple(8, 4, &convolve8_sse2),
1602 make_tuple(4, 8, &convolve8_sse2), 1646 make_tuple(4, 8, &convolve8_sse2),
1603 make_tuple(8, 8, &convolve8_sse2), 1647 make_tuple(8, 8, &convolve8_sse2),
1604 make_tuple(16, 8, &convolve8_sse2), 1648 make_tuple(16, 8, &convolve8_sse2),
1605 make_tuple(8, 16, &convolve8_sse2), 1649 make_tuple(8, 16, &convolve8_sse2),
1606 make_tuple(16, 16, &convolve8_sse2), 1650 make_tuple(16, 16, &convolve8_sse2),
1607 make_tuple(32, 16, &convolve8_sse2), 1651 make_tuple(32, 16, &convolve8_sse2),
1608 make_tuple(16, 32, &convolve8_sse2), 1652 make_tuple(16, 32, &convolve8_sse2),
1609 make_tuple(32, 32, &convolve8_sse2), 1653 make_tuple(32, 32, &convolve8_sse2),
1610 make_tuple(64, 32, &convolve8_sse2), 1654 make_tuple(64, 32, &convolve8_sse2),
1611 make_tuple(32, 64, &convolve8_sse2), 1655 make_tuple(32, 64, &convolve8_sse2),
1612 make_tuple(64, 64, &convolve8_sse2))); 1656 make_tuple(64, 64, &convolve8_sse2)));
1613 #endif // CONFIG_VP9_HIGHBITDEPTH 1657 #endif // CONFIG_VP9_HIGHBITDEPTH
1614 #endif 1658 #endif
1615 1659
1616 #if HAVE_SSSE3 1660 #if HAVE_SSSE3
1617 const ConvolveFunctions convolve8_ssse3( 1661 const ConvolveFunctions convolve8_ssse3(
1618 vpx_convolve_copy_c, vpx_convolve_avg_c, 1662 vpx_convolve_copy_c, vpx_convolve_avg_c,
1619 vpx_convolve8_horiz_ssse3, vpx_convolve8_avg_horiz_ssse3, 1663 vpx_convolve8_horiz_ssse3, vpx_convolve8_avg_horiz_ssse3,
1620 vpx_convolve8_vert_ssse3, vpx_convolve8_avg_vert_ssse3, 1664 vpx_convolve8_vert_ssse3, vpx_convolve8_avg_vert_ssse3,
1621 vpx_convolve8_ssse3, vpx_convolve8_avg_ssse3, 0); 1665 vpx_convolve8_ssse3, vpx_convolve8_avg_ssse3,
1666 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c,
1667 vpx_scaled_vert_c, vpx_scaled_avg_vert_c,
1668 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0);
1622 1669
1623 INSTANTIATE_TEST_CASE_P(SSSE3, ConvolveTest, ::testing::Values( 1670 INSTANTIATE_TEST_CASE_P(SSSE3, ConvolveTest, ::testing::Values(
1624 make_tuple(4, 4, &convolve8_ssse3), 1671 make_tuple(4, 4, &convolve8_ssse3),
1625 make_tuple(8, 4, &convolve8_ssse3), 1672 make_tuple(8, 4, &convolve8_ssse3),
1626 make_tuple(4, 8, &convolve8_ssse3), 1673 make_tuple(4, 8, &convolve8_ssse3),
1627 make_tuple(8, 8, &convolve8_ssse3), 1674 make_tuple(8, 8, &convolve8_ssse3),
1628 make_tuple(16, 8, &convolve8_ssse3), 1675 make_tuple(16, 8, &convolve8_ssse3),
1629 make_tuple(8, 16, &convolve8_ssse3), 1676 make_tuple(8, 16, &convolve8_ssse3),
1630 make_tuple(16, 16, &convolve8_ssse3), 1677 make_tuple(16, 16, &convolve8_ssse3),
1631 make_tuple(32, 16, &convolve8_ssse3), 1678 make_tuple(32, 16, &convolve8_ssse3),
1632 make_tuple(16, 32, &convolve8_ssse3), 1679 make_tuple(16, 32, &convolve8_ssse3),
1633 make_tuple(32, 32, &convolve8_ssse3), 1680 make_tuple(32, 32, &convolve8_ssse3),
1634 make_tuple(64, 32, &convolve8_ssse3), 1681 make_tuple(64, 32, &convolve8_ssse3),
1635 make_tuple(32, 64, &convolve8_ssse3), 1682 make_tuple(32, 64, &convolve8_ssse3),
1636 make_tuple(64, 64, &convolve8_ssse3))); 1683 make_tuple(64, 64, &convolve8_ssse3)));
1637 #endif 1684 #endif
1638 1685
1639 #if HAVE_AVX2 && HAVE_SSSE3 1686 #if HAVE_AVX2 && HAVE_SSSE3
1640 const ConvolveFunctions convolve8_avx2( 1687 const ConvolveFunctions convolve8_avx2(
1641 vpx_convolve_copy_c, vpx_convolve_avg_c, 1688 vpx_convolve_copy_c, vpx_convolve_avg_c,
1642 vpx_convolve8_horiz_avx2, vpx_convolve8_avg_horiz_ssse3, 1689 vpx_convolve8_horiz_avx2, vpx_convolve8_avg_horiz_ssse3,
1643 vpx_convolve8_vert_avx2, vpx_convolve8_avg_vert_ssse3, 1690 vpx_convolve8_vert_avx2, vpx_convolve8_avg_vert_ssse3,
1644 vpx_convolve8_avx2, vpx_convolve8_avg_ssse3, 0); 1691 vpx_convolve8_avx2, vpx_convolve8_avg_ssse3,
1692 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c,
1693 vpx_scaled_vert_c, vpx_scaled_avg_vert_c,
1694 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0);
1645 1695
1646 INSTANTIATE_TEST_CASE_P(AVX2, ConvolveTest, ::testing::Values( 1696 INSTANTIATE_TEST_CASE_P(AVX2, ConvolveTest, ::testing::Values(
1647 make_tuple(4, 4, &convolve8_avx2), 1697 make_tuple(4, 4, &convolve8_avx2),
1648 make_tuple(8, 4, &convolve8_avx2), 1698 make_tuple(8, 4, &convolve8_avx2),
1649 make_tuple(4, 8, &convolve8_avx2), 1699 make_tuple(4, 8, &convolve8_avx2),
1650 make_tuple(8, 8, &convolve8_avx2), 1700 make_tuple(8, 8, &convolve8_avx2),
1651 make_tuple(8, 16, &convolve8_avx2), 1701 make_tuple(8, 16, &convolve8_avx2),
1652 make_tuple(16, 8, &convolve8_avx2), 1702 make_tuple(16, 8, &convolve8_avx2),
1653 make_tuple(16, 16, &convolve8_avx2), 1703 make_tuple(16, 16, &convolve8_avx2),
1654 make_tuple(32, 16, &convolve8_avx2), 1704 make_tuple(32, 16, &convolve8_avx2),
1655 make_tuple(16, 32, &convolve8_avx2), 1705 make_tuple(16, 32, &convolve8_avx2),
1656 make_tuple(32, 32, &convolve8_avx2), 1706 make_tuple(32, 32, &convolve8_avx2),
1657 make_tuple(64, 32, &convolve8_avx2), 1707 make_tuple(64, 32, &convolve8_avx2),
1658 make_tuple(32, 64, &convolve8_avx2), 1708 make_tuple(32, 64, &convolve8_avx2),
1659 make_tuple(64, 64, &convolve8_avx2))); 1709 make_tuple(64, 64, &convolve8_avx2)));
1660 #endif // HAVE_AVX2 && HAVE_SSSE3 1710 #endif // HAVE_AVX2 && HAVE_SSSE3
1661 1711
1662 #if HAVE_NEON 1712 #if HAVE_NEON
1663 #if HAVE_NEON_ASM 1713 #if HAVE_NEON_ASM
1664 const ConvolveFunctions convolve8_neon( 1714 const ConvolveFunctions convolve8_neon(
1665 vpx_convolve_copy_neon, vpx_convolve_avg_neon, 1715 vpx_convolve_copy_neon, vpx_convolve_avg_neon,
1666 vpx_convolve8_horiz_neon, vpx_convolve8_avg_horiz_neon, 1716 vpx_convolve8_horiz_neon, vpx_convolve8_avg_horiz_neon,
1667 vpx_convolve8_vert_neon, vpx_convolve8_avg_vert_neon, 1717 vpx_convolve8_vert_neon, vpx_convolve8_avg_vert_neon,
1668 vpx_convolve8_neon, vpx_convolve8_avg_neon, 0); 1718 vpx_convolve8_neon, vpx_convolve8_avg_neon,
1719 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c,
1720 vpx_scaled_vert_c, vpx_scaled_avg_vert_c,
1721 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0);
1669 #else // HAVE_NEON 1722 #else // HAVE_NEON
1670 const ConvolveFunctions convolve8_neon( 1723 const ConvolveFunctions convolve8_neon(
1671 vpx_convolve_copy_neon, vpx_convolve_avg_neon, 1724 vpx_convolve_copy_neon, vpx_convolve_avg_neon,
1672 vpx_convolve8_horiz_neon, vpx_convolve8_avg_horiz_neon, 1725 vpx_convolve8_horiz_neon, vpx_convolve8_avg_horiz_neon,
1673 vpx_convolve8_vert_neon, vpx_convolve8_avg_vert_neon, 1726 vpx_convolve8_vert_neon, vpx_convolve8_avg_vert_neon,
1674 vpx_convolve8_neon, vpx_convolve8_avg_neon, 0); 1727 vpx_convolve8_neon, vpx_convolve8_avg_neon,
1728 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c,
1729 vpx_scaled_vert_c, vpx_scaled_avg_vert_c,
1730 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0);
1675 #endif // HAVE_NEON_ASM 1731 #endif // HAVE_NEON_ASM
1676 1732
1677 INSTANTIATE_TEST_CASE_P(NEON, ConvolveTest, ::testing::Values( 1733 INSTANTIATE_TEST_CASE_P(NEON, ConvolveTest, ::testing::Values(
1678 make_tuple(4, 4, &convolve8_neon), 1734 make_tuple(4, 4, &convolve8_neon),
1679 make_tuple(8, 4, &convolve8_neon), 1735 make_tuple(8, 4, &convolve8_neon),
1680 make_tuple(4, 8, &convolve8_neon), 1736 make_tuple(4, 8, &convolve8_neon),
1681 make_tuple(8, 8, &convolve8_neon), 1737 make_tuple(8, 8, &convolve8_neon),
1682 make_tuple(16, 8, &convolve8_neon), 1738 make_tuple(16, 8, &convolve8_neon),
1683 make_tuple(8, 16, &convolve8_neon), 1739 make_tuple(8, 16, &convolve8_neon),
1684 make_tuple(16, 16, &convolve8_neon), 1740 make_tuple(16, 16, &convolve8_neon),
1685 make_tuple(32, 16, &convolve8_neon), 1741 make_tuple(32, 16, &convolve8_neon),
1686 make_tuple(16, 32, &convolve8_neon), 1742 make_tuple(16, 32, &convolve8_neon),
1687 make_tuple(32, 32, &convolve8_neon), 1743 make_tuple(32, 32, &convolve8_neon),
1688 make_tuple(64, 32, &convolve8_neon), 1744 make_tuple(64, 32, &convolve8_neon),
1689 make_tuple(32, 64, &convolve8_neon), 1745 make_tuple(32, 64, &convolve8_neon),
1690 make_tuple(64, 64, &convolve8_neon))); 1746 make_tuple(64, 64, &convolve8_neon)));
1691 #endif // HAVE_NEON 1747 #endif // HAVE_NEON
1692 1748
1693 #if HAVE_DSPR2 1749 #if HAVE_DSPR2
1694 const ConvolveFunctions convolve8_dspr2( 1750 const ConvolveFunctions convolve8_dspr2(
1695 vpx_convolve_copy_dspr2, vpx_convolve_avg_dspr2, 1751 vpx_convolve_copy_dspr2, vpx_convolve_avg_dspr2,
1696 vpx_convolve8_horiz_dspr2, vpx_convolve8_avg_horiz_dspr2, 1752 vpx_convolve8_horiz_dspr2, vpx_convolve8_avg_horiz_dspr2,
1697 vpx_convolve8_vert_dspr2, vpx_convolve8_avg_vert_dspr2, 1753 vpx_convolve8_vert_dspr2, vpx_convolve8_avg_vert_dspr2,
1698 vpx_convolve8_dspr2, vpx_convolve8_avg_dspr2, 0); 1754 vpx_convolve8_dspr2, vpx_convolve8_avg_dspr2,
1755 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c,
1756 vpx_scaled_vert_c, vpx_scaled_avg_vert_c,
1757 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0);
1699 1758
1700 INSTANTIATE_TEST_CASE_P(DSPR2, ConvolveTest, ::testing::Values( 1759 INSTANTIATE_TEST_CASE_P(DSPR2, ConvolveTest, ::testing::Values(
1701 make_tuple(4, 4, &convolve8_dspr2), 1760 make_tuple(4, 4, &convolve8_dspr2),
1702 make_tuple(8, 4, &convolve8_dspr2), 1761 make_tuple(8, 4, &convolve8_dspr2),
1703 make_tuple(4, 8, &convolve8_dspr2), 1762 make_tuple(4, 8, &convolve8_dspr2),
1704 make_tuple(8, 8, &convolve8_dspr2), 1763 make_tuple(8, 8, &convolve8_dspr2),
1705 make_tuple(16, 8, &convolve8_dspr2), 1764 make_tuple(16, 8, &convolve8_dspr2),
1706 make_tuple(8, 16, &convolve8_dspr2), 1765 make_tuple(8, 16, &convolve8_dspr2),
1707 make_tuple(16, 16, &convolve8_dspr2), 1766 make_tuple(16, 16, &convolve8_dspr2),
1708 make_tuple(32, 16, &convolve8_dspr2), 1767 make_tuple(32, 16, &convolve8_dspr2),
1709 make_tuple(16, 32, &convolve8_dspr2), 1768 make_tuple(16, 32, &convolve8_dspr2),
1710 make_tuple(32, 32, &convolve8_dspr2), 1769 make_tuple(32, 32, &convolve8_dspr2),
1711 make_tuple(64, 32, &convolve8_dspr2), 1770 make_tuple(64, 32, &convolve8_dspr2),
1712 make_tuple(32, 64, &convolve8_dspr2), 1771 make_tuple(32, 64, &convolve8_dspr2),
1713 make_tuple(64, 64, &convolve8_dspr2))); 1772 make_tuple(64, 64, &convolve8_dspr2)));
1714 #endif 1773 #endif
1715 1774
1716 #if HAVE_MSA 1775 #if HAVE_MSA
1717 const ConvolveFunctions convolve8_msa( 1776 const ConvolveFunctions convolve8_msa(
1718 vpx_convolve_copy_msa, vpx_convolve_avg_msa, 1777 vpx_convolve_copy_msa, vpx_convolve_avg_msa,
1719 vpx_convolve8_horiz_msa, vpx_convolve8_avg_horiz_msa, 1778 vpx_convolve8_horiz_msa, vpx_convolve8_avg_horiz_msa,
1720 vpx_convolve8_vert_msa, vpx_convolve8_avg_vert_msa, 1779 vpx_convolve8_vert_msa, vpx_convolve8_avg_vert_msa,
1721 vpx_convolve8_msa, vpx_convolve8_avg_msa, 0); 1780 vpx_convolve8_msa, vpx_convolve8_avg_msa,
1781 vpx_scaled_horiz_c, vpx_scaled_avg_horiz_c,
1782 vpx_scaled_vert_c, vpx_scaled_avg_vert_c,
1783 vpx_scaled_2d_c, vpx_scaled_avg_2d_c, 0);
1722 1784
1723 INSTANTIATE_TEST_CASE_P(MSA, ConvolveTest, ::testing::Values( 1785 INSTANTIATE_TEST_CASE_P(MSA, ConvolveTest, ::testing::Values(
1724 make_tuple(4, 4, &convolve8_msa), 1786 make_tuple(4, 4, &convolve8_msa),
1725 make_tuple(8, 4, &convolve8_msa), 1787 make_tuple(8, 4, &convolve8_msa),
1726 make_tuple(4, 8, &convolve8_msa), 1788 make_tuple(4, 8, &convolve8_msa),
1727 make_tuple(8, 8, &convolve8_msa), 1789 make_tuple(8, 8, &convolve8_msa),
1728 make_tuple(16, 8, &convolve8_msa), 1790 make_tuple(16, 8, &convolve8_msa),
1729 make_tuple(8, 16, &convolve8_msa), 1791 make_tuple(8, 16, &convolve8_msa),
1730 make_tuple(16, 16, &convolve8_msa), 1792 make_tuple(16, 16, &convolve8_msa),
1731 make_tuple(32, 16, &convolve8_msa), 1793 make_tuple(32, 16, &convolve8_msa),
1732 make_tuple(16, 32, &convolve8_msa), 1794 make_tuple(16, 32, &convolve8_msa),
1733 make_tuple(32, 32, &convolve8_msa), 1795 make_tuple(32, 32, &convolve8_msa),
1734 make_tuple(64, 32, &convolve8_msa), 1796 make_tuple(64, 32, &convolve8_msa),
1735 make_tuple(32, 64, &convolve8_msa), 1797 make_tuple(32, 64, &convolve8_msa),
1736 make_tuple(64, 64, &convolve8_msa))); 1798 make_tuple(64, 64, &convolve8_msa)));
1737 #endif // HAVE_MSA 1799 #endif // HAVE_MSA
1738 } // namespace 1800 } // namespace
OLDNEW
« no previous file with comments | « source/libvpx/test/consistency_test.cc ('k') | source/libvpx/test/cpu_speed_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698