Re: [RFC PATCH v3 1/3] drm: Introduce solid fill property for drm plane

2023-01-19 Thread Harry Wentland



On 1/18/23 17:53, Jessica Zhang wrote:
> 
> 
> On 1/18/2023 10:57 AM, Harry Wentland wrote:
>> On 1/4/23 18:40, Jessica Zhang wrote:
>>> Add support for solid_fill property to drm_plane. In addition, add
>>> support for setting and getting the values for solid_fill.
>>>
>>> solid_fill holds data for supporting solid fill planes. The property
>>> accepts an RGB323232 value and the driver data is formatted as such:
>>>
>>> struct drm_solid_fill {
>>> u32 r;
>>> u32 g;
>>> u32 b;
>>> };
>>
>> Rather than special-casing this would it make sense to define this
>> as a single pixel of a FOURCC property?
>>
>> I.e., something like this:
>>
>> struct drm_solid_fill_info {
>> u32 format; /* FOURCC value */
>> u64 value; /* FOURCC pixel value */
>> }
>>
>> That removes some ambiguity how the value should be interpreted, i.e.,
>> it can be interpreted like a single pixel of the specified FOURCC format.
>>
>> It might also make sense to let drivers advertise the supported
>> FOURCC formats for solid_fill planes.
> 
> Hi Harry,
> 
> The initial v1 of this RFC had support for taking in a format and such, but 
> it was decided that just supporting RGB323232 would work too.
> 
> Here's the original thread discussing it [1], but to summarize, the work 
> needed to convert the solid fill color to RGB is trivial (as it's just a 
> single pixel of data). In addition, supporting various formats for solid_fill 
> would add complexity as we'd have to communicate which formats are supported.
> 
> [1] https://lists.freedesktop.org/archives/dri-devel/2022-November/379148.html
> 

Make sense, and thanks for summarizing.

The only comment I would have left then, is that maybe it'd be good to add
an alpha value. I think it was suggested by someone else as well.

>>
>> Is there an implementation for this in a corresponding canonical
>> upstream userspace project, to satisfy [1]? If not, what is the plan
>> for this? If so, please point to the corresponding patches.
> 
> The use case we're trying to support here is the Android HWC SOLID_FILL hint 
> [1], though it can also be used to address the Wayland single pixel FB 
> protocol [2]. I'm also planning to add an IGT test to show an example of end 
> to end usage.
> 
> [1] 
> https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/master/graphics/composer/aidl/android/hardware/graphics/composer3/Composition.aidl#52
> 
> [2] 
> https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/104
> 

Makes sense.

Harry

> Thanks,
> 
> Jessica Zhang
> 
>>
>> [1] 
>> https://dri.freedesktop.org/docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements
>>
>> Harry
>>
>>>
>>> To enable solid fill planes, userspace must assigned solid_fill to a
>>> property blob containing the following information:
>>>
>>> struct drm_solid_fill_info {
>>> u8 version;
>>> u32 r, g, b;
>>> };
>>>
>>> Changes in V2:
>>> - Changed solid_fill property to a property blob (Simon, Dmitry)
>>> - Added drm_solid_fill struct (Simon)
>>> - Added drm_solid_fill_info struct (Simon)
>>>
>>> Changes in V3:
>>> - Corrected typo in drm_solid_fill struct documentation
>>>
>>> Signed-off-by: Jessica Zhang 
>>> ---
>>>   drivers/gpu/drm/drm_atomic_state_helper.c |  9 
>>>   drivers/gpu/drm/drm_atomic_uapi.c | 59 +++
>>>   drivers/gpu/drm/drm_blend.c   | 17 +++
>>>   include/drm/drm_blend.h   |  1 +
>>>   include/drm/drm_plane.h   | 43 +
>>>   5 files changed, 129 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c 
>>> b/drivers/gpu/drm/drm_atomic_state_helper.c
>>> index dfb57217253b..c96fd1f2ad99 100644
>>> --- a/drivers/gpu/drm/drm_atomic_state_helper.c
>>> +++ b/drivers/gpu/drm/drm_atomic_state_helper.c
>>> @@ -253,6 +253,11 @@ void __drm_atomic_helper_plane_state_reset(struct 
>>> drm_plane_state *plane_state,
>>>   plane_state->alpha = DRM_BLEND_ALPHA_OPAQUE;
>>>   plane_state->pixel_blend_mode = DRM_MODE_BLEND_PREMULTI;
>>>   +    if (plane_state->solid_fill_blob) {
>>> +    drm_property_blob_put(plane_state->solid_fill_blob);
>>> +    plane_state->solid_fill_blob = NULL;
>>> +    }
>>> +
>>>   if (plane->color_encoding_property) {
>>>   if (!drm_object_property_get_default_value(&plane->base,
>>>  plane->color_encoding_property,
>>> @@ -335,6 +340,9 @@ void __drm_atomic_helper_plane_duplicate_state(struct 
>>> drm_plane *plane,
>>>   if (state->fb)
>>>   drm_framebuffer_get(state->fb);
>>>   +    if (state->solid_fill_blob)
>>> +    drm_property_blob_get(state->solid_fill_blob);
>>> +
>>>   state->fence = NULL;
>>>   state->commit = NULL;
>>>   state->fb_damage_clips = NULL;
>>> @@ -384,6 +392,7 @@ void __drm_atomic_helper_plane_destroy_state(struct 
>>> drm_plane_state *state)
>>>   drm_crtc_commit_put(state->commit);
>>>     drm_property_bl

Re: [RFC PATCH v3 1/3] drm: Introduce solid fill property for drm plane

2023-01-19 Thread Jessica Zhang




On 1/19/2023 7:57 AM, Harry Wentland wrote:



On 1/18/23 17:53, Jessica Zhang wrote:



On 1/18/2023 10:57 AM, Harry Wentland wrote:

On 1/4/23 18:40, Jessica Zhang wrote:

Add support for solid_fill property to drm_plane. In addition, add
support for setting and getting the values for solid_fill.

solid_fill holds data for supporting solid fill planes. The property
accepts an RGB323232 value and the driver data is formatted as such:

struct drm_solid_fill {
 u32 r;
 u32 g;
 u32 b;
};


Rather than special-casing this would it make sense to define this
as a single pixel of a FOURCC property?

I.e., something like this:

struct drm_solid_fill_info {
 u32 format; /* FOURCC value */
 u64 value; /* FOURCC pixel value */
}

That removes some ambiguity how the value should be interpreted, i.e.,
it can be interpreted like a single pixel of the specified FOURCC format.

It might also make sense to let drivers advertise the supported
FOURCC formats for solid_fill planes.


Hi Harry,

The initial v1 of this RFC had support for taking in a format and such, but it 
was decided that just supporting RGB323232 would work too.

Here's the original thread discussing it [1], but to summarize, the work needed 
to convert the solid fill color to RGB is trivial (as it's just a single pixel 
of data). In addition, supporting various formats for solid_fill would add 
complexity as we'd have to communicate which formats are supported.

[1] https://lists.freedesktop.org/archives/dri-devel/2022-November/379148.html



Make sense, and thanks for summarizing.

The only comment I would have left then, is that maybe it'd be good to add
an alpha value. I think it was suggested by someone else as well.


Yep it was mentioned in the v1 discussion, but we came to the conclusion 
that user can set the alpha through the separate alpha plane property.


Thanks,

Jessica Zhang





Is there an implementation for this in a corresponding canonical
upstream userspace project, to satisfy [1]? If not, what is the plan
for this? If so, please point to the corresponding patches.


The use case we're trying to support here is the Android HWC SOLID_FILL hint 
[1], though it can also be used to address the Wayland single pixel FB protocol 
[2]. I'm also planning to add an IGT test to show an example of end to end 
usage.

[1] 
https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/master/graphics/composer/aidl/android/hardware/graphics/composer3/Composition.aidl#52

[2] 
https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/104



Makes sense.

Harry


Thanks,

Jessica Zhang



[1] 
https://dri.freedesktop.org/docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements

Harry



To enable solid fill planes, userspace must assigned solid_fill to a
property blob containing the following information:

struct drm_solid_fill_info {
 u8 version;
 u32 r, g, b;
};

Changes in V2:
- Changed solid_fill property to a property blob (Simon, Dmitry)
- Added drm_solid_fill struct (Simon)
- Added drm_solid_fill_info struct (Simon)

Changes in V3:
- Corrected typo in drm_solid_fill struct documentation

Signed-off-by: Jessica Zhang 
---
   drivers/gpu/drm/drm_atomic_state_helper.c |  9 
   drivers/gpu/drm/drm_atomic_uapi.c | 59 +++
   drivers/gpu/drm/drm_blend.c   | 17 +++
   include/drm/drm_blend.h   |  1 +
   include/drm/drm_plane.h   | 43 +
   5 files changed, 129 insertions(+)

diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c 
b/drivers/gpu/drm/drm_atomic_state_helper.c
index dfb57217253b..c96fd1f2ad99 100644
--- a/drivers/gpu/drm/drm_atomic_state_helper.c
+++ b/drivers/gpu/drm/drm_atomic_state_helper.c
@@ -253,6 +253,11 @@ void __drm_atomic_helper_plane_state_reset(struct 
drm_plane_state *plane_state,
   plane_state->alpha = DRM_BLEND_ALPHA_OPAQUE;
   plane_state->pixel_blend_mode = DRM_MODE_BLEND_PREMULTI;
   +    if (plane_state->solid_fill_blob) {
+    drm_property_blob_put(plane_state->solid_fill_blob);
+    plane_state->solid_fill_blob = NULL;
+    }
+
   if (plane->color_encoding_property) {
   if (!drm_object_property_get_default_value(&plane->base,
  plane->color_encoding_property,
@@ -335,6 +340,9 @@ void __drm_atomic_helper_plane_duplicate_state(struct 
drm_plane *plane,
   if (state->fb)
   drm_framebuffer_get(state->fb);
   +    if (state->solid_fill_blob)
+    drm_property_blob_get(state->solid_fill_blob);
+
   state->fence = NULL;
   state->commit = NULL;
   state->fb_damage_clips = NULL;
@@ -384,6 +392,7 @@ void __drm_atomic_helper_plane_destroy_state(struct 
drm_plane_state *state)
   drm_crtc_commit_put(state->commit);
     drm_property_blob_put(state->fb_damage_clips);
+    drm_property_blob_put(state->solid_fill_blob);
   }
   EXPORT_SYMBOL(__drm_atomic_helper_plane_destroy

Re: [RFC PATCH v3 1/3] drm: Introduce solid fill property for drm plane

2023-01-19 Thread Harry Wentland



On 1/19/23 11:24, Jessica Zhang wrote:
> 
> 
> On 1/19/2023 7:57 AM, Harry Wentland wrote:
>>
>>
>> On 1/18/23 17:53, Jessica Zhang wrote:
>>>
>>>
>>> On 1/18/2023 10:57 AM, Harry Wentland wrote:
 On 1/4/23 18:40, Jessica Zhang wrote:
> Add support for solid_fill property to drm_plane. In addition, add
> support for setting and getting the values for solid_fill.
>
> solid_fill holds data for supporting solid fill planes. The property
> accepts an RGB323232 value and the driver data is formatted as such:
>
> struct drm_solid_fill {
>  u32 r;
>  u32 g;
>  u32 b;
> };

 Rather than special-casing this would it make sense to define this
 as a single pixel of a FOURCC property?

 I.e., something like this:

 struct drm_solid_fill_info {
  u32 format; /* FOURCC value */
  u64 value; /* FOURCC pixel value */
 }

 That removes some ambiguity how the value should be interpreted, i.e.,
 it can be interpreted like a single pixel of the specified FOURCC format.

 It might also make sense to let drivers advertise the supported
 FOURCC formats for solid_fill planes.
>>>
>>> Hi Harry,
>>>
>>> The initial v1 of this RFC had support for taking in a format and such, but 
>>> it was decided that just supporting RGB323232 would work too.
>>>
>>> Here's the original thread discussing it [1], but to summarize, the work 
>>> needed to convert the solid fill color to RGB is trivial (as it's just a 
>>> single pixel of data). In addition, supporting various formats for 
>>> solid_fill would add complexity as we'd have to communicate which formats 
>>> are supported.
>>>
>>> [1] 
>>> https://lists.freedesktop.org/archives/dri-devel/2022-November/379148.html
>>>
>>
>> Make sense, and thanks for summarizing.
>>
>> The only comment I would have left then, is that maybe it'd be good to add
>> an alpha value. I think it was suggested by someone else as well.
> 
> Yep it was mentioned in the v1 discussion, but we came to the conclusion that 
> user can set the alpha through the separate alpha plane property.
> 

Got it.

Harry

> Thanks,
> 
> Jessica Zhang
> 
>>

 Is there an implementation for this in a corresponding canonical
 upstream userspace project, to satisfy [1]? If not, what is the plan
 for this? If so, please point to the corresponding patches.
>>>
>>> The use case we're trying to support here is the Android HWC SOLID_FILL 
>>> hint [1], though it can also be used to address the Wayland single pixel FB 
>>> protocol [2]. I'm also planning to add an IGT test to show an example of 
>>> end to end usage.
>>>
>>> [1] 
>>> https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/master/graphics/composer/aidl/android/hardware/graphics/composer3/Composition.aidl#52
>>>
>>> [2] 
>>> https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/104
>>>
>>
>> Makes sense.
>>
>> Harry
>>
>>> Thanks,
>>>
>>> Jessica Zhang
>>>

 [1] 
 https://dri.freedesktop.org/docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements

 Harry

>
> To enable solid fill planes, userspace must assigned solid_fill to a
> property blob containing the following information:
>
> struct drm_solid_fill_info {
>  u8 version;
>  u32 r, g, b;
> };
>
> Changes in V2:
> - Changed solid_fill property to a property blob (Simon, Dmitry)
> - Added drm_solid_fill struct (Simon)
> - Added drm_solid_fill_info struct (Simon)
>
> Changes in V3:
> - Corrected typo in drm_solid_fill struct documentation
>
> Signed-off-by: Jessica Zhang 
> ---
>    drivers/gpu/drm/drm_atomic_state_helper.c |  9 
>    drivers/gpu/drm/drm_atomic_uapi.c | 59 +++
>    drivers/gpu/drm/drm_blend.c   | 17 +++
>    include/drm/drm_blend.h   |  1 +
>    include/drm/drm_plane.h   | 43 +
>    5 files changed, 129 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c 
> b/drivers/gpu/drm/drm_atomic_state_helper.c
> index dfb57217253b..c96fd1f2ad99 100644
> --- a/drivers/gpu/drm/drm_atomic_state_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_state_helper.c
> @@ -253,6 +253,11 @@ void __drm_atomic_helper_plane_state_reset(struct 
> drm_plane_state *plane_state,
>    plane_state->alpha = DRM_BLEND_ALPHA_OPAQUE;
>    plane_state->pixel_blend_mode = DRM_MODE_BLEND_PREMULTI;
>    +    if (plane_state->solid_fill_blob) {
> +    drm_property_blob_put(plane_state->solid_fill_blob);
> +    plane_state->solid_fill_blob = NULL;
> +    }
> +
>    if (plane->color_encoding_property) {
>    if (!drm_object_property_get_default_value(&plane->base,
>   plane->color_encoding_