[Mesa-dev] [RFC v2 01/15] mesa/formats: define the 2D ASTC formats
Anuj Phogat
anuj.phogat at gmail.com
Mon Jun 8 12:34:04 PDT 2015
On Mon, Jun 1, 2015 at 10:13 AM, Nanley Chery <nanleychery at gmail.com> wrote:
> From: Nanley Chery <nanley.g.chery at intel.com>
>
> Includes definition of the formats, updates to functions likely to be used, as
> well as changes necessary for compilation.
>
> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> ---
> src/mesa/main/format_info.py | 3 +
> src/mesa/main/formats.c | 130 +++++++++++++++++++++++++++++++++++++++++++
> src/mesa/main/formats.csv | 31 +++++++++++
> src/mesa/main/formats.h | 30 ++++++++++
> src/mesa/swrast/s_texfetch.c | 32 ++++++++++-
> 5 files changed, 225 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/main/format_info.py b/src/mesa/main/format_info.py
> index 3bae57e..40104a2 100644
> --- a/src/mesa/main/format_info.py
> +++ b/src/mesa/main/format_info.py
> @@ -130,6 +130,9 @@ def get_channel_bits(fmat, chan_name):
> elif fmat.layout == 'bptc':
> bits = 16 if fmat.name.endswith('_FLOAT') else 8
> return bits if fmat.has_channel(chan_name) else 0
> + elif fmat.layout == 'astc':
> + bits = 16 if fmat.name.endswith('_RGBA') else 8
> + return bits if fmat.has_channel(chan_name) else 0
> else:
> assert False
> else:
> diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
> index 8af44e9..25606f9 100644
> --- a/src/mesa/main/formats.c
> +++ b/src/mesa/main/formats.c
> @@ -656,6 +656,48 @@ _mesa_get_srgb_format_linear(mesa_format format)
> case MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM:
> format = MESA_FORMAT_BPTC_RGBA_UNORM;
> break;
> + case MESA_FORMAT_ASTC_4x4_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_4x4_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_5x4_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_5x4_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_5x5_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_5x5_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_6x5_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_6x5_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_6x6_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_6x6_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_8x5_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_8x5_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_8x6_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_8x6_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_8x8_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_8x8_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_10x5_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_10x5_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_10x6_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_10x6_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_10x8_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_10x8_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_10x10_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_10x10_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_12x10_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_12x10_RGBA;
> + break;
> + case MESA_FORMAT_ASTC_12x12_SRGB8_ALPHA8:
> + format = MESA_FORMAT_ASTC_12x12_RGBA;
> + break;
> case MESA_FORMAT_B8G8R8X8_SRGB:
> format = MESA_FORMAT_B8G8R8X8_UNORM;
> break;
> @@ -730,6 +772,36 @@ _mesa_get_uncompressed_format(mesa_format format)
> case MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT:
> case MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT:
> return MESA_FORMAT_RGB_FLOAT32;
> + case MESA_FORMAT_ASTC_4x4_RGBA:
> + case MESA_FORMAT_ASTC_5x4_RGBA:
> + case MESA_FORMAT_ASTC_5x5_RGBA:
> + case MESA_FORMAT_ASTC_6x5_RGBA:
> + case MESA_FORMAT_ASTC_6x6_RGBA:
> + case MESA_FORMAT_ASTC_8x5_RGBA:
> + case MESA_FORMAT_ASTC_8x6_RGBA:
> + case MESA_FORMAT_ASTC_8x8_RGBA:
> + case MESA_FORMAT_ASTC_10x5_RGBA:
> + case MESA_FORMAT_ASTC_10x6_RGBA:
> + case MESA_FORMAT_ASTC_10x8_RGBA:
> + case MESA_FORMAT_ASTC_10x10_RGBA:
> + case MESA_FORMAT_ASTC_12x10_RGBA:
> + case MESA_FORMAT_ASTC_12x12_RGBA:
> + return MESA_FORMAT_RGBA_FLOAT16;
> + case MESA_FORMAT_ASTC_4x4_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_5x4_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_5x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_6x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_6x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x8_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x8_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x10_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_12x10_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_12x12_SRGB8_ALPHA8:
> + return MESA_FORMAT_A8B8G8R8_SRGB;
> default:
> #ifdef DEBUG
> assert(!_mesa_is_format_compressed(format));
> @@ -1242,6 +1314,34 @@ _mesa_format_to_type_and_comps(mesa_format format,
> case MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM:
> case MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT:
> case MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT:
> + case MESA_FORMAT_ASTC_4x4_RGBA:
> + case MESA_FORMAT_ASTC_5x4_RGBA:
> + case MESA_FORMAT_ASTC_5x5_RGBA:
> + case MESA_FORMAT_ASTC_6x5_RGBA:
> + case MESA_FORMAT_ASTC_6x6_RGBA:
> + case MESA_FORMAT_ASTC_8x5_RGBA:
> + case MESA_FORMAT_ASTC_8x6_RGBA:
> + case MESA_FORMAT_ASTC_8x8_RGBA:
> + case MESA_FORMAT_ASTC_10x5_RGBA:
> + case MESA_FORMAT_ASTC_10x6_RGBA:
> + case MESA_FORMAT_ASTC_10x8_RGBA:
> + case MESA_FORMAT_ASTC_10x10_RGBA:
> + case MESA_FORMAT_ASTC_12x10_RGBA:
> + case MESA_FORMAT_ASTC_12x12_RGBA:
> + case MESA_FORMAT_ASTC_4x4_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_5x4_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_5x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_6x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_6x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x8_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x8_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x10_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_12x10_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_12x12_SRGB8_ALPHA8:
> /* XXX generate error instead? */
> *datatype = GL_UNSIGNED_BYTE;
> *comps = 0;
> @@ -1858,6 +1958,36 @@ _mesa_format_matches_format_and_type(mesa_format mesa_format,
> case MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT:
> return GL_FALSE;
>
> + case MESA_FORMAT_ASTC_4x4_RGBA:
> + case MESA_FORMAT_ASTC_5x4_RGBA:
> + case MESA_FORMAT_ASTC_5x5_RGBA:
> + case MESA_FORMAT_ASTC_6x5_RGBA:
> + case MESA_FORMAT_ASTC_6x6_RGBA:
> + case MESA_FORMAT_ASTC_8x5_RGBA:
> + case MESA_FORMAT_ASTC_8x6_RGBA:
> + case MESA_FORMAT_ASTC_8x8_RGBA:
> + case MESA_FORMAT_ASTC_10x5_RGBA:
> + case MESA_FORMAT_ASTC_10x6_RGBA:
> + case MESA_FORMAT_ASTC_10x8_RGBA:
> + case MESA_FORMAT_ASTC_10x10_RGBA:
> + case MESA_FORMAT_ASTC_12x10_RGBA:
> + case MESA_FORMAT_ASTC_12x12_RGBA:
> + case MESA_FORMAT_ASTC_4x4_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_5x4_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_5x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_6x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_6x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_8x8_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x5_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x6_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x8_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_10x10_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_12x10_SRGB8_ALPHA8:
> + case MESA_FORMAT_ASTC_12x12_SRGB8_ALPHA8:
> + return GL_FALSE;
> +
> case MESA_FORMAT_RGBA_FLOAT32:
> return format == GL_RGBA && type == GL_FLOAT && !swapBytes;
> case MESA_FORMAT_RGBA_FLOAT16:
> diff --git a/src/mesa/main/formats.csv b/src/mesa/main/formats.csv
> index e159e7d..215dae2 100644
> --- a/src/mesa/main/formats.csv
> +++ b/src/mesa/main/formats.csv
> @@ -301,3 +301,34 @@ MESA_FORMAT_BPTC_RGBA_UNORM , bptc , 4, 4, x128, , ,
> MESA_FORMAT_BPTC_SRGB_ALPHA_UNORM , bptc , 4, 4, x128, , , , xyzw, srgb
> MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT , bptc , 4, 4, x128, , , , xyz1, rgb
> MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT , bptc , 4, 4, x128, , , , xyz1, rgb
> +
> +# ASTC compressed formats
> +MESA_FORMAT_ASTC_4x4_RGBA , astc , 4, 4, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_5x4_RGBA , astc , 5, 4, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_5x5_RGBA , astc , 5, 5, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_6x5_RGBA , astc , 6, 5, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_6x6_RGBA , astc , 6, 6, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_8x5_RGBA , astc , 8, 5, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_8x6_RGBA , astc , 8, 6, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_8x8_RGBA , astc , 8, 8, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_10x5_RGBA , astc ,10, 5, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_10x6_RGBA , astc ,10, 6, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_10x8_RGBA , astc ,10, 8, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_10x10_RGBA , astc ,10,10, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_12x10_RGBA , astc ,12,10, x128, , , , xyzw, rgb
> +MESA_FORMAT_ASTC_12x12_RGBA , astc ,12,12, x128, , , , xyzw, rgb
> +
> +MESA_FORMAT_ASTC_4x4_SRGB8_ALPHA8 , astc , 4, 4, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_5x4_SRGB8_ALPHA8 , astc , 5, 4, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_5x5_SRGB8_ALPHA8 , astc , 5, 5, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_6x5_SRGB8_ALPHA8 , astc , 6, 5, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_6x6_SRGB8_ALPHA8 , astc , 6, 6, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_8x5_SRGB8_ALPHA8 , astc , 8, 5, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_8x6_SRGB8_ALPHA8 , astc , 8, 6, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_8x8_SRGB8_ALPHA8 , astc , 8, 8, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_10x5_SRGB8_ALPHA8 , astc ,10, 5, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_10x6_SRGB8_ALPHA8 , astc ,10, 6, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_10x8_SRGB8_ALPHA8 , astc ,10, 8, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_10x10_SRGB8_ALPHA8 , astc ,10,10, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_12x10_SRGB8_ALPHA8 , astc ,12,10, x128, , , , xyzw, srgb
> +MESA_FORMAT_ASTC_12x12_SRGB8_ALPHA8 , astc ,12,12, x128, , , , xyzw, srgb
> diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h
> index 7e451ca..ff95fe6 100644
> --- a/src/mesa/main/formats.h
> +++ b/src/mesa/main/formats.h
> @@ -575,6 +575,36 @@ typedef enum
> MESA_FORMAT_BPTC_RGB_SIGNED_FLOAT,
> MESA_FORMAT_BPTC_RGB_UNSIGNED_FLOAT,
>
> + /* ASTC compressed formats */
> + MESA_FORMAT_ASTC_4x4_RGBA,
> + MESA_FORMAT_ASTC_5x4_RGBA,
> + MESA_FORMAT_ASTC_5x5_RGBA,
> + MESA_FORMAT_ASTC_6x5_RGBA,
> + MESA_FORMAT_ASTC_6x6_RGBA,
> + MESA_FORMAT_ASTC_8x5_RGBA,
> + MESA_FORMAT_ASTC_8x6_RGBA,
> + MESA_FORMAT_ASTC_8x8_RGBA,
> + MESA_FORMAT_ASTC_10x5_RGBA,
> + MESA_FORMAT_ASTC_10x6_RGBA,
> + MESA_FORMAT_ASTC_10x8_RGBA,
> + MESA_FORMAT_ASTC_10x10_RGBA,
> + MESA_FORMAT_ASTC_12x10_RGBA,
> + MESA_FORMAT_ASTC_12x12_RGBA,
> +
> + MESA_FORMAT_ASTC_4x4_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_5x4_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_5x5_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_6x5_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_6x6_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_8x5_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_8x6_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_8x8_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_10x5_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_10x6_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_10x8_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_10x10_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_12x10_SRGB8_ALPHA8,
> + MESA_FORMAT_ASTC_12x12_SRGB8_ALPHA8,
> MESA_FORMAT_COUNT
> } mesa_format;
>
> diff --git a/src/mesa/swrast/s_texfetch.c b/src/mesa/swrast/s_texfetch.c
> index 1fe21c0..14e5293 100644
> --- a/src/mesa/swrast/s_texfetch.c
> +++ b/src/mesa/swrast/s_texfetch.c
> @@ -551,7 +551,37 @@ texfetch_funcs[] =
> fetch_compressed,
> fetch_compressed,
> fetch_compressed
> - }
> + },
> +
> + /* ASTC compressed formats */
> + FETCH_NULL(ASTC_4x4_RGBA),
> + FETCH_NULL(ASTC_5x4_RGBA),
> + FETCH_NULL(ASTC_5x5_RGBA),
> + FETCH_NULL(ASTC_6x5_RGBA),
> + FETCH_NULL(ASTC_6x6_RGBA),
> + FETCH_NULL(ASTC_8x5_RGBA),
> + FETCH_NULL(ASTC_8x6_RGBA),
> + FETCH_NULL(ASTC_8x8_RGBA),
> + FETCH_NULL(ASTC_10x5_RGBA),
> + FETCH_NULL(ASTC_10x6_RGBA),
> + FETCH_NULL(ASTC_10x8_RGBA),
> + FETCH_NULL(ASTC_10x10_RGBA),
> + FETCH_NULL(ASTC_12x10_RGBA),
> + FETCH_NULL(ASTC_12x12_RGBA),
> + FETCH_NULL(ASTC_4x4_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_5x4_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_5x5_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_6x5_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_6x6_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_8x5_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_8x6_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_8x8_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_10x5_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_10x6_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_10x8_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_10x10_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_12x10_SRGB8_ALPHA8),
> + FETCH_NULL(ASTC_12x12_SRGB8_ALPHA8)
> };
>
>
> --
> 2.4.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
More information about the mesa-dev
mailing list