On Tue, Apr 5, 2016 at 4:57 PM, Haixia Shi <h...@chromium.org> wrote: > CC Stephane > > In my opinion we should not assume sRGB-capable when alpha is requested, > because UNORM is the more common use case. I actually have a use case where > alpha is requested but not sRGBCapable, and if we assume SRGB by default > then we will get really white-washed faded color.
That most likely means that your application is buggy. Even though the SRGB format is returned internally, that doesn't mean that SRGB encoding/decoding is actually enabled. Just provides the option for it to be used. > > On Tue, Apr 5, 2016 at 1:52 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote: >> >> On Tue, Apr 5, 2016 at 4:33 PM, Haixia Shi <h...@chromium.org> wrote: >> > It is incorrect to assume that pixel format is always in BGR byte order. >> > We need to check bitmask parameters (such as |redMask|) to determine >> > whether >> > the RGB or BGR byte order is requested. >> > >> > Furthermore when parameter |sRGBCapable| is set to false, we should be >> > using >> > UNORM format by default. >> >> Unfortunately none of the visuals are exported with that flag, so it >> will always be false in practice. The current logic is also very >> fragile -- you only get a sRGB-capable fb if you happen to request >> alpha. >> >> > >> > v2: reformat code to stay within 80 character per line limit. >> > >> > Signed-off-by: Haixia Shi <h...@chromium.org> >> > Reviewed-by: Stéphane Marchesin <marc...@chromium.org> >> > Cc: kenneth.w.grau...@intel.com >> > >> > Change-Id: Ib75087aef1fbfb51baa72517207fed410dcd7b1e >> > --- >> > src/mesa/drivers/dri/i965/intel_screen.c | 20 ++++++++++++-------- >> > 1 file changed, 12 insertions(+), 8 deletions(-) >> > >> > diff --git a/src/mesa/drivers/dri/i965/intel_screen.c >> > b/src/mesa/drivers/dri/i965/intel_screen.c >> > index c6eb50a..a27d7ee 100644 >> > --- a/src/mesa/drivers/dri/i965/intel_screen.c >> > +++ b/src/mesa/drivers/dri/i965/intel_screen.c >> > @@ -1000,15 +1000,19 @@ intelCreateBuffer(__DRIscreen * driScrnPriv, >> > fb->Visual.samples = num_samples; >> > } >> > >> > - if (mesaVis->redBits == 5) >> > - rgbFormat = MESA_FORMAT_B5G6R5_UNORM; >> > - else if (mesaVis->sRGBCapable) >> > - rgbFormat = MESA_FORMAT_B8G8R8A8_SRGB; >> > - else if (mesaVis->alphaBits == 0) >> > - rgbFormat = MESA_FORMAT_B8G8R8X8_UNORM; >> > - else { >> > - rgbFormat = MESA_FORMAT_B8G8R8A8_SRGB; >> > + if (mesaVis->redBits == 5) { >> > + rgbFormat = mesaVis->redMask == 0x1f ? MESA_FORMAT_R5G6B5_UNORM >> > + : MESA_FORMAT_B5G6R5_UNORM; >> > + } else if (mesaVis->alphaBits == 0) { >> > + rgbFormat = mesaVis->redMask == 0xff ? MESA_FORMAT_R8G8B8X8_UNORM >> > + : >> > MESA_FORMAT_B8G8R8X8_UNORM; >> > + } else if (mesaVis->sRGBCapable) { >> > + rgbFormat = mesaVis->redMask == 0xff ? MESA_FORMAT_R8G8B8A8_SRGB >> > + : MESA_FORMAT_B8G8R8A8_SRGB; >> > fb->Visual.sRGBCapable = true; >> > + } else { >> > + rgbFormat = mesaVis->redMask == 0xff ? MESA_FORMAT_R8G8B8A8_UNORM >> > + : >> > MESA_FORMAT_B8G8R8A8_UNORM; >> > } >> > >> > /* setup the hardware-based renderbuffers */ >> > -- >> > 2.8.0.rc3.226.g39d4020 >> > >> > _______________________________________________ >> > 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