summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mueller <MarkKMueller@gmail.com>2013-11-12 18:58:45 -0800
committerMark Mueller <MarkKMueller@gmail.com>2014-01-13 09:08:51 -0800
commit7902d5f85ea6f77d9cd3c0bee4c339ab71e5a435 (patch)
tree8eb00f0066e00bf52bbc704fa22c0a32f6d58df0
parentdf918b5b90c0c1fc564adc026c9da1b8e7003807 (diff)
Add gl_formats to cover all GLUser provided format/type combinations
-rw-r--r--src/mesa/main/formats.c441
-rw-r--r--src/mesa/main/formats.h70
-rw-r--r--src/mesa/main/texformat.c271
-rw-r--r--src/mesa/main/texformat.h11
4 files changed, 789 insertions, 4 deletions
diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c
index 7e0ec23198..caf3f38fba 100644
--- a/src/mesa/main/formats.c
+++ b/src/mesa/main/formats.c
@@ -76,7 +76,7 @@ struct gl_format_info
* These must be in the same order as the MESA_FORMAT_* enums so that
* we can do lookups without searching.
*/
-static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
+static struct gl_format_info format_info[MESA_PRIVATE_FORMAT_COUNT] =
{
{
MESA_FORMAT_NONE, /* Name */
@@ -1572,7 +1572,7 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
},
{
MESA_FORMAT_RGB9_E5_FLOAT,
- "MESA_FORMAT_RGB9_E5",
+ "MESA_FORMAT_RGB9_E5_FLOAT",
GL_RGB,
GL_FLOAT,
9, 9, 9, 0,
@@ -1763,6 +1763,440 @@ static struct gl_format_info format_info[MESA_FORMAT_COUNT] =
0, 0, 0, 0, 0,
1, 1, 16
},
+
+ /*
+ * Formats to exactly represent format/type combinations for OGLUser provided
+ * textures. These formats are required only for caching of an unaltered copy of
+ * the application texture prior to passing them to the GPU, where they are
+ * processed to the final internalFormat and miptree location. Texstore functions
+ * do not apply and these are not intended to be used as render targets.
+ * Listing is based on the order presented in the glTexImage2D spec.
+ */
+ /* Red Solo - !cup */
+ {
+ MESA_FORMAT_R32,
+ "MESA_FORMAT_R32",
+ GL_RED,
+ GL_UNSIGNED_NORMALIZED,
+ 16, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 2
+ },
+ {
+ MESA_FORMAT_SIGNED_R32,
+ "MESA_FORMAT_SIGNED_R32",
+ GL_RED,
+ GL_SIGNED_NORMALIZED,
+ 32, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+
+ /* Red Green - !show */
+ {
+ MESA_FORMAT_SIGNED_RG88,
+ "MESA_FORMAT_SIGNED_RG88",
+ GL_RG,
+ GL_SIGNED_NORMALIZED,
+ 8, 8, 0, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 2
+ },
+ {
+ MESA_FORMAT_SIGNED_RG1616,
+ "MESA_FORMAT_SIGNED_RG1616",
+ GL_RG,
+ GL_SIGNED_NORMALIZED,
+ 16, 16, 0, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+ {
+ MESA_FORMAT_RG3232,
+ "MESA_FORMAT_RG3232",
+ GL_RG,
+ GL_UNSIGNED_NORMALIZED,
+ 32, 32, 0, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 8
+ },
+ {
+ MESA_FORMAT_SIGNED_RG3232,
+ "MESA_FORMAT_SIGNED_RG3232",
+ GL_RG,
+ GL_SIGNED_NORMALIZED,
+ 32, 32, 0, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 8
+ },
+
+ /* Red Green Blue */
+ {
+ MESA_FORMAT_SIGNED_RGB888,
+ "MESA_FORMAT_SIGNED_RGB888",
+ GL_RGB,
+ GL_SIGNED_NORMALIZED,
+ 8, 8, 8, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 3
+ },
+ {
+ MESA_FORMAT_RGB161616,
+ "MESA_FORMAT_RG161616",
+ GL_RGB,
+ GL_UNSIGNED_NORMALIZED,
+ 16, 16, 16, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 6
+ },
+ {
+ MESA_FORMAT_SIGNED_RGB161616,
+ "MESA_FORMAT_SIGNED_RGB161616",
+ GL_RGB,
+ GL_SIGNED_NORMALIZED,
+ 16, 16, 16, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 6
+ },
+ {
+ MESA_FORMAT_RGB323232,
+ "MESA_FORMAT_RGB323232",
+ GL_RGB,
+ GL_UNSIGNED_NORMALIZED,
+ 32, 32, 32, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 12
+ },
+ {
+ MESA_FORMAT_SIGNED_RGB323232,
+ "MESA_FORMAT_SIGNED_RGB323232",
+ GL_RGB,
+ GL_SIGNED_NORMALIZED,
+ 32, 32, 32, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 12
+ },
+ {
+ MESA_FORMAT_RGB233_REV,
+ "MESA_FORMAT_RGB233_REV",
+ GL_RGB,
+ GL_UNSIGNED_NORMALIZED,
+ 3, 3, 2, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 1
+ },
+ {
+ MESA_FORMAT_RGB101111_REV,
+ "MESA_FORMAT_RGB101111_REV",
+ GL_RGB,
+ GL_UNSIGNED_NORMALIZED,
+ 11, 11, 10, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+
+ /* Blue Green Red */
+ {
+ MESA_FORMAT_SIGNED_BGR888,
+ "MESA_FORMAT_SIGNED_BGR888",
+ GL_RGB,
+ GL_SIGNED_NORMALIZED,
+ 8, 8, 8, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 3
+ },
+ {
+ MESA_FORMAT_BGR161616,
+ "MESA_FORMAT_BGR161616",
+ GL_RGB,
+ GL_UNSIGNED_NORMALIZED,
+ 16, 16, 16, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 6
+ },
+ {
+ MESA_FORMAT_SIGNED_BGR161616,
+ "MESA_FORMAT_SIGNED_BGR161616",
+ GL_RGB,
+ GL_SIGNED_NORMALIZED,
+ 16, 16, 16, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 6
+ },
+ {
+ MESA_FORMAT_BGR_FLOAT16,
+ "MESA_FORMAT_BGR_FLOAT16",
+ GL_RGB,
+ GL_FLOAT,
+ 16, 16, 16, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 6
+ },
+ {
+ MESA_FORMAT_BGR323232,
+ "MESA_FORMAT_BGR323232",
+ GL_RGB,
+ GL_UNSIGNED_NORMALIZED,
+ 32, 32, 32, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 12
+ },
+ {
+ MESA_FORMAT_SIGNED_BGR323232,
+ "MESA_FORMAT_SIGNED_BGR323232",
+ GL_RGB,
+ GL_SIGNED_NORMALIZED,
+ 32, 32, 32, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 12
+ },
+ {
+ MESA_FORMAT_BGR_FLOAT32,
+ "MESA_FORMAT_BGR_FLOAT32",
+ GL_RGB,
+ GL_FLOAT,
+ 32, 32, 32, 0,
+ 0, 0, 0, 0, 0,
+ 1, 1, 12
+ },
+
+ /* Red Green Blue Alpha */
+ {
+ MESA_FORMAT_RGBA16161616,
+ "MESA_FORMAT_RGBA161616",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 16, 16, 16, 16,
+ 0, 0, 0, 0, 0,
+ 1, 1, 8
+ },
+ {
+ MESA_FORMAT_SIGNED_RGBA16161616,
+ "MESA_FORMAT_SIGNED_RGBA161616",
+ GL_RGBA,
+ GL_SIGNED_NORMALIZED,
+ 16, 16, 16, 16,
+ 0, 0, 0, 0, 0,
+ 1, 1, 8
+ },
+ {
+ MESA_FORMAT_RGBA32323232,
+ "MESA_FORMAT_RGBA323232",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 32, 32, 32, 32,
+ 0, 0, 0, 0, 0,
+ 1, 1, 16
+ },
+ {
+ MESA_FORMAT_SIGNED_RGBA32323232,
+ "MESA_FORMAT_SIGNED_RGBA323232",
+ GL_RGBA,
+ GL_SIGNED_NORMALIZED,
+ 32, 32, 32, 32,
+ 0, 0, 0, 0, 0,
+ 1, 1, 16
+ },
+ {
+ MESA_FORMAT_RGBA1010102,
+ "MESA_FORMAT_RGBA1010102",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 10, 10, 10, 2,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+ {
+ MESA_FORMAT_RGBA2101010_REV,
+ "MESA_FORMAT_RGBA2101010_REV",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 10, 10, 10, 2,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+ {
+ MESA_FORMAT_RGBA5999_REV,
+ "MESA_FORMAT_RGBA5999_REV",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 9, 9, 9, 5,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+ {
+ MESA_FORMAT_RGBA4444, /* Name */
+ "MESA_FORMAT_RGBA4444", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 2 /* BlockWidth/Height,Bytes */
+ },
+ {
+ MESA_FORMAT_RGBA4444_REV, /* Name */
+ "MESA_FORMAT_RGBA4444_REV", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 2 /* BlockWidth/Height,Bytes */
+ },
+ {
+ MESA_FORMAT_RGBA1555_REV, /* Name */
+ "MESA_FORMAT_RGBA1555_REV", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 2 /* BlockWidth/Height,Bytes */
+ },
+
+ /* Blue Green Red Alpha */
+ {
+ MESA_FORMAT_BGRA8888, /* Name */
+ "MESA_FORMAT_BGRA8888", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 4 /* BlockWidth/Height,Bytes */
+ },
+ {
+ MESA_FORMAT_BGRA8888_REV, /* Name */
+ "MESA_FORMAT_BGRA8888", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 4 /* BlockWidth/Height,Bytes */
+ },
+ {
+ MESA_FORMAT_SIGNED_BGRA8888,
+ "MESA_FORMAT_SIGNED_BGRA8888",
+ GL_RGBA,
+ GL_SIGNED_NORMALIZED,
+ 8, 8, 8, 8,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+ {
+ MESA_FORMAT_BGRA16161616,
+ "MESA_FORMAT_BGRA16161616",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 16, 16, 16, 16,
+ 0, 0, 0, 0, 0,
+ 1, 1, 8
+ },
+ {
+ MESA_FORMAT_SIGNED_BGRA16161616,
+ "MESA_FORMAT_SIGNED_BGRA16161616",
+ GL_RGBA,
+ GL_SIGNED_NORMALIZED,
+ 16, 16, 16, 16,
+ 0, 0, 0, 0, 0,
+ 1, 1, 8
+ },
+ {
+ MESA_FORMAT_BGRA_FLOAT16,
+ "MESA_FORMAT_BGRA_FLOAT16",
+ GL_RGBA,
+ GL_FLOAT,
+ 16, 16, 16, 16,
+ 0, 0, 0, 0, 0,
+ 1, 1, 8
+ },
+ {
+ MESA_FORMAT_BGRA32323232,
+ "MESA_FORMAT_BGRA32323232",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 32, 32, 32, 32,
+ 0, 0, 0, 0, 0,
+ 1, 1, 16
+ },
+ {
+ MESA_FORMAT_SIGNED_BGRA32323232,
+ "MESA_FORMAT_SIGNED_BGRA32323232",
+ GL_RGBA,
+ GL_SIGNED_NORMALIZED,
+ 32, 32, 32, 32,
+ 0, 0, 0, 0, 0,
+ 1, 1, 16
+ },
+ {
+ MESA_FORMAT_BGRA_FLOAT32,
+ "MESA_FORMAT_BGRA_FLOAT32",
+ GL_RGBA,
+ GL_FLOAT,
+ 32, 32, 32, 32,
+ 0, 0, 0, 0, 0,
+ 1, 1, 16
+ },
+ {
+ MESA_FORMAT_BGRA4444, /* Name */
+ "MESA_FORMAT_BGRA4444", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 2 /* BlockWidth/Height,Bytes */
+ },
+ {
+ MESA_FORMAT_BGRA4444_REV, /* Name */
+ "MESA_FORMAT_BGRA4444_REV", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 2 /* BlockWidth/Height,Bytes */
+ },
+ {
+ MESA_FORMAT_BGRA5551, /* Name */
+ "MESA_FORMAT_BGRA5551", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 2 /* BlockWidth/Height,Bytes */
+ },
+ {
+ MESA_FORMAT_BGRA1555_REV, /* Name */
+ "MESA_FORMAT_BGRA1555_REV", /* StrName */
+ GL_RGBA, /* BaseFormat */
+ GL_UNSIGNED_NORMALIZED, /* DataType */
+ 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */
+ 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */
+ 1, 1, 2 /* BlockWidth/Height,Bytes */
+ },
+ {
+ MESA_FORMAT_BGRA1010102,
+ "MESA_FORMAT_BGRA1010102",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 10, 10, 10, 2,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+ {
+ MESA_FORMAT_BGRA2101010_REV,
+ "MESA_FORMAT_BGRA2101010_REV",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 10, 10, 10, 2,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+ {
+ MESA_FORMAT_BGRA5999_REV,
+ "MESA_FORMAT_BGRA5999_REV",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 9, 9, 9, 5,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
};
@@ -2241,7 +2675,7 @@ _mesa_test_formats(void)
{
GLuint i;
- STATIC_ASSERT(Elements(format_info) == MESA_FORMAT_COUNT);
+ STATIC_ASSERT(Elements(format_info) == MESA_PRIVATE_FORMAT_COUNT);
for (i = 0; i < MESA_FORMAT_COUNT; i++) {
const struct gl_format_info *info = _mesa_get_format_info(i);
@@ -3381,6 +3815,7 @@ _mesa_format_matches_format_and_type(gl_format gl_format,
case MESA_FORMAT_XBGR32323232_FLOAT:
case MESA_FORMAT_XBGR32323232_UINT:
case MESA_FORMAT_XBGR32323232_SINT:
+ default:
return GL_FALSE;
}
diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h
index 0c91aeaac8..5b89e822b4 100644
--- a/src/mesa/main/formats.h
+++ b/src/mesa/main/formats.h
@@ -304,7 +304,75 @@ typedef enum
MESA_FORMAT_XBGR32323232_UINT, /* ... */
MESA_FORMAT_XBGR32323232_SINT, /* ... */
- MESA_FORMAT_COUNT
+ MESA_FORMAT_COUNT,
+
+ /*
+ * Formats to exactly represent format/type combinations for OGLUser provided
+ * textures. These formats are required only for caching of an unaltered copy of
+ * the application texture prior to passing them to the GPU, where they are
+ * processed to the final internalFormat and miptree location. Texstore functions
+ * do not apply and these are not intended to be used as render targets.
+ * Listing is based on the order presented in the glTexImage2D spec.
+ */
+ /* Red Solo - !cup */
+ MESA_FORMAT_R32 = MESA_FORMAT_COUNT,
+ MESA_FORMAT_SIGNED_R32,
+
+ /* Red Green - !show */
+ MESA_FORMAT_SIGNED_RG88,
+ MESA_FORMAT_SIGNED_RG1616,
+ MESA_FORMAT_RG3232,
+ MESA_FORMAT_SIGNED_RG3232,
+
+ /* Red Green Blue */
+ MESA_FORMAT_SIGNED_RGB888,
+ MESA_FORMAT_RGB161616,
+ MESA_FORMAT_SIGNED_RGB161616,
+ MESA_FORMAT_RGB323232,
+ MESA_FORMAT_SIGNED_RGB323232,
+ MESA_FORMAT_RGB233_REV,
+ MESA_FORMAT_RGB101111_REV,
+
+ /* Blue Green Red */
+ MESA_FORMAT_SIGNED_BGR888,
+ MESA_FORMAT_BGR161616,
+ MESA_FORMAT_SIGNED_BGR161616,
+ MESA_FORMAT_BGR_FLOAT16,
+ MESA_FORMAT_BGR323232,
+ MESA_FORMAT_SIGNED_BGR323232,
+ MESA_FORMAT_BGR_FLOAT32,
+
+ /* Red Green Blue Alpha */
+ MESA_FORMAT_RGBA16161616,
+ MESA_FORMAT_SIGNED_RGBA16161616,
+ MESA_FORMAT_RGBA32323232,
+ MESA_FORMAT_SIGNED_RGBA32323232,
+ MESA_FORMAT_RGBA1010102,
+ MESA_FORMAT_RGBA2101010_REV,
+ MESA_FORMAT_RGBA5999_REV,
+ MESA_FORMAT_RGBA4444,
+ MESA_FORMAT_RGBA4444_REV,
+ MESA_FORMAT_RGBA1555_REV,
+
+ /* Blue Green Red Alpha */
+ MESA_FORMAT_BGRA8888,
+ MESA_FORMAT_BGRA8888_REV,
+ MESA_FORMAT_SIGNED_BGRA8888,
+ MESA_FORMAT_BGRA16161616,
+ MESA_FORMAT_SIGNED_BGRA16161616,
+ MESA_FORMAT_BGRA_FLOAT16,
+ MESA_FORMAT_BGRA32323232,
+ MESA_FORMAT_SIGNED_BGRA32323232,
+ MESA_FORMAT_BGRA_FLOAT32,
+ MESA_FORMAT_BGRA4444,
+ MESA_FORMAT_BGRA4444_REV,
+ MESA_FORMAT_BGRA5551,
+ MESA_FORMAT_BGRA1555_REV,
+ MESA_FORMAT_BGRA1010102,
+ MESA_FORMAT_BGRA2101010_REV,
+ MESA_FORMAT_BGRA5999_REV,
+
+ MESA_PRIVATE_FORMAT_COUNT
} gl_format;
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index d3aa477361..713fdf2245 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -831,3 +831,274 @@ _mesa_tex_target_is_array(GLenum target)
return GL_FALSE;
}
}
+
+/**
+ * Choose a texture format that exaclty matches the application texture
+ * given the format, and type Format parameters passed to glTexImage().
+ *
+ * \param ctx the GL context.
+ * \param format incoming image pixel format.
+ * \param type incoming image data type.
+ *
+ * \return a matching gl_format for the given format/type arguments
+ *
+ */
+gl_format
+_mesa_choose_cached_tex_format(struct gl_context *ctx, GLenum format, GLenum type)
+{
+ switch (format) {
+ case GL_RED:
+ switch (type) {
+ case GL_BYTE:
+ return MESA_FORMAT_SIGNED_R8;
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_R8;
+ case GL_SHORT:
+ return MESA_FORMAT_SIGNED_R16;
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_R16;
+ case GL_INT:
+ return MESA_FORMAT_SIGNED_R32;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_R32;
+ case GL_FLOAT:
+ return MESA_FORMAT_R_FLOAT32;
+ case GL_HALF_FLOAT:
+ return MESA_FORMAT_R_FLOAT16;
+ }
+ break;
+
+ case GL_RG:
+ switch (type) {
+ case GL_BYTE:
+ return MESA_FORMAT_SIGNED_RG88;
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_RG88;
+ case GL_SHORT:
+ return MESA_FORMAT_SIGNED_RG1616;
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_RG1616;
+ case GL_INT:
+ return MESA_FORMAT_SIGNED_RG3232;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_RG3232;
+ case GL_FLOAT:
+ return MESA_FORMAT_RG_FLOAT32;
+ case GL_HALF_FLOAT:
+ return MESA_FORMAT_RG_FLOAT16;
+ }
+ break;
+
+ case GL_RGB:
+ switch (type) {
+ case GL_BYTE:
+ return MESA_FORMAT_SIGNED_RGB888;
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_RGB888;
+ case GL_SHORT:
+ return MESA_FORMAT_SIGNED_RGB161616;
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_RGB161616;
+ case GL_INT:
+ return MESA_FORMAT_SIGNED_RGB323232;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_RGB323232;
+ case GL_FLOAT:
+ return MESA_FORMAT_RGB_FLOAT32;
+ case GL_HALF_FLOAT:
+ return MESA_FORMAT_RGB_FLOAT16;
+ case GL_UNSIGNED_BYTE_3_3_2:
+ return MESA_FORMAT_RGB332;
+ case GL_UNSIGNED_BYTE_2_3_3_REV:
+ return MESA_FORMAT_RGB233_REV;
+ case GL_UNSIGNED_SHORT_5_6_5:
+ return MESA_FORMAT_RGB565;
+ case GL_UNSIGNED_SHORT_5_6_5_REV:
+ return MESA_FORMAT_RGB565_REV;
+ case GL_UNSIGNED_INT_10F_11F_11F_REV:
+ return MESA_FORMAT_RGB101111_REV;
+ }
+ break;
+
+ case GL_BGR:
+ switch (type) {
+ case GL_BYTE:
+ return MESA_FORMAT_SIGNED_BGR888;
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_BGR888;
+ case GL_SHORT:
+ return MESA_FORMAT_SIGNED_BGR161616;
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_BGR161616;
+ case GL_INT:
+ return MESA_FORMAT_SIGNED_BGR323232;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_BGR323232;
+ case GL_FLOAT:
+ return MESA_FORMAT_BGR_FLOAT32;
+ case GL_HALF_FLOAT:
+ return MESA_FORMAT_BGR_FLOAT16;
+ }
+ break;
+
+ case GL_RGBA:
+ switch (type) {
+ case GL_BYTE:
+ return MESA_FORMAT_SIGNED_RGBA8888;
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_RGBA8888;
+ case GL_SHORT:
+ return MESA_FORMAT_SIGNED_RGBA16161616;
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_RGBA16161616;
+ case GL_INT:
+ return MESA_FORMAT_SIGNED_RGBA32323232;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_RGBA32323232;
+ case GL_FLOAT:
+ return MESA_FORMAT_RGBA_FLOAT32;
+ case GL_HALF_FLOAT:
+ return MESA_FORMAT_RGBA_FLOAT16;
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ return MESA_FORMAT_RGBA4444;
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+ return MESA_FORMAT_RGBA4444_REV;
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ return MESA_FORMAT_RGBA5551;
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+ return MESA_FORMAT_RGBA1555_REV;
+ case GL_UNSIGNED_INT_8_8_8_8:
+ return MESA_FORMAT_RGBA32323232;
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ return MESA_FORMAT_RGBA8888_REV;
+ case GL_UNSIGNED_INT_10_10_10_2:
+ return MESA_FORMAT_RGBA1010102;
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ return MESA_FORMAT_RGBA2101010_REV;
+ case GL_UNSIGNED_INT_5_9_9_9_REV:
+ return MESA_FORMAT_RGBA5999_REV;
+ }
+ break;
+
+ case GL_BGRA:
+ switch (type) {
+ case GL_BYTE:
+ return MESA_FORMAT_SIGNED_BGRA8888;
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_BGRA8888;
+ case GL_SHORT:
+ return MESA_FORMAT_SIGNED_BGRA16161616;
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_BGRA16161616;
+ case GL_INT:
+ return MESA_FORMAT_BGRA32323232;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_SIGNED_BGRA32323232;
+ case GL_FLOAT:
+ return MESA_FORMAT_BGRA_FLOAT32;
+ case GL_HALF_FLOAT:
+ return MESA_FORMAT_BGRA_FLOAT16;
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ return MESA_FORMAT_BGRA4444;
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+ return MESA_FORMAT_BGRA4444_REV;
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ return MESA_FORMAT_BGRA5551;
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+ return MESA_FORMAT_BGRA1555_REV;
+ case GL_UNSIGNED_INT_8_8_8_8:
+ return MESA_FORMAT_BGRA8888;
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ return MESA_FORMAT_BGRA8888_REV;
+ case GL_UNSIGNED_INT_10_10_10_2:
+ return MESA_FORMAT_BGRA1010102;
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ return MESA_FORMAT_BGRA2101010_REV;
+ case GL_UNSIGNED_INT_5_9_9_9_REV:
+ return MESA_FORMAT_BGRA5999_REV;
+ }
+ break;
+
+ case GL_LUMINANCE:
+ switch (type) {
+ case GL_BYTE:
+ return MESA_FORMAT_LUMINANCE_INT8;
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_LUMINANCE_UINT8;
+ case GL_SHORT:
+ return MESA_FORMAT_LUMINANCE_INT16;
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_LUMINANCE_UINT16;
+ case GL_INT:
+ return MESA_FORMAT_LUMINANCE_INT32;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_LUMINANCE_UINT32;
+ case GL_FLOAT:
+ return MESA_FORMAT_LUMINANCE_FLOAT32;
+ case GL_HALF_FLOAT:
+ return MESA_FORMAT_LUMINANCE_FLOAT16;
+ }
+ break;
+
+ case GL_LUMINANCE_ALPHA:
+ switch (type) {
+ case GL_BYTE:
+ return MESA_FORMAT_LUMINANCE_ALPHA_INT8;
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_LUMINANCE_ALPHA_UINT8;
+ case GL_SHORT:
+ return MESA_FORMAT_LUMINANCE_ALPHA_INT16;
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_LUMINANCE_ALPHA_UINT16;
+ case GL_INT:
+ return MESA_FORMAT_LUMINANCE_ALPHA_INT32;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_LUMINANCE_ALPHA_UINT32;
+ case GL_FLOAT:
+ return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32;
+ case GL_HALF_FLOAT:
+ return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16;
+ }
+ break;
+
+ case GL_DEPTH_COMPONENT:
+ switch (type) {
+ case GL_INT:
+ return MESA_FORMAT_Z32;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_Z32;
+ case GL_FLOAT:
+ return MESA_FORMAT_Z32_FLOAT;
+ }
+ break;
+
+ case GL_STENCIL_INDEX:
+ switch (type) {
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ return MESA_FORMAT_S8;
+ }
+ break;
+
+ case GL_DEPTH_STENCIL:
+ switch (type) {
+ case GL_UNSIGNED_SHORT:
+ return MESA_FORMAT_Z24_S8;
+ case GL_INT:
+ return MESA_FORMAT_Z32;
+ case GL_UNSIGNED_INT:
+ return MESA_FORMAT_Z32;
+ case GL_FLOAT:
+ return MESA_FORMAT_Z32_FLOAT_X24S8;
+ case GL_UNSIGNED_INT_24_8_EXT: /* GL_EXT_packed_depth_stencil */
+ return MESA_FORMAT_Z24_S8;
+ case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
+ return MESA_FORMAT_S8_Z24;
+ }
+ break;
+ }
+
+ _mesa_problem(ctx, "%s(): unexpected format %s and type %s\n",
+ __FUNCTION__, _mesa_lookup_enum_by_nr(format), _mesa_lookup_enum_by_nr(type));
+ return MESA_FORMAT_NONE;
+}
diff --git a/src/mesa/main/texformat.h b/src/mesa/main/texformat.h
index 88ad4d1a7e..66d50b381c 100644
--- a/src/mesa/main/texformat.h
+++ b/src/mesa/main/texformat.h
@@ -29,13 +29,24 @@
#include "formats.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct gl_context;
extern gl_format
+_mesa_choose_cached_tex_format(struct gl_context *ctx, GLenum format, GLenum type);
+extern gl_format
_mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
GLint internalFormat, GLenum format, GLenum type);
extern GLboolean
_mesa_tex_target_is_array(GLenum target);
+#ifdef __cplusplus
+}
+#endif
+
#endif