OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |