Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp1549948pxb; Wed, 30 Mar 2022 06:06:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxehbkIhdfJonCQkAKccIbj/yEwpo0l/wM6ZP9ARDpW8RghWUqFPgc8FwWKJat/6xz93Rds X-Received: by 2002:a17:90b:384b:b0:1c7:41fd:9991 with SMTP id nl11-20020a17090b384b00b001c741fd9991mr5060549pjb.199.1648645570298; Wed, 30 Mar 2022 06:06:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648645570; cv=none; d=google.com; s=arc-20160816; b=A4RUeyHZgy4A7MHZAHOxPjTYkinUKGl10IWvOi6xmmT2/4Wdy6/w07UXYIarElbq1V cwHgAC0pRRh59FtSuDnIJKzxbE9/SIYb6z5QA/uBvVzaqAsIg42Yfujt276x1otUPlM0 hFg/lbew3hTbP7LWD/+gJiN1TdozxUtoCVwApASux/QpL9adS87zYjqVB9dX5LIPsfc0 BCPSFjrHKo7Mq8u2R2Zkge13Hdv+Z9lCX64C/GWYXG8NdOXhMLX/3n2J8mNS41QPqxWL jcPDpBlr766hD/xokClVVylnnGkRfS6uiIVIxCaPLBpjPKmMiSAzL2uXdrt3n2g3Ed2P 77xQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=PbtB4d2TaEvBxTnbUEH8FeeOTqo9Fsuq+oaXuDrUoFk=; b=WbcBwSrDgss8ivxuA9mzFc9Xm9YP4IX6KZvRJus8I6gnoy+gJPC3pSs1mikyZxNIcJ VAeC18qFeWiwXD3fUvjwMR8IKdapbBNbaaTk69PzMVhWBKv9qte7yT74cn/OL2TU6lBW wAiBrXVWRmlvtJgzB6SIvjkRXAHdQRCQQ+52prijvsWLOFl10sHd7z9RmtZrjM7aq9Bv N75xiZ7tEWz5Fc6HIxp++wOnuIu63ttB5G7vUS25uiyHTaYZbCk3uRa57topvfos5FNy YunsUHhEqRY9UAPZupOzAXsMdf2WxB093fgAd33Fn1JtXnXLb9cO5eDbNvGhF0GI3hWD cZzA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=Iwnoz1AW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n6-20020a6546c6000000b0038233e5c911si21066840pgr.88.2022.03.30.06.05.55; Wed, 30 Mar 2022 06:06:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=Iwnoz1AW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230448AbiC2UVC (ORCPT + 99 others); Tue, 29 Mar 2022 16:21:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230472AbiC2UUz (ORCPT ); Tue, 29 Mar 2022 16:20:55 -0400 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3CC6CE1255 for ; Tue, 29 Mar 2022 13:19:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject: Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=PbtB4d2TaEvBxTnbUEH8FeeOTqo9Fsuq+oaXuDrUoFk=; b=Iwnoz1AWuSRlYU/D+EipQMnGxj C814J+esXDvWKyG0gsM7qHtoc7l0ESUtG45CtJOwAGm7NnwzbfQJZsFoQApCtEqHJelefzAvE3/D2 DNJj3H/IL2B1phzKIDbZ9VCheMt+z2rPMBDECya3lfiouKbrXFUy8JifFYXRv2BpUc4H6Ij49eUNx s0ukXum4Yq2T5PmdHEmIgRtUXCqlkj7BAyXMTJeb76jMifimmd+ZeCQzDSjYKO4Tke6L3L8LSY33S VfwqLg/aUF9PZPMDuXN3S+p/YtkWCEXKT1ideW4K8EoZPmSx7DhZulEGg7dtdRGOgrwLJ3nKn/7Ks vvILD5DQ==; Received: from [165.90.126.25] (helo=killbill.home) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1nZIIn-000Abu-G1; Tue, 29 Mar 2022 22:18:53 +0200 From: Melissa Wen To: Harry Wentland , Nicholas Kazlauskas , Agustin Gutierrez , Zhan Liu , Alex Deucher , Rodrigo Siqueira , Simon Ser , markyacoub@google.com, sunpeng.li@amd.com, christian.koenig@amd.com, Xinhui.Pan@amd.com, airlied@linux.ie, daniel@ffwll.ch Cc: Melissa Wen , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] drm/amd/display: don't ignore alpha property on pre-multiplied mode Date: Tue, 29 Mar 2022 19:18:35 -0100 Message-Id: <20220329201835.2393141-1-mwen@igalia.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org "Pre-multiplied" is the default pixel blend mode for KMS/DRM, as documented in supported_modes of drm_plane_create_blend_mode_property(): https://cgit.freedesktop.org/drm/drm-misc/tree/drivers/gpu/drm/drm_blend.c In this mode, both 'pixel alpha' and 'plane alpha' participate in the calculation, as described by the pixel blend mode formula in KMS/DRM documentation: out.rgb = plane_alpha * fg.rgb + (1 - (plane_alpha * fg.alpha)) * bg.rgb Considering the blend config mechanisms we have in the driver so far, the alpha mode that better fits this blend mode is the _PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN, where the value for global_gain is the plane alpha (global_alpha). With this change, alpha property stops to be ignored. It also addresses Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1734 v2: * keep the 8-bit value for global_alpha_value (Nicholas) * correct the logical ordering for combined global gain (Nicholas) * apply to dcn10 too (Nicholas) Signed-off-by: Melissa Wen --- .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 14 +++++++++----- drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c | 14 +++++++++----- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c index ad757b59e00e..b1034e6258c8 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c @@ -2528,14 +2528,18 @@ void dcn10_update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx) struct mpc *mpc = dc->res_pool->mpc; struct mpc_tree *mpc_tree_params = &(pipe_ctx->stream_res.opp->mpc_tree_params); - if (per_pixel_alpha) - blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA; - else - blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA; - blnd_cfg.overlap_only = false; blnd_cfg.global_gain = 0xff; + if (per_pixel_alpha && pipe_ctx->plane_state->global_alpha) { + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN; + blnd_cfg.global_gain = pipe_ctx->plane_state->global_alpha_value; + } else if (per_pixel_alpha) { + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA; + } else { + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA; + } + if (pipe_ctx->plane_state->global_alpha) blnd_cfg.global_alpha = pipe_ctx->plane_state->global_alpha_value; else diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c index 4290eaf11a04..b627c41713cc 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c @@ -2344,14 +2344,18 @@ void dcn20_update_mpcc(struct dc *dc, struct pipe_ctx *pipe_ctx) struct mpc *mpc = dc->res_pool->mpc; struct mpc_tree *mpc_tree_params = &(pipe_ctx->stream_res.opp->mpc_tree_params); - if (per_pixel_alpha) - blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA; - else - blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA; - blnd_cfg.overlap_only = false; blnd_cfg.global_gain = 0xff; + if (per_pixel_alpha && pipe_ctx->plane_state->global_alpha) { + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN; + blnd_cfg.global_gain = pipe_ctx->plane_state->global_alpha_value; + } else if (per_pixel_alpha) { + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA; + } else { + blnd_cfg.alpha_mode = MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA; + } + if (pipe_ctx->plane_state->global_alpha) blnd_cfg.global_alpha = pipe_ctx->plane_state->global_alpha_value; else -- 2.35.1