From: Thomas Zimmermann <tzimmermann@suse.de>
To: Hector Martin <marcan@marcan.st>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
Rob Herring <robh+dt@kernel.org>,
Hans de Goede <hdegoede@redhat.com>
Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
Javier Martinez Canillas <javier@dowhile0.org>,
Alyssa Rosenzweig <alyssa@rosenzweig.io>
Subject: Re: [PATCH v2 2/3] drm/format-helper: Add drm_fb_xrgb8888_to_xrgb2101010_toio()
Date: Tue, 7 Dec 2021 11:20:08 +0100 [thread overview]
Message-ID: <afce9a18-8819-56ba-91d9-71b061186d69@suse.de> (raw)
In-Reply-To: <c339c133-25d0-3c8e-e776-b61108836528@marcan.st>
[-- Attachment #1.1: Type: text/plain, Size: 3117 bytes --]
Hi
Am 07.12.21 um 10:54 schrieb Hector Martin:
> Hi, thanks for the review!
>
> On 07/12/2021 18.40, Thomas Zimmermann wrote:
>> Hi
>>
>> Am 07.12.21 um 08:29 schrieb Hector Martin:
>>> Add XRGB8888 emulation support for devices that can only do XRGB2101010.
>>>
>>> This is chiefly useful for simpledrm on Apple devices where the
>>> bootloader-provided framebuffer is 10-bit.
>>>
>>> Signed-off-by: Hector Martin <marcan@marcan.st>
>>> ---
>>> drivers/gpu/drm/drm_format_helper.c | 62
>>> +++++++++++++++++++++++++++++
>>> include/drm/drm_format_helper.h | 3 ++
>>> 2 files changed, 65 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/drm_format_helper.c
>>> b/drivers/gpu/drm/drm_format_helper.c
>>> index dbe3e830096e..edd611d3ab6a 100644
>>> --- a/drivers/gpu/drm/drm_format_helper.c
>>> +++ b/drivers/gpu/drm/drm_format_helper.c
>>> @@ -409,6 +409,59 @@ void drm_fb_xrgb8888_to_rgb888_toio(void __iomem
>>> *dst, unsigned int dst_pitch,
>>> }
>>> EXPORT_SYMBOL(drm_fb_xrgb8888_to_rgb888_toio);
>>> +static void drm_fb_xrgb8888_to_xrgb2101010_line(u32 *dbuf, const u32
>>> *sbuf,
>>> + unsigned int pixels)
>>> +{
>>> + unsigned int x;
>>> +
>>> + for (x = 0; x < pixels; x++) {
>>> + *dbuf++ = ((sbuf[x] & 0x000000FF) << 2) |
>>> + ((sbuf[x] & 0x0000FF00) << 4) |
>>> + ((sbuf[x] & 0x00FF0000) << 6);
>>
>> This isn't quite right. The lowest two destination bits in each
>> component will always be zero. You have to do the shifting as above and
>> for each component the two highest source bits have to be OR'ed into the
>> two lowest destination bits. For example the source bits in a component
>> are numbered 7 to 0
>>
>> | 7 6 5 4 3 2 1 0 |
>>
>> then the destination bits should be
>>
>> | 7 6 5 4 3 2 1 0 7 6 |
>>
>
> I think both approaches have pros and cons. Leaving the two LSBs always
> at 0 yields a fully linear transfer curve with no discontinuities, but
> means the maximum brightness is slightly less than full. Setting them
> fully maps the brightness range, but creates 4 double wide steps in the
> transfer curve (also it's potentially slightly slower CPU-wise).
>
> If you prefer the latter I'll do that for v2.
We don't give guarantees for color output unless color spaces are
involved. But the lack of LSB bits can be more visible than larger steps
in the curve. With the current formats here, it's probably a non-issue.
But there can be conversions, such as RGB444 to RGB88, where these
missing LSBs make a visible difference.
Therefore, please change the algorithm. It produces more consistent
results over a variety of format conversion. It's better to have the
same (default) algorithm for all of them.
Best regards
Thomas
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]
next prev parent reply other threads:[~2021-12-07 10:20 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-07 7:29 [PATCH v2 0/3] drm/simpledrm: Apple M1 / DT platform support fixes Hector Martin
2021-12-07 7:29 ` [PATCH v2 1/3] of: Move simple-framebuffer device handling from simplefb to of Hector Martin
2021-12-07 9:02 ` Thomas Zimmermann
2021-12-07 9:03 ` Thomas Zimmermann
2021-12-08 17:49 ` Rob Herring
2021-12-09 10:17 ` Thomas Zimmermann
2021-12-07 7:29 ` [PATCH v2 2/3] drm/format-helper: Add drm_fb_xrgb8888_to_xrgb2101010_toio() Hector Martin
2021-12-07 9:40 ` Thomas Zimmermann
2021-12-07 9:54 ` Hector Martin
2021-12-07 10:20 ` Thomas Zimmermann [this message]
2021-12-07 10:27 ` Thomas Zimmermann
2021-12-07 7:29 ` [PATCH v2 3/3] drm/simpledrm: Add XRGB2101010 format Hector Martin
2021-12-07 9:31 ` Thomas Zimmermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=afce9a18-8819-56ba-91d9-71b061186d69@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@linux.ie \
--cc=alyssa@rosenzweig.io \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=hdegoede@redhat.com \
--cc=javier@dowhile0.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=marcan@marcan.st \
--cc=mripard@kernel.org \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®