From 7a41291c3aa13fc71cc87966b414551f5c7c0e6a Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 26 Sep 2011 21:14:10 +0100 Subject: [PATCH] mesa/formats: add rest of integer formats. This is taken from reading EXT_texture_integer + EXT_texture_rg in combination, Comments on necessity of each format, naming of formats and bugs in the formats tables please. Is there any formats I've missed? Eric looked over this to make sure its consistent at least. As I've changed the ordering of things in the format table, the follow patches are required to avoid regression. Signed-off-by: Dave Airlie --- src/mesa/main/formats.c | 518 +++++++++++++++++++++++++++++++++++++++- src/mesa/main/formats.h | 46 ++++ 2 files changed, 562 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c index 11d670689bf..02b20284bb7 100644 --- a/src/mesa/main/formats.c +++ b/src/mesa/main/formats.c @@ -756,6 +756,251 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = }, /* unnormalized signed int formats */ + /* unnormalized unsigned int formats */ + { + MESA_FORMAT_ALPHA_UINT8, + "MESA_FORMAT_ALPHA_UINT8", + GL_ALPHA, + GL_UNSIGNED_INT, + 0, 0, 0, 8, + 0, 0, 0, 0, 0, + 1, 1, 1 + }, + { + MESA_FORMAT_ALPHA_UINT16, + "MESA_FORMAT_ALPHA_UINT16", + GL_ALPHA, + GL_UNSIGNED_INT, + 0, 0, 0, 16, + 0, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_ALPHA_UINT32, + "MESA_FORMAT_ALPHA_UINT32", + GL_ALPHA, + GL_UNSIGNED_INT, + 0, 0, 0, 32, + 0, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_ALPHA_INT8, + "MESA_FORMAT_ALPHA_INT8", + GL_ALPHA, + GL_INT, + 0, 0, 0, 8, + 0, 0, 0, 0, 0, + 1, 1, 1 + }, + { + MESA_FORMAT_ALPHA_INT16, + "MESA_FORMAT_ALPHA_INT16", + GL_ALPHA, + GL_INT, + 0, 0, 0, 16, + 0, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_ALPHA_INT32, + "MESA_FORMAT_ALPHA_INT32", + GL_ALPHA, + GL_INT, + 0, 0, 0, 32, + 0, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_INTENSITY_UINT8, + "MESA_FORMAT_INTENSITY_UINT8", + GL_INTENSITY, + GL_UNSIGNED_INT, + 0, 0, 0, 0, + 0, 8, 0, 0, 0, + 1, 1, 1 + }, + { + MESA_FORMAT_INTENSITY_UINT16, + "MESA_FORMAT_INTENSITY_UINT16", + GL_INTENSITY, + GL_UNSIGNED_INT, + 0, 0, 0, 0, + 0, 16, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_INTENSITY_UINT32, + "MESA_FORMAT_INTENSITY_UINT32", + GL_INTENSITY, + GL_UNSIGNED_INT, + 0, 0, 0, 0, + 0, 32, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_INTENSITY_INT8, + "MESA_FORMAT_INTENSITY_INT8", + GL_INTENSITY, + GL_INT, + 0, 0, 0, 0, + 0, 8, 0, 0, 0, + 1, 1, 1 + }, + { + MESA_FORMAT_INTENSITY_INT16, + "MESA_FORMAT_INTENSITY_INT16", + GL_INTENSITY, + GL_INT, + 0, 0, 0, 0, + 0, 16, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_INTENSITY_INT32, + "MESA_FORMAT_INTENSITY_INT32", + GL_INTENSITY, + GL_INT, + 0, 0, 0, 0, + 0, 32, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_LUMINANCE_UINT8, + "MESA_FORMAT_LUMINANCE_UINT8", + GL_LUMINANCE, + GL_UNSIGNED_INT, + 0, 0, 0, 0, + 8, 0, 0, 0, 0, + 1, 1, 1 + }, + { + MESA_FORMAT_LUMINANCE_UINT16, + "MESA_FORMAT_LUMINANCE_UINT16", + GL_LUMINANCE, + GL_UNSIGNED_INT, + 0, 0, 0, 0, + 16, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_LUMINANCE_UINT32, + "MESA_FORMAT_LUMINANCE_UINT32", + GL_LUMINANCE, + GL_UNSIGNED_INT, + 0, 0, 0, 0, + 32, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_LUMINANCE_INT8, + "MESA_FORMAT_LUMINANCE_INT8", + GL_LUMINANCE, + GL_INT, + 0, 0, 0, 0, + 8, 0, 0, 0, 0, + 1, 1, 1 + }, + { + MESA_FORMAT_LUMINANCE_INT16, + "MESA_FORMAT_LUMINANCE_INT16", + GL_LUMINANCE, + GL_INT, + 0, 0, 0, 0, + 16, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_LUMINANCE_INT32, + "MESA_FORMAT_LUMINANCE_INT32", + GL_LUMINANCE, + GL_INT, + 0, 0, 0, 0, + 32, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_LUMINANCE_ALPHA_UINT8, + "MESA_FORMAT_LUMINANCE_ALPHA_UINT8", + GL_LUMINANCE_ALPHA, + GL_UNSIGNED_INT, + 0, 0, 0, 8, + 8, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_LUMINANCE_ALPHA_UINT16, + "MESA_FORMAT_LUMINANCE_ALPHA_UINT16", + GL_LUMINANCE_ALPHA, + GL_UNSIGNED_INT, + 0, 0, 0, 16, + 16, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_LUMINANCE_ALPHA_UINT32, + "MESA_FORMAT_LUMINANCE_ALPHA_UINT32", + GL_LUMINANCE_ALPHA, + GL_UNSIGNED_INT, + 0, 0, 0, 32, + 32, 0, 0, 0, 0, + 1, 1, 8 + }, + { + MESA_FORMAT_LUMINANCE_ALPHA_INT8, + "MESA_FORMAT_LUMINANCE_ALPHA_INT8", + GL_LUMINANCE_ALPHA, + GL_INT, + 0, 0, 0, 8, + 8, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_LUMINANCE_ALPHA_INT16, + "MESA_FORMAT_LUMINANCE_ALPHA_INT16", + GL_LUMINANCE_ALPHA, + GL_INT, + 0, 0, 0, 16, + 16, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_LUMINANCE_ALPHA_INT32, + "MESA_FORMAT_LUMINANCE_ALPHA_INT32", + GL_LUMINANCE_ALPHA, + GL_INT, + 0, 0, 0, 32, + 32, 0, 0, 0, 0, + 1, 1, 8 + }, + + { + MESA_FORMAT_R_INT8, + "MESA_FORMAT_R_INT8", + GL_RED, + GL_INT, + 8, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1 + }, + { + MESA_FORMAT_RG_INT8, + "MESA_FORMAT_RG_INT8", + GL_RG, + GL_INT, + 8, 8, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_RGB_INT8, + "MESA_FORMAT_RGB_INT8", + GL_RGB, + GL_INT, + 8, 8, 8, 0, + 0, 0, 0, 0, 0, + 1, 1, 3 + }, { MESA_FORMAT_RGBA_INT8, "MESA_FORMAT_RGBA_INT8", @@ -765,6 +1010,33 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 0, 0, 0, 0, 0, 1, 1, 4 }, + { + MESA_FORMAT_R_INT16, + "MESA_FORMAT_R_INT16", + GL_RED, + GL_INT, + 16, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_RG_INT16, + "MESA_FORMAT_RG_INT16", + GL_RG, + GL_INT, + 16, 16, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_RGB_INT16, + "MESA_FORMAT_RGB_INT16", + GL_RGB, + GL_INT, + 16, 16, 16, 0, + 0, 0, 0, 0, 0, + 1, 1, 6 + }, { MESA_FORMAT_RGBA_INT16, "MESA_FORMAT_RGBA_INT16", @@ -774,6 +1046,33 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 0, 0, 0, 0, 0, 1, 1, 8 }, + { + MESA_FORMAT_R_INT32, + "MESA_FORMAT_R_INT32", + GL_RED, + GL_INT, + 32, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_RG_INT32, + "MESA_FORMAT_RG_INT32", + GL_RG, + GL_INT, + 32, 32, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 8 + }, + { + MESA_FORMAT_RGB_INT32, + "MESA_FORMAT_RGB_INT32", + GL_RGB, + GL_INT, + 32, 32, 32, 0, + 0, 0, 0, 0, 0, + 1, 1, 12 + }, { MESA_FORMAT_RGBA_INT32, "MESA_FORMAT_RGBA_INT32", @@ -783,8 +1082,33 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 0, 0, 0, 0, 0, 1, 1, 16 }, - - /* unnormalized unsigned int formats */ + { + MESA_FORMAT_R_UINT8, + "MESA_FORMAT_R_UINT8", + GL_RED, + GL_UNSIGNED_INT, + 8, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 1 + }, + { + MESA_FORMAT_RG_UINT8, + "MESA_FORMAT_RG_UINT8", + GL_RG, + GL_UNSIGNED_INT, + 8, 8, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_RGB_UINT8, + "MESA_FORMAT_RGB_UINT8", + GL_RGB, + GL_UNSIGNED_INT, + 8, 8, 8, 0, + 0, 0, 0, 0, 0, + 1, 1, 3 + }, { MESA_FORMAT_RGBA_UINT8, "MESA_FORMAT_RGBA_UINT8", @@ -794,6 +1118,33 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 0, 0, 0, 0, 0, 1, 1, 4 }, + { + MESA_FORMAT_R_UINT16, + "MESA_FORMAT_R_UINT16", + GL_RED, + GL_UNSIGNED_INT, + 16, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 2 + }, + { + MESA_FORMAT_RG_UINT16, + "MESA_FORMAT_RG_UINT16", + GL_RG, + GL_UNSIGNED_INT, + 16, 16, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_RGB_UINT16, + "MESA_FORMAT_RGB_UINT16", + GL_RGB, + GL_UNSIGNED_INT, + 16, 16, 16, 0, + 0, 0, 0, 0, 0, + 1, 1, 6 + }, { MESA_FORMAT_RGBA_UINT16, "MESA_FORMAT_RGBA_UINT16", @@ -803,6 +1154,33 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] = 0, 0, 0, 0, 0, 1, 1, 8 }, + { + MESA_FORMAT_R_UINT32, + "MESA_FORMAT_R_UINT32", + GL_RED, + GL_UNSIGNED_INT, + 32, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 4 + }, + { + MESA_FORMAT_RG_UINT32, + "MESA_FORMAT_RG_UINT32", + GL_RG, + GL_UNSIGNED_INT, + 32, 32, 0, 0, + 0, 0, 0, 0, 0, + 1, 1, 8 + }, + { + MESA_FORMAT_RGB_UINT32, + "MESA_FORMAT_RGB_UINT32", + GL_RGB, + GL_UNSIGNED_INT, + 32, 32, 32, 0, + 0, 0, 0, 0, 0, + 1, 1, 12 + }, { MESA_FORMAT_RGBA_UINT32, "MESA_FORMAT_RGBA_UINT32", @@ -1876,14 +2254,114 @@ _mesa_format_to_type_and_comps(gl_format format, *comps = 1; return; + case MESA_FORMAT_ALPHA_UINT8: + case MESA_FORMAT_LUMINANCE_UINT8: + case MESA_FORMAT_INTENSITY_UINT8: + *datatype = GL_UNSIGNED_BYTE; + *comps = 1; + return; + case MESA_FORMAT_LUMINANCE_ALPHA_UINT8: + *datatype = GL_UNSIGNED_BYTE; + *comps = 2; + return; + + case MESA_FORMAT_ALPHA_UINT16: + case MESA_FORMAT_LUMINANCE_UINT16: + case MESA_FORMAT_INTENSITY_UINT16: + *datatype = GL_UNSIGNED_SHORT; + *comps = 1; + return; + case MESA_FORMAT_LUMINANCE_ALPHA_UINT16: + *datatype = GL_UNSIGNED_SHORT; + *comps = 2; + return; + case MESA_FORMAT_ALPHA_UINT32: + case MESA_FORMAT_LUMINANCE_UINT32: + case MESA_FORMAT_INTENSITY_UINT32: + *datatype = GL_UNSIGNED_INT; + *comps = 1; + return; + case MESA_FORMAT_LUMINANCE_ALPHA_UINT32: + *datatype = GL_UNSIGNED_INT; + *comps = 2; + return; + case MESA_FORMAT_ALPHA_INT8: + case MESA_FORMAT_LUMINANCE_INT8: + case MESA_FORMAT_INTENSITY_INT8: + *datatype = GL_BYTE; + *comps = 1; + return; + case MESA_FORMAT_LUMINANCE_ALPHA_INT8: + *datatype = GL_BYTE; + *comps = 2; + return; + + case MESA_FORMAT_ALPHA_INT16: + case MESA_FORMAT_LUMINANCE_INT16: + case MESA_FORMAT_INTENSITY_INT16: + *datatype = GL_SHORT; + *comps = 1; + return; + case MESA_FORMAT_LUMINANCE_ALPHA_INT16: + *datatype = GL_SHORT; + *comps = 2; + return; + + case MESA_FORMAT_ALPHA_INT32: + case MESA_FORMAT_LUMINANCE_INT32: + case MESA_FORMAT_INTENSITY_INT32: + *datatype = GL_INT; + *comps = 1; + return; + case MESA_FORMAT_LUMINANCE_ALPHA_INT32: + *datatype = GL_INT; + *comps = 2; + return; + + case MESA_FORMAT_R_INT8: + *datatype = GL_BYTE; + *comps = 1; + return; + case MESA_FORMAT_RG_INT8: + *datatype = GL_BYTE; + *comps = 2; + return; + case MESA_FORMAT_RGB_INT8: + *datatype = GL_BYTE; + *comps = 3; + return; case MESA_FORMAT_RGBA_INT8: *datatype = GL_BYTE; *comps = 4; return; + case MESA_FORMAT_R_INT16: + *datatype = GL_SHORT; + *comps = 1; + return; + case MESA_FORMAT_RG_INT16: + *datatype = GL_SHORT; + *comps = 2; + return; + case MESA_FORMAT_RGB_INT16: + *datatype = GL_SHORT; + *comps = 3; + return; case MESA_FORMAT_RGBA_INT16: *datatype = GL_SHORT; *comps = 4; return; + case MESA_FORMAT_R_INT32: + *datatype = GL_INT; + *comps = 1; + return; + case MESA_FORMAT_RG_INT32: + *datatype = GL_INT; + *comps = 2; + return; + case MESA_FORMAT_RGB_INT32: + *datatype = GL_INT; + *comps = 3; + return; case MESA_FORMAT_RGBA_INT32: *datatype = GL_INT; *comps = 4; @@ -1892,14 +2370,50 @@ _mesa_format_to_type_and_comps(gl_format format, /** * \name Non-normalized unsigned integer formats. */ + case MESA_FORMAT_R_UINT8: + *datatype = GL_UNSIGNED_BYTE; + *comps = 1; + return; + case MESA_FORMAT_RG_UINT8: + *datatype = GL_UNSIGNED_BYTE; + *comps = 2; + return; + case MESA_FORMAT_RGB_UINT8: + *datatype = GL_UNSIGNED_BYTE; + *comps = 3; + return; case MESA_FORMAT_RGBA_UINT8: *datatype = GL_UNSIGNED_BYTE; *comps = 4; return; + case MESA_FORMAT_R_UINT16: + *datatype = GL_UNSIGNED_SHORT; + *comps = 1; + return; + case MESA_FORMAT_RG_UINT16: + *datatype = GL_UNSIGNED_SHORT; + *comps = 2; + return; + case MESA_FORMAT_RGB_UINT16: + *datatype = GL_UNSIGNED_SHORT; + *comps = 3; + return; case MESA_FORMAT_RGBA_UINT16: *datatype = GL_UNSIGNED_SHORT; *comps = 4; return; + case MESA_FORMAT_R_UINT32: + *datatype = GL_UNSIGNED_INT; + *comps = 1; + return; + case MESA_FORMAT_RG_UINT32: + *datatype = GL_UNSIGNED_INT; + *comps = 2; + return; + case MESA_FORMAT_RGB_UINT32: + *datatype = GL_UNSIGNED_INT; + *comps = 3; + return; case MESA_FORMAT_RGBA_UINT32: *datatype = GL_UNSIGNED_INT; *comps = 4; diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h index 610204cb37c..12758f03e1a 100644 --- a/src/mesa/main/formats.h +++ b/src/mesa/main/formats.h @@ -152,15 +152,61 @@ typedef enum * XXX Note: these are just stand-ins for some better hardware * formats TBD such as BGRA or ARGB. */ + MESA_FORMAT_ALPHA_UINT8, + MESA_FORMAT_ALPHA_UINT16, + MESA_FORMAT_ALPHA_UINT32, + MESA_FORMAT_ALPHA_INT8, + MESA_FORMAT_ALPHA_INT16, + MESA_FORMAT_ALPHA_INT32, + + MESA_FORMAT_INTENSITY_UINT8, + MESA_FORMAT_INTENSITY_UINT16, + MESA_FORMAT_INTENSITY_UINT32, + MESA_FORMAT_INTENSITY_INT8, + MESA_FORMAT_INTENSITY_INT16, + MESA_FORMAT_INTENSITY_INT32, + + MESA_FORMAT_LUMINANCE_UINT8, + MESA_FORMAT_LUMINANCE_UINT16, + MESA_FORMAT_LUMINANCE_UINT32, + MESA_FORMAT_LUMINANCE_INT8, + MESA_FORMAT_LUMINANCE_INT16, + MESA_FORMAT_LUMINANCE_INT32, + + MESA_FORMAT_LUMINANCE_ALPHA_UINT8, + MESA_FORMAT_LUMINANCE_ALPHA_UINT16, + MESA_FORMAT_LUMINANCE_ALPHA_UINT32, + MESA_FORMAT_LUMINANCE_ALPHA_INT8, + MESA_FORMAT_LUMINANCE_ALPHA_INT16, + MESA_FORMAT_LUMINANCE_ALPHA_INT32, + + MESA_FORMAT_R_INT8, + MESA_FORMAT_RG_INT8, + MESA_FORMAT_RGB_INT8, MESA_FORMAT_RGBA_INT8, + MESA_FORMAT_R_INT16, + MESA_FORMAT_RG_INT16, + MESA_FORMAT_RGB_INT16, MESA_FORMAT_RGBA_INT16, + MESA_FORMAT_R_INT32, + MESA_FORMAT_RG_INT32, + MESA_FORMAT_RGB_INT32, MESA_FORMAT_RGBA_INT32, /** * \name Non-normalized unsigned integer formats. */ + MESA_FORMAT_R_UINT8, + MESA_FORMAT_RG_UINT8, + MESA_FORMAT_RGB_UINT8, MESA_FORMAT_RGBA_UINT8, + MESA_FORMAT_R_UINT16, + MESA_FORMAT_RG_UINT16, + MESA_FORMAT_RGB_UINT16, MESA_FORMAT_RGBA_UINT16, + MESA_FORMAT_R_UINT32, + MESA_FORMAT_RG_UINT32, + MESA_FORMAT_RGB_UINT32, MESA_FORMAT_RGBA_UINT32, /* msb <------ TEXEL BITS -----------> lsb */ -- 2.30.2