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
pgp4E6crwxlhk.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
