From nobody Mon Jun 8 20:41:42 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 A378B4218B7 for ; Tue, 26 May 2026 18:17:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779819440; cv=none; b=TVN9rXrOjLfvcwW5k06uxf69rCU6U4PbCMxWFG+xzZz7qbxwoN4MLZfPWpeJf7w8qNRdg0qFo8rGkru3pXe6v6puEpTxCfoGBI6Et7vHBHAWpJ27ythO30DKRL67JjaEl+bkJ4aq3eP+273efukLRWX4TqSET2v21Xot8/z4Bog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779819440; c=relaxed/simple; bh=4qBUq6c+98qMlKZuAev1kRrXsKeMZH2NUu0ShA8/CK8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YrZhJxZBSskKsHRkYVfgUoescVG8op1MvxQOjRUzmhTvXe5wmWY43uDrbEfF8MmJTaewV963AE64M6thgvA2L0Skf0Im8rQcOVHB/Ow8nu6QEFXazVPsI3sMSaEX3p6iimVtyvCryuE7Kje9mMdYaIlkTUT1PRP+MMr5yk3wa70= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=kKCr/mS+; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="kKCr/mS+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779819436; bh=4qBUq6c+98qMlKZuAev1kRrXsKeMZH2NUu0ShA8/CK8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kKCr/mS+yvI/OPVwCE4L67tq+wqWavaJ3p0SrZWDrimSX4tgfrr1viedgE3G97sYR 2vRAqqtujcNdapPn6kOBf5Z9J/ZGWB3D8L3JIrS0PbC0+TS/OI3mEhD6Q7w/sXsCdq 3mvh9sZH7OiFRHXM+VJ/oQ35W0iYLu89hUYaCCQnf4TCUVXYClIb/oKVPXahRzYuzG Ls2HQZnt82EDnoHIMg/9O918iSgTc1s5aNkD30dpqdBrnRQKB0AV45R5eGp1mcvNqo ovl5pEunMpjYmw2DAgCzIjc2V3BtIZV9dIzjyf+2MOM4cT5ApWJ6fyKQ0OU/3PUF6c ESeBdXFeRRSew== Received: from archlinux (unknown [100.64.0.159]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: leandrohrb) by bali.collaboradmins.com (Postfix) with ESMTPSA id 8AA2F17E0DD3; Tue, 26 May 2026 20:17:13 +0200 (CEST) From: Leandro Ribeiro To: dri-devel@lists.freedesktop.org Cc: airlied@gmail.com, daniels@collabora.com, jani.nikula@linux.intel.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, pekka.paalanen@collabora.com, simona@ffwll.ch, tzimmermann@suse.de, ville.syrjala@linux.intel.com, linux-kernel@vger.kernel.org Subject: [PATCH v4 1/2] drm/drm_blend: allow blend mode property without PREMULTI Date: Tue, 26 May 2026 15:16:59 -0300 Message-ID: <20260526181700.25310-2-leandro.ribeiro@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260526181700.25310-1-leandro.ribeiro@collabora.com> References: <20260526181700.25310-1-leandro.ribeiro@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some hardware only supports the COVERAGE blend mode and lacks PREMULTI support entirely. DRM currently requires that PREMULTI is present when creating a blend mode property, which prevents such drivers from being properly upstreamed. Remove this restriction and allow drivers to create a blend mode property without PREMULTI, enabling support for hardware that implements only COVERAGE blend mode. This does not introduce a regression, as no existing upstream drivers expose only COVERAGE. However, userspace that wants to support such kind of hardware in the future will have to check the supported blend modes instead of assuming PREMULTI is always supported. Signed-off-by: Leandro Ribeiro --- drivers/gpu/drm/drm_blend.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_blend.c b/drivers/gpu/drm/drm_blend.c index 2f0d1ba285be..d17ae964fb21 100644 --- a/drivers/gpu/drm/drm_blend.c +++ b/drivers/gpu/drm/drm_blend.c @@ -563,10 +563,10 @@ EXPORT_SYMBOL(drm_atomic_normalize_zpos); /** * drm_plane_create_blend_mode_property - create a new blend mode property * @plane: drm plane - * @supported_modes: bitmask of supported modes, must include - * BIT(DRM_MODE_BLEND_PREMULTI). Current DRM assumption is - * that alpha is premultiplied, and old userspace can break if - * the property defaults to anything else. + * @supported_modes: bitmask of supported modes. When + * BIT(DRM_MODE_BLEND_PREMULTI) is included, it will be used + * as the default. Otherwise, the default will fallback to one + * of the supported modes. * * This creates a new property describing the blend mode. * @@ -599,13 +599,14 @@ int drm_plane_create_blend_mode_property(struct drm_p= lane *plane, { DRM_MODE_BLEND_PREMULTI, "Pre-multiplied" }, { DRM_MODE_BLEND_COVERAGE, "Coverage" }, }; + unsigned int default_mode; unsigned int valid_mode_mask =3D BIT(DRM_MODE_BLEND_PIXEL_NONE) | BIT(DRM_MODE_BLEND_PREMULTI) | BIT(DRM_MODE_BLEND_COVERAGE); int i; =20 if (WARN_ON((supported_modes & ~valid_mode_mask) || - ((supported_modes & BIT(DRM_MODE_BLEND_PREMULTI)) =3D=3D 0))) + (supported_modes =3D=3D 0))) return -EINVAL; =20 prop =3D drm_property_create(dev, DRM_MODE_PROP_ENUM, @@ -630,7 +631,14 @@ int drm_plane_create_blend_mode_property(struct drm_pl= ane *plane, } } =20 - drm_object_attach_property(&plane->base, prop, DRM_MODE_BLEND_PREMULTI); + if (supported_modes & BIT(DRM_MODE_BLEND_PREMULTI)) + default_mode =3D DRM_MODE_BLEND_PREMULTI; + else if (supported_modes & BIT(DRM_MODE_BLEND_COVERAGE)) + default_mode =3D DRM_MODE_BLEND_COVERAGE; + else + default_mode =3D DRM_MODE_BLEND_PIXEL_NONE; + + drm_object_attach_property(&plane->base, prop, default_mode); plane->blend_mode_property =3D prop; =20 return 0; --=20 2.54.0 From nobody Mon Jun 8 20:41:42 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 C3DBD4218B7 for ; Tue, 26 May 2026 18:17:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779819444; cv=none; b=dnfFEmpDG113UT9hQgxTdEk/oIJNkV/+JLe5cXw+dFfwVsHtAWTDJjD+Q6Rzn71lsYcsvolAIUWH035qwpTeuIitENSwVARIvCO73j25PaH/Wm8OINMEXliBCy0K/U1rHSYl+st9tEFpaCEHbKN5By7VhkR5zixarePpzR0j6sU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779819444; c=relaxed/simple; bh=KLzRwNHwtY0byiHeNkWWjPvarNGJTAfL/OSZMOgasBE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k/CtFh07X11r9NCzl+6kCjtfBb07y7vH0XuANmH+uLS4ZiE2dbDOG36SARYeevZjBfoEHFrMtBLGZ54OC3du28DR3GEDgbFnXHc4apQbwK0V1EwkIcEHYd5QCQWbCJK+vDHXe30UvnGauZjbF5qqTimiovTkXYobldARrD3nMaw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=pbgIX87J; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="pbgIX87J" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1779819441; bh=KLzRwNHwtY0byiHeNkWWjPvarNGJTAfL/OSZMOgasBE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pbgIX87J/tk2fyHoi7tNbeDPXgE78G0b1eyM41S8X3QDchlQ2xcRVOpFxbvVpLLYu iObepXEJZ2e1noV8oCGI/wLPK9how2oqcvHekIHBuQkHTZulO7fzjONfM3bW580ngQ s2hyaqyFu+BjCX0wvIzKPk+fvlvI/y79cLy7E3wqztr5pJTDhGCfCb6D+VakcGdfb1 4KvrOLo4X4Lz+3Uz4RotNxcxubqiXdofd0bHbj5ZGML8RKQ7S9RBHySzByOYX5R6VN 3YlQq4adHHNdQF1/DtAfYtRPtoD8maMswbztockyGHXGCrACr1FMq9T+eLkcz3P6Xr M19YTs7FGBNjA== Received: from archlinux (unknown [100.64.0.159]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: leandrohrb) by bali.collaboradmins.com (Postfix) with ESMTPSA id 9C90117E12C6; Tue, 26 May 2026 20:17:17 +0200 (CEST) From: Leandro Ribeiro To: dri-devel@lists.freedesktop.org Cc: airlied@gmail.com, daniels@collabora.com, jani.nikula@linux.intel.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, pekka.paalanen@collabora.com, simona@ffwll.ch, tzimmermann@suse.de, ville.syrjala@linux.intel.com, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/2] drm: ensure blend mode supported if pixel format with alpha exposed Date: Tue, 26 May 2026 15:17:00 -0300 Message-ID: <20260526181700.25310-3-leandro.ribeiro@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260526181700.25310-1-leandro.ribeiro@collabora.com> References: <20260526181700.25310-1-leandro.ribeiro@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Before "drm/drm_blend: allow blend mode property without PREMULTI", userspace would have to assume that only PREMULTI was supported by drivers that didn't expose the blend mode property. But now userspace shouldn't rely on that, as they can't count with drivers always supporting PREMULTI. Warn if a driver exposes pixel formats with alpha but doesn't expose the blend mode property. This way userspace doesn't have to guess. Drivers triggering this warning must be fixed. Signed-off-by: Leandro Ribeiro --- drivers/gpu/drm/drm_mode_config.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index 66f7dc37b597..8cca1dea3b3d 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -674,6 +674,25 @@ static void validate_encoder_possible_crtcs(struct drm= _encoder *encoder) encoder->possible_crtcs, crtc_mask); } =20 +static void validate_blend_mode_for_alpha_formats(struct drm_plane *plane) +{ + const struct drm_format_info *fmt; + u32 i; + + /* blend mode property supported, no need to check anything */ + if (plane->blend_mode_property) + return; + + for (i =3D 0; i < plane->format_count; i++) { + fmt =3D drm_format_info(plane->format_types[i]); + if (fmt->has_alpha) { + WARN(1, "[PLANE:%d:%s] pixel format with alpha exposed but " + "blend mode not setup", plane->base.id, plane->name); + break; + } + } +} + void drm_mode_config_validate(struct drm_device *dev) { struct drm_encoder *encoder; @@ -732,6 +751,8 @@ void drm_mode_config_validate(struct drm_device *dev) drm_for_each_plane(plane, dev) { if (plane->type =3D=3D DRM_PLANE_TYPE_PRIMARY) num_primary++; + + validate_blend_mode_for_alpha_formats(plane); } =20 WARN(num_primary !=3D dev->mode_config.num_crtc, --=20 2.54.0