[Mesa-dev] [PATCH 1/2] mesa/formats: add some formats from GL3.3

Roland Scheidegger sroland at vmware.com
Thu Jul 30 09:34:22 PDT 2015


Hmm I guess we can't convert it to something else when we don't have a
matching MESA_FORMAT?

Roland

Am 30.07.2015 um 03:48 schrieb Dave Airlie:
> From: Dave Airlie <airlied at redhat.com>
> 
> GL3.3 added GL_ARB_texture_rgb10_a2ui, which specifies
> a lot more things than just rgb10/a2ui.
> 
> While playing with ogl conform one of the tests must
> attempted all valid formats for GL3.3 and hits the
> unreachable here.
> 
> This adds the first chunk of formats that hit the
> assert.
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/mesa/main/formats.c   | 63 +++++++++++++++++++++++++++++++++++++++++++++++
>  src/mesa/main/formats.csv | 12 +++++++++
>  src/mesa/main/formats.h   | 12 +++++++++
>  src/mesa/main/glformats.c | 24 ++++++++++++++++++
>  4 files changed, 111 insertions(+)
> 
> diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
> index baeb1bf..872f18b 100644
> --- a/src/mesa/main/formats.c
> +++ b/src/mesa/main/formats.c
> @@ -1008,6 +1008,8 @@ _mesa_format_to_type_and_comps(mesa_format format,
>        return;
>     case MESA_FORMAT_B5G6R5_UNORM:
>     case MESA_FORMAT_R5G6B5_UNORM:
> +   case MESA_FORMAT_B5G6R5_UINT:
> +   case MESA_FORMAT_R5G6B5_UINT:
>        *datatype = GL_UNSIGNED_SHORT_5_6_5;
>        *comps = 3;
>        return;
> @@ -1015,6 +1017,8 @@ _mesa_format_to_type_and_comps(mesa_format format,
>     case MESA_FORMAT_B4G4R4A4_UNORM:
>     case MESA_FORMAT_A4R4G4B4_UNORM:
>     case MESA_FORMAT_B4G4R4X4_UNORM:
> +   case MESA_FORMAT_B4G4R4A4_UINT:
> +   case MESA_FORMAT_A4R4G4B4_UINT:
>        *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
>        *comps = 4;
>        return;
> @@ -1022,6 +1026,8 @@ _mesa_format_to_type_and_comps(mesa_format format,
>     case MESA_FORMAT_B5G5R5A1_UNORM:
>     case MESA_FORMAT_A1R5G5B5_UNORM:
>     case MESA_FORMAT_B5G5R5X1_UNORM:
> +   case MESA_FORMAT_B5G5R5A1_UINT:
> +   case MESA_FORMAT_A1R5G5B5_UINT:
>        *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
>        *comps = 4;
>        return;
> @@ -1032,6 +1038,7 @@ _mesa_format_to_type_and_comps(mesa_format format,
>        return;
>  
>     case MESA_FORMAT_A1B5G5R5_UNORM:
> +   case MESA_FORMAT_A1B5G5R5_UINT:
>        *datatype = GL_UNSIGNED_SHORT_5_5_5_1;
>        *comps = 4;
>        return;
> @@ -1066,19 +1073,23 @@ _mesa_format_to_type_and_comps(mesa_format format,
>        return;
>  
>     case MESA_FORMAT_R3G3B2_UNORM:
> +   case MESA_FORMAT_R3G3B2_UINT:
>        *datatype = GL_UNSIGNED_BYTE_2_3_3_REV;
>        *comps = 3;
>        return;
>     case MESA_FORMAT_A4B4G4R4_UNORM:
> +   case MESA_FORMAT_A4B4G4R4_UINT:
>        *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
>        *comps = 4;
>        return;
>  
>     case MESA_FORMAT_R4G4B4A4_UNORM:
> +   case MESA_FORMAT_R4G4B4A4_UINT:
>        *datatype = GL_UNSIGNED_SHORT_4_4_4_4;
>        *comps = 4;
>        return;
>     case MESA_FORMAT_R5G5B5A1_UNORM:
> +   case MESA_FORMAT_R5G5B5A1_UINT:
>        *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV;
>        *comps = 4;
>        return;
> @@ -1094,6 +1105,7 @@ _mesa_format_to_type_and_comps(mesa_format format,
>        return;
>  
>     case MESA_FORMAT_B2G3R3_UNORM:
> +   case MESA_FORMAT_B2G3R3_UINT:
>        *datatype = GL_UNSIGNED_BYTE_3_3_2;
>        *comps = 3;
>        return;
> @@ -2123,6 +2135,57 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
>                type == GL_UNSIGNED_INT_2_10_10_10_REV &&
>                !swapBytes);
>  
> +   case MESA_FORMAT_B5G6R5_UINT:
> +      return format == GL_RGB_INTEGER && type == GL_UNSIGNED_SHORT_5_6_5;
> +
> +   case MESA_FORMAT_R5G6B5_UINT:
> +      return format == GL_RGB_INTEGER && type == GL_UNSIGNED_SHORT_5_6_5_REV;
> +
> +   case MESA_FORMAT_B2G3R3_UINT:
> +      return format == GL_RGB_INTEGER && type == GL_UNSIGNED_BYTE_3_3_2;
> +
> +   case MESA_FORMAT_R3G3B2_UINT:
> +      return format == GL_RGB_INTEGER && type == GL_UNSIGNED_BYTE_2_3_3_REV;
> +
> +   case MESA_FORMAT_A4B4G4R4_UINT:
> +      if (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_SHORT_4_4_4_4 && !swapBytes)
> +         return GL_TRUE;
> +
> +      if (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_SHORT_4_4_4_4_REV && swapBytes)
> +         return GL_TRUE;
> +      return GL_FALSE;
> +
> +   case MESA_FORMAT_R4G4B4A4_UINT:
> +      if (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_SHORT_4_4_4_4_REV && !swapBytes)
> +         return GL_TRUE;
> +
> +      if (format == GL_RGBA_INTEGER && type == GL_UNSIGNED_SHORT_4_4_4_4 && swapBytes)
> +         return GL_TRUE;
> +
> +      return GL_FALSE;
> +
> +   case MESA_FORMAT_B4G4R4A4_UINT:
> +      return format == GL_BGRA_INTEGER && type == GL_UNSIGNED_SHORT_4_4_4_4_REV &&
> +         !swapBytes;
> +
> +   case MESA_FORMAT_A4R4G4B4_UINT:
> +      return GL_FALSE;
> +
> +   case MESA_FORMAT_A1B5G5R5_UINT:
> +      return format == GL_RGBA_INTEGER && type == GL_UNSIGNED_SHORT_5_5_5_1 &&
> +         !swapBytes;
> +
> +   case MESA_FORMAT_B5G5R5A1_UINT:
> +      return format == GL_BGRA_INTEGER && type == GL_UNSIGNED_SHORT_1_5_5_5_REV &&
> +         !swapBytes;
> +
> +   case MESA_FORMAT_A1R5G5B5_UINT:
> +      return format == GL_BGRA_INTEGER && type == GL_UNSIGNED_SHORT_5_5_5_1 &&
> +         !swapBytes;
> +
> +   case MESA_FORMAT_R5G5B5A1_UINT:
> +      return format == GL_RGBA_INTEGER && type == GL_UNSIGNED_SHORT_1_5_5_5_REV;
> +
>     case MESA_FORMAT_R9G9B9E5_FLOAT:
>        return format == GL_RGB && type == GL_UNSIGNED_INT_5_9_9_9_REV &&
>           !swapBytes;
> diff --git a/src/mesa/main/formats.csv b/src/mesa/main/formats.csv
> index e159e7d..d30b0a9 100644
> --- a/src/mesa/main/formats.csv
> +++ b/src/mesa/main/formats.csv
> @@ -190,6 +190,18 @@ MESA_FORMAT_B10G10R10A2_UINT              , packed, 1, 1, u10 , u10 , u10 , u2
>  MESA_FORMAT_R10G10B10A2_UINT              , packed, 1, 1, u10 , u10 , u10 , u2  , xyzw, rgb
>  MESA_FORMAT_A2B10G10R10_UINT              , packed, 1, 1, u2  , u10 , u10 , u10 , wzyx, rgb
>  MESA_FORMAT_A2R10G10B10_UINT              , packed, 1, 1, u2  , u10 , u10 , u10 , yzwx, rgb
> +MESA_FORMAT_B5G6R5_UINT                   , packed, 1, 1, u5  , u6  ,  u5 ,     , zyx1, rgb
> +MESA_FORMAT_R5G6B5_UINT                   , packed, 1, 1, u5  , u6  ,  u5 ,     , xyz1, rgb
> +MESA_FORMAT_B2G3R3_UINT                   , packed, 1, 1, u2  , u3  ,  u3 ,     , zyx1, rgb
> +MESA_FORMAT_R3G3B2_UINT                   , packed, 1, 1, u3  , u3  ,  u2 ,     , xyz1, rgb
> +MESA_FORMAT_A4B4G4R4_UINT                 , packed, 1, 1, u4  , u4  ,  u4 , u4  , wzyx, rgb
> +MESA_FORMAT_R4G4B4A4_UINT                 , packed, 1, 1, u4  , u4  ,  u4 , u4  , xyzw, rgb
> +MESA_FORMAT_B4G4R4A4_UINT                 , packed, 1, 1, u4  , u4  ,  u4 , u4  , zyxw, rgb
> +MESA_FORMAT_A4R4G4B4_UINT                 , packed, 1, 1, u4  , u4  ,  u4 , u4  , yzwx, rgb
> +MESA_FORMAT_A1B5G5R5_UINT                 , packed, 1, 1, u1  , u5  ,  u5 , u5  , wzyx, rgb
> +MESA_FORMAT_B5G5R5A1_UINT                 , packed, 1, 1, u5  , u5  ,  u5 , u1  , zyxw, rgb
> +MESA_FORMAT_A1R5G5B5_UINT                 , packed, 1, 1, u1  , u5  ,  u5 , u5  , yzwx, rgb
> +MESA_FORMAT_R5G5B5A1_UINT                 , packed, 1, 1, u5  , u5  ,  u5 , u1  , xyzw, rgb
>  
>  # Array signed/unsigned non-normalized integer formats
>  MESA_FORMAT_A_UINT8                       , array , 1, 1, u8  ,     ,     ,     , 000x, rgb
> diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h
> index 7e451ca..766c839 100644
> --- a/src/mesa/main/formats.h
> +++ b/src/mesa/main/formats.h
> @@ -463,6 +463,18 @@ typedef enum
>     MESA_FORMAT_R10G10B10A2_UINT, /* AABB BBBB BBBB GGGG GGGG GGRR RRRR RRRR */
>     MESA_FORMAT_A2B10G10R10_UINT, /* RRRR RRRR RRGG GGGG GGGG BBBB BBBB BBAA */
>     MESA_FORMAT_A2R10G10B10_UINT, /* BBBB BBBB BBGG GGGG GGGG RRRR RRRR RRAA */
> +   MESA_FORMAT_B5G6R5_UINT,                          /* RRRR RGGG GGGB BBBB */
> +   MESA_FORMAT_R5G6B5_UINT,                          /* BBBB BGGG GGGR RRRR */
> +   MESA_FORMAT_B2G3R3_UINT,                                    /* RRRG GGBB */
> +   MESA_FORMAT_R3G3B2_UINT,                                    /* BBGG GRRR */
> +   MESA_FORMAT_A4B4G4R4_UINT,                        /* RRRR GGGG BBBB AAAA */
> +   MESA_FORMAT_R4G4B4A4_UINT,                        /* AAAA BBBB GGGG RRRR */
> +   MESA_FORMAT_B4G4R4A4_UINT,                        /* AAAA RRRR GGGG BBBB */
> +   MESA_FORMAT_A4R4G4B4_UINT,                        /* BBBB GGGG RRRR AAAA */
> +   MESA_FORMAT_A1B5G5R5_UINT,                        /* RRRR RGGG GGBB BBBA */
> +   MESA_FORMAT_B5G5R5A1_UINT,                        /* ARRR RRGG GGGB BBBB */
> +   MESA_FORMAT_A1R5G5B5_UINT,                        /* BBBB BGGG GGRR RRRA */
> +   MESA_FORMAT_R5G5B5A1_UINT,                        /* ABBB BBGG GGGR RRRR */
>  
>     /* Array signed/unsigned non-normalized integer formats */
>     MESA_FORMAT_A_UINT8,
> diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
> index c3fd734..d1c7970 100644
> --- a/src/mesa/main/glformats.c
> +++ b/src/mesa/main/glformats.c
> @@ -2726,12 +2726,16 @@ _mesa_format_from_format_and_type(GLenum format, GLenum type)
>           return MESA_FORMAT_B5G6R5_UNORM;
>        else if (format == GL_BGR)
>           return MESA_FORMAT_R5G6B5_UNORM;
> +      else if (format == GL_RGB_INTEGER)
> +         return MESA_FORMAT_B5G6R5_UINT;
>        break;
>     case GL_UNSIGNED_SHORT_5_6_5_REV:
>        if (format == GL_RGB)
>           return MESA_FORMAT_R5G6B5_UNORM;
>        else if (format == GL_BGR)
>           return MESA_FORMAT_B5G6R5_UNORM;
> +      else if (format == GL_RGB_INTEGER)
> +         return MESA_FORMAT_R5G6B5_UINT;
>        break;
>     case GL_UNSIGNED_SHORT_4_4_4_4:
>        if (format == GL_RGBA)
> @@ -2740,6 +2744,10 @@ _mesa_format_from_format_and_type(GLenum format, GLenum type)
>           return MESA_FORMAT_A4R4G4B4_UNORM;
>        else if (format == GL_ABGR_EXT)
>           return MESA_FORMAT_R4G4B4A4_UNORM;
> +      else if (format == GL_RGBA_INTEGER)
> +         return MESA_FORMAT_A4B4G4R4_UINT;
> +      else if (format == GL_BGRA_INTEGER)
> +         return MESA_FORMAT_A4R4G4B4_UINT;
>        break;
>     case GL_UNSIGNED_SHORT_4_4_4_4_REV:
>        if (format == GL_RGBA)
> @@ -2748,26 +2756,42 @@ _mesa_format_from_format_and_type(GLenum format, GLenum type)
>           return MESA_FORMAT_B4G4R4A4_UNORM;
>        else if (format == GL_ABGR_EXT)
>           return MESA_FORMAT_A4B4G4R4_UNORM;
> +      else if (format == GL_RGBA_INTEGER)
> +         return MESA_FORMAT_R4G4B4A4_UINT;
> +      else if (format == GL_BGRA_INTEGER)
> +         return MESA_FORMAT_B4G4R4A4_UINT;
>        break;
>     case GL_UNSIGNED_SHORT_5_5_5_1:
>        if (format == GL_RGBA)
>           return MESA_FORMAT_A1B5G5R5_UNORM;
>        else if (format == GL_BGRA)
>           return MESA_FORMAT_A1R5G5B5_UNORM;
> +      else if (format == GL_RGBA_INTEGER)
> +         return MESA_FORMAT_A1B5G5R5_UINT;
> +      else if (format == GL_BGRA_INTEGER)
> +         return MESA_FORMAT_A1R5G5B5_UINT;
>        break;
>     case GL_UNSIGNED_SHORT_1_5_5_5_REV:
>        if (format == GL_RGBA)
>           return MESA_FORMAT_R5G5B5A1_UNORM;
>        else if (format == GL_BGRA)
>           return MESA_FORMAT_B5G5R5A1_UNORM;
> +      else if (format == GL_RGBA_INTEGER)
> +         return MESA_FORMAT_R5G5B5A1_UINT;
> +      else if (format == GL_BGRA_INTEGER)
> +         return MESA_FORMAT_B5G5R5A1_UINT;
>        break;
>     case GL_UNSIGNED_BYTE_3_3_2:
>        if (format == GL_RGB)
>           return MESA_FORMAT_B2G3R3_UNORM;
> +      else if (format == GL_RGB_INTEGER)
> +         return MESA_FORMAT_B2G3R3_UINT;
>        break;
>     case GL_UNSIGNED_BYTE_2_3_3_REV:
>        if (format == GL_RGB)
>           return MESA_FORMAT_R3G3B2_UNORM;
> +      else if (format == GL_RGB_INTEGER)
> +         return MESA_FORMAT_R3G3B2_UINT;
>        break;
>     case GL_UNSIGNED_INT_5_9_9_9_REV:
>        if (format == GL_RGB)
> 



More information about the mesa-dev mailing list