On Fri, 28 Jul 2023 at 20:03, Jessica Zhang <quic_jesszhan@xxxxxxxxxxx> wrote: > > Document and add support for solid_fill property to drm_plane. In > addition, add support for setting and getting the values for solid_fill. > > To enable solid fill planes, userspace must assign a property blob to > the "solid_fill" plane property containing the following information: > > struct drm_mode_solid_fill { > u32 version; > u32 r, g, b; > }; > > Signed-off-by: Jessica Zhang <quic_jesszhan@xxxxxxxxxxx> > --- > drivers/gpu/drm/drm_atomic_state_helper.c | 9 +++++ > drivers/gpu/drm/drm_atomic_uapi.c | 55 +++++++++++++++++++++++++++++++ > drivers/gpu/drm/drm_blend.c | 30 +++++++++++++++++ > include/drm/drm_blend.h | 1 + > include/drm/drm_plane.h | 35 ++++++++++++++++++++ > include/uapi/drm/drm_mode.h | 24 ++++++++++++++ > 6 files changed, 154 insertions(+) > [skipped most of the patch] > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h > index 43691058d28f..53c8efa5ad7f 100644 > --- a/include/uapi/drm/drm_mode.h > +++ b/include/uapi/drm/drm_mode.h > @@ -259,6 +259,30 @@ struct drm_mode_modeinfo { > char name[DRM_DISPLAY_MODE_LEN]; > }; > > +/** > + * struct drm_mode_solid_fill - User info for solid fill planes > + * > + * This is the userspace API solid fill information structure. > + * > + * Userspace can enable solid fill planes by assigning the plane "solid_fill" > + * property to a blob containing a single drm_mode_solid_fill struct populated with an RGB323232 > + * color and setting the pixel source to "SOLID_FILL". > + * > + * For information on the plane property, see drm_plane_create_solid_fill_property() > + * > + * @version: Version of the blob. Currently, there is only support for version == 1 > + * @r: Red color value of single pixel > + * @g: Green color value of single pixel > + * @b: Blue color value of single pixel > + */ > +struct drm_mode_solid_fill { > + __u32 version; > + __u32 r; > + __u32 g; > + __u32 b; Another thought about the drm_mode_solid_fill uABI. I still think we should add alpha here. The reason is the following: It is true that we have drm_plane_state::alpha and the plane's "alpha" property. However it is documented as "the plane-wide opacity [...] It can be combined with pixel alpha. The pixel values in the framebuffers are expected to not be pre-multiplied by the global alpha associated to the plane.". I can imagine a use case, when a user might want to enable plane-wide opacity, set "pixel blend mode" to "Coverage" and then switch between partially opaque framebuffer and partially opaque solid-fill without touching the plane's alpha value. -- With best wishes Dmitry