[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