[PATCH 2/7] drm/doc: Polish for drm_plane.[hc]

Rafael Antognolli rafael.antognolli at intel.com
Tue Sep 27 21:08:36 UTC 2016


Hi Daniel,

On Wed, Sep 21, 2016 at 10:59:25AM +0200, Daniel Vetter wrote:
> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> index 1407715736a5..256219bfd07b 100644
> --- a/include/drm/drm_plane.h
> +++ b/include/drm/drm_plane.h
> @@ -319,10 +319,48 @@ struct drm_plane_funcs {
>  	void (*early_unregister)(struct drm_plane *plane);
>  };
>  
> +/**
> + * enum drm_plane_type - uapi plane type enumeration
> + *
> + * For historical reasons not all planes are made the same. This enumeration is
> + * used to tell the different types of planes apart to implement the different
> + * uapi semantics for them. For userspace which is universal plane aware and
> + * which is using that atomic IOCTL there's no difference between these planes
> + * (beyong what the driver and hardware can support of course).
> + *
> + * For compatibility with legacy userspace, only overlay planes are made
> + * available to userspace by default. Userspace clients may set the
> + * DRM_CLIENT_CAP_UNIVERSAL_PLANES client capability bit to indicate that they
> + * wish to receive a universal plane list containing all plane types. See also
> + * drm_for_each_legacy_plane().
> + */
>  enum drm_plane_type {
> -	DRM_PLANE_TYPE_OVERLAY,
> +	/**
> +	 * @DRM_PLANE_TYPE_PRIMARY:
> +	 *
> +	 * Primary planes represent a "main" plane for a CRTC.  Primary planes
> +	 * are the planes operated upon by CRTC modesetting and flipping
> +	 * operations described in the page_flip and set_config hooks in struct
> +	 * &drm_crtc_funcs.
> +	 */
>  	DRM_PLANE_TYPE_PRIMARY,
> +
> +	/**
> +	 * @DRM_PLANE_TYPE_CURSOR:
> +	 *
> +	 * Cursor planes represent a "cursor" plane for a CRTC.  Cursor planes
> +	 * are the planes operated upon by the DRM_IOCTL_MODE_CURSOR and
> +	 * DRM_IOCTL_MODE_CURSOR2 IOCTLs.
> +	 */
>  	DRM_PLANE_TYPE_CURSOR,
> +
> +	/**
> +	 * @DRM_PLANE_TYPE_OVERLAY:
> +	 *
> +	 * Overlay planes represent all non-primary, non-cursor planes. Some
> +	 * drivers refer to these types of planes as "sprites" internally.
> +	 */
> +	DRM_PLANE_TYPE_OVERLAY,
>  };

This is changing the order (and consequently the values) of these enums.
But it is not updated in libdrm. I noticed this is causing an issue when
playing with robclark's version of kmscube (branch atomic):

https://github.com/robclark/kmscube/tree/atomic

It looks like IGT also uses this macro from libdrm:

$ git grep -n DRM_PLANE_TYPE_PRIMARY
lib/igt_kms.c:1398:                     case DRM_PLANE_TYPE_PRIMARY:
tests/kms_frontbuffer_tracking.c:2302:              drm.plane_types[i] == DRM_PLANE_TYPE_PRIMARY)
tests/kms_frontbuffer_tracking.c:2602:              drm.plane_types[i] == DRM_PLANE_TYPE_PRIMARY) {
tests/kms_frontbuffer_tracking.c:2741:              drm.plane_types[i] == DRM_PLANE_TYPE_PRIMARY)

Anyway, should we update it on libdrm, bring the order back to its
original values, or something else? Or am I missing something?

Thanks,
Rafael


More information about the dri-devel mailing list