On Tue, 29 Aug 2023 at 02:45, Jessica Zhang <quic_jesszhan@xxxxxxxxxxx> wrote: > > > > On 8/8/2023 3:57 PM, Jessica Zhang wrote: > > > > > > On 8/7/2023 6:07 PM, Dmitry Baryshkov wrote: > >> > >> > >> On 8 August 2023 00:41:07 GMT+03:00, Jessica Zhang > >> <quic_jesszhan@xxxxxxxxxxx> wrote: > >>> > >>> > >>> On 8/4/2023 6:27 AM, Dmitry Baryshkov 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. > >>> > >>> Hi Dmitry, > >>> > >>> I don't really agree that adding a solid fill alpha would be a good > >>> idea. Since the intent behind solid fill is to have a single color > >>> for the entire plane, I think it makes more sense to have solid fill > >>> rely on the global plane alpha. > >>> > >>> As stated in earlier discussions, I think having both a > >>> solid_fill.alpha and a plane_state.alpha would be redundant and serve > >>> to confuse the user as to which one to set. > >> > >> That depends on the blending mode: in Coverage mode one has > >> independent plane and contents alpha values. And I consider alpha > >> value to be a part of the colour in the rgba/bgra modes. > > > > Acked -- taking Sebastian's concern into consideration, I think I'll > > have "PIXEL_SOURCE_SOLID_FILL_RGB" and add a separate > > "PIXEL_SOURCE_SOLID_FILL_RGBA". > > Hi Dmitry, > > Since it looks like there's still some ongoing discussion with Pekka > about whether to support an RGBA solid fill source, I'll just leave a > note to add an RGBA source in the future. Sure! Let's get the basic framework landed. After that we can extend it with RGBA, if that seems sensible. > > Thanks, > > Jessica Zhang > > > > > Thanks, > > > > Jessica Zhang > > > >> > >> > >>> > >>> Thanks, > >>> > >>> Jessica Zhang > >>> > >>>> > >>>> -- > >>>> With best wishes > >>>> Dmitry > >> > >> -- > >> With best wishes > >> Dmitry -- With best wishes Dmitry