From patchwork Sat Mar 2 07:42:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: flow gg X-Patchwork-Id: 46690 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a919:b0:19e:cdac:8cce with SMTP id cd25csp1729645pzb; Fri, 1 Mar 2024 23:43:11 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUMrSb1V6DsaemSC2U5UJ6sOBajcxJqMkLRP9sAnaBVTGBPG/yEmakrOLkKOuRldLYLBZXzV7EpCeMRiUUrg3hs+aKvKYSjE1HbcQ== X-Google-Smtp-Source: AGHT+IEXdppufYIKiLfS8sDR7QV82peZGGy4KzCJ/uQ0VNnyWUiwX+o8GQoPqJjIAtcMsWHwenL0 X-Received: by 2002:a05:6402:5164:b0:565:a4dc:b288 with SMTP id d4-20020a056402516400b00565a4dcb288mr2726798ede.4.1709365391219; Fri, 01 Mar 2024 23:43:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1709365391; cv=none; d=google.com; s=arc-20160816; b=007y9IuELHS6OVddNSqx1c0RBr0DQnMgdmPfWXbVmDZpKhzoC6btIqHa+d9F82Gz4m 7zp9oLPAxY/AJtrrDxEfu1ef7qTEOfGc4UfhjRuz9KNYnTwqEnUX541W/2xdE2hmsbyu +KC7yIC564XUvkvzve1+/DwT7aTUB+FoVZLLxY7v/odtpJf2api4GrVASdt6bPnfZSov 7yg77j3ZmgXbR4dsu0BuGzq6OWfHIaf0wyaaPXTmw1XUJcDILhYTjuxcg2oSJ82LxIwq Y1bPhHaSCa8JKQ+rZmf5ay/PrmdqvQzQZ2WjEKL0Gzs7CX25xvx+g8+80ZYrwVvqFC38 BfeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=yVZ175DJx6x2Ad1XbdMVNbmX2ljItes48K53KRy2ae4=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=vAnPAsv1r5/qWKCs5jH88jUxXd0Fv0b7WGOB3aMwqLRkcXJ39vCydZTKbWY/YpNKKY avVvcGDrVYQ4wU4HOP13Wy8khIEWwSoY2JEcSh/Hmxw8brM60ezMSH64KMZBg40pY3BN YR4PQh+IZ0jYTH8hCmNQKjtXv8P0yy6P3T8MIXtn3GRg343+hS10x30O+SJ5ntWZoN7t e485os1pYLIF+afzr3H6Bj0G5LVVl3FnxJlF05EBqJrVS+n/QUjGtWnyxqI9zjahpfCv 8uclRN9CwvYyPCWjEy0l6uXR6ZRq0oi3BpjNVGL9mtIDTV8//hMyCwlzqAC3KTdk7nq3 +BXQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=FoxjjX4s; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t19-20020a056402525300b00566c1bd2259si1576305edd.485.2024.03.01.23.43.10; Fri, 01 Mar 2024 23:43:11 -0800 (PST) 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=@gmail.com header.s=20230601 header.b=FoxjjX4s; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 73D5C68D305; Sat, 2 Mar 2024 09:43:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f51.google.com (mail-qv1-f51.google.com [209.85.219.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 205A068D229 for ; Sat, 2 Mar 2024 09:43:02 +0200 (EET) Received: by mail-qv1-f51.google.com with SMTP id 6a1803df08f44-6905bec0385so4704006d6.0 for ; Fri, 01 Mar 2024 23:43:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1709365381; x=1709970181; darn=ffmpeg.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ICLBySvYEADrx4VRuULGN/mMzVlhH83NcXzTNQmb0zY=; b=FoxjjX4sfhEDx5KPHMPUjCxIo8J+HlDRYe7wTmtvC1J2KoUeEaM1qeGV6iXdaQO7UW Agr1iS5RmbJbtrTB4iW21Q9KgBbA8AynSi8PUgZym6oOSvROUVNJUeb9zUMD6gGaHV7f 9xIiTAErNqyVVnyBfVg6K4dgy72rA5izwL0QhN4BYun+0qij+Dy2QD3FKP2aRKa3NKFz DUOPv70yp5JP0lyh+c/+0ot/z4fUA18xYo7mtleRnO8ldyikoB98nJc5anft7gYt9Ne/ Qg8FvYRHgRxVxLcjkdRWOXpHOcodMYfSfOTTIEmrqNAUAXTul2eD/+88YdkwGqUTIQAe CLaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709365381; x=1709970181; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ICLBySvYEADrx4VRuULGN/mMzVlhH83NcXzTNQmb0zY=; b=XEMnHzg2xE7Twk2O0fEAW2xvujOmX5VGGxI8OoaJ/b1LnBYvguzmDweF4QDTiLhjZQ UkAEuChe+TgWs4bFL+OQwwNC7eSNM3z80PqN7e50EAMexfU6LTIrMLUxqCh4bWStMRJq E37Ykv32fdE6HecJFiPVOARrbZTk9z8ISSKBVSZrzbaIaAmGkUU+grjoJGWnxxMBh+WC iM/VPEt5lgCkatpEF12EwCxUA3wNhp7jswlEANMM8KLl5/Uvl9x6ubtBSFiwuqwPBqvd iXJp54HntnRSnGQfuaigN2IWiau5lmmGdyGHzZo8ZywpjKRJo8I7kCcr64K8Ml6sLInT A84w== X-Gm-Message-State: AOJu0YyipwYWOSGevOI/+7Dv3TC7aTY6mnKdP1HU4/Mgk2dwu6LakJIh vA7+svR8gv8uAgpeVhtOcwwitu4rboH0BVqb5KB3LF9iw5UqGAnZUQ8uh4exfogv6W+x/D3YrhI 5ASg0ziYuI3cA8eVkKZ4XaeXlAFn3CLpf+BU= X-Received: by 2002:a0c:e752:0:b0:68f:e782:fd18 with SMTP id g18-20020a0ce752000000b0068fe782fd18mr3878015qvn.59.1709365380817; Fri, 01 Mar 2024 23:43:00 -0800 (PST) MIME-Version: 1.0 From: flow gg Date: Sat, 2 Mar 2024 15:42:49 +0800 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH 4/4] 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oKBiFb9VZN2K From 3128765d298f5a44fd13be7b3da2ef88c96083f9 Mon Sep 17 00:00:00 2001 From: sunyuechi Date: Sat, 2 Mar 2024 09:35:22 +0800 Subject: [PATCH 4/4] lavc/vp9dsp: R-V V ipred tm 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 35fb0ebe10..a8265255c4 100644 --- a/libavcodec/riscv/vp9_intra_rvv.S +++ b/libavcodec/riscv/vp9_intra_rvv.S @@ -290,3 +290,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 2b2e0db0d8..cff2310e5c 100644 --- a/libavcodec/riscv/vp9dsp.h +++ b/libavcodec/riscv/vp9dsp.h @@ -72,5 +72,13 @@ 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); #endif // #ifndef AVCODEC_RISCV_VP9DSP_RISCV_H 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.44.0