On Fri, Aug 4, 2023 at 3:27 PM Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> wrote: > > 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. The only reason I see against this is that there might be some hardware which supports only RGB but not alpha on planes and they could then not use this property. Maybe another COLOR_FILL enum value with alpha might be better? Maybe just doing the alpha via the alpha property is good enough. > > -- > With best wishes > Dmitry >