Revert "Enable SIMD for intrabc prediction"
This reverts commit 6bcca97a22389e22a0033716cbbf5a139e495e30.
This causes TSan failures on some content:
WARNING: ThreadSanitizer: data race (pid=1530)
Write of size 4 at 0x7f45b875be90 by thread T295 (mutexes: write M0):
#0 dc_store_4xh aom_dsp/x86/intrapred_sse2.c:21:22
#1 aom_dc_predictor_4x8_sse2 aom_dsp/x86/intrapred_sse2.c:121:3
#2 build_intra_predictors av1/common/reconintra.c
#3 av1_predict_intra_block av1/common/reconintra.c:1644:3
...
Previous read of size 7 at 0x7f45b875be90 by thread T301 (mutexes: write M1):
#0 av1_convolve_y_sr_avx2 av1/common/x86/convolve_avx2.c:60:14
#1 av1_convolve_2d_facade av1/common/convolve.c
Bug: b/248395667
Change-Id: I40666fb48a73eb5ddd9d545b59f42c8b140cd407
diff --git a/av1/common/convolve.c b/av1/common/convolve.c
index ed77e0d..63dda39 100644
--- a/av1/common/convolve.c
+++ b/av1/common/convolve.c
@@ -567,6 +567,28 @@
const InterpFilterParams *filter_params_x = interp_filters[0];
const InterpFilterParams *filter_params_y = interp_filters[1];
+ // TODO(jingning, yunqing): Add SIMD support to 2-tap filter case.
+ // Do we have SIMD support to 4-tap case?
+ // 2-tap filter indicates that it is for IntraBC.
+ if (filter_params_x->taps == 2 || filter_params_y->taps == 2) {
+ assert(filter_params_x->taps == 2 && filter_params_y->taps == 2);
+ assert(!scaled);
+ if (subpel_x_qn && subpel_y_qn) {
+ av1_convolve_2d_sr_c(src, src_stride, dst, dst_stride, w, h,
+ filter_params_x, filter_params_y, subpel_x_qn,
+ subpel_y_qn, conv_params);
+ return;
+ } else if (subpel_x_qn) {
+ av1_convolve_x_sr_c(src, src_stride, dst, dst_stride, w, h,
+ filter_params_x, subpel_x_qn, conv_params);
+ return;
+ } else if (subpel_y_qn) {
+ av1_convolve_y_sr_c(src, src_stride, dst, dst_stride, w, h,
+ filter_params_y, subpel_y_qn);
+ return;
+ }
+ }
+
if (scaled) {
convolve_2d_scale_wrapper(src, src_stride, dst, dst_stride, w, h,
filter_params_x, filter_params_y, subpel_x_qn,
diff --git a/av1/common/filter.h b/av1/common/filter.h
index cca538e..4344aea 100644
--- a/av1/common/filter.h
+++ b/av1/common/filter.h
@@ -192,20 +192,14 @@
// A special 2-tap bilinear filter for IntraBC chroma. IntraBC uses full pixel
// MV for luma. If sub-sampling exists, chroma may possibly use half-pel MV.
-DECLARE_ALIGNED(256, static const InterpKernel,
- av1_intrabc_bilinear_filter[SUBPEL_SHIFTS]) = {
- { 0, 0, 0, 128, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 64, 64, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 },
+DECLARE_ALIGNED(256, static const int16_t,
+ av1_intrabc_bilinear_filter[2 * SUBPEL_SHIFTS]) = {
+ 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
static const InterpFilterParams av1_intrabc_filter_params = {
- (const int16_t *)av1_intrabc_bilinear_filter, SUBPEL_TAPS, BILINEAR
+ av1_intrabc_bilinear_filter, 2, BILINEAR
};
DECLARE_ALIGNED(256, static const InterpKernel,