ENUM DRM_PLANE_TYPE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ enum drm_plane_type(9) β€” the plane type glow-up guide ✨

okay bestie, so this is a page from the Kernel API Manual and honestly? it's giving "DRM internals but make it understandable." it's all about enum drm_plane_type, which is literally the uapi plane type enumeration. let's get into it πŸ’…


🌸 NAME 🌸

enum drm_plane_type β€” the uapi plane type enumeration, no cap 🫢


⭐ SYNOPSIS ⭐

enum drm_plane_type {
    DRM_PLANE_TYPE_OVERLAY ,
    DRM_PLANE_TYPE_PRIMARY ,
    DRM_PLANE_TYPE_CURSOR

};

like, that's the whole enum. three constants, zero drama. slay.


πŸŽ€ Constants πŸŽ€

  • DRM_PLANE_TYPE_OVERLAY β€” these are literally every plane that isn't a primary and isn't a cursor. that's it, that's the vibe. some drivers call these "sprites" internally, iykyk.
  • DRM_PLANE_TYPE_PRIMARY β€” a primary plane attached to a CRTC. this one is the most likely to be able to light up the CRTC when there's no scaling or cropping happening and the plane covers the whole CRTC. main character energy fr πŸ₯°
  • DRM_PLANE_TYPE_CURSOR β€” a cursor plane attached to a CRTC, and it's more likely to be able to be enabled when there's no scaling/cropping and the framebuffer has the size that drm_mode_config.cursor_width and drm_mode_config.cursor_height say. also, ngl, if the driver doesn't support modifiers, the framebuffer should have a linear layout. periodt.

πŸ’€ Description πŸ’€

so for historical reasons (😭) not all planes are made the same. this enumeration exists so you can tell the different plane types apart and implement the different uapi semantics for each one. but like β€” for userspace that's universal-plane aware and is using that atomic IOCTL, there's literally no difference between these planes, beyond what the driver and the 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. πŸ¦‹

on top of setting each plane's type, drivers need to set up the drm_crtc.primary and, optionally, drm_crtc.cursor pointers for legacy IOCTLs. see drm_crtc_init_with_planes. ✨

⚠️ WARNING: the values of this enum are UABI since they're exposed in the "type" property. so like… don't go changing them, bestie. fr fr. πŸ”₯

🌈 SEE ALSO 🌈


and that's the whole page, bestie!! 🫢 source lives at ./include/drm, and this iconic lil entry is dated October 2026 β€” enum drm_plane_type(9), Kernel API Manual. go forth and plane responsibly πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from