diff --git a/README.chromium b/README.chromium index 6ad57723c..46ed8e341 100644 --- a/README.chromium +++ b/README.chromium @@ -1,6 +1,6 @@ Name: libyuv URL: https://chromium.googlesource.com/libyuv/libyuv/ -Version: 1906 +Version: 1907 License: BSD-3-Clause License File: LICENSE Shipped: yes diff --git a/include/libyuv/row.h b/include/libyuv/row.h index e911eddd5..6e8f46f5c 100644 --- a/include/libyuv/row.h +++ b/include/libyuv/row.h @@ -895,36 +895,73 @@ extern "C" { #define HAS_RAWTOYJROW_LASX #endif +#if defined(__riscv_v_intrinsic) && __riscv_v_intrinsic >= 12000 && \ + !defined(LIBYUV_DISABLE_RVV) +#define LIBYUV_DISABLE_RVV 1 +#endif + #if !defined(LIBYUV_DISABLE_RVV) && defined(__riscv_vector) -#if __riscv_v_intrinsic > 11000 +#if defined(__riscv_v_intrinsic) && __riscv_v_intrinsic > 11000 // Since v0.12, TUPLE_TYPE is introduced for segment load and store. #define LIBYUV_RVV_HAS_TUPLE_TYPE // Since v0.12, VXRM(fixed-point rounding mode) is included in arguments of // fixed-point intrinsics. #define LIBYUV_RVV_HAS_VXRM_ARG #endif +#endif -#define HAS_COPYROW_RVV -#define HAS_AB64TOARGBROW_RVV +// The following are available for RVV 1.2 +#if !defined(LIBYUV_DISABLE_RVV) && defined(__riscv_vector) #define HAS_ABGRTOYJROW_RVV #define HAS_ABGRTOYROW_RVV #define HAS_AR64TOARGBROW_RVV -#define HAS_AR64TOAB64ROW_RVV -#define HAS_ARGBATTENUATEROW_RVV -#define HAS_ARGBBLENDROW_RVV #define HAS_ARGBCOPYYTOALPHAROW_RVV #define HAS_ARGBEXTRACTALPHAROW_RVV -#define HAS_ARGBTOAB64ROW_RVV -#define HAS_ARGBTOABGRROW_RVV #define HAS_ARGBTOAR64ROW_RVV -#define HAS_ARGBTOBGRAROW_RVV -#define HAS_ARGBTORAWROW_RVV -#define HAS_ARGBTORGB24ROW_RVV -#define HAS_ARGBTORGBAROW_RVV #define HAS_ARGBTOYJROW_RVV #define HAS_ARGBTOYMATRIXROW_RVV #define HAS_ARGBTOYROW_RVV #define HAS_BGRATOYROW_RVV +#define HAS_COPYROW_RVV +#define HAS_INTERPOLATEROW_RVV +#define HAS_RAWTOYJROW_RVV +#define HAS_RAWTOYROW_RVV +#define HAS_RGB24TOYJROW_RVV +#define HAS_RGB24TOYROW_RVV +#define HAS_RGBATOYJROW_RVV +#define HAS_RGBATOYMATRIXROW_RVV +#define HAS_RGBATOYROW_RVV +#define HAS_RGBTOYMATRIXROW_RVV +#define HAS_SPLITARGBROW_RVV +#define HAS_SPLITRGBROW_RVV +#define HAS_SPLITUVROW_RVV +#define HAS_SPLITXRGBROW_RVV +#endif + +// The following are available for RVV 1.1 +// TODO(fbarchard): Port to RVV 1.2 (tuple) +// missing support for vcreate_v: +// __riscv_vcreate_v_u16m2x2 +// __riscv_vcreate_v_u16m2x4 +// __riscv_vcreate_v_u16m4x2 +// __riscv_vcreate_v_u8m1x3 +// __riscv_vcreate_v_u8m1x4 +// __riscv_vcreate_v_u8m2x2 +// __riscv_vcreate_v_u8m2x3 +// __riscv_vcreate_v_u8m2x4 +// __riscv_vcreate_v_u8m4x2 +#if !defined(LIBYUV_DISABLE_RVV) && defined(__riscv_vector) && \ + !defined(LIBYUV_RVV_HAS_TUPLE_TYPE) +#define HAS_AB64TOARGBROW_RVV +#define HAS_AR64TOAB64ROW_RVV +#define HAS_ARGBATTENUATEROW_RVV +#define HAS_ARGBBLENDROW_RVV +#define HAS_ARGBTOAB64ROW_RVV +#define HAS_ARGBTOABGRROW_RVV +#define HAS_ARGBTOBGRAROW_RVV +#define HAS_ARGBTORAWROW_RVV +#define HAS_ARGBTORGB24ROW_RVV +#define HAS_ARGBTORGBAROW_RVV #define HAS_BLENDPLANEROW_RVV #define HAS_I400TOARGBROW_RVV #define HAS_I422ALPHATOARGBROW_RVV @@ -934,7 +971,6 @@ extern "C" { #define HAS_I444ALPHATOARGBROW_RVV #define HAS_I444TOARGBROW_RVV #define HAS_I444TORGB24ROW_RVV -#define HAS_INTERPOLATEROW_RVV #define HAS_J400TOARGBROW_RVV #define HAS_MERGEARGBROW_RVV #define HAS_MERGERGBROW_RVV @@ -947,20 +983,8 @@ extern "C" { #define HAS_RAWTOARGBROW_RVV #define HAS_RAWTORGB24ROW_RVV #define HAS_RAWTORGBAROW_RVV -#define HAS_RAWTOYJROW_RVV -#define HAS_RAWTOYROW_RVV #define HAS_RGB24TOARGBROW_RVV -#define HAS_RGB24TOYJROW_RVV -#define HAS_RGB24TOYROW_RVV #define HAS_RGBATOARGBROW_RVV -#define HAS_RGBATOYJROW_RVV -#define HAS_RGBATOYMATRIXROW_RVV -#define HAS_RGBATOYROW_RVV -#define HAS_RGBTOYMATRIXROW_RVV -#define HAS_SPLITARGBROW_RVV -#define HAS_SPLITRGBROW_RVV -#define HAS_SPLITUVROW_RVV -#define HAS_SPLITXRGBROW_RVV #endif #if defined(_MSC_VER) && !defined(__CLR_VER) && !defined(__clang__) diff --git a/include/libyuv/scale_row.h b/include/libyuv/scale_row.h index ccee9ada4..eef68eb4b 100644 --- a/include/libyuv/scale_row.h +++ b/include/libyuv/scale_row.h @@ -162,39 +162,49 @@ extern "C" { #define HAS_SCALEROWDOWN34_LSX #endif -#if !defined(LIBYUV_DISABLE_RVV) && defined(__riscv_vector) -#define HAS_SCALEADDROW_RVV -// TODO: Test ScaleARGBRowDownEven_RVV and enable it -// #define HAS_SCALEARGBROWDOWNEVEN_RVV -#if defined(__riscv_zve64x) +// The following are available on RVV with 64 bit elements +// TODO: Update compiler to support 64 bit +#if !defined(LIBYUV_DISABLE_RVV) && defined(__riscv_vector) && \ + defined(__riscv_zve64x) #define HAS_SCALEUVROWDOWN4_RVV -#endif -#define HAS_SCALEUVROWDOWNEVEN_RVV -#if __riscv_v_intrinsic == 11000 -#define HAS_SCALEARGBFILTERCOLS_RVV -#endif #define HAS_SCALEARGBROWDOWN2_RVV +#endif + +// The following are available on RVV 1.1 +// TODO: Port to RVV 1.2 +#if !defined(LIBYUV_DISABLE_RVV) && defined(__riscv_vector) && \ + defined(__riscv_v_intrinsic) && __riscv_v_intrinsic == 11000 +#define HAS_SCALEROWDOWN34_0_BOX_RVV +#define HAS_SCALEROWDOWN34_1_BOX_RVV +#define HAS_SCALEROWDOWN38_2_BOX_RVV +#define HAS_SCALEROWDOWN38_3_BOX_RVV +#define HAS_SCALEUVROWUP2_BILINEAR_RVV +#define HAS_SCALEUVROWUP2_LINEAR_RVV +#define HAS_SCALEROWDOWN34_RVV +#define HAS_SCALEROWDOWN38_RVV +#define HAS_SCALEROWUP2_BILINEAR_RVV +#define HAS_SCALEROWUP2_LINEAR_RVV +#endif + +// The following are available on RVV +#if !defined(LIBYUV_DISABLE_RVV) && defined(__riscv_vector) && \ + defined(__riscv_v_intrinsic) && __riscv_v_intrinsic == 11000 +#define HAS_SCALEARGBFILTERCOLS_RVV #define HAS_SCALEARGBROWDOWN2BOX_RVV #define HAS_SCALEARGBROWDOWN2LINEAR_RVV #define HAS_SCALEARGBROWDOWNEVENBOX_RVV -#define HAS_SCALEROWDOWN2_RVV #define HAS_SCALEROWDOWN2BOX_RVV +#define HAS_SCALEADDROW_RVV +// TODO: Test ScaleARGBRowDownEven_RVV and enable it +// #define HAS_SCALEARGBROWDOWNEVEN_RVV +#define HAS_SCALEUVROWDOWNEVEN_RVV +#define HAS_SCALEROWDOWN2_RVV #define HAS_SCALEROWDOWN2LINEAR_RVV -#define HAS_SCALEROWDOWN34_0_BOX_RVV -#define HAS_SCALEROWDOWN34_1_BOX_RVV -#define HAS_SCALEROWDOWN34_RVV -#define HAS_SCALEROWDOWN38_2_BOX_RVV -#define HAS_SCALEROWDOWN38_3_BOX_RVV -#define HAS_SCALEROWDOWN38_RVV #define HAS_SCALEROWDOWN4_RVV #define HAS_SCALEROWDOWN4BOX_RVV -#define HAS_SCALEROWUP2_BILINEAR_RVV -#define HAS_SCALEROWUP2_LINEAR_RVV #define HAS_SCALEUVROWDOWN2_RVV #define HAS_SCALEUVROWDOWN2BOX_RVV #define HAS_SCALEUVROWDOWN2LINEAR_RVV -#define HAS_SCALEUVROWUP2_BILINEAR_RVV -#define HAS_SCALEUVROWUP2_LINEAR_RVV #endif // Scale ARGB vertically with bilinear interpolation. diff --git a/include/libyuv/version.h b/include/libyuv/version.h index 1761ab423..2b72bc4e2 100644 --- a/include/libyuv/version.h +++ b/include/libyuv/version.h @@ -11,6 +11,6 @@ #ifndef INCLUDE_LIBYUV_VERSION_H_ #define INCLUDE_LIBYUV_VERSION_H_ -#define LIBYUV_VERSION 1906 +#define LIBYUV_VERSION 1907 #endif // INCLUDE_LIBYUV_VERSION_H_ diff --git a/source/scale_argb.cc b/source/scale_argb.cc index c009e0574..5fa58fd0f 100644 --- a/source/scale_argb.cc +++ b/source/scale_argb.cc @@ -139,7 +139,9 @@ static void ScaleARGBDown2(int src_width, } } #endif -#if defined(HAS_SCALEARGBROWDOWN2_RVV) +#if defined(HAS_SCALEARGBROWDOWN2_RVV) && \ + defined(HAS_SCALEARGBROWDOWN2LINEAR_RVV) && \ + defined(HAS_SCALEARGBROWDOWN2BOX_RVV) if (TestCpuFlag(kCpuHasRVV)) { ScaleARGBRowDown2 = filtering == kFilterNone @@ -215,7 +217,7 @@ static int ScaleARGBDown4Box(int src_width, ScaleARGBRowDown2 = ScaleARGBRowDown2Box_SME; } #endif -#if defined(HAS_SCALEARGBROWDOWN2_RVV) +#if defined(HAS_SCALEARGBROWDOWN2BOX_RVV) if (TestCpuFlag(kCpuHasRVV)) { ScaleARGBRowDown2 = ScaleARGBRowDown2Box_RVV; } diff --git a/source/scale_rvv.cc b/source/scale_rvv.cc index 4617e1a96..877ccdf96 100644 --- a/source/scale_rvv.cc +++ b/source/scale_rvv.cc @@ -95,6 +95,7 @@ void ScaleAddRow_RVV(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width) { #endif #ifdef HAS_SCALEARGBROWDOWN2_RVV +// TODO: Reimplement similar to linear with vlseg2 so u64 is not required void ScaleARGBRowDown2_RVV(const uint8_t* src_argb, ptrdiff_t src_stride, uint8_t* dst_argb,