On Tue,  4 Apr 2017 17:54:38 +0100
Daniel Stone <[email protected]> wrote:

> From: Pekka Paalanen <[email protected]>
> 
> Add awareness of, rather than support for, universal planes. Activate
> the client cap when we start if possible, and if this is activated,
> studiously ignore non-overlay planes. For now.
> 
> Differential Revision: https://phabricator.freedesktop.org/D1495
> 
> Signed-off-by: Daniel Stone <[email protected]>
> Co-authored-with: Pekka Paalanen <[email protected]>
> Co-authored-with: Louis-Francis Ratté-Boulianne 
> <[email protected]>
> ---
>  libweston/compositor-drm.c | 88 
> ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 88 insertions(+)
> 
> diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
> index a32339e4..04491da6 100644
> --- a/libweston/compositor-drm.c
> +++ b/libweston/compositor-drm.c
> @@ -63,10 +63,21 @@
>  #include "linux-dmabuf.h"
>  #include "linux-dmabuf-unstable-v1-server-protocol.h"
>  
> +#ifndef static_assert
> +#define static_assert(cond) \
> +   do { \
> +      (void) sizeof(char [1 - 2*!(COND)]); \
> +   } while (0)
> +#endif
> +

static_assert() is never actually used anywhere, is it?
Even in the whole series.

>  #ifndef DRM_CAP_TIMESTAMP_MONOTONIC
>  #define DRM_CAP_TIMESTAMP_MONOTONIC 0x6
>  #endif
>  
> +#ifndef DRM_CLIENT_CAP_UNIVERSAL_PLANES
> +#define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2
> +#endif
> +
>  #ifndef DRM_CAP_CURSOR_WIDTH
>  #define DRM_CAP_CURSOR_WIDTH 0x8
>  #endif
> @@ -80,6 +91,24 @@
>  #endif
>  
>  /**
> + * List of properties attached to DRM planes
> + */
> +enum wdrm_plane_property {
> +     WDRM_PLANE_TYPE = 0,
> +     WDRM_PLANE__COUNT
> +};
> +
> +/**
> + * Possible values for the WDRM_PLANE_TYPE property.
> + */
> +enum wdrm_plane_type {
> +     WDRM_PLANE_TYPE_PRIMARY = 0,
> +     WDRM_PLANE_TYPE_CURSOR,
> +     WDRM_PLANE_TYPE_OVERLAY,
> +     WDRM_PLANE_TYPE__COUNT
> +};
> +
> +/**
>   * List of properties attached to a DRM connector
>   */
>  enum wdrm_connector_property {
> @@ -150,10 +179,14 @@ struct drm_backend {
>  
>       int cursors_are_broken;
>  
> +     bool universal_planes;
> +
>       int use_pixman;
>  
>       struct udev_input input;
>  
> +     struct drm_property_info props_plane[WDRM_PLANE__COUNT];

As mentioned earlier, needs to be stored per plane (for e.g. adding a
rotation property).

> +
>       /* Holds the properties for connectors */
>       struct drm_property_info props_conn[WDRM_CONNECTOR__COUNT];
>  

> @@ -2178,6 +2233,31 @@ create_sprites(struct drm_backend *b)
>       struct drm_plane *drm_plane;
>       uint32_t i;
>  
> +     static struct drm_property_enum_info plane_type_enums[] = {

Too bad this cannot be const, or would need a bad cast below.

> +             [WDRM_PLANE_TYPE_PRIMARY] = {
> +                     .name = "Primary",
> +             },
> +             [WDRM_PLANE_TYPE_OVERLAY] = {
> +                     .name = "Overlay",
> +             },
> +             [WDRM_PLANE_TYPE_CURSOR] = {
> +                     .name = "Cursor",
> +             },
> +     };
> +     static const struct drm_property_info plane_props[] = {
> +             [WDRM_PLANE_TYPE] = {
> +                     .name = "type",
> +                     .enum_values = plane_type_enums,
> +                     .num_enum_values = WDRM_PLANE_TYPE__COUNT,
> +             },
> +     };
> +
> +     if (!drm_property_info_copy(b->props_plane, plane_props,
> +                                 WDRM_PLANE__COUNT)) {
> +             weston_log("failed to copy plane property info\n");
> +             return;
> +     }

Otherwise looks good. Moving the property cache to be stored per plane
will change things a bit.


Thanks,
pq

Attachment: pgp4E6crwxlhk.pgp
Description: OpenPGP digital signature

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to