On Thursday, April 7, 2016 11:05:09 AM PDT Haixia Shi 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.
> 
> v2: reformat code to stay within 80 character per line limit.
> v3: just fix the byte order problem first and investigate SRGB later.
> v4: rebased on top of the GLES3 sRGB workaround fix.
> v5: rebased on top of the GLES3 sRGB workaround fix v2.
> 
> Signed-off-by: Haixia Shi <[email protected]>
> Reviewed-by: Stéphane Marchesin <[email protected]>
> Cc: [email protected]
> 
> 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..bc8c5d3 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -1000,14 +1000,18 @@ 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->sRGBCapable) {
> +      rgbFormat = mesaVis->redMask == 0xff ? MESA_FORMAT_R8G8B8A8_SRGB
> +                                           : MESA_FORMAT_B8G8R8A8_SRGB;
> +   } else if (mesaVis->alphaBits == 0) {
> +      rgbFormat = mesaVis->redMask == 0xff ? MESA_FORMAT_R8G8B8X8_UNORM
> +                                           : MESA_FORMAT_B8G8R8X8_UNORM;
> +   } else {
> +      rgbFormat = mesaVis->redMask == 0xff ? MESA_FORMAT_R8G8B8A8_SRGB
> +                                           : MESA_FORMAT_B8G8R8A8_SRGB;
>        fb->Visual.sRGBCapable = true;
>     }
>  
> 

As Kristian mentioned, this shouldn't ever happen with upstream code
today - we never expose any visuals with the RGBA byte order instead of
BGRA.  But Kristian seemed to think Android would hit this.

Regardless, it looks correct and seems reasonable, so this patch is.
Reviewed-by: Kenneth Graunke <[email protected]>

Kristian, are you OK with pushing this patch?  Should I add an R-b from
you as well?

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to