[Mesa-dev] [PATCH 0/6] Support for 10 bpc EGLSurface

Chad Versace chad.versace at linux.intel.com
Tue Sep 17 16:52:02 PDT 2013


On 09/17/2013 04:20 PM, Kristian Høgsberg wrote:
> On Tue, Sep 17, 2013 at 1:49 PM, Chad Versace
> <chad.versace at linux.intel.com> wrote:
>> On 09/15/2013 12:16 AM, Kristian Høgsberg wrote:
>>>
>>> Hi,
>>>
>>> This little series adds support for creating EGLSurfaces with color
>>> buffers
>>> using the ARGB2101010 pixel format.  We the new KMS addFB2 ioctl we can
>>> create KMS framebuffers with that format and this series ends up adding
>>> the pixel format to gbm so we can generate buffers with that format.
>>>
>>> The first two patches make sure we don't advertise ARGB2101010 configs
>>> that
>>> you can use with an ARGB8888 X window.  The X visual to EGL config
>>> matching just compares visual depth and EGL config buffer size, and
>>> they're
>>> both 32 bits for those two pixel formats.  Unless we match on the
>>> pixel layout, we will advertise EGLConfigs with 10 bpc that you can use
>>> with a ARGB8888 X window.
>>>
>>> With this patch series, I can run weston on KMS in 10 bpc, but anything
>>> that
>>> uses gbm will benefit from this.  We also add support for 10 bpc
>>> GLX pixmaps and pbuffers.
>>>
>>> Kristian
>>
>>
>> (CC'ing Ian to alert him about the EGLConfig sort order.)
>>
>> This series looks good to me.
>> Reviewed-by: Chad Versace <chad.versace at linux.intel.com>
>>
>> Something to note is that eglChooseConfig(r=8, g=8, b=8) sorts the
>> RGBA1010102 EGLConfigs *before* the RGBA8888 configs. I confirmed
>> this on GBM. The EGL spec requires that behavior, but I find it
>> surprising.
>>
>> Someone else found it surprising too and complained
>> loudly to Khronos, resulting in Footnote 8 on page 26 of the
>> EGL 1.4 2013-02-11 spec:
>>
>> "[fn8] This rule places configs with deeper color buffers first in the list
>> returned by eglChooseConfig.
>> Applications may find this counterintuitive if they expect configs with
>> smaller buffer sizes to be
>> returned first."
>
> Yup, I hit that with weston too.  It's not surprising that it works
> that way, but I think a lot of applications assume that there will be
> no 10 bit configs.  For gbm, I'm thinking that we may want to put the
> GBM format code into the EGL_NATIVE_VISUAL_ID config attribute so you
> can choose a config, then read out the id and use it when creating the
> GBM surface.  Or alternatively, pick a GBM format first and then look
> for a config where the visual ID matches.

Storing the GBM format in EGL_NATIVE_VISUAL_ID sounds like a good idea.

>
>> Luckily for now, this surprise will hurt no one on X because X/EGL
>> advertises no RGBA1010102 configs.
>
> It does and GLX does too with these patches.  The configs are only
> usable with pixmaps or pbuffers, not windows (unless the window visual
> is 10 bit too).  This could still break things under X where an
> application may pick an EGLConfig or GLXFBConfig and get a 10 bit
> config and then use that to create a GLXPixmap, then later try to
> XCopyArea or such from the pixmap.  It may be safer to disable this
> under X...

I don't think the existence of the 1010102 GLXFBConfigs will
cause any problems, because glxinfo shows that they are sorted
after the 8888 configs.

I'm unable to find any 1010102 EGLConfigs under X/EGL. Here's the proof,
where I print the result of eglGetConfigs. (And yes, I restarted the Xserver
after installing Mesa).

   i:  id   r   g   b   a
-----------------------------
   0:  14   8   8   8   8
   1:  18   8   8   8   8
   2:  36   8   8   8   8
   3:  50   8   8   8   8
   4:  52   8   8   8   8
   5:  54   8   8   8   8
   6:  56   8   8   8   8
   7:  78   8   8   8   8
   8:  82   8   8   8   8
   9: 100   8   8   8   8
  10: 114   8   8   8   8
  11: 116   8   8   8   8
  12: 118   8   8   8   8
  13: 120   8   8   8   8

Ditto for Weston. I see no 1010102 configs. Am I doing something wrong?
GBM was able to find one, because according to the Weston log it's
using a 1010102 EGLConfig.

   i:  id   r   g   b   a
-----------------------------
   0:   7   8   8   8   8
   1:   9   8   8   8   8
   2:  18   8   8   8   8
   3:  25   8   8   8   8
   4:  26   8   8   8   8
   5:  27   8   8   8   8
   6:  28   8   8   8   8


More information about the mesa-dev mailing list