[Mesa-dev] [PATCH] st/dri: Use packed RGB formats

Ilia Mirkin imirkin at alum.mit.edu
Tue Sep 1 09:49:45 PDT 2015


On Mon, Aug 10, 2015 at 5:44 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> Fixes Gallium based DRI drivers failing to load on big endian hosts
> because they can't find any matching fbconfigs.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71789
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
>  src/gallium/state_trackers/dri/dri2.c         | 26 +++++++++++++-------------
>  src/gallium/state_trackers/dri/dri_drawable.c |  8 ++++----
>  2 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
> index 91b4431..fae100e 100644
> --- a/src/gallium/state_trackers/dri/dri2.c
> +++ b/src/gallium/state_trackers/dri/dri2.c
> @@ -188,10 +188,10 @@ dri2_drawable_get_buffers(struct dri_drawable *drawable,
>         * may occur as the stvis->color_format.
>         */
>        switch(format) {
> -      case PIPE_FORMAT_B8G8R8A8_UNORM:
> +      case PIPE_FORMAT_BGRA8888_UNORM:
>          depth = 32;
>          break;
> -      case PIPE_FORMAT_B8G8R8X8_UNORM:
> +      case PIPE_FORMAT_BGRX8888_UNORM:
>          depth = 24;
>          break;
>        case PIPE_FORMAT_B5G6R5_UNORM:
> @@ -261,13 +261,13 @@ dri_image_drawable_get_buffers(struct dri_drawable *drawable,
>        case PIPE_FORMAT_B5G6R5_UNORM:
>           image_format = __DRI_IMAGE_FORMAT_RGB565;
>           break;
> -      case PIPE_FORMAT_B8G8R8X8_UNORM:
> +      case PIPE_FORMAT_BGRX8888_UNORM:
>           image_format = __DRI_IMAGE_FORMAT_XRGB8888;
>           break;
> -      case PIPE_FORMAT_B8G8R8A8_UNORM:
> +      case PIPE_FORMAT_BGRA8888_UNORM:
>           image_format = __DRI_IMAGE_FORMAT_ARGB8888;
>           break;
> -      case PIPE_FORMAT_R8G8B8A8_UNORM:
> +      case PIPE_FORMAT_RGBA8888_UNORM:
>           image_format = __DRI_IMAGE_FORMAT_ABGR8888;
>           break;
>        default:
> @@ -314,10 +314,10 @@ dri2_allocate_buffer(__DRIscreen *sPriv,
>
>     switch (format) {
>        case 32:
> -         pf = PIPE_FORMAT_B8G8R8A8_UNORM;
> +         pf = PIPE_FORMAT_BGRA8888_UNORM;
>           break;
>        case 24:
> -         pf = PIPE_FORMAT_B8G8R8X8_UNORM;
> +         pf = PIPE_FORMAT_BGRX8888_UNORM;
>           break;
>        case 16:
>           pf = PIPE_FORMAT_Z16_UNORM;
> @@ -724,13 +724,13 @@ dri2_create_image_from_winsys(__DRIscreen *_screen,
>        pf = PIPE_FORMAT_B5G6R5_UNORM;
>        break;
>     case __DRI_IMAGE_FORMAT_XRGB8888:
> -      pf = PIPE_FORMAT_B8G8R8X8_UNORM;
> +      pf = PIPE_FORMAT_BGRX8888_UNORM;
>        break;
>     case __DRI_IMAGE_FORMAT_ARGB8888:
> -      pf = PIPE_FORMAT_B8G8R8A8_UNORM;
> +      pf = PIPE_FORMAT_BGRA8888_UNORM;
>        break;
>     case __DRI_IMAGE_FORMAT_ABGR8888:
> -      pf = PIPE_FORMAT_R8G8B8A8_UNORM;
> +      pf = PIPE_FORMAT_RGBA8888_UNORM;
>        break;
>     default:
>        pf = PIPE_FORMAT_NONE;
> @@ -845,13 +845,13 @@ dri2_create_image(__DRIscreen *_screen,
>        pf = PIPE_FORMAT_B5G6R5_UNORM;
>        break;
>     case __DRI_IMAGE_FORMAT_XRGB8888:
> -      pf = PIPE_FORMAT_B8G8R8X8_UNORM;
> +      pf = PIPE_FORMAT_BGRX8888_UNORM;
>        break;
>     case __DRI_IMAGE_FORMAT_ARGB8888:
> -      pf = PIPE_FORMAT_B8G8R8A8_UNORM;
> +      pf = PIPE_FORMAT_BGRA8888_UNORM;
>        break;
>     case __DRI_IMAGE_FORMAT_ABGR8888:
> -      pf = PIPE_FORMAT_R8G8B8A8_UNORM;
> +      pf = PIPE_FORMAT_RGBA8888_UNORM;
>        break;
>     default:
>        pf = PIPE_FORMAT_NONE;
> diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c
> index 0d2929a..f0cc4a2 100644
> --- a/src/gallium/state_trackers/dri/dri_drawable.c
> +++ b/src/gallium/state_trackers/dri/dri_drawable.c
> @@ -231,11 +231,11 @@ dri_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
>        if (format == __DRI_TEXTURE_FORMAT_RGB)  {
>           /* only need to cover the formats recognized by dri_fill_st_visual */
>           switch (internal_format) {
> -         case PIPE_FORMAT_B8G8R8A8_UNORM:
> -            internal_format = PIPE_FORMAT_B8G8R8X8_UNORM;
> +         case PIPE_FORMAT_BGRA8888_UNORM:
> +            internal_format = PIPE_FORMAT_BGRX8888_UNORM;
>              break;
> -         case PIPE_FORMAT_A8R8G8B8_UNORM:
> -            internal_format = PIPE_FORMAT_X8R8G8B8_UNORM;
> +         case PIPE_FORMAT_ARGB8888_UNORM:
> +            internal_format = PIPE_FORMAT_XRGB8888_UNORM;
>              break;
>           default:
>              break;

This dri_drawable.c hunk is unnecessary. I wrote the same patch for
dri2.c though. Any reason it didn't get pushed?

  -ilia


More information about the mesa-dev mailing list