+ },
+ {
+ 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
+ },
};
@@ -2221,7 +2655,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);
@@ -3361,6 +3795,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 64b4b9a..687b525 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 d3aa477..713fdf2 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