Hi Thomas, On Fri, 21 Feb 2025 at 10:19, Thomas Zimmermann <tzimmermann@xxxxxxx> wrote: > Am 20.02.25 um 11:53 schrieb Tomi Valkeinen: > > This change also first calls the drm_driver_color_mode_format(), which > > could change the behavior even more, but afaics at the moment does not. > > Because currently each driver does its own thing, it can be hard to > write user space that reliably allocates on all drivers. That's why it's > important that parameters are not just raw numbers, but have > well-defined semantics. The raw bpp is meaningless; it's also important > to know which formats are associated with each value. Otherwise, you > might get a dumb buffer with a bpp of 15, but it will be displayed > incorrectly. This patch series finally implements this and clearly > documents the assumptions behind the interfaces. The assumptions > themselves have always existed. > > The color modes in drm_driver_color_mode_format() are set in stone and > will not change incompatibly. It's already a user interface. I've taken > care that the results do not change incompatibly compared to what the > dumb-buffer ioctl currently assumes. (C1-C4 are special, see below.) > > > Although, maybe some platform does width * DIV_ROUND_UP(bpp, 8) even > > for bpp < 8, and then this series changes it for 1, 2 and 4 bpps (but > > not for 3, 5, 6, 7, if I'm not mistaken). > > True. 1, 2 and 4 would currently over-allocate significantly on some > drivers and the series will reduce this to actual requirements. Yet our > most common memory managers, gem-dma and gem-shmem, compute the sizes > correctly. > > But there are currently no drivers that support C4, C2 or C1 formats; > hence there's likely no user space either. I know that Geert is > interested in making a driver that uses these formats on very low-end > hardware (something Atari or Amiga IIRC). Over-allocating on such > hardware is likely not an option. Note that the gud and ssd130x drivers do support R1, and I believe work is underway to add grayscale formats to ssd130x. > The other values (3, 5, 6, 7) have no meaning I know of. 6 could be > XRGB2222, but I not aware of anything using that. We don't even have a > format constant for this. Yeah, e.g. Amiga supports 3, 5, 6, and 7 bpp, but that is using bitplanes. There is already some sort of consensus to not expose bitplanes to userspace in DRM, so limiting to 1, 2, 4, and 8 bpp (which can be converted from C[1248]) is fine. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds