10 bpc color depth in mutter: How do I know if it's working?

If my understanding is correct, support for displays with 10 bpc instead of 8 bpc color depth was added to mutter in time for GNOME 46. I have a monitor (system specifications below) which is meant to support 10-bit color depth, but I’m not noticing any less banding in general than was present in the past. I would like to know how to test if:

  • My setup is recognized as supporting a 10 bpc format
  • The monitor is actually displaying colors at that depth

Any advice/suggestions you all have would be appreciated.

Specifications

Distribution: Fedora LInux 40 (Workstation Edition)
GNOME Version: 46
Monitor: Acer ET322QK wmiipx (connected via DisplayPort)
Graphics card: Radeon RX 5700 XT

You can run drm_info, search for a “Plane” (under “Planes”) where the “type” is “Primary”. Under there you should see an entry called “FB_ID” that contains the size and format used to drive the monitor. If the format has “2101010” or similar in it (e.g. XRGB2101010) then it’s 10 bit depth. This is what it could look like:

└───Planes
    ├───Plane 0
    │   ├───Object ID: 31
    │   ├───CRTCs: {0}
...
    │   └───Properties
    │       ├───"type" (immutable): enum {Overlay, Primary, Cursor} = Primary
    │       ├───"FB_ID" (atomic): object framebuffer = 370
    │       │   ├───Object ID: 370
    │       │   ├───Size: 3840x2400
    │       │   ├───Format: XRGB2101010 (0x30335258)
    │       │   ├───Modifier: I915_FORMAT_MOD_Y_TILED (0x100000000000002)
    │       │   └───Planes:
    │       │       └───Plane 0: offset = 0, pitch = 15360 bytes
1 Like

Thank you. Based on the velow outbut, it looks like a 10 bpc format is being used to drive my monitor.

├───Plane 5
│   ├───Object ID: 70
│   ├───CRTCs: {0}
...
│   └───Properties
│       ├───"type" (immutable): enum {Overlay, Primary, Cursor} = Primary
│       ├───"FB_ID" (atomic): object framebuffer = 139
│       │   ├───Object ID: 139
│       │   ├───Size: 3840x2160
│       │   ├───Format: XRGB2101010 (0x30335258)
│       │   ├───Modifier: AMD(TILE_VERSION = GFX10, TILE = GFX9_64K_R_X, PIPE_XOR_BITS = 4) (0x200000000801b02)
│       │   └───Planes:
│       │       └───Plane 0: offset = 0, pitch = 15360 bytes

That’s my first question answered. As for my second question, I have attempted to answer it by opening GIMP and creating two identical gradients (black to white, linear RGB, no dithering), one in a file with 8-bit integer precision and one in a file with 16-bit integer precision. The banding looked identical on both. Is this a valid test?

I’d attach the gradients, but it seems like Discourse converts my 16-bit image to 8-bit, defeating the purpose of that.

After running drm_info & viewing gradients in GIMP as described above, I also checked screen.colorDepth in Firefox, which reported a value of 24 (I expected 30). I have opened issue #3512 on Gitlab. Thanks to @jadahl for providing the first part of this solution.

Update: neither GIMP nor Firefox support high color depth images, rendering those tests useless. I’m switching the solution flag from my own reply to @jadahl’s.