All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ilia Mirkin <imirkin-FrUbXkNCsVf2fBVCVOL8/A@public.gmane.org>
To: Mario Kleiner <mario.kleiner.de-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: nouveau
	<nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
	Ben Skeggs <bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	dri-devel
	<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Subject: Re: nouveau 30bpp / deep color status
Date: Mon, 5 Mar 2018 07:40:08 -0500	[thread overview]
Message-ID: <CAKb7UvipOtS48kQocRU6kpzxN5MSb7zUDBQYkc4Oo4E-oqmcTw@mail.gmail.com> (raw)
In-Reply-To: <af14dbae-fe25-6d5d-fe25-e955ddc825fa-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

On Mon, Mar 5, 2018 at 2:25 AM, Mario Kleiner
<mario.kleiner.de@gmail.com> wrote:
> On 02/05/2018 12:50 AM, Ilia Mirkin wrote:
>>
>> In case anyone's curious about 30bpp framebuffer support, here's the
>> current status:
>>
>> Kernel:
>>
>> Ben and I have switched the code to using a 256-based LUT for Kepler+,
>> and I've also written a patch to cause the addfb ioctl to use the
>> proper format. You can pick this up at:
>>
>> https://github.com/skeggsb/linux/commits/linux-4.16 (note the branch!)
>> https://patchwork.freedesktop.org/patch/202322/
>>
>> With these two, you should be able to use "X -depth 30" again on any
>> G80+ GPU to bring up a screen (as you could in kernel 4.9 and
>> earlier). However this still has some deficiencies, some of which I've
>> addressed:
>>
>> xf86-video-nouveau:
>>
>> DRI3 was broken, and Xv was broken. Patches available at:
>>
>> https://github.com/imirkin/xf86-video-nouveau/commits/master
>>
>> mesa:
>>
>> The NVIDIA hardware (pre-Kepler) can only do XBGR scanout. Further the
>> nouveau KMS doesn't add XRGB scanout for Kepler+ (although it could).
>> Mesa was only enabled for XRGB, so I've piped XBGR through all the
>> same places:
>>
>> https://github.com/imirkin/mesa/commits/30bpp
>>
>
> Wrt. mesa, those patches are now in master and i think we have a bit of a
> problem under X11+GLX:
>
> https://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/state_trackers/dri/dri_screen.c#n108
>
> dri_fill_in_modes() defines MESA_FORMAT_R10G10B10A2_UNORM,
> MESA_FORMAT_R10G10B10X2_UNORM at the top inbetween the BGRX/A formats
> ignoring the instructions that
> "/* The 32-bit RGBA format must not precede the 32-bit BGRA format.
>   * Likewise for RGBX and BGRX.  Otherwise, the GLX client and the GLX
>   * server may disagree on which format the GLXFBConfig represents,
>   * resulting in swapped color channels."
>
> RGBA/X formats should only be exposed
> if (dri_loader_get_cap(screen, DRI_LOADER_CAP_RGBA_ORDERING))
>
> and that is only the case for the Android loader.
>
> The GLX code doesn't use the red/green/blueChannelMasks for proper matching
> of formats, and the server doesn't even transmit those masks to the client
> in the case of GLX. So whatever 10 bit format comes first will win when
> building the assignment to GLXFBConfigs.
>
> I looked at the code and how it behaves. In practice Intel gfx works because
> it's a classic DRI driver with its own method of building the DRIconfig's,
> and it only exposes the BGR101010 formats, so no danger of mixups. AMD's
> gallium drivers expose both BGR and RGB ordered 10 bit formats, but due to
> the ordering, the matching ends up only assigning the desired BGR formats
> that are good for AMD hw, discarding the RGB formats. nouveau works because
> it only exposes the desired RGB format for the hw. But with other gallium
> drivers for some SoC's or future gallium drivers it is not so clear if the
> right thing will happen. E.g., freedreno seems to support both BGR and RGB
> 10 bit formats as PIPE_BIND_DISPLAY_TARGET afaics, so i don't know if by
> luck the right thing would happen?

FWIW freedreno does not presently support 10bpc scanout.

>
> Afaics EGL does the right thing wrt. channelmask matching of EGLConfigs to
> DRIconfigs, so we could probably implement dri_loader_get_cap(screen,
> DRI_LOADER_CAP_RGBA_ORDERING) == TRUE for the EGL loaders.
>
> But for GLX it is not so easy or quick. I looked if i could make the servers
> GLX send proper channelmask attributes and Mesa parsing them, but there
> aren't any GLX tags defined for channel masks, and all other tags come from
> official GLX extension headers. I'm not sure what the proper procedure for
> defining new tags is? Do we have to define a new GLX extension for that and
> get it in the Khronos registry and then back into the server/mesa code-base?

Can all of this be solved by a healthy dose of "don't do that"? i.e.
make sure that the DDX only ever exposes one of these at a time? And
also make the mesa driver only expose one as a DISPLAY_TARGET?

>
> The current patches in mesa for XBGR also lack enablement pieces for EGL,
> Wayland and X11 compositing, but that's a different problem.

EGL/drm and EGL/wayland should be enabled (look at Daniel Stone's
patches from a short while back, also upstream now). kmscube (with
some patches that are upstream now) and weston both run OK for me. I
think EGL/x11 is iffy though - haven't played with it.

  -ilia
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

  parent reply	other threads:[~2018-03-05 12:40 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-04 23:50 nouveau 30bpp / deep color status Ilia Mirkin
2018-02-07 16:28 ` Ville Syrjälä
2018-02-07 17:01   ` Ville Syrjälä
2018-02-09  0:34     ` Ilia Mirkin
2018-02-09 14:32       ` Ville Syrjälä
2018-03-05  7:25 ` Mario Kleiner
     [not found]   ` <af14dbae-fe25-6d5d-fe25-e955ddc825fa-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-03-05 12:40     ` Ilia Mirkin [this message]
     [not found]       ` <CAKb7UvipOtS48kQocRU6kpzxN5MSb7zUDBQYkc4Oo4E-oqmcTw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-03-08 16:57         ` Mario Kleiner
     [not found]           ` <3caddc39-7962-060b-895a-f2456588d59f-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-03-08 17:08             ` Ilia Mirkin
2018-03-08 17:36               ` Daniel Stone

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=CAKb7UvipOtS48kQocRU6kpzxN5MSb7zUDBQYkc4Oo4E-oqmcTw@mail.gmail.com \
    --to=imirkin-frubxkncsvf2fbvcvol8/a@public.gmane.org \
    --cc=bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=mario.kleiner.de-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.