* [FFmpeg-devel] [PATCH 02/10] lavc/vp9dsp: R-V V ipred hor
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
@ 2024-05-04 15:03 ` uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 03/10] lavc/vp9dsp: R-V V ipred tm uk7b
` (7 subsequent siblings)
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_hor_8x8_8bpp_c: 74.7
vp9_hor_8x8_8bpp_rvv_i32: 35.7
vp9_hor_16x16_8bpp_c: 175.5
vp9_hor_16x16_8bpp_rvv_i32: 80.2
vp9_hor_32x32_8bpp_c: 510.2
vp9_hor_32x32_8bpp_rvv_i32: 264.0
---
libavcodec/riscv/vp9_intra_rvv.S | 56 ++++++++++++++++++++++++++++++++
libavcodec/riscv/vp9dsp.h | 6 ++++
libavcodec/riscv/vp9dsp_init.c | 3 ++
3 files changed, 65 insertions(+)
diff --git a/libavcodec/riscv/vp9_intra_rvv.S b/libavcodec/riscv/vp9_intra_rvv.S
index b5f0f9d3c3..1b270215fb 100644
--- a/libavcodec/riscv/vp9_intra_rvv.S
+++ b/libavcodec/riscv/vp9_intra_rvv.S
@@ -148,3 +148,59 @@ func ff_v_8x8_rvv, zve64x
ret
endfunc
+
+func ff_h_32x32_rvv, zve32x
+ li t0, 32
+ addi a2, a2, 31
+ vsetvli zero, t0, e8, m2, ta, ma
+
+ .rept 2
+ .irp n 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30
+ lbu t1, (a2)
+ addi a2, a2, -1
+ vmv.v.x v\n, t1
+ .endr
+ .irp n 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30
+ vse8.v v\n, (a0)
+ add a0, a0, a1
+ .endr
+ .endr
+
+ ret
+endfunc
+
+func ff_h_16x16_rvv, zve32x
+ addi a2, a2, 15
+ vsetivli zero, 16, e8, m1, ta, ma
+
+ .irp n 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
+ lbu t1, (a2)
+ addi a2, a2, -1
+ vmv.v.x v\n, t1
+ .endr
+ .irp n 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
+ vse8.v v\n, (a0)
+ add a0, a0, a1
+ .endr
+ vse8.v v23, (a0)
+
+ ret
+endfunc
+
+func ff_h_8x8_rvv, zve32x
+ addi a2, a2, 7
+ vsetivli zero, 8, e8, mf2, ta, ma
+
+ .irp n 8, 9, 10, 11, 12, 13, 14, 15
+ lbu t1, (a2)
+ addi a2, a2, -1
+ vmv.v.x v\n, t1
+ .endr
+ .irp n 8, 9, 10, 11, 12, 13, 14
+ vse8.v v\n, (a0)
+ add a0, a0, a1
+ .endr
+ vse8.v v15, (a0)
+
+ ret
+endfunc
diff --git a/libavcodec/riscv/vp9dsp.h b/libavcodec/riscv/vp9dsp.h
index 113397ce86..d4c7652286 100644
--- a/libavcodec/riscv/vp9dsp.h
+++ b/libavcodec/riscv/vp9dsp.h
@@ -66,6 +66,12 @@ void ff_v_16x16_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
const uint8_t *a);
void ff_v_8x8_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
const uint8_t *a);
+void ff_h_32x32_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
+ const uint8_t *a);
+void ff_h_16x16_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
+ const uint8_t *a);
+void ff_h_8x8_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
+ const uint8_t *a);
#define VP9_8TAP_RISCV_RVV_FUNC(SIZE, type, type_idx) \
void ff_put_8tap_##type##_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \
diff --git a/libavcodec/riscv/vp9dsp_init.c b/libavcodec/riscv/vp9dsp_init.c
index 9c550d40b5..16aeeb260a 100644
--- a/libavcodec/riscv/vp9dsp_init.c
+++ b/libavcodec/riscv/vp9dsp_init.c
@@ -54,6 +54,9 @@ static av_cold void vp9dsp_intrapred_init_rvv(VP9DSPContext *dsp, int bpp)
dsp->intra_pred[TX_16X16][TOP_DC_PRED] = ff_dc_top_16x16_rvv;
dsp->intra_pred[TX_32X32][VERT_PRED] = ff_v_32x32_rvv;
dsp->intra_pred[TX_16X16][VERT_PRED] = ff_v_16x16_rvv;
+ dsp->intra_pred[TX_32X32][HOR_PRED] = ff_h_32x32_rvv;
+ dsp->intra_pred[TX_16X16][HOR_PRED] = ff_h_16x16_rvv;
+ dsp->intra_pred[TX_8X8][HOR_PRED] = ff_h_8x8_rvv;
}
#endif
}
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread
* [FFmpeg-devel] [PATCH 03/10] lavc/vp9dsp: R-V V ipred tm
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 02/10] lavc/vp9dsp: R-V V ipred hor uk7b
@ 2024-05-04 15:03 ` uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 04/10] lavc/vp9dsp: R-V mc copy_avg uk7b
` (6 subsequent siblings)
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_tm_4x4_8bpp_c: 116.5
vp9_tm_4x4_8bpp_rvv_i32: 43.5
vp9_tm_8x8_8bpp_c: 416.2
vp9_tm_8x8_8bpp_rvv_i32: 86.0
vp9_tm_16x16_8bpp_c: 1665.5
vp9_tm_16x16_8bpp_rvv_i32: 187.2
vp9_tm_32x32_8bpp_c: 6974.2
vp9_tm_32x32_8bpp_rvv_i32: 625.7
---
libavcodec/riscv/vp9_intra_rvv.S | 143 +++++++++++++++++++++++++++++++
libavcodec/riscv/vp9dsp.h | 8 ++
libavcodec/riscv/vp9dsp_init.c | 4 +
3 files changed, 155 insertions(+)
diff --git a/libavcodec/riscv/vp9_intra_rvv.S b/libavcodec/riscv/vp9_intra_rvv.S
index 1b270215fb..c6ddd541e4 100644
--- a/libavcodec/riscv/vp9_intra_rvv.S
+++ b/libavcodec/riscv/vp9_intra_rvv.S
@@ -204,3 +204,146 @@ func ff_h_8x8_rvv, zve32x
ret
endfunc
+
+.macro tm_sum dst, top, offset
+ lbu t3, \offset(a2)
+ sub t3, t3, a4
+ vadd.vx \dst, \top, t3
+.endm
+
+func ff_tm_32x32_rvv, zve32x
+ lbu a4, -1(a3)
+ li t5, 32
+
+ .macro tm_sum32 n1,n2,n3,n4,n5,n6,n7,n8
+
+ vsetvli zero, t5, e16, m4, ta, ma
+ vle8.v v8, (a3)
+ vzext.vf2 v28, v8
+
+ tm_sum v0, v28, \n1
+ tm_sum v4, v28, \n2
+ tm_sum v8, v28, \n3
+ tm_sum v12, v28, \n4
+ tm_sum v16, v28, \n5
+ tm_sum v20, v28, \n6
+ tm_sum v24, v28, \n7
+ tm_sum v28, v28, \n8
+
+ .irp n 0, 4, 8, 12, 16, 20, 24, 28
+ vmax.vx v\n, v\n, zero
+ .endr
+
+ vsetvli zero, zero, e8, m2, ta, ma
+ .irp n 0, 4, 8, 12, 16, 20, 24, 28
+ vnclipu.wi v\n, v\n, 0
+ vse8.v v\n, (a0)
+ add a0, a0, a1
+ .endr
+
+ .endm
+
+ tm_sum32 31, 30, 29, 28, 27, 26, 25, 24
+ tm_sum32 23, 22, 21, 20, 19, 18, 17, 16
+ tm_sum32 15, 14, 13, 12, 11, 10, 9, 8
+ tm_sum32 7, 6, 5, 4, 3, 2, 1, 0
+
+ ret
+endfunc
+
+func ff_tm_16x16_rvv, zve32x
+ vsetivli zero, 16, e16, m2, ta, ma
+ vle8.v v8, (a3)
+ vzext.vf2 v30, v8
+ lbu a4, -1(a3)
+
+ tm_sum v0, v30, 15
+ tm_sum v2, v30, 14
+ tm_sum v4, v30, 13
+ tm_sum v6, v30, 12
+ tm_sum v8, v30, 11
+ tm_sum v10, v30, 10
+ tm_sum v12, v30, 9
+ tm_sum v14, v30, 8
+ tm_sum v16, v30, 7
+ tm_sum v18, v30, 6
+ tm_sum v20, v30, 5
+ tm_sum v22, v30, 4
+ tm_sum v24, v30, 3
+ tm_sum v26, v30, 2
+ tm_sum v28, v30, 1
+ tm_sum v30, v30, 0
+
+ .irp n 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30
+ vmax.vx v\n, v\n, zero
+ .endr
+
+ vsetvli zero, zero, e8, m1, ta, ma
+ .irp n 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28
+ vnclipu.wi v\n, v\n, 0
+ vse8.v v\n, (a0)
+ add a0, a0, a1
+ .endr
+ vnclipu.wi v30, v30, 0
+ vse8.v v30, (a0)
+
+ ret
+endfunc
+
+func ff_tm_8x8_rvv, zve32x
+ vsetivli zero, 8, e16, m1, ta, ma
+ vle8.v v8, (a3)
+ vzext.vf2 v28, v8
+ lbu a4, -1(a3)
+
+ tm_sum v16, v28, 7
+ tm_sum v17, v28, 6
+ tm_sum v18, v28, 5
+ tm_sum v19, v28, 4
+ tm_sum v20, v28, 3
+ tm_sum v21, v28, 2
+ tm_sum v22, v28, 1
+ tm_sum v23, v28, 0
+
+ .irp n 16, 17, 18, 19, 20, 21, 22, 23
+ vmax.vx v\n, v\n, zero
+ .endr
+
+ vsetvli zero, zero, e8, mf2, ta, ma
+ .irp n 16, 17, 18, 19, 20, 21, 22
+ vnclipu.wi v\n, v\n, 0
+ vse8.v v\n, (a0)
+ add a0, a0, a1
+ .endr
+ vnclipu.wi v24, v23, 0
+ vse8.v v24, (a0)
+
+ ret
+endfunc
+
+func ff_tm_4x4_rvv, zve32x
+ vsetivli zero, 4, e16, mf2, ta, ma
+ vle8.v v8, (a3)
+ vzext.vf2 v28, v8
+ lbu a4, -1(a3)
+
+ tm_sum v16, v28, 3
+ tm_sum v17, v28, 2
+ tm_sum v18, v28, 1
+ tm_sum v19, v28, 0
+
+ .irp n 16, 17, 18, 19
+ vmax.vx v\n, v\n, zero
+ .endr
+
+ vsetvli zero, zero, e8, mf4, ta, ma
+ .irp n 16, 17, 18
+ vnclipu.wi v\n, v\n, 0
+ vse8.v v\n, (a0)
+ add a0, a0, a1
+ .endr
+ vnclipu.wi v24, v19, 0
+ vse8.v v24, (a0)
+
+ ret
+endfunc
diff --git a/libavcodec/riscv/vp9dsp.h b/libavcodec/riscv/vp9dsp.h
index d4c7652286..36e1a8795b 100644
--- a/libavcodec/riscv/vp9dsp.h
+++ b/libavcodec/riscv/vp9dsp.h
@@ -72,6 +72,14 @@ void ff_h_16x16_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
const uint8_t *a);
void ff_h_8x8_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
const uint8_t *a);
+void ff_tm_32x32_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
+ const uint8_t *a);
+void ff_tm_16x16_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
+ const uint8_t *a);
+void ff_tm_8x8_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
+ const uint8_t *a);
+void ff_tm_4x4_rvv(uint8_t *dst, ptrdiff_t stride, const uint8_t *l,
+ const uint8_t *a);
#define VP9_8TAP_RISCV_RVV_FUNC(SIZE, type, type_idx) \
void ff_put_8tap_##type##_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \
diff --git a/libavcodec/riscv/vp9dsp_init.c b/libavcodec/riscv/vp9dsp_init.c
index 16aeeb260a..f08c8f6a42 100644
--- a/libavcodec/riscv/vp9dsp_init.c
+++ b/libavcodec/riscv/vp9dsp_init.c
@@ -57,6 +57,10 @@ static av_cold void vp9dsp_intrapred_init_rvv(VP9DSPContext *dsp, int bpp)
dsp->intra_pred[TX_32X32][HOR_PRED] = ff_h_32x32_rvv;
dsp->intra_pred[TX_16X16][HOR_PRED] = ff_h_16x16_rvv;
dsp->intra_pred[TX_8X8][HOR_PRED] = ff_h_8x8_rvv;
+ dsp->intra_pred[TX_32X32][TM_VP8_PRED] = ff_tm_32x32_rvv;
+ dsp->intra_pred[TX_16X16][TM_VP8_PRED] = ff_tm_16x16_rvv;
+ dsp->intra_pred[TX_8X8][TM_VP8_PRED] = ff_tm_8x8_rvv;
+ dsp->intra_pred[TX_4X4][TM_VP8_PRED] = ff_tm_4x4_rvv;
}
#endif
}
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread
* [FFmpeg-devel] [PATCH 04/10] lavc/vp9dsp: R-V mc copy_avg
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 02/10] lavc/vp9dsp: R-V V ipred hor uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 03/10] lavc/vp9dsp: R-V V ipred tm uk7b
@ 2024-05-04 15:03 ` uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 05/10] lavc/vp9dsp: R-V V mc bilin h uk7b
` (5 subsequent siblings)
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_avg4_8bpp_c: 1.2
vp9_avg4_8bpp_rvv_i64: 1.0
vp9_avg8_8bpp_c: 3.7
vp9_avg8_8bpp_rvv_i64: 1.5
vp9_avg16_8bpp_c: 14.7
vp9_avg16_8bpp_rvv_i64: 3.5
vp9_avg32_8bpp_c: 57.7
vp9_avg32_8bpp_rvv_i64: 10.0
vp9_avg64_8bpp_c: 229.0
vp9_avg64_8bpp_rvv_i64: 31.7
vp9_put4_8bpp_c: 0.7
vp9_put4_8bpp_rvi: 0.2
vp9_put8_8bpp_c: 2.5
vp9_put8_8bpp_rvi: 0.5
vp9_put16_8bpp_c: 16.5
vp9_put16_8bpp_rvv_i64: 1.7
vp9_put32_8bpp_c: 37.2
vp9_put32_8bpp_rvv_i64: 5.7
vp9_put64_8bpp_c: 91.2
vp9_put64_8bpp_rvv_i64: 19.7
---
libavcodec/riscv/Makefile | 4 ++-
libavcodec/riscv/vp9_mc_rvi.S | 43 +++++++++++++++++++++++
libavcodec/riscv/vp9_mc_rvv.S | 64 ++++++++++++++++++++++++++++++++++
libavcodec/riscv/vp9dsp_init.c | 47 +++++++++++++++++++++++++
4 files changed, 157 insertions(+), 1 deletion(-)
create mode 100644 libavcodec/riscv/vp9_mc_rvi.S
create mode 100644 libavcodec/riscv/vp9_mc_rvv.S
diff --git a/libavcodec/riscv/Makefile b/libavcodec/riscv/Makefile
index 050c08ee61..43b5c21cf4 100644
--- a/libavcodec/riscv/Makefile
+++ b/libavcodec/riscv/Makefile
@@ -63,6 +63,8 @@ RVV-OBJS-$(CONFIG_VC1DSP) += riscv/vc1dsp_rvv.o
OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_init.o
RVV-OBJS-$(CONFIG_VP8DSP) += riscv/vp8dsp_rvv.o
OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9dsp_init.o
-RVV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvv.o
+RV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_mc_rvi.o
+RVV-OBJS-$(CONFIG_VP9_DECODER) += riscv/vp9_intra_rvv.o \
+ riscv/vp9_mc_rvv.o
OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_init.o
RVV-OBJS-$(CONFIG_VORBIS_DECODER) += riscv/vorbisdsp_rvv.o
diff --git a/libavcodec/riscv/vp9_mc_rvi.S b/libavcodec/riscv/vp9_mc_rvi.S
new file mode 100644
index 0000000000..03d8dbbbae
--- /dev/null
+++ b/libavcodec/riscv/vp9_mc_rvi.S
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2024 Institue of Software Chinese Academy of Sciences (ISCAS).
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/riscv/asm.S"
+
+func ff_copy8_rvi
+1:
+ addi a4, a4, -1
+ ld t4, (a2)
+ sd t4, (a0)
+ add a2, a2, a3
+ add a0, a0, a1
+ bnez a4, 1b
+ ret
+endfunc
+
+func ff_copy4_rvi
+1:
+ addi a4, a4, -1
+ lw t4, (a2)
+ sw t4, (a0)
+ add a2, a2, a3
+ add a0, a0, a1
+ bnez a4, 1b
+ ret
+endfunc
diff --git a/libavcodec/riscv/vp9_mc_rvv.S b/libavcodec/riscv/vp9_mc_rvv.S
new file mode 100644
index 0000000000..ba9ec3431f
--- /dev/null
+++ b/libavcodec/riscv/vp9_mc_rvv.S
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2024 Institue of Software Chinese Academy of Sciences (ISCAS).
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/riscv/asm.S"
+
+.macro copy_avg len type
+.ifc \type,avg
+ csrwi vxrm, 0
+.endif
+.ifc \len,64
+ li t5, 64
+ vsetvli t0, t5, e8, m4, ta, ma
+.elseif \len == 32
+ li t5, 32
+ vsetvli t0, t5, e8, m2, ta, ma
+.elseif \len == 16
+ vsetivli t0, 16, e8, m1, ta, ma
+.elseif \len == 8
+ vsetivli t0, 8, e8, mf2, ta, ma
+.elseif \len == 4
+ vsetivli t0, 4, e8, mf4, ta, ma
+.endif
+1:
+ addi a4, a4, -1
+ vle8.v v8, (a2)
+.ifc \type,avg
+ vle8.v v16, (a0)
+ vaaddu.vv v8, v8, v16
+.endif
+ vse8.v v8, (a0)
+ add a2, a2, a3
+ add a0, a0, a1
+ bnez a4, 1b
+ ret
+.endm
+
+.irp len 64, 32, 16
+func ff_copy\len\()_rvv, zve32x
+ copy_avg \len copy
+endfunc
+.endr
+
+.irp len 64, 32, 16, 8, 4
+func ff_avg\len\()_rvv, zve32x
+ copy_avg \len avg
+endfunc
+.endr
diff --git a/libavcodec/riscv/vp9dsp_init.c b/libavcodec/riscv/vp9dsp_init.c
index f08c8f6a42..da33e15e97 100644
--- a/libavcodec/riscv/vp9dsp_init.c
+++ b/libavcodec/riscv/vp9dsp_init.c
@@ -65,7 +65,54 @@ static av_cold void vp9dsp_intrapred_init_rvv(VP9DSPContext *dsp, int bpp)
#endif
}
+static av_cold void vp9dsp_mc_init_rvv(VP9DSPContext *dsp, int bpp)
+{
+#if HAVE_RV
+ int flags = av_get_cpu_flags();
+
+ if (bpp == 8 && flags & AV_CPU_FLAG_RVI) {
+ dsp->mc[3][FILTER_8TAP_SMOOTH][0][0][0] = ff_copy8_rvi;
+ dsp->mc[3][FILTER_8TAP_REGULAR][0][0][0] = ff_copy8_rvi;
+ dsp->mc[3][FILTER_8TAP_SHARP][0][0][0] = ff_copy8_rvi;
+ dsp->mc[3][FILTER_BILINEAR][0][0][0] = ff_copy8_rvi;
+ dsp->mc[4][FILTER_8TAP_SMOOTH][0][0][0] = ff_copy4_rvi;
+ dsp->mc[4][FILTER_8TAP_REGULAR][0][0][0] = ff_copy4_rvi;
+ dsp->mc[4][FILTER_8TAP_SHARP][0][0][0] = ff_copy4_rvi;
+ dsp->mc[4][FILTER_BILINEAR][0][0][0] = ff_copy4_rvi;
+ }
+
+#if HAVE_RVV
+ if (bpp == 8 && flags & AV_CPU_FLAG_RVV_I64 && ff_get_rv_vlenb() >= 16) {
+
+#define init_fpel(idx1, idx2, sz, type) \
+ dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][0][0] = ff_##type##sz##_rvv; \
+ dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][0][0] = ff_##type##sz##_rvv; \
+ dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][0][0] = ff_##type##sz##_rvv; \
+ dsp->mc[idx1][FILTER_BILINEAR ][idx2][0][0] = ff_##type##sz##_rvv
+
+#define init_copy_avg(idx, sz) \
+ init_fpel(idx, 0, sz, copy); \
+ init_fpel(idx, 1, sz, avg)
+
+#define init_avg(idx, sz) \
+ init_fpel(idx, 1, sz, avg)
+
+ init_copy_avg(0, 64);
+ init_copy_avg(1, 32);
+ init_copy_avg(2, 16);
+ init_avg(3, 8);
+ init_avg(4, 4);
+
+#undef init_copy_avg
+#undef init_avg
+#undef init_fpel
+ }
+#endif
+#endif
+}
+
av_cold void ff_vp9dsp_init_riscv(VP9DSPContext *dsp, int bpp, int bitexact)
{
vp9dsp_intrapred_init_rvv(dsp, bpp);
+ vp9dsp_mc_init_rvv(dsp, bpp);
}
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread
* [FFmpeg-devel] [PATCH 05/10] lavc/vp9dsp: R-V V mc bilin h
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
` (2 preceding siblings ...)
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 04/10] lavc/vp9dsp: R-V mc copy_avg uk7b
@ 2024-05-04 15:03 ` uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 06/10] lavc/vp9dsp: R-V V mc tap h uk7b
` (4 subsequent siblings)
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_avg_bilin_4h_8bpp_c: 5.5
vp9_avg_bilin_4h_8bpp_rvv_i64: 2.5
vp9_avg_bilin_8h_8bpp_c: 19.7
vp9_avg_bilin_8h_8bpp_rvv_i64: 5.0
vp9_avg_bilin_16h_8bpp_c: 78.2
vp9_avg_bilin_16h_8bpp_rvv_i64: 10.0
vp9_avg_bilin_32h_8bpp_c: 325.2
vp9_avg_bilin_32h_8bpp_rvv_i64: 28.5
vp9_avg_bilin_64h_8bpp_c: 1266.2
vp9_avg_bilin_64h_8bpp_rvv_i64: 115.0
vp9_put_bilin_4h_8bpp_c: 4.5
vp9_put_bilin_4h_8bpp_rvv_i64: 2.2
vp9_put_bilin_8h_8bpp_c: 16.7
vp9_put_bilin_8h_8bpp_rvv_i64: 4.2
vp9_put_bilin_16h_8bpp_c: 65.2
vp9_put_bilin_16h_8bpp_rvv_i64: 8.7
vp9_put_bilin_32h_8bpp_c: 273.5
vp9_put_bilin_32h_8bpp_rvv_i64: 26.7
vp9_put_bilin_64h_8bpp_c: 1041.0
vp9_put_bilin_64h_8bpp_rvv_i64: 87.2
---
libavcodec/riscv/vp9_mc_rvv.S | 73 ++++++++++++++++++++++++++++++++++
libavcodec/riscv/vp9dsp_init.c | 17 ++++++++
2 files changed, 90 insertions(+)
diff --git a/libavcodec/riscv/vp9_mc_rvv.S b/libavcodec/riscv/vp9_mc_rvv.S
index ba9ec3431f..a97807633e 100644
--- a/libavcodec/riscv/vp9_mc_rvv.S
+++ b/libavcodec/riscv/vp9_mc_rvv.S
@@ -51,6 +51,72 @@
ret
.endm
+.macro bilin_h_load dst len type
+.ifc \len,4
+ vsetivli zero, 5, e8, mf2, ta, ma
+.elseif \len == 8
+ vsetivli zero, 9, e8, m1, ta, ma
+.elseif \len == 16
+ vsetivli zero, 17, e8, m2, ta, ma
+.elseif \len == 32
+ li t0, 33
+ vsetvli zero, t0, e8, m4, ta, ma
+.elseif \len == 64
+ li t0, 65
+ vsetvli zero, t0, e8, m8, ta, ma
+.endif
+
+ vle8.v v8, (a2)
+ vslide1down.vx v0, v8, t5
+
+.ifc \len,4
+ vsetivli zero, 4, e8, mf4, ta, ma
+.elseif \len == 8
+ vsetivli zero, 8, e8, mf2, ta, ma
+.elseif \len == 16
+ vsetivli zero, 16, e8, m1, ta, ma
+.elseif \len == 32
+ li t0, 32
+ vsetvli zero, t0, e8, m2, ta, ma
+.elseif \len == 64
+ li t0, 64
+ vsetvli zero, t0, e8, m4, ta, ma
+.endif
+
+ vwmulu.vx v16, v0, a5
+ vwmaccsu.vx v16, t1, v8
+ vwadd.wx v16, v16, t4
+ vnsra.wi v16, v16, 4
+ vadd.vv \dst, v16, v8
+
+.ifc \type,put
+ vadd.vv \dst, v16, v8
+.elseif \type == avg
+ vadd.vv v16, v16, v8
+ vle8.v \dst, (a0)
+ vaaddu.vv \dst, \dst, v16
+.endif
+
+.endm
+
+.macro bilin_h len type
+.ifc \type,avg
+ csrwi vxrm, 0
+.endif
+ li t4, 8
+ li t5, 1
+ neg t1, a5
+1:
+ addi a4, a4, -1
+ bilin_h_load v0, \len, \type
+ vse8.v v0, (a0)
+ add a2, a2, a3
+ add a0, a0, a1
+ bnez a4, 1b
+
+ ret
+.endm
+
.irp len 64, 32, 16
func ff_copy\len\()_rvv, zve32x
copy_avg \len copy
@@ -61,4 +127,11 @@ endfunc
func ff_avg\len\()_rvv, zve32x
copy_avg \len avg
endfunc
+
+func ff_put_bilin_\len\()h_rvv, zve32x
+ bilin_h \len put
+endfunc
+func ff_avg_bilin_\len\()h_rvv, zve32x
+ bilin_h \len avg
+endfunc
.endr
diff --git a/libavcodec/riscv/vp9dsp_init.c b/libavcodec/riscv/vp9dsp_init.c
index da33e15e97..248501f5d2 100644
--- a/libavcodec/riscv/vp9dsp_init.c
+++ b/libavcodec/riscv/vp9dsp_init.c
@@ -106,6 +106,23 @@ static av_cold void vp9dsp_mc_init_rvv(VP9DSPContext *dsp, int bpp)
#undef init_copy_avg
#undef init_avg
#undef init_fpel
+
+#define init_subpel1(idx1, idx2, idxh, idxv, sz, dir, type) \
+ dsp->mc[idx1][FILTER_BILINEAR ][idx2][idxh][idxv] = \
+ ff_##type##_bilin_##sz##dir##_rvv;
+
+#define init_subpel2(idx, idxh, idxv, dir, type) \
+ init_subpel1(0, idx, idxh, idxv, 64, dir, type); \
+ init_subpel1(1, idx, idxh, idxv, 32, dir, type); \
+ init_subpel1(2, idx, idxh, idxv, 16, dir, type); \
+ init_subpel1(3, idx, idxh, idxv, 8, dir, type); \
+ init_subpel1(4, idx, idxh, idxv, 4, dir, type)
+
+#define init_subpel3(idx, type) \
+ init_subpel2(idx, 1, 0, h, type)
+
+ init_subpel3(0, put);
+ init_subpel3(1, avg);
}
#endif
#endif
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread
* [FFmpeg-devel] [PATCH 06/10] lavc/vp9dsp: R-V V mc tap h
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
` (3 preceding siblings ...)
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 05/10] lavc/vp9dsp: R-V V mc bilin h uk7b
@ 2024-05-04 15:03 ` uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 07/10] lavc/vp9dsp: R-V V mc bilin v uk7b
` (3 subsequent siblings)
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_avg_8tap_smooth_4h_8bpp_c: 12.7
vp9_avg_8tap_smooth_4h_8bpp_rvv_i64: 5.0
vp9_avg_8tap_smooth_8h_8bpp_c: 48.5
vp9_avg_8tap_smooth_8h_8bpp_rvv_i64: 9.2
vp9_avg_8tap_smooth_16h_8bpp_c: 191.7
vp9_avg_8tap_smooth_16h_8bpp_rvv_i64: 21.0
vp9_avg_8tap_smooth_32h_8bpp_c: 780.0
vp9_avg_8tap_smooth_32h_8bpp_rvv_i64: 66.5
vp9_avg_8tap_smooth_64h_8bpp_c: 3123.7
vp9_avg_8tap_smooth_64h_8bpp_rvv_i64: 264.2
vp9_put_8tap_smooth_4h_8bpp_c: 11.0
vp9_put_8tap_smooth_4h_8bpp_rvv_i64: 4.2
vp9_put_8tap_smooth_8h_8bpp_c: 42.0
vp9_put_8tap_smooth_8h_8bpp_rvv_i64: 8.2
vp9_put_8tap_smooth_16h_8bpp_c: 165.5
vp9_put_8tap_smooth_16h_8bpp_rvv_i64: 19.7
vp9_put_8tap_smooth_32h_8bpp_c: 659.0
vp9_put_8tap_smooth_32h_8bpp_rvv_i64: 64.0
vp9_put_8tap_smooth_64h_8bpp_c: 2682.0
vp9_put_8tap_smooth_64h_8bpp_rvv_i64: 272.2
---
libavcodec/riscv/vp9_mc_rvv.S | 233 +++++++++++++++++++++++++++++++++
libavcodec/riscv/vp9dsp_init.c | 8 +-
2 files changed, 240 insertions(+), 1 deletion(-)
diff --git a/libavcodec/riscv/vp9_mc_rvv.S b/libavcodec/riscv/vp9_mc_rvv.S
index a97807633e..289c377a42 100644
--- a/libavcodec/riscv/vp9_mc_rvv.S
+++ b/libavcodec/riscv/vp9_mc_rvv.S
@@ -123,6 +123,231 @@ func ff_copy\len\()_rvv, zve32x
endfunc
.endr
+const subpel_filters_regular
+ .byte 0, 0, 0, 128, 0, 0, 0, 0
+ .byte 0, 1, -5, 126, 8, -3, 1, 0
+ .byte -1, 3, -10, 122, 18, -6, 2, 0
+ .byte -1, 4, -13, 118, 27, -9, 3, -1
+ .byte -1, 4, -16, 112, 37, -11, 4, -1
+ .byte -1, 5, -18, 105, 48, -14, 4, -1
+ .byte -1, 5, -19, 97, 58, -16, 5, -1
+ .byte -1, 6, -19, 88, 68, -18, 5, -1
+ .byte -1, 6, -19, 78, 78, -19, 6, -1
+ .byte -1, 5, -18, 68, 88, -19, 6, -1
+ .byte -1, 5, -16, 58, 97, -19, 5, -1
+ .byte -1, 4, -14, 48, 105, -18, 5, -1
+ .byte -1, 4, -11, 37, 112, -16, 4, -1
+ .byte -1, 3, -9, 27, 118, -13, 4, -1
+ .byte 0, 2, -6, 18, 122, -10, 3, -1
+ .byte 0, 1, -3, 8, 126, -5, 1, 0
+subpel_filters_sharp:
+ .byte 0, 0, 0, 128, 0, 0, 0, 0
+ .byte -1, 3, -7, 127, 8, -3, 1, 0
+ .byte -2, 5, -13, 125, 17, -6, 3, -1
+ .byte -3, 7, -17, 121, 27, -10, 5, -2
+ .byte -4, 9, -20, 115, 37, -13, 6, -2
+ .byte -4, 10, -23, 108, 48, -16, 8, -3
+ .byte -4, 10, -24, 100, 59, -19, 9, -3
+ .byte -4, 11, -24, 90, 70, -21, 10, -4
+ .byte -4, 11, -23, 80, 80, -23, 11, -4
+ .byte -4, 10, -21, 70, 90, -24, 11, -4
+ .byte -3, 9, -19, 59, 100, -24, 10, -4
+ .byte -3, 8, -16, 48, 108, -23, 10, -4
+ .byte -2, 6, -13, 37, 115, -20, 9, -4
+ .byte -2, 5, -10, 27, 121, -17, 7, -3
+ .byte -1, 3, -6, 17, 125, -13, 5, -2
+ .byte 0, 1, -3, 8, 127, -7, 3, -1
+subpel_filters_smooth:
+ .byte 0, 0, 0, 128, 0, 0, 0, 0
+ .byte -3, -1, 32, 64, 38, 1, -3, 0
+ .byte -2, -2, 29, 63, 41, 2, -3, 0
+ .byte -2, -2, 26, 63, 43, 4, -4, 0
+ .byte -2, -3, 24, 62, 46, 5, -4, 0
+ .byte -2, -3, 21, 60, 49, 7, -4, 0
+ .byte -1, -4, 18, 59, 51, 9, -4, 0
+ .byte -1, -4, 16, 57, 53, 12, -4, -1
+ .byte -1, -4, 14, 55, 55, 14, -4, -1
+ .byte -1, -4, 12, 53, 57, 16, -4, -1
+ .byte 0, -4, 9, 51, 59, 18, -4, -1
+ .byte 0, -4, 7, 49, 60, 21, -3, -2
+ .byte 0, -4, 5, 46, 62, 24, -3, -2
+ .byte 0, -4, 4, 43, 63, 26, -2, -2
+ .byte 0, -3, 2, 41, 63, 29, -2, -2
+ .byte 0, -3, 1, 38, 64, 32, -1, -3
+endconst
+
+.macro epel_filter name type regtype
+ lla \regtype\()2, subpel_filters_\name
+ li \regtype\()1, 8
+ mul \regtype\()0, a5, \regtype\()1
+ add \regtype\()0, \regtype\()0, \regtype\()2
+ .irp n 1,2,3,4,5,6
+ lb \regtype\n, \n(\regtype\()0)
+ .endr
+.ifc \regtype,t
+ lb a7, 7(\regtype\()0)
+.elseif \regtype == s
+ lb s7, 7(\regtype\()0)
+.endif
+ lb \regtype\()0, 0(\regtype\()0)
+.endm
+
+.macro epel_load dst len do name type from_mem regtype
+ li a5, 64
+.ifc \from_mem, 1
+ vle8.v v22, (a2)
+ addi a2, a2, -1
+ vle8.v v20, (a2)
+ addi a2, a2, 2
+ vle8.v v24, (a2)
+ addi a2, a2, 1
+ vle8.v v26, (a2)
+ addi a2, a2, 1
+ vle8.v v28, (a2)
+ addi a2, a2, 1
+ vle8.v v30, (a2)
+
+.ifc \name,smooth
+ vwmulu.vx v16, v24, \regtype\()4
+ vwmaccu.vx v16, \regtype\()2, v20
+ vwmaccu.vx v16, \regtype\()5, v26
+ vwmaccsu.vx v16, \regtype\()6, v28
+.else
+ vwmulu.vx v16, v28, \regtype\()6
+ vwmaccsu.vx v16, \regtype\()2, v20
+ vwmaccsu.vx v16, \regtype\()5, v26
+.endif
+
+.ifc \regtype,t
+ vwmaccsu.vx v16, a7, v30
+.elseif \regtype == s
+ vwmaccsu.vx v16, s7, v30
+.endif
+
+ addi a2, a2, -6
+ vle8.v v28, (a2)
+ addi a2, a2, -1
+ vle8.v v26, (a2)
+ addi a2, a2, 3
+
+.ifc \name,smooth
+ vwmaccsu.vx v16, \regtype\()1, v28
+.else
+ vwmaccu.vx v16, \regtype\()1, v28
+ vwmulu.vx v28, v24, \regtype\()4
+.endif
+ vwmaccsu.vx v16, \regtype\()0, v26
+ vwmulu.vx v20, v22, \regtype\()3
+.else
+.ifc \name,smooth
+ vwmulu.vx v16, v8, \regtype\()4
+ vwmaccu.vx v16, \regtype\()2, v4
+ vwmaccu.vx v16, \regtype\()5, v10
+ vwmaccsu.vx v16, \regtype\()6, v12
+ vwmaccsu.vx v16, \regtype\()1, v2
+.else
+ vwmulu.vx v16, v2, \regtype\()1
+ vwmaccu.vx v16, \regtype\()6, v12
+ vwmaccsu.vx v16, \regtype\()5, v10
+ vwmaccsu.vx v16, \regtype\()2, v4
+ vwmulu.vx v28, v8, \regtype\()4
+.endif
+ vwmaccsu.vx v16, \regtype\()0, v0
+ vwmulu.vx v20, v6, \regtype\()3
+
+.ifc \regtype,t
+ vwmaccsu.vx v16, a7, v14
+.elseif \regtype == s
+ vwmaccsu.vx v16, s7, v14
+.endif
+
+.endif
+ vwadd.wx v16, v16, a5
+.ifc \len,4
+ vsetvli zero, zero, e16, mf2, ta, ma
+.elseif \len == 8
+ vsetvli zero, zero, e16, m1, ta, ma
+.elseif \len == 16
+ vsetvli zero, zero, e16, m2, ta, ma
+.else
+ vsetvli zero, zero, e16, m4, ta, ma
+.endif
+
+.ifc \name,smooth
+ vwadd.vv v24, v16, v20
+.else
+ vwadd.vv v24, v16, v28
+ vwadd.wv v24, v24, v20
+.endif
+ vnsra.wi v24, v24, 7
+ vmax.vx v24, v24, zero
+.ifc \len,4
+ vsetvli zero, zero, e8, mf4, ta, ma
+.elseif \len == 8
+ vsetvli zero, zero, e8, mf2, ta, ma
+.elseif \len == 16
+ vsetvli zero, zero, e8, m1, ta, ma
+.else
+ vsetvli zero, zero, e8, m2, ta, ma
+.endif
+
+.ifc \do,put
+ vnclipu.wi \dst, v24, 0
+.elseif \do == avg
+ vle8.v \dst, (a0)
+ vnclipu.wi v24, v24, 0
+ vaaddu.vv \dst, \dst, v24
+.endif
+
+.endm
+
+.macro epel_load_inc dst len do name type from_mem regtype
+ epel_load \dst \len \do \name \type \from_mem \regtype
+ add a2, a2, a3
+.endm
+
+.macro epel len do name type
+ epel_filter \name \type t
+
+.ifc \len,4
+ vsetivli zero, 4, e8, mf4, ta, ma
+.elseif \len == 8
+ vsetivli zero, 8, e8, mf2, ta, ma
+.elseif \len == 16
+ vsetivli zero, 16, e8, m1, ta, ma
+.else
+ li a5, 32
+ vsetvli zero, a5, e8, m2, ta, ma
+.endif
+.ifc \do,avg
+ csrwi vxrm, 0
+.endif
+
+1:
+ addi a4, a4, -1
+ epel_load v30 \len \do \name \type 1 t
+ vse8.v v30, (a0)
+.ifc \len,64
+ addi a0, a0, 32
+ addi a2, a2, 32
+ epel_load v30 \len \do \name \type 1 t
+ vse8.v v30, (a0)
+ addi a0, a0, -32
+ addi a2, a2, -32
+.endif
+ add a2, a2, a3
+ add a0, a0, a1
+ bnez a4, 1b
+
+ ret
+.endm
+
+.macro gen_epel len do name type
+func ff_\do\()_8tap_\name\()_\len\()\type\()_rvv, zve32x
+ epel \len \do \name \type
+endfunc
+.endm
+
.irp len 64, 32, 16, 8, 4
func ff_avg\len\()_rvv, zve32x
copy_avg \len avg
@@ -134,4 +359,12 @@ endfunc
func ff_avg_bilin_\len\()h_rvv, zve32x
bilin_h \len avg
endfunc
+
+.irp name regular sharp smooth
+ .irp do put avg
+ .irp type h
+ gen_epel \len \do \name \type
+ .endr
+ .endr
+.endr
.endr
diff --git a/libavcodec/riscv/vp9dsp_init.c b/libavcodec/riscv/vp9dsp_init.c
index 248501f5d2..97f02e601d 100644
--- a/libavcodec/riscv/vp9dsp_init.c
+++ b/libavcodec/riscv/vp9dsp_init.c
@@ -109,7 +109,13 @@ static av_cold void vp9dsp_mc_init_rvv(VP9DSPContext *dsp, int bpp)
#define init_subpel1(idx1, idx2, idxh, idxv, sz, dir, type) \
dsp->mc[idx1][FILTER_BILINEAR ][idx2][idxh][idxv] = \
- ff_##type##_bilin_##sz##dir##_rvv;
+ ff_##type##_bilin_##sz##dir##_rvv; \
+ dsp->mc[idx1][FILTER_8TAP_SMOOTH ][idx2][idxh][idxv] = \
+ ff_##type##_8tap_smooth_##sz##dir##_rvv; \
+ dsp->mc[idx1][FILTER_8TAP_REGULAR][idx2][idxh][idxv] = \
+ ff_##type##_8tap_regular_##sz##dir##_rvv; \
+ dsp->mc[idx1][FILTER_8TAP_SHARP ][idx2][idxh][idxv] = \
+ ff_##type##_8tap_sharp_##sz##dir##_rvv;
#define init_subpel2(idx, idxh, idxv, dir, type) \
init_subpel1(0, idx, idxh, idxv, 64, dir, type); \
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread
* [FFmpeg-devel] [PATCH 07/10] lavc/vp9dsp: R-V V mc bilin v
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
` (4 preceding siblings ...)
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 06/10] lavc/vp9dsp: R-V V mc tap h uk7b
@ 2024-05-04 15:03 ` uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 08/10] lavc/vp9dsp: R-V V mc tap v uk7b
` (2 subsequent siblings)
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_avg_bilin_4v_8bpp_c: 5.5
vp9_avg_bilin_4v_8bpp_rvv_i64: 2.2
vp9_avg_bilin_8v_8bpp_c: 20.7
vp9_avg_bilin_8v_8bpp_rvv_i64: 4.2
vp9_avg_bilin_16v_8bpp_c: 82.2
vp9_avg_bilin_16v_8bpp_rvv_i64: 9.0
vp9_avg_bilin_32v_8bpp_c: 342.5
vp9_avg_bilin_32v_8bpp_rvv_i64: 27.0
vp9_avg_bilin_64v_8bpp_c: 1319.2
vp9_avg_bilin_64v_8bpp_rvv_i64: 93.2
vp9_put_bilin_4v_8bpp_c: 4.7
vp9_put_bilin_4v_8bpp_rvv_i64: 1.7
vp9_put_bilin_8v_8bpp_c: 17.7
vp9_put_bilin_8v_8bpp_rvv_i64: 3.2
vp9_put_bilin_16v_8bpp_c: 69.2
vp9_put_bilin_16v_8bpp_rvv_i64: 7.5
vp9_put_bilin_32v_8bpp_c: 274.2
vp9_put_bilin_32v_8bpp_rvv_i64: 23.2
vp9_put_bilin_64v_8bpp_c: 1109.5
vp9_put_bilin_64v_8bpp_rvv_i64: 82.2
---
libavcodec/riscv/vp9_mc_rvv.S | 49 +++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/libavcodec/riscv/vp9_mc_rvv.S b/libavcodec/riscv/vp9_mc_rvv.S
index 289c377a42..58b00889ce 100644
--- a/libavcodec/riscv/vp9_mc_rvv.S
+++ b/libavcodec/riscv/vp9_mc_rvv.S
@@ -117,6 +117,49 @@
ret
.endm
+.macro bilin_v len type
+.ifc \type,avg
+ csrwi vxrm, 0
+.endif
+.ifc \len,4
+ vsetivli zero, 4, e8, mf4, ta, ma
+.elseif \len == 8
+ vsetivli zero, 8, e8, mf2, ta, ma
+.elseif \len == 16
+ vsetivli zero, 16, e8, m1, ta, ma
+.elseif \len == 32
+ li t0, 32
+ vsetvli zero, t0, e8, m2, ta, ma
+.elseif \len == 64
+ li t0, 64
+ vsetvli zero, t0, e8, m4, ta, ma
+.endif
+ li t4, 8
+ neg t1, a6
+1:
+ add t2, a2, a3
+ addi a4, a4, -1
+ vle8.v v0, (a2)
+ vle8.v v8, (t2)
+.ifc \type,avg
+ vle8.v v16, (a0)
+.endif
+ vwmulu.vx v24, v8, a6
+ vwmaccsu.vx v24, t1, v0
+ vwadd.wx v24, v24, t4
+ vnsra.wi v24, v24, 4
+ vadd.vv v0, v24, v0
+.ifc \type,avg
+ vaaddu.vv v0, v0, v16
+.endif
+ vse8.v v0, (a0)
+ add a2, a2, a3
+ add a0, a0, a1
+ bnez a4, 1b
+
+ ret
+.endm
+
.irp len 64, 32, 16
func ff_copy\len\()_rvv, zve32x
copy_avg \len copy
@@ -359,6 +402,12 @@ endfunc
func ff_avg_bilin_\len\()h_rvv, zve32x
bilin_h \len avg
endfunc
+func ff_put_bilin_\len\()v_rvv, zve32x
+ bilin_v \len put
+endfunc
+func ff_avg_bilin_\len\()v_rvv, zve32x
+ bilin_v \len avg
+endfunc
.irp name regular sharp smooth
.irp do put avg
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread
* [FFmpeg-devel] [PATCH 08/10] lavc/vp9dsp: R-V V mc tap v
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
` (5 preceding siblings ...)
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 07/10] lavc/vp9dsp: R-V V mc bilin v uk7b
@ 2024-05-04 15:03 ` uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 09/10] lavc/vp9dsp: R-V V mc bilin hv uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 10/10] lavc/vp9dsp: R-V V mc tap hv uk7b
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_avg_8tap_smooth_4v_8bpp_c: 13.7
vp9_avg_8tap_smooth_4v_8bpp_rvv_i64: 5.0
vp9_avg_8tap_smooth_8v_8bpp_c: 49.7
vp9_avg_8tap_smooth_8v_8bpp_rvv_i64: 9.2
vp9_avg_8tap_smooth_16v_8bpp_c: 191.5
vp9_avg_8tap_smooth_16v_8bpp_rvv_i64: 21.2
vp9_avg_8tap_smooth_32v_8bpp_c: 770.5
vp9_avg_8tap_smooth_32v_8bpp_rvv_i64: 66.0
vp9_avg_8tap_smooth_64v_8bpp_c: 3068.0
vp9_avg_8tap_smooth_64v_8bpp_rvv_i64: 262.5
vp9_put_8tap_smooth_4v_8bpp_c: 12.0
vp9_put_8tap_smooth_4v_8bpp_rvv_i64: 4.5
vp9_put_8tap_smooth_8v_8bpp_c: 43.7
vp9_put_8tap_smooth_8v_8bpp_rvv_i64: 8.5
vp9_put_8tap_smooth_16v_8bpp_c: 168.7
vp9_put_8tap_smooth_16v_8bpp_rvv_i64: 20.0
vp9_put_8tap_smooth_32v_8bpp_c: 681.5
vp9_put_8tap_smooth_32v_8bpp_rvv_i64: 63.7
vp9_put_8tap_smooth_64v_8bpp_c: 2692.7
vp9_put_8tap_smooth_64v_8bpp_rvv_i64: 253.5
---
libavcodec/riscv/vp9_mc_rvv.S | 32 +++++++++++++++++++++++++++++++-
libavcodec/riscv/vp9dsp_init.c | 3 ++-
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/libavcodec/riscv/vp9_mc_rvv.S b/libavcodec/riscv/vp9_mc_rvv.S
index 58b00889ce..151d7702ec 100644
--- a/libavcodec/riscv/vp9_mc_rvv.S
+++ b/libavcodec/riscv/vp9_mc_rvv.S
@@ -222,7 +222,11 @@ endconst
.macro epel_filter name type regtype
lla \regtype\()2, subpel_filters_\name
li \regtype\()1, 8
+.ifc \type,v
+ mul \regtype\()0, a6, \regtype\()1
+.elseif \type == h
mul \regtype\()0, a5, \regtype\()1
+.endif
add \regtype\()0, \regtype\()0, \regtype\()2
.irp n 1,2,3,4,5,6
lb \regtype\n, \n(\regtype\()0)
@@ -239,6 +243,19 @@ endconst
li a5, 64
.ifc \from_mem, 1
vle8.v v22, (a2)
+.ifc \type,v
+ sub a2, a2, a3
+ vle8.v v20, (a2)
+ add a2, a2, a3
+ add a2, a2, a3
+ vle8.v v24, (a2)
+ add a2, a2, a3
+ vle8.v v26, (a2)
+ add a2, a2, a3
+ vle8.v v28, (a2)
+ add a2, a2, a3
+ vle8.v v30, (a2)
+.elseif \type == h
addi a2, a2, -1
vle8.v v20, (a2)
addi a2, a2, 2
@@ -249,6 +266,7 @@ endconst
vle8.v v28, (a2)
addi a2, a2, 1
vle8.v v30, (a2)
+.endif
.ifc \name,smooth
vwmulu.vx v16, v24, \regtype\()4
@@ -267,11 +285,23 @@ endconst
vwmaccsu.vx v16, s7, v30
.endif
+.ifc \type,v
+ .rept 6
+ sub a2, a2, a3
+ .endr
+ vle8.v v28, (a2)
+ sub a2, a2, a3
+ vle8.v v26, (a2)
+ .rept 3
+ add a2, a2, a3
+ .endr
+.elseif \type == h
addi a2, a2, -6
vle8.v v28, (a2)
addi a2, a2, -1
vle8.v v26, (a2)
addi a2, a2, 3
+.endif
.ifc \name,smooth
vwmaccsu.vx v16, \regtype\()1, v28
@@ -411,7 +441,7 @@ endfunc
.irp name regular sharp smooth
.irp do put avg
- .irp type h
+ .irp type h v
gen_epel \len \do \name \type
.endr
.endr
diff --git a/libavcodec/riscv/vp9dsp_init.c b/libavcodec/riscv/vp9dsp_init.c
index 97f02e601d..ff7d445f6a 100644
--- a/libavcodec/riscv/vp9dsp_init.c
+++ b/libavcodec/riscv/vp9dsp_init.c
@@ -125,7 +125,8 @@ static av_cold void vp9dsp_mc_init_rvv(VP9DSPContext *dsp, int bpp)
init_subpel1(4, idx, idxh, idxv, 4, dir, type)
#define init_subpel3(idx, type) \
- init_subpel2(idx, 1, 0, h, type)
+ init_subpel2(idx, 1, 0, h, type); \
+ init_subpel2(idx, 0, 1, v, type)
init_subpel3(0, put);
init_subpel3(1, avg);
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread
* [FFmpeg-devel] [PATCH 09/10] lavc/vp9dsp: R-V V mc bilin hv
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
` (6 preceding siblings ...)
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 08/10] lavc/vp9dsp: R-V V mc tap v uk7b
@ 2024-05-04 15:03 ` uk7b
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 10/10] lavc/vp9dsp: R-V V mc tap hv uk7b
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_avg_bilin_4hv_8bpp_c: 10.7
vp9_avg_bilin_4hv_8bpp_rvv_i64: 4.5
vp9_avg_bilin_8hv_8bpp_c: 38.7
vp9_avg_bilin_8hv_8bpp_rvv_i64: 8.2
vp9_avg_bilin_16hv_8bpp_c: 147.2
vp9_avg_bilin_16hv_8bpp_rvv_i64: 32.2
vp9_avg_bilin_32hv_8bpp_c: 590.7
vp9_avg_bilin_32hv_8bpp_rvv_i64: 47.5
vp9_avg_bilin_64hv_8bpp_c: 2323.7
vp9_avg_bilin_64hv_8bpp_rvv_i64: 153.5
vp9_put_bilin_4hv_8bpp_c: 10.0
vp9_put_bilin_4hv_8bpp_rvv_i64: 3.7
vp9_put_bilin_8hv_8bpp_c: 35.2
vp9_put_bilin_8hv_8bpp_rvv_i64: 7.2
vp9_put_bilin_16hv_8bpp_c: 133.7
vp9_put_bilin_16hv_8bpp_rvv_i64: 14.2
vp9_put_bilin_32hv_8bpp_c: 521.7
vp9_put_bilin_32hv_8bpp_rvv_i64: 43.0
vp9_put_bilin_64hv_8bpp_c: 2098.0
vp9_put_bilin_64hv_8bpp_rvv_i64: 144.5
---
libavcodec/riscv/vp9_mc_rvv.S | 37 +++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/libavcodec/riscv/vp9_mc_rvv.S b/libavcodec/riscv/vp9_mc_rvv.S
index 151d7702ec..c8a42c7159 100644
--- a/libavcodec/riscv/vp9_mc_rvv.S
+++ b/libavcodec/riscv/vp9_mc_rvv.S
@@ -160,6 +160,37 @@
ret
.endm
+.macro bilin_hv len type
+.ifc \type,avg
+ csrwi vxrm, 0
+.endif
+ neg t1, a5
+ neg t2, a6
+ li t4, 8
+ li t5, 1
+ bilin_h_load v24, \len, put
+ add a2, a2, a3
+1:
+ addi a4, a4, -1
+ bilin_h_load v4, \len, put
+ vwmulu.vx v16, v4, a6
+ vwmaccsu.vx v16, t2, v24
+ vwadd.wx v16, v16, t4
+ vnsra.wi v16, v16, 4
+ vadd.vv v0, v16, v24
+.ifc \type,avg
+ vle8.v v16, (a0)
+ vaaddu.vv v0, v0, v16
+.endif
+ vse8.v v0, (a0)
+ vmv.v.v v24, v4
+ add a2, a2, a3
+ add a0, a0, a1
+ bnez a4, 1b
+
+ ret
+.endm
+
.irp len 64, 32, 16
func ff_copy\len\()_rvv, zve32x
copy_avg \len copy
@@ -438,6 +469,12 @@ endfunc
func ff_avg_bilin_\len\()v_rvv, zve32x
bilin_v \len avg
endfunc
+func ff_put_bilin_\len\()hv_rvv, zve32x
+ bilin_hv \len put
+endfunc
+func ff_avg_bilin_\len\()hv_rvv, zve32x
+ bilin_hv \len avg
+endfunc
.irp name regular sharp smooth
.irp do put avg
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread
* [FFmpeg-devel] [PATCH 10/10] lavc/vp9dsp: R-V V mc tap hv
[not found] <20240504150313.2472910-1-uk7b@foxmail.com>
` (7 preceding siblings ...)
2024-05-04 15:03 ` [FFmpeg-devel] [PATCH 09/10] lavc/vp9dsp: R-V V mc bilin hv uk7b
@ 2024-05-04 15:03 ` uk7b
8 siblings, 0 replies; 9+ messages in thread
From: uk7b @ 2024-05-04 15:03 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: sunyuechi
From: sunyuechi <sunyuechi@iscas.ac.cn>
C908:
vp9_avg_8tap_smooth_4hv_8bpp_c: 32.2
vp9_avg_8tap_smooth_4hv_8bpp_rvv_i64: 15.2
vp9_avg_8tap_smooth_8hv_8bpp_c: 98.5
vp9_avg_8tap_smooth_8hv_8bpp_rvv_i64: 23.5
vp9_avg_8tap_smooth_16hv_8bpp_c: 355.5
vp9_avg_8tap_smooth_16hv_8bpp_rvv_i64: 46.2
vp9_avg_8tap_smooth_32hv_8bpp_c: 1270.7
vp9_avg_8tap_smooth_32hv_8bpp_rvv_i64: 133.2
vp9_avg_8tap_smooth_64hv_8bpp_c: 4936.5
vp9_avg_8tap_smooth_64hv_8bpp_rvv_i64: 521.7
vp9_put_8tap_smooth_4hv_8bpp_c: 30.2
vp9_put_8tap_smooth_4hv_8bpp_rvv_i64: 14.2
vp9_put_8tap_smooth_8hv_8bpp_c: 91.5
vp9_put_8tap_smooth_8hv_8bpp_rvv_i64: 22.7
vp9_put_8tap_smooth_16hv_8bpp_c: 330.0
vp9_put_8tap_smooth_16hv_8bpp_rvv_i64: 45.0
vp9_put_8tap_smooth_32hv_8bpp_c: 1296.5
vp9_put_8tap_smooth_32hv_8bpp_rvv_i64: 131.0
vp9_put_8tap_smooth_64hv_8bpp_c: 4497.7
vp9_put_8tap_smooth_64hv_8bpp_rvv_i64: 513.2
---
libavcodec/riscv/vp9_mc_rvv.S | 79 ++++++++++++++++++++++++++++++++++
libavcodec/riscv/vp9dsp_init.c | 3 +-
2 files changed, 81 insertions(+), 1 deletion(-)
diff --git a/libavcodec/riscv/vp9_mc_rvv.S b/libavcodec/riscv/vp9_mc_rvv.S
index c8a42c7159..6ad7ea2433 100644
--- a/libavcodec/riscv/vp9_mc_rvv.S
+++ b/libavcodec/riscv/vp9_mc_rvv.S
@@ -446,12 +446,90 @@ endconst
ret
.endm
+.macro epel_hv_once len name do
+ sub a2, a2, a3
+ sub a2, a2, a3
+ sub a2, a2, a3
+ .irp n 0 2 4 6 8 10 12 14
+ epel_load_inc v\n \len put \name h 1 t
+ .endr
+ addi a4, a4, -1
+1:
+ addi a4, a4, -1
+ epel_load v30 \len \do \name v 0 s
+ vse8.v v30, (a0)
+ vmv.v.v v0, v2
+ vmv.v.v v2, v4
+ vmv.v.v v4, v6
+ vmv.v.v v6, v8
+ vmv.v.v v8, v10
+ vmv.v.v v10, v12
+ vmv.v.v v12, v14
+ epel_load v14 \len put \name h 1 t
+ add a2, a2, a3
+ add a0, a0, a1
+ bnez a4, 1b
+ epel_load v30 \len \do \name v 0 s
+ vse8.v v30, (a0)
+.endm
+
+.macro epel_hv do name len
+ addi sp, sp, -64
+ .irp n 0,1,2,3,4,5,6,7
+ sd s\n, \n\()<<3(sp)
+ .endr
+.ifc \len,64
+ addi sp, sp, -48
+ .irp n 0,1,2,3,4,5
+ sd a\n, \n\()<<3(sp)
+ .endr
+.endif
+.ifc \do,avg
+ csrwi vxrm, 0
+.endif
+ epel_filter \name h t
+ epel_filter \name v s
+.ifc \len,4
+ vsetivli zero, 4, e8, mf4, ta, ma
+.elseif \len == 8
+ vsetivli zero, 8, e8, mf2, ta, ma
+.elseif \len == 16
+ vsetivli zero, 16, e8, m1, ta, ma
+.else
+ li a6, 32
+ vsetvli zero, a6, e8, m2, ta, ma
+.endif
+ epel_hv_once \len \name \do
+.ifc \len,64
+ .irp n 0,1,2,3,4,5
+ ld a\n, \n\()<<3(sp)
+ .endr
+ addi sp, sp, 48
+ addi a0, a0, 32
+ addi a2, a2, 32
+ epel_filter \name h t
+ epel_hv_once \len \name \do
+.endif
+ .irp n 0,1,2,3,4,5,6,7
+ ld s\n, \n\()<<3(sp)
+ .endr
+ addi sp, sp, 64
+
+ ret
+.endm
+
.macro gen_epel len do name type
func ff_\do\()_8tap_\name\()_\len\()\type\()_rvv, zve32x
epel \len \do \name \type
endfunc
.endm
+.macro gen_epelhv len name do
+func ff_\do\()_8tap_\name\()_\len\()hv_rvv, zve32x
+ epel_hv \do \name \len
+endfunc
+.endm
+
.irp len 64, 32, 16, 8, 4
func ff_avg\len\()_rvv, zve32x
copy_avg \len avg
@@ -481,6 +559,7 @@ endfunc
.irp type h v
gen_epel \len \do \name \type
.endr
+ gen_epelhv \len \name \do
.endr
.endr
.endr
diff --git a/libavcodec/riscv/vp9dsp_init.c b/libavcodec/riscv/vp9dsp_init.c
index ff7d445f6a..0c75ef38dc 100644
--- a/libavcodec/riscv/vp9dsp_init.c
+++ b/libavcodec/riscv/vp9dsp_init.c
@@ -126,7 +126,8 @@ static av_cold void vp9dsp_mc_init_rvv(VP9DSPContext *dsp, int bpp)
#define init_subpel3(idx, type) \
init_subpel2(idx, 1, 0, h, type); \
- init_subpel2(idx, 0, 1, v, type)
+ init_subpel2(idx, 0, 1, v, type); \
+ init_subpel2(idx, 1, 1, hv, type)
init_subpel3(0, put);
init_subpel3(1, avg);
--
2.45.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 9+ messages in thread