Received: by 2002:ab2:6309:0:b0:1fb:d597:ff75 with SMTP id s9csp250832lqt; Thu, 6 Jun 2024 02:28:52 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUfOUlixnbeXfqR6Jw0HK8Ti3hB3dyIf0TrD0SAqnzqHplOfSBU66MxiOFKjSx/HsuOf+uL8HVhqiQkgfVVzpzUzZJhEGsHZBrpq0NvSQ== X-Google-Smtp-Source: AGHT+IEUu8fd5mEo7Z5a8J3AR8McQY3cwItx5WHrrTNT8DBa0anLys1xlS+pVF9wHrnGbPg6oytk X-Received: by 2002:a17:90a:7e82:b0:2c1:e9db:92c8 with SMTP id 98e67ed59e1d1-2c2999b3befmr2973691a91.12.1717666131880; Thu, 06 Jun 2024 02:28:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717666131; cv=pass; d=google.com; s=arc-20160816; b=AZ3rkuIfSbmKanmoe9fVTVV7kTWHHniuCi5rRQpfCfznCEEM+jy8eRO7/RZcgMXDVi ILohsHkOmrW5IiBAHMTFxLeXTIQL4VctsEd3zlDwVxtA0q6tw49KAYk3pVp9aKXV8p5j hgJHtgBjv3L8cOoCZFqnuX9703EgnxrTQekwDjYTbyD19k5W9mUFGQl6ny6t1ogFxge6 NpCrFBmJBkSRTthGIEsaA8VrlSgPF+HwUNn+EyODNUUPk4YqghxCKZEr+ysfY4rn6//L oeucJdZ7Cqhc9USx6fvX97KyRcJKpu3L6Tn/ED7I+x3P1blSyIYuRjCNlt3vAEsq/Lob 8SqQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vR6QnVhE1P+/mt7wdbQIhsPc6ElgkQtPOM9R+CoP1Lo=; fh=q/Ppq8/frEfcA3kotGB0IrpJr8gO0uNs3CtN4uoBAAY=; b=JtnLdK/ZlMIgfMdgXcJ0tyv6RV/mxlVKP/Mi+pkWirpQeLg60E9zcWHWq/ToKKaEeh oHSTMLgdoOdLCMyLt015uXHCYf8nxJKmRSz1vmLoo6AS6fG/dktnjJxiPZFXUSCZt6NE 8JBxkVf0DiMKaun1lkXJ8DsVRJqv3sQrLkeII2bdSa4zyHyS0JmYl9lTjvzZgbYZuOdJ hjzrJwmPdhaIrpcPR9m7jfiGgEN2rTeGD44aEYTJsYstRRFXO86AYOJyQFj5/4Lsa786 S8Tx6x120bYXcFggpbmVIGO4vwrFIJA30QUqJJ2S4qY8hLeWZ+WAjq9kw5rvfwaZFK9q n3wQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=u4azLG8M; arc=pass (i=1 spf=pass spfdomain=mediatek.com dkim=pass dkdomain=mediatek.com dmarc=pass fromdomain=mediatek.com); spf=pass (google.com: domain of linux-kernel+bounces-204001-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-204001-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id 41be03b00d2f7-6de261caedasi811012a12.401.2024.06.06.02.28.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 06 Jun 2024 02:28:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-204001-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=u4azLG8M; arc=pass (i=1 spf=pass spfdomain=mediatek.com dkim=pass dkdomain=mediatek.com dmarc=pass fromdomain=mediatek.com); spf=pass (google.com: domain of linux-kernel+bounces-204001-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-204001-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mediatek.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7BE5F285C43 for ; Thu, 6 Jun 2024 09:28:51 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 383E0167DAE; Thu, 6 Jun 2024 09:26:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="u4azLG8M" Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1BD1315278B for ; Thu, 6 Jun 2024 09:26:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=210.61.82.184 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666010; cv=none; b=ea0abUG/HoBKnUJbDaPySj6GjFKoKDhPgV0PMnlpQ+zKhOGe8YNOmnFYCLdE5DQJwUGfGPSkJdRGnLutoVHUhlghgifgC9RBc30GPasf2bSCffBrBiXXmlkimTGsnZy5MeAgvKufp7Kp19LUKaqIURyPwBidbqMZ6/bBGHserWE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717666010; c=relaxed/simple; bh=nNAH2sPLVbPltR3zXpDybAmmJpOC/nI7/OhojoM3KIA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ENUq1jqak5/VeuycFCSHv+EF9DdnFiZNuLfnjnCrPahWL/B4MvSCJVU1sTNtrU51B3x7AQnqUAlB8nToBjFpgtTTs1PgMoE/Tnmor8YWbqHewnrdpyioALZGZSSEvZLGfmxZ0mLyBG+bKgirtRMaoZIXI1tv8Q4fP1GQ/Eg/bjc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com; spf=pass smtp.mailfrom=mediatek.com; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b=u4azLG8M; arc=none smtp.client-ip=210.61.82.184 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=mediatek.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mediatek.com X-UUID: e084432a23e611efa22eafcdcd04c131-20240606 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=vR6QnVhE1P+/mt7wdbQIhsPc6ElgkQtPOM9R+CoP1Lo=; b=u4azLG8ME6pN2HgpThCFisJiGMg9RpoSfZE4TCCpCrn5vn8nz+Hi9IpfnGsTZwItPUhs6xBZEm3ViWRhfe7I2lci+bVyzQs/poduEvP8RYXAPy31k5LOiTB0mV0Q1Qn/Fz9AIogswQ7bhj5uwfl820bUnjERCBO98gZZXdgTCPs=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.39,REQID:56fba906-1ee0-4476-bfcb-5d757b9dd8d4,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:393d96e,CLOUDID:603b4744-4544-4d06-b2b2-d7e12813c598,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:11|1,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:0,OSI:0,OSA:0,AV:0,LES :1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 0 X-CID-BAS: 0,_,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR,TF_CID_SPAM_ULN X-UUID: e084432a23e611efa22eafcdcd04c131-20240606 Received: from mtkmbs11n2.mediatek.inc [(172.21.101.187)] by mailgw02.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 538748085; Thu, 06 Jun 2024 17:26:38 +0800 Received: from mtkmbs11n1.mediatek.inc (172.21.101.185) by mtkmbs13n2.mediatek.inc (172.21.101.108) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.26; Thu, 6 Jun 2024 17:26:38 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkmbs11n1.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.2.1118.26 via Frontend Transport; Thu, 6 Jun 2024 17:26:38 +0800 From: Shawn Sung To: Chun-Kuang Hu CC: Philipp Zabel , David Airlie , Daniel Vetter , Matthias Brugger , AngeloGioacchino Del Regno , Bibby Hsieh , CK Hu , "Nancy . Lin" , Sean Paul , Jason Chen , Fei Shao , , , , , Hsiao Chien Sung Subject: [PATCH v8 13/16] drm/mediatek: Support alpha blending in display driver Date: Thu, 6 Jun 2024 17:26:32 +0800 Message-ID: <20240606092635.27981-14-shawn.sung@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20240606092635.27981-1-shawn.sung@mediatek.com> References: <20240606092635.27981-1-shawn.sung@mediatek.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain X-MTK: N From: Hsiao Chien Sung Support "Pre-multiplied" and "None" blend mode on MediaTek's chips by adding correct blend mode property when the planes init. Before this patch, only the "Coverage" mode (default) is supported. For more information, there are three pixel blend modes in DRM driver: "None", "Pre-multiplied", and "Coverage". To understand the difference between these modes, let's take a look at the following two approaches to do alpha blending: 1. Straight: dst.RGB = src.RGB * src.A + dst.RGB * (1 - src.A) This is straightforward and easy to understand, when the source layer is compositing with the destination layer, it's alpha will affect the result. This is also known as "post-multiplied", or "Coverage" mode. 2. Pre-multiplied: dst.RGB = src.RGB + dst.RGB * (1 - src.A) Since the source RGB have already multiplied its alpha, only destination RGB need to multiply it. This is the "Pre-multiplied" mode in DRM. For the "None" blend mode in DRM, it means the pixel alpha is ignored when compositing the layers, only the constant alpha for the composited layer will take effects. Reviewed-by: CK Hu Reviewed-by: AngeloGioacchino Del Regno Signed-off-by: Hsiao Chien Sung --- drivers/gpu/drm/mediatek/mtk_plane.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_plane.c b/drivers/gpu/drm/mediatek/mtk_plane.c index 1723d4333f37..5bf757a3ef20 100644 --- a/drivers/gpu/drm/mediatek/mtk_plane.c +++ b/drivers/gpu/drm/mediatek/mtk_plane.c @@ -346,6 +346,17 @@ int mtk_plane_init(struct drm_device *dev, struct drm_plane *plane, DRM_INFO("Create rotation property failed\n"); } + err = drm_plane_create_alpha_property(plane); + if (err) + DRM_ERROR("failed to create property: alpha\n"); + + err = drm_plane_create_blend_mode_property(plane, + BIT(DRM_MODE_BLEND_PREMULTI) | + BIT(DRM_MODE_BLEND_COVERAGE) | + BIT(DRM_MODE_BLEND_PIXEL_NONE)); + if (err) + DRM_ERROR("failed to create property: blend_mode\n"); + drm_plane_helper_add(plane, &mtk_plane_helper_funcs); return 0; -- 2.18.0