From patchwork Mon May 13 16:59:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: uk7b@foxmail.com X-Patchwork-Id: 48860 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a48:b0:1af:fc2d:ff5a with SMTP id zu8csp465667pzb; Mon, 13 May 2024 10:00:33 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUfVYpOcIA+Mo8uNaBab1bcXG1+Qzg/fDRJ8qH08wBS71Z2ipDuhZGVKNUCje2NsaKfFpyw1b3t32ViFqDbUpVBok/idDpMlQ/fYw== X-Google-Smtp-Source: AGHT+IE1zUcModhj/175jSm+nXT3TNXhcP7BM+e6rex2xnQzbg59oR/9xjYFjgpd0+Cbeee+DKUl X-Received: by 2002:a17:907:3a14:b0:a59:aab3:bb81 with SMTP id a640c23a62f3a-a5a2d67d3a3mr563716966b.6.1715619632845; Mon, 13 May 2024 10:00:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1715619632; cv=none; d=google.com; s=arc-20160816; b=VvzoQA47XBWae28rfisQWYOgEmfLAttyBwEG5hiEIFvv1OXJfxSJDb2CpMOAaum+tT 6o1zyGbL+ElvqHv+mEb0GEDTKad2pYNw0zR3CaKEEM4A9Oexn95fbCYa9IZxdqxLzBiU B91CK9OV+EAIBkeuy8Tk+6btanQ3lZgNo8Eq9Amg2M8VMt4qNen47hPHyW3L84pWiSgo 8Yz7Y7FHjHLmZLWVtvsJa78jP780ffJ3Ue6UdAXPO7O6+XElWl9AkANjdvijwKUA1Cxo yfG7nG6YLLx4mMHO0uhaxKRDoMfAVM3L7ue6k37GrgO1RnX9vTYOeUd0nmQCCZ9gTCTZ uFZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=NYexnzwFn8TsaYNZir+4muAyJmlxJg3Br0XwU/99AYw=; fh=D0bFwGkf4X22/D/bfeDVrXKIx7S6kcXsNzy10j8ORbQ=; b=rum7MjXEMOSygjvw82u44BXGTvuKQZKFJNj0bdtFjnMT+FHdXQTxJaxk8mfMd+AVpm OTJ/iCRK8HboptTH3i6OgfZpvsuuf/YfCYbSXjlX5lODzvLjRK5/K+8LGVaXLN8zX667 SksEpo0IwzHIjVET1SE4Evm73HRSwuqZQzy4B4zKVd4m4Gf430hfaihh00FJXKmggIdq vaPrBc4Rvj79xOEZ9rKpAmWYKm3tAkuOCjx570Y8LxRbzcAKjdXszE+yXyVqbcFAbgwE F6vfpVHxCH48nTFTLtJl/JEt/G0Rx8l4f3/sKX7iiVi52MAi8yHwiUKOPguKoSyIQV66 yzng==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=J8uZV9XX; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a5a1797bf3fsi524508666b.234.2024.05.13.10.00.32; Mon, 13 May 2024 10:00:32 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=J8uZV9XX; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 551E368D6AC; Mon, 13 May 2024 19:59:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-49.mail.qq.com (out162-62-57-49.mail.qq.com [162.62.57.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A841B68D319 for ; Mon, 13 May 2024 19:59:48 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1715619579; bh=8z2sjCc5cMVtLhKsPghpnqDC/xL7O7k5l2TOQa7c1eM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=J8uZV9XXq8W43wQHt9Iol6jmyrOWtv54AZGvNDm9L8BHFb61422XJnfOB9iHwskNd quDugpCL1PzL/4heGsM9hJmGPhv7pOt1qdWbvBzXgyelmwyktTZelhrX+i3iAtAcl9 MLjvs8dWXLs+uEwUS8s8G9Cymg9KA9QsGY1e1c9A= Received: from localhost.localdomain ([42.56.223.122]) by newxmesmtplogicsvrszb9-0.qq.com (NewEsmtp) with SMTP id EE3A4485; Tue, 14 May 2024 00:59:35 +0800 X-QQ-mid: xmsmtpt1715619578txdiea928 Message-ID: X-QQ-XMAILINFO: Naw3xMhTNeIuzVWdI/rVxjdrvHTKt1m448/4dKND+D58Joc6VatYBP1pAI3pou m/LRSZBpr+IjAPZlfzJ5TsbqlIkzhNpxMPukHxx0VQNjkKY7AQljMPIgrPi+PPNCKDdOOpvdqCkN Y1Sx+hI/72XFWw36X6dj/vowdvHH0b3Qs3D6dPGG0QMlPjrtQoWWXabVEeLnZ9I2MSs3BDoTp8Vi /ONesIKfK/UWIMwb//admVR7rn6VBszJgsnhopBP8rpyO43yift7cmmDUt0YgEeAVjV1q/CwrWIa nOF1Fbxw8bUedX86IMnhV53Aye/stdrBnLNIEr8uTgVlb553iLREZr4i2mTFpg+Xc7xmPj2Jwn6+ jmRrAJxnNY12SYaZt+qDmEr9HpVBe8fSrb9whZ1iexxJT1Ox/yMeCdQBfNu7bGLcWD6rCOJ2HOgw fjrg32bZcjDTZS9Kyi1AgLD9ErBLUo4fK4/CH82fvA3WnG9wNJTVlNzOSZugNGkgpfSzC7/BPppU HIraW/lKbFGm/4qi+IBGkNHauNGmv/1jh6G1iPPYDj4t2OpZzxyC61J3be98c+yaqRM90ckr0BLI JkCMJ5kzu8IoewkzPUnRZ9M7vtW56Q3lJhsB08uCu9fRbOWVwBb3LgofQ3gm/Yb0OrG/n+8BlMrC XJoaH/KvS/LfxYczLa3XKLrwdvM+O4JBiY2q1udt0AaoXr1XYlygtUy28YxOrF5lnbr20jatbifz 3sZVXkNhhbzf1bmu2TDw7m9hdxQHhZpeFwr6V9z5Bn8SXr/+4xUc0hbcs2lJ98uPVGFYM445Lvt7 a7UAIARb2rgvdQS3C9CfkxDG0tVENxqGfU7Q1U59ujV9AaoloxypMU7L3leJK5w2k+8e8CMNSRMJ 5UEKv8vB0cTS9bJDCu9xR/3FuHYTN+/ypFKngVDtLlmFWyfxZ7dyUSzQ/6/n8owxeufFrHV1/eTS Vc5CQinUU= X-QQ-XMRINFO: NyFYKkN4Ny6FSmKK/uo/jdU= From: uk7b@foxmail.com To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 May 2024 00:59:21 +0800 X-OQ-MSGID: <20240513165926.1467967-4-uk7b@foxmail.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240513165926.1467967-1-uk7b@foxmail.com> References: <20240513165926.1467967-1-uk7b@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 4/9] lavc/vp9dsp: R-V V ipred tm X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: sunyuechi Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Zj7ykUnbNjjZ From: sunyuechi 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 | 141 +++++++++++++++++++++++++++++++ libavcodec/riscv/vp9dsp.h | 8 ++ libavcodec/riscv/vp9dsp_init.c | 4 + 3 files changed, 153 insertions(+) diff --git a/libavcodec/riscv/vp9_intra_rvv.S b/libavcodec/riscv/vp9_intra_rvv.S index ca156d65cd..7e1046bc13 100644 --- a/libavcodec/riscv/vp9_intra_rvv.S +++ b/libavcodec/riscv/vp9_intra_rvv.S @@ -173,3 +173,144 @@ 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 0ad961c7e0..79330b4968 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 eab3e9cb0a..184fadbaf7 100644 --- a/libavcodec/riscv/vp9dsp_init.c +++ b/libavcodec/riscv/vp9dsp_init.c @@ -89,6 +89,10 @@ static av_cold void vp9dsp_intrapred_init_riscv(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 #endif