Hi Rob, It would be better to have a flag passed from libEGL to st/dri saying that it's OK to expose those formats. I wouldn't like to have GLX visuals that are unusable in practice because X doesn't support that component ordering.
Marek On Fri, Jun 30, 2017 at 8:31 PM, Rob Herring <r...@kernel.org> wrote: > Add support for 32-bit RGBX/RGBA formats which are required for Android. > > The original patch (commit ccdcf91104a5) was reverted (commit > c0c6ca40a25e) in mesa as it broke GLX resulting in swapped colors. Based > on further investigation by Chad Versace, moving the RGBX/RGBA configs > to the end is enough to prevent breaking GLX. > > Cc: Marek Olšák <marek.ol...@amd.com> > Cc: Eric Anholt <e...@anholt.net> > Cc: Chad Versace <chadvers...@chromium.org> > Cc: Mauro Rossi <issor.or...@gmail.com> > Signed-off-by: Rob Herring <r...@kernel.org> > --- > I've tested only on Android and could use help testing with KDE which > broke last time. This has been done on the Intel driver and *should* be > okay, but maybe not. > > Mauro, any testing you can do would help. I'm fighting with ADB issues > installing the apps you tested... > > Rob > > src/gallium/state_trackers/dri/dri2.c | 6 ++++++ > src/gallium/state_trackers/dri/dri_screen.c | 23 +++++++++++++++++++++++ > 2 files changed, 29 insertions(+) > > diff --git a/src/gallium/state_trackers/dri/dri2.c > b/src/gallium/state_trackers/dri/dri2.c > index 60ec38d8e445..4928394306e4 100644 > --- a/src/gallium/state_trackers/dri/dri2.c > +++ b/src/gallium/state_trackers/dri/dri2.c > @@ -186,6 +186,9 @@ static enum pipe_format dri2_format_to_pipe_format (int > format) > case __DRI_IMAGE_FORMAT_ARGB8888: > pf = PIPE_FORMAT_BGRA8888_UNORM; > break; > + case __DRI_IMAGE_FORMAT_XBGR8888: > + pf = PIPE_FORMAT_RGBX8888_UNORM; > + break; > case __DRI_IMAGE_FORMAT_ABGR8888: > pf = PIPE_FORMAT_RGBA8888_UNORM; > break; > @@ -434,6 +437,9 @@ dri_image_drawable_get_buffers(struct dri_drawable > *drawable, > case PIPE_FORMAT_BGRA8888_UNORM: > image_format = __DRI_IMAGE_FORMAT_ARGB8888; > break; > + case PIPE_FORMAT_RGBX8888_UNORM: > + image_format = __DRI_IMAGE_FORMAT_XBGR8888; > + break; > case PIPE_FORMAT_RGBA8888_UNORM: > image_format = __DRI_IMAGE_FORMAT_ABGR8888; > break; > diff --git a/src/gallium/state_trackers/dri/dri_screen.c > b/src/gallium/state_trackers/dri/dri_screen.c > index 6b58830e0b42..e3f555561447 100644 > --- a/src/gallium/state_trackers/dri/dri_screen.c > +++ b/src/gallium/state_trackers/dri/dri_screen.c > @@ -132,6 +132,27 @@ dri_fill_in_modes(struct dri_screen *screen) > MESA_FORMAT_B8G8R8A8_SRGB, > MESA_FORMAT_B8G8R8X8_SRGB, > MESA_FORMAT_B5G6R5_UNORM, > + > + /* 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. > + * > + * The problem, as of 2017-05-30: > + * When matching a GLXFBConfig to a __DRIconfig, GLX ignores the > channel > + * order and chooses the first __DRIconfig with the expected channel > + * sizes. Specifically, GLX compares the GLXFBConfig's and > __DRIconfig's > + * __DRI_ATTRIB_{CHANNEL}_SIZE but ignores __DRI_ATTRIB_{CHANNEL}_MASK. > + * > + * EGL does not suffer from this problem. It correctly compares the > + * channel masks when matching EGLConfig to __DRIconfig. > + */ > + > + /* Required by Android, for HAL_PIXEL_FORMAT_RGBA_8888. */ > + MESA_FORMAT_R8G8B8A8_UNORM, > + > + /* Required by Android, for HAL_PIXEL_FORMAT_RGBX_8888. */ > + MESA_FORMAT_R8G8B8X8_UNORM, > }; > static const enum pipe_format pipe_formats[] = { > PIPE_FORMAT_BGRA8888_UNORM, > @@ -139,6 +160,8 @@ dri_fill_in_modes(struct dri_screen *screen) > PIPE_FORMAT_BGRA8888_SRGB, > PIPE_FORMAT_BGRX8888_SRGB, > PIPE_FORMAT_B5G6R5_UNORM, > + PIPE_FORMAT_RGBA8888_UNORM, > + PIPE_FORMAT_RGBX8888_UNORM, > }; > mesa_format format; > __DRIconfig **configs = NULL; > -- > 2.11.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev