Night Light broken on ARM devices (Missing Color Transform Matrix support)
Night Light is currently broken on ARM devices such as Acer Spin 513 Chromebook with Qualcomm Snapdragon 7c, as it relies on legacy GAMMA_LUT which is not supported by the Qualcomm SoCs.
Instead of relying on GAMMA_LUT, these SoCs implement Color Transform Matrix (CTM), which for example Chrome OS uses to implement their version of night light. Both GAMMA_LUT and TM are configured through the KMS CRTC Abstraction.
From IRC #aarch64-laptops:
robclark | leezu: on CrOS we use display CTM (CRTC property) on internal display.. one could also use the GPU for that.. not sure off the top of my head what different de's support
robclark | leezu: yes, that is correct.. GAMMA_LUT is not supported, CTM (color transform matrix) is the way to achieve color transform
robclark | not supported in hw.. CTM is a more general purpose feature
robclark | GAMMA_LUT is kinda the legacy way, CTM is the new hotness ;-)
It would be great to support Night Light on ARM Laptops by implementing Night Light via Color Transform Matrix instead of GAMMA_LUT.
drm_info output
Node: /dev/dri/card1
├───Driver: msm (MSM Snapdragon DRM) version 1.9.0 (20130625)
│ ├───DRM_CLIENT_CAP_STEREO_3D supported
│ ├───DRM_CLIENT_CAP_UNIVERSAL_PLANES supported
│ ├───DRM_CLIENT_CAP_ATOMIC supported
│ ├───DRM_CLIENT_CAP_ASPECT_RATIO supported
│ ├───DRM_CLIENT_CAP_WRITEBACK_CONNECTORS supported
│ ├───DRM_CAP_DUMB_BUFFER = 1
│ ├───DRM_CAP_VBLANK_HIGH_CRTC = 1
│ ├───DRM_CAP_DUMB_PREFERRED_DEPTH = 0
│ ├───DRM_CAP_DUMB_PREFER_SHADOW = 0
│ ├───DRM_CAP_PRIME = 3
│ ├───DRM_CAP_TIMESTAMP_MONOTONIC = 1
│ ├───DRM_CAP_ASYNC_PAGE_FLIP = 0
│ ├───DRM_CAP_CURSOR_WIDTH = 64
│ ├───DRM_CAP_CURSOR_HEIGHT = 64
│ ├───DRM_CAP_ADDFB2_MODIFIERS = 1
│ ├───DRM_CAP_PAGE_FLIP_TARGET = 0
│ ├───DRM_CAP_CRTC_IN_VBLANK_EVENT = 1
│ ├───DRM_CAP_SYNCOBJ = 1
│ └───DRM_CAP_SYNCOBJ_TIMELINE = 0
├───Device: platform qcom,sc7180-mdss
│ └───Available nodes: primary, render
├───Framebuffer size
│ ├───Width: [0, 5120]
│ └───Height: [0, 4096]
├───Connectors
│ ├───Connector 0
│ │ ├───Object ID: 32
│ │ ├───Type: eDP
│ │ ├───Status: connected
│ │ ├───Physical size: 294x165 mm
│ │ ├───Subpixel: unknown
│ │ ├───Encoders: {0}
│ │ ├───Modes
│ │ │ └───1920x1080@60.00 preferred driver phsync nvsync
│ │ └───Properties
│ │ ├───"EDID" (immutable): blob = 61
│ │ ├───"DPMS": enum {On, Standby, Suspend, Off} = On
│ │ ├───"link-status": enum {Good, Bad} = Good
│ │ ├───"non-desktop" (immutable): range [0, 1] = 0
│ │ ├───"TILE" (immutable): blob = 0
│ │ └───"CRTC_ID" (atomic): object CRTC = 59
│ └───Connector 1
│ ├───Object ID: 34
│ ├───Type: DisplayPort
│ ├───Status: disconnected
│ ├───Encoders: {1}
│ └───Properties
│ ├───"EDID" (immutable): blob = 0
│ ├───"DPMS": enum {On, Standby, Suspend, Off} = On
│ ├───"link-status": enum {Good, Bad} = Good
│ ├───"non-desktop" (immutable): range [0, 1] = 0
│ ├───"TILE" (immutable): blob = 0
│ └───"CRTC_ID" (atomic): object CRTC = 0
├───Encoders
│ ├───Encoder 0
│ │ ├───Object ID: 31
│ │ ├───Type: DSI
│ │ ├───CRTCS: {0, 1}
│ │ └───Clones: {0}
│ └───Encoder 1
│ ├───Object ID: 33
│ ├───Type: TMDS
│ ├───CRTCS: {0, 1}
│ └───Clones: {1}
├───CRTCs
│ ├───CRTC 0
│ │ ├───Object ID: 59
│ │ ├───Legacy info
│ │ │ ├───Mode: 1920x1080@60.00 preferred driver phsync nvsync
│ │ │ └───Gamma size: 0
│ │ └───Properties
│ │ ├───"ACTIVE" (atomic): range [0, 1] = 1
│ │ ├───"MODE_ID" (atomic): blob = 66
│ │ │ └───1920x1080@60.00 preferred driver phsync nvsync
│ │ ├───"OUT_FENCE_PTR" (atomic): range [0, UINT64_MAX] = 0
│ │ ├───"VRR_ENABLED": range [0, 1] = 0
│ │ └───"CTM": blob = 0
│ └───CRTC 1
│ ├───Object ID: 60
│ ├───Legacy info
│ │ └───Gamma size: 0
│ └───Properties
│ ├───"ACTIVE" (atomic): range [0, 1] = 0
│ ├───"MODE_ID" (atomic): blob = 0
│ ├───"OUT_FENCE_PTR" (atomic): range [0, UINT64_MAX] = 0
│ ├───"VRR_ENABLED": range [0, 1] = 0
│ └───"CTM": blob = 0
└───Planes
├───Plane 0
│ ├───Object ID: 35
│ ├───CRTCs: {0, 1, 2, 3, 4, 5, 6, 7}
│ ├───Legacy info
│ │ ├───FB ID: 63
│ │ │ ├───Object ID: 63
│ │ │ ├───Size: 1920x1080
│ │ │ ├───Format: XRGB8888 (0x34325258)
│ │ │ ├───Modifier: DRM_FORMAT_MOD_QCOM_COMPRESSED (0x500000000000001)
│ │ │ └───Planes:
│ │ │ └───Plane 0: offset = 0, pitch = 7680 bytes
│ │ └───Formats:
│ │ ├───ARGB8888 (0x34325241)
│ │ ├───ABGR8888 (0x34324241)
│ │ ├───RGBA8888 (0x34324152)
│ │ ├───BGRX8888 (0x34325842)
│ │ ├───BGRA8888 (0x34324142)
│ │ ├───XRGB8888 (0x34325258)
│ │ ├───XBGR8888 (0x34324258)
│ │ ├───RGBX8888 (0x34325852)
│ │ ├───RGB888 (0x34324752)
│ │ ├───BGR888 (0x34324742)
│ │ ├───RGB565 (0x36314752)
│ │ ├───BGR565 (0x36314742)
│ │ ├───ARGB1555 (0x35315241)
│ │ ├───ABGR1555 (0x35314241)
│ │ ├───RGBA5551 (0x35314152)
│ │ ├───BGRA5551 (0x35314142)
│ │ ├───XRGB1555 (0x35315258)
│ │ ├───XBGR1555 (0x35314258)
│ │ ├───RGBX5551 (0x35315852)
│ │ ├───BGRX5551 (0x35315842)
│ │ ├───ARGB4444 (0x32315241)
│ │ ├───ABGR4444 (0x32314241)
│ │ ├───RGBA4444 (0x32314152)
│ │ ├───BGRA4444 (0x32314142)
│ │ ├───XRGB4444 (0x32315258)
│ │ ├───XBGR4444 (0x32314258)
│ │ ├───RGBX4444 (0x32315852)
│ │ ├───BGRX4444 (0x32315842)
│ │ ├───NV12 (0x3231564e)
│ │ ├───NV21 (0x3132564e)
│ │ ├───NV16 (0x3631564e)
│ │ ├───NV61 (0x3136564e)
│ │ ├───VYUY (0x59555956)
│ │ ├───UYVY (0x59565955)
│ │ ├───YUYV (0x56595559)
│ │ ├───YVYU (0x55595659)
│ │ ├───YUV420 (0x32315559)
│ │ └───YVU420 (0x32315659)
│ └───Properties
│ ├───"type" (immutable): enum {Overlay, Primary, Cursor} = Primary
│ ├───"FB_ID" (atomic): object framebuffer = 63
│ │ ├───Object ID: 63
│ │ ├───Size: 1920x1080
│ │ ├───Format: XRGB8888 (0x34325258)
│ │ ├───Modifier: DRM_FORMAT_MOD_QCOM_COMPRESSED (0x500000000000001)
│ │ └───Planes:
│ │ └───Plane 0: offset = 0, pitch = 7680 bytes
│ ├───"IN_FENCE_FD" (atomic): srange [-1, INT32_MAX] = -1
│ ├───"CRTC_ID" (atomic): object CRTC = 59
│ ├───"CRTC_X" (atomic): srange [INT32_MIN, INT32_MAX] = 0
│ ├───"CRTC_Y" (atomic): srange [INT32_MIN, INT32_MAX] = 0
│ ├───"CRTC_W" (atomic): range [0, INT32_MAX] = 1920
│ ├───"CRTC_H" (atomic): range [0, INT32_MAX] = 1080
│ ├───"SRC_X" (atomic): range [0, UINT32_MAX] = 0
│ ├───"SRC_Y" (atomic): range [0, UINT32_MAX] = 0
│ ├───"SRC_W" (atomic): range [0, UINT32_MAX] = 1920
│ ├───"SRC_H" (atomic): range [0, UINT32_MAX] = 1080
│ ├───"IN_FORMATS" (immutable): blob = 36
│ │ ├───DRM_FORMAT_MOD_QCOM_COMPRESSED (0x500000000000001)
│ │ │ ├───ARGB8888 (0x34325241)
│ │ │ ├───ABGR8888 (0x34324241)
│ │ │ ├───XRGB8888 (0x34325258)
│ │ │ ├───XBGR8888 (0x34324258)
│ │ │ ├───BGR565 (0x36314742)
│ │ │ └───NV12 (0x3231564e)
│ │ └───DRM_FORMAT_MOD_LINEAR (0x0)
│ │ ├───ARGB8888 (0x34325241)
│ │ ├───ABGR8888 (0x34324241)
│ │ ├───RGBA8888 (0x34324152)
│ │ ├───BGRX8888 (0x34325842)
│ │ ├───BGRA8888 (0x34324142)
│ │ ├───XRGB8888 (0x34325258)
│ │ ├───XBGR8888 (0x34324258)
│ │ ├───RGBX8888 (0x34325852)
│ │ ├───RGB888 (0x34324752)
│ │ ├───BGR888 (0x34324742)
│ │ ├───RGB565 (0x36314752)
│ │ ├───BGR565 (0x36314742)
│ │ ├───ARGB1555 (0x35315241)
│ │ ├───ABGR1555 (0x35314241)
│ │ ├───RGBA5551 (0x35314152)
│ │ ├───BGRA5551 (0x35314142)
│ │ ├───XRGB1555 (0x35315258)
│ │ ├───XBGR1555 (0x35314258)
│ │ ├───RGBX5551 (0x35315852)
│ │ ├───BGRX5551 (0x35315842)
│ │ ├───ARGB4444 (0x32315241)
│ │ ├───ABGR4444 (0x32314241)
│ │ ├───RGBA4444 (0x32314152)
│ │ ├───BGRA4444 (0x32314142)
│ │ ├───XRGB4444 (0x32315258)
│ │ ├───XBGR4444 (0x32314258)
│ │ ├───RGBX4444 (0x32315852)
│ │ ├───BGRX4444 (0x32315842)
│ │ ├───NV12 (0x3231564e)
│ │ ├───NV21 (0x3132564e)
│ │ ├───NV16 (0x3631564e)
│ │ ├───NV61 (0x3136564e)
│ │ ├───VYUY (0x59555956)
│ │ ├───UYVY (0x59565955)
│ │ ├───YUYV (0x56595559)
│ │ ├───YVYU (0x55595659)
│ │ ├───YUV420 (0x32315559)
│ │ └───YVU420 (0x32315659)
│ ├───"zpos": range [0, 6] = 0
│ ├───"alpha": range [0, UINT16_MAX] = 65535
│ ├───"pixel blend mode": enum {None, Pre-multiplied, Coverage} = Pre-multiplied
│ ├───"rotation": bitmask {rotate-0, rotate-180, reflect-x, reflect-y} = (rotate-0)
│ └───"FB_DAMAGE_CLIPS" (atomic): blob = 65
├───Plane 1
│ ├───Object ID: 41
│ ├───CRTCs: {0, 1, 2, 3, 4, 5, 6, 7}
│ ├───Legacy info
│ │ ├───FB ID: 0
│ │ └───Formats:
│ │ ├───ARGB8888 (0x34325241)
│ │ ├───ABGR8888 (0x34324241)
│ │ ├───RGBA8888 (0x34324152)
│ │ ├───BGRA8888 (0x34324142)
│ │ ├───XRGB8888 (0x34325258)
│ │ ├───RGBX8888 (0x34325852)
│ │ ├───BGRX8888 (0x34325842)
│ │ ├───XBGR8888 (0x34324258)
│ │ ├───RGB888 (0x34324752)
│ │ ├───BGR888 (0x34324742)
│ │ ├───RGB565 (0x36314752)
│ │ ├───BGR565 (0x36314742)
│ │ ├───ARGB1555 (0x35315241)
│ │ ├───ABGR1555 (0x35314241)
│ │ ├───RGBA5551 (0x35314152)
│ │ ├───BGRA5551 (0x35314142)
│ │ ├───XRGB1555 (0x35315258)
│ │ ├───XBGR1555 (0x35314258)
│ │ ├───RGBX5551 (0x35315852)
│ │ ├───BGRX5551 (0x35315842)
│ │ ├───ARGB4444 (0x32315241)
│ │ ├───ABGR4444 (0x32314241)
│ │ ├───RGBA4444 (0x32314152)
│ │ ├───BGRA4444 (0x32314142)
│ │ ├───XRGB4444 (0x32315258)
│ │ ├───XBGR4444 (0x32314258)
│ │ ├───RGBX4444 (0x32315852)
│ │ └───BGRX4444 (0x32315842)
│ └───Properties
│ ├───"type" (immutable): enum {Overlay, Primary, Cursor} = Primary
│ ├───"FB_ID" (atomic): object framebuffer = 0
│ ├───"IN_FENCE_FD" (atomic): srange [-1, INT32_MAX] = -1
│ ├───"CRTC_ID" (atomic): object CRTC = 0
│ ├───"CRTC_X" (atomic): srange [INT32_MIN, INT32_MAX] = 0
│ ├───"CRTC_Y" (atomic): srange [INT32_MIN, INT32_MAX] = 0
│ ├───"CRTC_W" (atomic): range [0, INT32_MAX] = 0
│ ├───"CRTC_H" (atomic): range [0, INT32_MAX] = 0
│ ├───"SRC_X" (atomic): range [0, UINT32_MAX] = 0
│ ├───"SRC_Y" (atomic): range [0, UINT32_MAX] = 0
│ ├───"SRC_W" (atomic): range [0, UINT32_MAX] = 0
│ ├───"SRC_H" (atomic): range [0, UINT32_MAX] = 0
│ ├───"IN_FORMATS" (immutable): blob = 42
│ │ ├───DRM_FORMAT_MOD_QCOM_COMPRESSED (0x500000000000001)
│ │ │ ├───ARGB8888 (0x34325241)
│ │ │ ├───ABGR8888 (0x34324241)
│ │ │ ├───XRGB8888 (0x34325258)
│ │ │ ├───XBGR8888 (0x34324258)
│ │ │ └───BGR565 (0x36314742)
│ │ └───DRM_FORMAT_MOD_LINEAR (0x0)
│ │ ├───ARGB8888 (0x34325241)
│ │ ├───ABGR8888 (0x34324241)
│ │ ├───RGBA8888 (0x34324152)
│ │ ├───BGRA8888 (0x34324142)
│ │ ├───XRGB8888 (0x34325258)
│ │ ├───RGBX8888 (0x34325852)
│ │ ├───BGRX8888 (0x34325842)
│ │ ├───XBGR8888 (0x34324258)
│ │ ├───RGB888 (0x34324752)
│ │ ├───BGR888 (0x34324742)
│ │ ├───RGB565 (0x36314752)
│ │ ├───BGR565 (0x36314742)
│ │ ├───ARGB1555 (0x35315241)
│ │ ├───ABGR1555 (0x35314241)
│ │ ├───RGBA5551 (0x35314152)
│ │ ├───BGRA5551 (0x35314142)
│ │ ├───XRGB1555 (0x35315258)
│ │ ├───XBGR1555 (0x35314258)
│ │ ├───RGBX5551 (0x35315852)
│ │ ├───BGRX5551 (0x35315842)
│ │ ├───ARGB4444 (0x32315241)
│ │ ├───ABGR4444 (0x32314241)
│ │ ├───RGBA4444 (0x32314152)
│ │ ├───BGRA4444 (0x32314142)
│ │ ├───XRGB4444 (0x32315258)
│ │ ├───XBGR4444 (0x32314258)
│ │ ├───RGBX4444 (0x32315852)
│ │ └───BGRX4444 (0x32315842)
│ ├───"zpos": range [0, 6] = 0
│ ├───"alpha": range [0, UINT16_MAX] = 65535
│ ├───"pixel blend mode": enum {None, Pre-multiplied, Coverage} = Pre-multiplied
│ ├───"rotation": bitmask {rotate-0, rotate-180, reflect-x, reflect-y} = (rotate-0)
│ └───"FB_DAMAGE_CLIPS" (atomic): blob = 0
├───Plane 2
│ ├───Object ID: 47
│ ├───CRTCs: {0, 1, 2, 3, 4, 5, 6, 7}
│ ├───Legacy info
│ │ ├───FB ID: 0
│ │ └───Formats:
│ │ ├───ARGB8888 (0x34325241)
│ │ ├───ABGR8888 (0x34324241)
│ │ ├───RGBA8888 (0x34324152)
│ │ ├───BGRA8888 (0x34324142)
│ │ ├───XRGB8888 (0x34325258)
│ │ ├───RGBX8888 (0x34325852)
│ │ ├───BGRX8888 (0x34325842)
│ │ ├───XBGR8888 (0x34324258)
│ │ ├───RGB888 (0x34324752)
│ │ ├───BGR888 (0x34324742)
│ │ ├───RGB565 (0x36314752)
│ │ ├───BGR565 (0x36314742)
│ │ ├───ARGB1555 (0x35315241)
│ │ ├───ABGR1555 (0x35314241)
│ │ ├───RGBA5551 (0x35314152)
│ │ ├───BGRA5551 (0x35314142)
│ │ ├───XRGB1555 (0x35315258)
│ │ ├───XBGR1555 (0x35314258)
│ │ ├───RGBX5551 (0x35315852)
│ │ ├───BGRX5551 (0x35315842)
│ │ ├───ARGB4444 (0x32315241)
│ │ ├───ABGR4444 (0x32314241)
│ │ ├───RGBA4444 (0x32314152)
│ │ ├───BGRA4444 (0x32314142)
│ │ ├───XRGB4444 (0x32315258)
│ │ ├───XBGR4444 (0x32314258)
│ │ ├───RGBX4444 (0x32315852)
│ │ └───BGRX4444 (0x32315842)
│ └───Properties
│ ├───"type" (immutable): enum {Overlay, Primary, Cursor} = Cursor
│ ├───"FB_ID" (atomic): object framebuffer = 0
│ ├───"IN_FENCE_FD" (atomic): srange [-1, INT32_MAX] = -1
│ ├───"CRTC_ID" (atomic): object CRTC = 0
│ ├───"CRTC_X" (atomic): srange [INT32_MIN, INT32_MAX] = 515
│ ├───"CRTC_Y" (atomic): srange [INT32_MIN, INT32_MAX] = 716
│ ├───"CRTC_W" (atomic): range [0, INT32_MAX] = 64
│ ├───"CRTC_H" (atomic): range [0, INT32_MAX] = 64
│ ├───"SRC_X" (atomic): range [0, UINT32_MAX] = 0
│ ├───"SRC_Y" (atomic): range [0, UINT32_MAX] = 0
│ ├───"SRC_W" (atomic): range [0, UINT32_MAX] = 64
│ ├───"SRC_H" (atomic): range [0, UINT32_MAX] = 64
│ ├───"IN_FORMATS" (immutable): blob = 48
│ │ ├───DRM_FORMAT_MOD_QCOM_COMPRESSED (0x500000000000001)
│ │ │ ├───ARGB8888 (0x34325241)
│ │ │ ├───ABGR8888 (0x34324241)
│ │ │ ├───XRGB8888 (0x34325258)
│ │ │ ├───XBGR8888 (0x34324258)
│ │ │ └───BGR565 (0x36314742)
│ │ └───DRM_FORMAT_MOD_LINEAR (0x0)
│ │ ├───ARGB8888 (0x34325241)
│ │ ├───ABGR8888 (0x34324241)
│ │ ├───RGBA8888 (0x34324152)
│ │ ├───BGRA8888 (0x34324142)
│ │ ├───XRGB8888 (0x34325258)
│ │ ├───RGBX8888 (0x34325852)
│ │ ├───BGRX8888 (0x34325842)
│ │ ├───XBGR8888 (0x34324258)
│ │ ├───RGB888 (0x34324752)
│ │ ├───BGR888 (0x34324742)
│ │ ├───RGB565 (0x36314752)
│ │ ├───BGR565 (0x36314742)
│ │ ├───ARGB1555 (0x35315241)
│ │ ├───ABGR1555 (0x35314241)
│ │ ├───RGBA5551 (0x35314152)
│ │ ├───BGRA5551 (0x35314142)
│ │ ├───XRGB1555 (0x35315258)
│ │ ├───XBGR1555 (0x35314258)
│ │ ├───RGBX5551 (0x35315852)
│ │ ├───BGRX5551 (0x35315842)
│ │ ├───ARGB4444 (0x32315241)
│ │ ├───ABGR4444 (0x32314241)
│ │ ├───RGBA4444 (0x32314152)
│ │ ├───BGRA4444 (0x32314142)
│ │ ├───XRGB4444 (0x32315258)
│ │ ├───XBGR4444 (0x32314258)
│ │ ├───RGBX4444 (0x32315852)
│ │ └───BGRX4444 (0x32315842)
│ ├───"zpos": range [0, 6] = 0
│ ├───"alpha": range [0, UINT16_MAX] = 65535
│ ├───"pixel blend mode": enum {None, Pre-multiplied, Coverage} = Pre-multiplied
│ ├───"rotation": bitmask {rotate-0, rotate-180, reflect-x, reflect-y} = (rotate-0)
│ └───"FB_DAMAGE_CLIPS" (atomic): blob = 0
└───Plane 3
├───Object ID: 53
├───CRTCs: {0, 1, 2, 3, 4, 5, 6, 7}
├───Legacy info
│ ├───FB ID: 0
│ └───Formats:
│ ├───ARGB8888 (0x34325241)
│ ├───ABGR8888 (0x34324241)
│ ├───RGBA8888 (0x34324152)
│ ├───BGRA8888 (0x34324142)
│ ├───XRGB8888 (0x34325258)
│ ├───RGBX8888 (0x34325852)
│ ├───BGRX8888 (0x34325842)
│ ├───XBGR8888 (0x34324258)
│ ├───RGB888 (0x34324752)
│ ├───BGR888 (0x34324742)
│ ├───RGB565 (0x36314752)
│ ├───BGR565 (0x36314742)
│ ├───ARGB1555 (0x35315241)
│ ├───ABGR1555 (0x35314241)
│ ├───RGBA5551 (0x35314152)
│ ├───BGRA5551 (0x35314142)
│ ├───XRGB1555 (0x35315258)
│ ├───XBGR1555 (0x35314258)
│ ├───RGBX5551 (0x35315852)
│ ├───BGRX5551 (0x35315842)
│ ├───ARGB4444 (0x32315241)
│ ├───ABGR4444 (0x32314241)
│ ├───RGBA4444 (0x32314152)
│ ├───BGRA4444 (0x32314142)
│ ├───XRGB4444 (0x32315258)
│ ├───XBGR4444 (0x32314258)
│ ├───RGBX4444 (0x32315852)
│ └───BGRX4444 (0x32315842)
└───Properties
├───"type" (immutable): enum {Overlay, Primary, Cursor} = Cursor
├───"FB_ID" (atomic): object framebuffer = 0
├───"IN_FENCE_FD" (atomic): srange [-1, INT32_MAX] = -1
├───"CRTC_ID" (atomic): object CRTC = 0
├───"CRTC_X" (atomic): srange [INT32_MIN, INT32_MAX] = 0
├───"CRTC_Y" (atomic): srange [INT32_MIN, INT32_MAX] = 0
├───"CRTC_W" (atomic): range [0, INT32_MAX] = 0
├───"CRTC_H" (atomic): range [0, INT32_MAX] = 0
├───"SRC_X" (atomic): range [0, UINT32_MAX] = 0
├───"SRC_Y" (atomic): range [0, UINT32_MAX] = 0
├───"SRC_W" (atomic): range [0, UINT32_MAX] = 0
├───"SRC_H" (atomic): range [0, UINT32_MAX] = 0
├───"IN_FORMATS" (immutable): blob = 54
│ ├───DRM_FORMAT_MOD_QCOM_COMPRESSED (0x500000000000001)
│ │ ├───ARGB8888 (0x34325241)
│ │ ├───ABGR8888 (0x34324241)
│ │ ├───XRGB8888 (0x34325258)
│ │ ├───XBGR8888 (0x34324258)
│ │ └───BGR565 (0x36314742)
│ └───DRM_FORMAT_MOD_LINEAR (0x0)
│ ├───ARGB8888 (0x34325241)
│ ├───ABGR8888 (0x34324241)
│ ├───RGBA8888 (0x34324152)
│ ├───BGRA8888 (0x34324142)
│ ├───XRGB8888 (0x34325258)
│ ├───RGBX8888 (0x34325852)
│ ├───BGRX8888 (0x34325842)
│ ├───XBGR8888 (0x34324258)
│ ├───RGB888 (0x34324752)
│ ├───BGR888 (0x34324742)
│ ├───RGB565 (0x36314752)
│ ├───BGR565 (0x36314742)
│ ├───ARGB1555 (0x35315241)
│ ├───ABGR1555 (0x35314241)
│ ├───RGBA5551 (0x35314152)
│ ├───BGRA5551 (0x35314142)
│ ├───XRGB1555 (0x35315258)
│ ├───XBGR1555 (0x35314258)
│ ├───RGBX5551 (0x35315852)
│ ├───BGRX5551 (0x35315842)
│ ├───ARGB4444 (0x32315241)
│ ├───ABGR4444 (0x32314241)
│ ├───RGBA4444 (0x32314152)
│ ├───BGRA4444 (0x32314142)
│ ├───XRGB4444 (0x32315258)
│ ├───XBGR4444 (0x32314258)
│ ├───RGBX4444 (0x32315852)
│ └───BGRX4444 (0x32315842)
├───"zpos": range [0, 6] = 0
├───"alpha": range [0, UINT16_MAX] = 65535
├───"pixel blend mode": enum {None, Pre-multiplied, Coverage} = Pre-multiplied
├───"rotation": bitmask {rotate-0, rotate-180, reflect-x, reflect-y} = (rotate-0)
└───"FB_DAMAGE_CLIPS" (atomic): blob = 0