From mboxrd@z Thu Jan 1 00:00:00 1970 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 AB2883DFC98 for ; Mon, 4 May 2026 14:06:48 +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=1777903610; cv=none; b=CASCQ9BlEIHVYe5DNyIgDhXqx6LWoPJZYjRwEGRe7ZX3OQ2N8E7yic8NTKY53CCagl0RGlNYG/cGjSMBDiDuzBt0d7zmm6bJUy3AdntDhnSuFNGCx82xARCtlD0CTMB83B8GhbNon6dgK5aKbx+NFsZI7wiNCFhhvJM6+459/fg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777903610; c=relaxed/simple; bh=qVJOyOLH9/NxwfpNmF2vdpgh3hpDuahvLa0CUv+Niro=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aW4jH4WRqXaGbzm6OKLOpBP5sBjE3G0VTHhHBnVierNcioVLPAJUqx/KYK31djhng/4nbhIVYbKNBmXzT+wpEz5R2APiHq/huAl79/X450NzaVWXSZ8YfaSWV+ZuxhwnEZxf6RMOklboO4wJfWdU3a3ozYsUFto/bBlrqBN07zE= 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=GuOj7Pi2; 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="GuOj7Pi2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1777903606; bh=qVJOyOLH9/NxwfpNmF2vdpgh3hpDuahvLa0CUv+Niro=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GuOj7Pi2k583hDCDJwTV2SRyh9cmm2rzdummX/BUhKYLmQssx5QQD96Ta1MC86ICp Mq48I6pCYjRYkv/ZBMC9vvm4xcIiJIDVypV7Cf76/gCeVEdXB1rgium3fYDjXfbvGe rcBLbtjzJaYJOFPlJSNuiGWaGGktxDvv6SVHV3QZxOACu50csRtN1x5I9kbPEnQlFT D/KVCtVFQLIEoxmwHTRnv9m3UA0qpkeyiRHFi+VZ0vDIHw5N762dbFNbF9HOaaciv8 dHoAP8fscrKo1GcWeAl9oEcuKsv/5KlBAYH2azjxoWDtF/OayCsOyGDe7DhWHbq2Ex K/lESGA1R4rZQ== Received: from archlinux (unknown [100.64.1.80]) (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 9C73917E1318; Mon, 4 May 2026 16:06:43 +0200 (CEST) From: Leandro Ribeiro To: dri-devel@lists.freedesktop.org Cc: airlied@gmail.com, daniels@collabora.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 v2 1/2] drm/drm_blend: allow blend mode property without PREMULTI Date: Mon, 4 May 2026 11:06:29 -0300 Message-ID: <20260504140630.68707-2-leandro.ribeiro@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260504140630.68707-1-leandro.ribeiro@collabora.com> References: <20260504140630.68707-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: 8bit 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 | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_blend.c b/drivers/gpu/drm/drm_blend.c index 1f3af27d2418..5ea0767f1cf5 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,13 @@ int drm_plane_create_blend_mode_property(struct drm_plane *plane, { DRM_MODE_BLEND_PREMULTI, "Pre-multiplied" }, { DRM_MODE_BLEND_COVERAGE, "Coverage" }, }; + unsigned int default_mode; unsigned int valid_mode_mask = BIT(DRM_MODE_BLEND_PIXEL_NONE) | BIT(DRM_MODE_BLEND_PREMULTI) | BIT(DRM_MODE_BLEND_COVERAGE); int i; - if (WARN_ON((supported_modes & ~valid_mode_mask) || - ((supported_modes & BIT(DRM_MODE_BLEND_PREMULTI)) == 0))) + if (WARN_ON((supported_modes & ~valid_mode_mask))) return -EINVAL; prop = drm_property_create(dev, DRM_MODE_PROP_ENUM, @@ -630,7 +630,14 @@ int drm_plane_create_blend_mode_property(struct drm_plane *plane, } } - drm_object_attach_property(&plane->base, prop, DRM_MODE_BLEND_PREMULTI); + if (supported_modes & BIT(DRM_MODE_BLEND_PREMULTI)) + default_mode = DRM_MODE_BLEND_PREMULTI; + else if (supported_modes & BIT(DRM_MODE_BLEND_COVERAGE)) + default_mode = DRM_MODE_BLEND_COVERAGE; + else + default_mode = DRM_MODE_BLEND_PIXEL_NONE; + + drm_object_attach_property(&plane->base, prop, default_mode); plane->blend_mode_property = prop; return 0; -- 2.54.0