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 <[email protected]>
---
 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_config.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);
 }
 
+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 = 0; i < plane->format_count; i++) {
+               fmt = 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 == DRM_PLANE_TYPE_PRIMARY)
                        num_primary++;
+
+               validate_blend_mode_for_alpha_formats(plane);
        }
 
        WARN(num_primary != dev->mode_config.num_crtc,
-- 
2.54.0

Reply via email to