History

lavc/vp9dsp: R-V V mc bilin h v

C908 X60 vp9_avg_bilin_4h_8bpp_c : 5.5 4.7 vp9_avg_bilin_4h_8bpp_rvv_i32 : 1.7 1.5 vp9_avg_bilin_4v_8bpp_c : 5.5 4.7 vp9_avg_bilin_4v_8bpp_rvv_i32 : 1.5 1.2 vp9_avg_bilin_8h_8bpp_c : 20.0 17.7 vp9_avg_bilin_8h_8bpp_rvv_i32 : 3.0 2.7 vp9_avg_bilin_8v_8bpp_c : 20.7 18.7 vp9_avg_bilin_8v_8bpp_rvv_i32 : 3.0 2.7 vp9_avg_bilin_16h_8bpp_c : 78.2 69.7 vp9_avg_bilin_16h_8bpp_rvv_i32 : 7.0 6.2 vp9_avg_bilin_16v_8bpp_c : 98.5 73.2 vp9_avg_bilin_16v_8bpp_rvv_i32 : 7.0 6.0 vp9_avg_bilin_32h_8bpp_c : 325.5 275.5 vp9_avg_bilin_32h_8bpp_rvv_i32 : 23.0 20.5 vp9_avg_bilin_32v_8bpp_c : 342.2 290.0 vp9_avg_bilin_32v_8bpp_rvv_i32 : 21.7 19.5 vp9_avg_bilin_64h_8bpp_c : 1263.7 1095.7 vp9_avg_bilin_64h_8bpp_rvv_i32 : 91.2 81.2 vp9_avg_bilin_64v_8bpp_c : 1331.7 1155.2 vp9_avg_bilin_64v_8bpp_rvv_i32 : 91.2 81.0 vp9_put_bilin_4h_8bpp_c : 4.5 4.0 vp9_put_bilin_4h_8bpp_rvv_i32 : 1.0 1.0 vp9_put_bilin_4v_8bpp_c : 4.7 4.2 vp9_put_bilin_4v_8bpp_rvv_i32 : 1.0 1.0 vp9_put_bilin_8h_8bpp_c : 16.7 15.0 vp9_put_bilin_8h_8bpp_rvv_i32 : 2.2 2.0 vp9_put_bilin_8v_8bpp_c : 17.5 15.7 vp9_put_bilin_8v_8bpp_rvv_i32 : 2.2 2.0 vp9_put_bilin_16h_8bpp_c : 65.2 58.0 vp9_put_bilin_16h_8bpp_rvv_i32 : 6.0 5.5 vp9_put_bilin_16v_8bpp_c : 69.2 61.7 vp9_put_bilin_16v_8bpp_rvv_i32 : 5.7 5.2 vp9_put_bilin_32h_8bpp_c : 273.2 229.0 vp9_put_bilin_32h_8bpp_rvv_i32 : 19.7 17.7 vp9_put_bilin_32v_8bpp_c : 290.5 243.7 vp9_put_bilin_32v_8bpp_rvv_i32 : 18.7 16.7 vp9_put_bilin_64h_8bpp_c : 1040.5 910.5 vp9_put_bilin_64h_8bpp_rvv_i32 : 82.5 73.0 vp9_put_bilin_64v_8bpp_c : 1108.5 971.0 vp9_put_bilin_64v_8bpp_rvv_i32 : 82.2 73.2

sunyuechi committed 2 years ago

Commit 9edd2e71 parent 8f36c6f3 files · +132 −6Browse files

Showing the changes to libavcodec (3 of 3 files). Show all

Unified · Split

3 files
  1. libavcodec/riscv/vp9_mc_rvv.S +105 −0
  2. libavcodec/riscv/vp9dsp.h +6 −6
  3. libavcodec/riscv/vp9dsp_init.c +21 −0
libavcodec/riscv/vp9_mc_rvv.S+105−0
@@ -54,6 +54,111 @@ func ff_vp9_avg\len\()_rvv, zve32x · 53 unmodified lines
54endfunc54endfunc
55.endm55.endm
56 56
57.macro bilin_load dst, mn, type
58.ifc \type,v
59 add t4, a2, a3
60.else
61 addi t4, a2, 1
62.endif
63 vle8.v v4, (a2)
64 vle8.v v0, (t4)
65 vwmulu.vx v16, v0, \mn
66 vwmaccsu.vx v16, t1, v4
67 vwadd.wx v16, v16, t3
68 vnsra.wi v16, v16, 4
69 vadd.vv \dst, v16, v4
70 add a2, a2, a3
71.endm
72
73.macro bilin_h_v op, type, mn
74func ff_\op\()_vp9_bilin_64\type\()_rvv, zve32x
75 lpad 0
76 vsetvlstatic8 64, t0, 64
77.ifc \op,avg
78 csrwi vxrm, 0
79.endif
80 li t3, 8
81 neg t1, \mn
821:
83 addi a4, a4, -1
84 bilin_load v0, \mn, \type
85.ifc \op,avg
86 vle8.v v16, (a0)
87 vaaddu.vv v0, v0, v16
88.endif
89 vse8.v v0, (a0)
90 add a0, a0, a1
91 bnez a4, 1b
92 ret
93
94.Lbilin_\type\op:
95.ifc \op,avg
96 csrwi vxrm, 0
97.endif
98 li t4, 8
99 neg t1, \mn
1001:
101 addi a4, a4, -2
102 add t6, a0, a1
103 add t0, a2, a3
104 vle8.v v8, (a2)
105 vle8.v v4, (t0)
106.ifc \type,v
107 add t2, t0, a3
108 vwmulu.vx v16, v4, \mn
109.else
110 addi t3, a2, 1
111 addi t2, t0, 1
112 vle8.v v0, (t3)
113 vwmulu.vx v16, v0, \mn
114.endif
115 vle8.v v12, (t2)
116 vwmulu.vx v20, v12, \mn
117 vwmaccsu.vx v16, t1, v8
118 vwmaccsu.vx v20, t1, v4
119 vwadd.wx v16, v16, t4
120 vwadd.wx v20, v20, t4
121 vnsra.wi v16, v16, 4
122 vnsra.wi v20, v20, 4
123 vadd.vv v0, v16, v8
124 vadd.vv v12, v20, v4
125.ifc \op,avg
126 vle8.v v16, (a0)
127 vle8.v v20, (t6)
128 vaaddu.vv v0, v0, v16
129 vaaddu.vv v12, v12, v20
130.endif
131 vse8.v v0, (a0)
132 vse8.v v12, (t6)
133 add a2, t0, a3
134 add a0, t6, a1
135 bnez a4, 1b
136
137 ret
138endfunc
139.endm
140
57.irp len, 64, 32, 16, 8, 4141.irp len, 64, 32, 16, 8, 4
58 copy_avg \len142 copy_avg \len
59.endr143.endr
144
145bilin_h_v put, h, a5
146bilin_h_v avg, h, a5
147bilin_h_v put, v, a6
148bilin_h_v avg, v, a6
149
150.macro func_bilin_h_v len, op, type
151func ff_\op\()_vp9_bilin_\len\()\type\()_rvv, zve32x
152 lpad 0
153 vsetvlstatic8 \len, t0, 64
154 j .Lbilin_\type\()\op
155endfunc
156.endm
157
158.irp len, 32, 16, 8, 4
159 .irp op, put, avg
160 .irp type, h, v
161 func_bilin_h_v \len, \op, \type
162 .endr
163 .endr
164.endr
libavcodec/riscv/vp9dsp.h+6−6
@@ -107,27 +107,27 @@ void ff_avg_8tap_##type##_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \ · 106 unmodified lines
107 int h, int mx, int my);107 int h, int mx, int my);
108 108
109#define VP9_BILINEAR_RISCV_RVV_FUNC(SIZE) \109#define VP9_BILINEAR_RISCV_RVV_FUNC(SIZE) \
110void ff_put_bilin_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \110void ff_put_vp9_bilin_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \
111 const uint8_t *src, ptrdiff_t srcstride, \111 const uint8_t *src, ptrdiff_t srcstride, \
112 int h, int mx, int my); \112 int h, int mx, int my); \
113 \113 \
114void ff_put_bilin_##SIZE##v_rvv(uint8_t *dst, ptrdiff_t dststride, \114void ff_put_vp9_bilin_##SIZE##v_rvv(uint8_t *dst, ptrdiff_t dststride, \
115 const uint8_t *src, ptrdiff_t srcstride, \115 const uint8_t *src, ptrdiff_t srcstride, \
116 int h, int mx, int my); \116 int h, int mx, int my); \
117 \117 \
118void ff_put_bilin_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \118void ff_put_vp9_bilin_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \
119 const uint8_t *src, ptrdiff_t srcstride, \119 const uint8_t *src, ptrdiff_t srcstride, \
120 int h, int mx, int my); \120 int h, int mx, int my); \
121 \121 \
122void ff_avg_bilin_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \122void ff_avg_vp9_bilin_##SIZE##h_rvv(uint8_t *dst, ptrdiff_t dststride, \
123 const uint8_t *src, ptrdiff_t srcstride, \123 const uint8_t *src, ptrdiff_t srcstride, \
124 int h, int mx, int my); \124 int h, int mx, int my); \
125 \125 \
126void ff_avg_bilin_##SIZE##v_rvv(uint8_t *dst, ptrdiff_t dststride, \126void ff_avg_vp9_bilin_##SIZE##v_rvv(uint8_t *dst, ptrdiff_t dststride, \
127 const uint8_t *src, ptrdiff_t srcstride, \127 const uint8_t *src, ptrdiff_t srcstride, \
128 int h, int mx, int my); \128 int h, int mx, int my); \
129 \129 \
130void ff_avg_bilin_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \130void ff_avg_vp9_bilin_##SIZE##hv_rvv(uint8_t *dst, ptrdiff_t dststride, \
131 const uint8_t *src, ptrdiff_t srcstride, \131 const uint8_t *src, ptrdiff_t srcstride, \
132 int h, int mx, int my);132 int h, int mx, int my);
133 133
libavcodec/riscv/vp9dsp_init.c+21−0
@@ -63,6 +63,27 @@ static av_cold void vp9dsp_mc_init_riscv(VP9DSPContext *dsp, int bpp) · 62 unmodified lines
63 init_fpel(3, 8);63 init_fpel(3, 8);
64 init_fpel(4, 4);64 init_fpel(4, 4);
65 65
66 dsp->mc[0][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_64v_rvv;
67 dsp->mc[0][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_64h_rvv;
68 dsp->mc[0][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_64v_rvv;
69 dsp->mc[0][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_64h_rvv;
70 dsp->mc[1][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_32v_rvv;
71 dsp->mc[1][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_32h_rvv;
72 dsp->mc[1][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_32v_rvv;
73 dsp->mc[1][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_32h_rvv;
74 dsp->mc[2][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_16v_rvv;
75 dsp->mc[2][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_16h_rvv;
76 dsp->mc[2][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_16v_rvv;
77 dsp->mc[2][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_16h_rvv;
78 dsp->mc[3][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_8v_rvv;
79 dsp->mc[3][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_8h_rvv;
80 dsp->mc[3][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_8v_rvv;
81 dsp->mc[3][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_8h_rvv;
82 dsp->mc[4][FILTER_BILINEAR ][0][0][1] = ff_put_vp9_bilin_4v_rvv;
83 dsp->mc[4][FILTER_BILINEAR ][0][1][0] = ff_put_vp9_bilin_4h_rvv;
84 dsp->mc[4][FILTER_BILINEAR ][1][0][1] = ff_avg_vp9_bilin_4v_rvv;
85 dsp->mc[4][FILTER_BILINEAR ][1][1][0] = ff_avg_vp9_bilin_4h_rvv;
86
66#undef init_fpel87#undef init_fpel
67 }88 }
68#endif89#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t