diff options
author | Chia-I Wu <[email protected]> | 2011-11-22 15:05:25 +0800 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2011-11-27 12:43:24 +0800 |
commit | d4fcf67a3ac78c29448000486dadc2b4b1b2a56d (patch) | |
tree | de68969c78428e72aef94a30adcd94c389bc56c4 /src/mesa/main/texstore.c | |
parent | 6baa5f10c04641960e0bedce664d0a5cf39e8954 (diff) |
mesa: add MESA_FORMAT_RGBX8888 and MESA_FORMAT_RGBX8888_REV
MESA_FORMAT_RGBX8888_REV is one of the opaque pixel formats used on Android.
Thanks to texture-from-pixmap, drivers may actually see texture images with
this format on Android.
MESA_FORMAT_RGBX8888 is added only for completeness.
Reviewed-by: Brian Paul <[email protected]>
[olv: Move the new formats after MESA_FORMAT_ARGB8888_REV in gl_format. I
accidentally moved them to the wrong place when preparing the patch.]
Diffstat (limited to 'src/mesa/main/texstore.c')
-rw-r--r-- | src/mesa/main/texstore.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c index aae6b4b3b9b..6deeb642ede 100644 --- a/src/mesa/main/texstore.c +++ b/src/mesa/main/texstore.c @@ -1265,12 +1265,15 @@ _mesa_texstore_rgba8888(TEXSTORE_PARAMS) const GLenum baseFormat = _mesa_get_format_base_format(dstFormat); ASSERT(dstFormat == MESA_FORMAT_RGBA8888 || - dstFormat == MESA_FORMAT_RGBA8888_REV); + dstFormat == MESA_FORMAT_RGBA8888_REV || + dstFormat == MESA_FORMAT_RGBX8888 || + dstFormat == MESA_FORMAT_RGBX8888_REV); ASSERT(texelBytes == 4); if (!ctx->_ImageTransferState && !srcPacking->SwapBytes && - dstFormat == MESA_FORMAT_RGBA8888 && + (dstFormat == MESA_FORMAT_RGBA8888 || + dstFormat == MESA_FORMAT_RGBX8888) && baseInternalFormat == GL_RGBA && ((srcFormat == GL_RGBA && srcType == GL_UNSIGNED_INT_8_8_8_8) || (srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE && !littleEndian) || @@ -1285,7 +1288,8 @@ _mesa_texstore_rgba8888(TEXSTORE_PARAMS) } else if (!ctx->_ImageTransferState && !srcPacking->SwapBytes && - dstFormat == MESA_FORMAT_RGBA8888_REV && + (dstFormat == MESA_FORMAT_RGBA8888_REV || + dstFormat == MESA_FORMAT_RGBX8888_REV) && baseInternalFormat == GL_RGBA && ((srcFormat == GL_RGBA && srcType == GL_UNSIGNED_INT_8_8_8_8_REV) || (srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE && littleEndian) || @@ -1309,8 +1313,10 @@ _mesa_texstore_rgba8888(TEXSTORE_PARAMS) /* dstmap - how to swizzle from RGBA to dst format: */ - if ((littleEndian && dstFormat == MESA_FORMAT_RGBA8888) || - (!littleEndian && dstFormat == MESA_FORMAT_RGBA8888_REV)) { + if ((littleEndian && (dstFormat == MESA_FORMAT_RGBA8888 || + dstFormat == MESA_FORMAT_RGBX8888)) || + (!littleEndian && (dstFormat == MESA_FORMAT_RGBA8888_REV || + dstFormat == MESA_FORMAT_RGBX8888_REV))) { dstmap[3] = 0; dstmap[2] = 1; dstmap[1] = 2; @@ -1351,7 +1357,8 @@ _mesa_texstore_rgba8888(TEXSTORE_PARAMS) + dstXoffset * texelBytes; for (row = 0; row < srcHeight; row++) { GLuint *dstUI = (GLuint *) dstRow; - if (dstFormat == MESA_FORMAT_RGBA8888) { + if (dstFormat == MESA_FORMAT_RGBA8888 || + dstFormat == MESA_FORMAT_RGBX8888) { for (col = 0; col < srcWidth; col++) { dstUI[col] = PACK_COLOR_8888( src[RCOMP], src[GCOMP], @@ -4281,6 +4288,8 @@ _mesa_get_texstore_func(gl_format format) table[MESA_FORMAT_RGBA8888_REV] = _mesa_texstore_rgba8888; table[MESA_FORMAT_ARGB8888] = _mesa_texstore_argb8888; table[MESA_FORMAT_ARGB8888_REV] = _mesa_texstore_argb8888; + table[MESA_FORMAT_RGBX8888] = _mesa_texstore_rgba8888; + table[MESA_FORMAT_RGBX8888_REV] = _mesa_texstore_rgba8888; table[MESA_FORMAT_XRGB8888] = _mesa_texstore_argb8888; table[MESA_FORMAT_XRGB8888_REV] = _mesa_texstore_argb8888; table[MESA_FORMAT_RGB888] = _mesa_texstore_rgb888; |