Quote:
Quote:
I know the display is a dumb backend, I was talking about the quality of the display as a device to display something because you talked about buying $30 more expensive ones, but the problem the thread starter had was with the dithering, not the quality of the display itself...
The display has an 18-bit colour depth (262,000 or so possible colours) and is connected RGB565 to the MTL017. The MTL017 is connected RGB565 to the IPU.
To use the 18-bit depth of the panel you'd need to connect 18 to 24 bits from the IPU to the MTL017 and have it dither them down to the 16 to 18 bits connected to the panel.
We are talking obviously past each other at this point, I better stop. :D
Quote:
Quote:
problem can be solved in software, the keyboard seems to be an industry standard so I can probably swap it out and the output is solved in the next version. Everything is looking good for me.
You don't like the keyboard?? That *is* a new one.
It is pretty good, but it could be better. The keys have the problem that they don't register keypresses if they aren't hit at their center. One side of the key will get pushed deeper because the switch acts like a lever. This is a big problem for the small arrow keys and a bit less of a problem with the other keys.
And yes, the arrow keys could be bigger :D And the keyboard maps F1-F12 to some dumb media keys by default, but I don't know if that was the default or done by me. *nagnag*
Quote:
1. keep an offscreen 24bit 'logical' fb,
2. blit that with dithering to onscreen 16-significant-bits 'physical' fb.
3. feed that latter to the IPU. In case physical fb's bpp is > 16 (which would be a waste of gpu memory, but let's throw it in for completeness), or RGB layout is not the correct one, let the IPU do the bit swizzling of the 16 significant bits.
A simple plan, eh? Not really. Two major questions stand out in it: (1) who will do the dithering in a performance-non-taxing manner
You are assuming that dithering is expensive, but is it really? Your whole argument falls apart without proving that it is indeed expensive.
Quote:
(2) when/how often that needs to be done - clearly we want to get away with as few as possible ditherings.
just find out if the fb got changed since the last time you dithered it. (There are a lot of ways to get that information: Got the 3d pipeline used, did we use a double/tripple buffer and issued switch to another one? we could use in-kernel mechanisms to find out that there was indeed at least one write to a framebuffer)
Quote:
(1) dictates that we should not be picky about the quality of dithering - we want something that 'just does dithering really fast'. Let's assume, for the sake of argument, that we have such a unit available there. Let's call it 'friendly blitter open to dithering proposals'.
Bad dithering is as bad as no dithering, because it doesn't look better and is easy to spot.
Quote:
Ideally, if we wanted to emulate the behavior of a dithering videosignal transmitter, we'd want to do our artificial dithering at every fb scanout, just before scanout. So, that makes what - V-refresh -worth-of ditherings over fb-worth of pixels? That might be a tad too much for our friendly blitter, who, apropos, might have other errands to take care of just as well. Errands we may not be able to interrupt for our hard-realtime needs.
The driver has full control and is in the kernel. And dithering needs to be done/issued from there.
Quote:
So that 'at scanout' approach is just not for us. What else is there? Well, of course - dithering at every fb update, but again, over the entire fb, to allow our dithering circuit to do its error-diffusion job. Good, so how do we cap our fb updates frequency? We don't - client apps may update/trigger updates to the root window at arbitrary rates.
The X server and fbdev/driver regulate when, where and how something gets written to the framebuffer, so it doesn't matter if and how clients issue drawing commands.
I thought of the following 3 ways to attack the problem without involving gui toolkits:
(1) use the IPU to write out to RAM instead of the io pins every xth frame, then feed a dithered version back (IPU probably doesn't support that, doesn't work, switch between 16/32bit every frame in the IPU hardware is probably plain madness). (bad)
(2) do the mixing of 3d framebuffer and other framebuffers in software instead of the IPU, do dithering after the mixing in software, too, then feed that to the IPU. This would also remove all X related problems because all problems with "do we have to do dithering again" is simplified to has_framebuffer_changed().
(3) do the dithering by using fbdev and shadow buffers + some hacks (bad)
(2) would be the only way, but I'm not very interested given the time and the effort needed. And there is an mx53 version coming out and I'm not doing any art.
You can also use enlightenment, if you want a properly dithered window environment and don't care about which one.