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. > >Thanks, > >Jessica Zhang > >> >> -- >> With best wishes >> Dmitry -- With best wishes Dmitry