/*
* Mesa 3-D graphics library
- * Version: 7.7
*
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
* Copyright (c) 2008-2009 VMware, Inc.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
*/
#include "imports.h"
#include "formats.h"
-#include "mfeatures.h"
#include "macros.h"
#include "glformats.h"
0, 0, 0, 0, 0,
1, 1, 16
},
+ {
+ MESA_FORMAT_ABGR2101010,
+ "MESA_FORMAT_ABGR2101010",
+ GL_RGBA,
+ GL_UNSIGNED_NORMALIZED,
+ 10, 10, 10, 2,
+ 0, 0, 0, 0, 0,
+ 1, 1, 4
+ },
+ {
+ 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
+ },
};
}
+/**
+ * Does the given format store signed values?
+ */
+GLboolean
+_mesa_is_format_signed(gl_format format)
+{
+ if (format == MESA_FORMAT_R11_G11_B10_FLOAT ||
+ format == MESA_FORMAT_RGB9_E5_FLOAT) {
+ /* these packed float formats only store unsigned values */
+ return GL_FALSE;
+ }
+ else {
+ const struct gl_format_info *info = _mesa_get_format_info(format);
+ return (info->DataType == GL_SIGNED_NORMALIZED ||
+ info->DataType == GL_INT ||
+ info->DataType == GL_FLOAT);
+ }
+}
+
+
/**
* Return color encoding for given format.
* \return GL_LINEAR or GL_SRGB
*comps = 4;
return;
+ case MESA_FORMAT_ABGR2101010:
+ *datatype = GL_UNSIGNED_INT_2_10_10_10_REV;
+ *comps = 4;
+ return;
+
+ case MESA_FORMAT_SIGNED_RG88:
+ *datatype = GL_BYTE;
+ *comps = 2;
+ return;
+
+ case MESA_FORMAT_SIGNED_RG1616:
+ *datatype = GL_SHORT;
+ *comps = 2;
+ return;
+
case MESA_FORMAT_COUNT:
assert(0);
return;
case MESA_FORMAT_A8:
return format == GL_ALPHA && type == GL_UNSIGNED_BYTE;
case MESA_FORMAT_A16:
- return format == GL_ALPHA && type == GL_UNSIGNED_SHORT &&
- littleEndian && !swapBytes;
+ return format == GL_ALPHA && type == GL_UNSIGNED_SHORT && !swapBytes;
case MESA_FORMAT_L8:
case MESA_FORMAT_SL8:
return format == GL_LUMINANCE && type == GL_UNSIGNED_BYTE;
case MESA_FORMAT_L16:
- return format == GL_LUMINANCE && type == GL_UNSIGNED_SHORT &&
- littleEndian && !swapBytes;
+ return format == GL_LUMINANCE && type == GL_UNSIGNED_SHORT && !swapBytes;
case MESA_FORMAT_I8:
return format == GL_INTENSITY && type == GL_UNSIGNED_BYTE;
case MESA_FORMAT_I16:
- return format == GL_INTENSITY && type == GL_UNSIGNED_SHORT &&
- littleEndian && !swapBytes;
+ return format == GL_INTENSITY && type == GL_UNSIGNED_SHORT && !swapBytes;
case MESA_FORMAT_YCBCR:
return format == GL_YCBCR_MESA &&
return GL_FALSE;
case MESA_FORMAT_R16:
- return format == GL_RED && type == GL_UNSIGNED_SHORT && littleEndian &&
+ return format == GL_RED && type == GL_UNSIGNED_SHORT &&
!swapBytes;
case MESA_FORMAT_GR1616:
return format == GL_RG && type == GL_UNSIGNED_SHORT && littleEndian &&
return format == GL_RG && type == GL_HALF_FLOAT && !swapBytes;
case MESA_FORMAT_ALPHA_UINT8:
- return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_BYTE &&
- !swapBytes;
+ return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_BYTE;
case MESA_FORMAT_ALPHA_UINT16:
return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_SHORT &&
!swapBytes;
return format == GL_ALPHA_INTEGER && type == GL_UNSIGNED_INT &&
!swapBytes;
case MESA_FORMAT_ALPHA_INT8:
- return format == GL_ALPHA_INTEGER && type == GL_BYTE && !swapBytes;
+ return format == GL_ALPHA_INTEGER && type == GL_BYTE;
case MESA_FORMAT_ALPHA_INT16:
return format == GL_ALPHA_INTEGER && type == GL_SHORT && !swapBytes;
case MESA_FORMAT_ALPHA_INT32:
return GL_FALSE;
case MESA_FORMAT_LUMINANCE_UINT8:
- return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_BYTE &&
- !swapBytes;
+ return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_BYTE;
case MESA_FORMAT_LUMINANCE_UINT16:
return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_SHORT &&
!swapBytes;
return format == GL_LUMINANCE_INTEGER_EXT && type == GL_UNSIGNED_INT &&
!swapBytes;
case MESA_FORMAT_LUMINANCE_INT8:
- return format == GL_LUMINANCE_INTEGER_EXT && type == GL_BYTE &&
- !swapBytes;
+ return format == GL_LUMINANCE_INTEGER_EXT && type == GL_BYTE;
case MESA_FORMAT_LUMINANCE_INT16:
return format == GL_LUMINANCE_INTEGER_EXT && type == GL_SHORT &&
!swapBytes;
!swapBytes;
case MESA_FORMAT_R_INT8:
- return format == GL_RED_INTEGER && type == GL_BYTE && !swapBytes;
+ return format == GL_RED_INTEGER && type == GL_BYTE;
case MESA_FORMAT_RG_INT8:
return format == GL_RG_INTEGER && type == GL_BYTE && !swapBytes;
case MESA_FORMAT_RGB_INT8:
return format == GL_RGBA_INTEGER && type == GL_INT && !swapBytes;
case MESA_FORMAT_R_UINT8:
- return format == GL_RED_INTEGER && type == GL_UNSIGNED_BYTE && !swapBytes;
+ return format == GL_RED_INTEGER && type == GL_UNSIGNED_BYTE;
case MESA_FORMAT_RG_UINT8:
return format == GL_RG_INTEGER && type == GL_UNSIGNED_BYTE && !swapBytes;
case MESA_FORMAT_RGB_UINT8:
return format == GL_RGBA_INTEGER && type == GL_UNSIGNED_INT && !swapBytes;
case MESA_FORMAT_DUDV8:
+ return (format == GL_DU8DV8_ATI || format == GL_DUDV_ATI) &&
+ type == GL_BYTE && littleEndian && !swapBytes;
+
case MESA_FORMAT_SIGNED_R8:
+ return format == GL_RED && type == GL_BYTE;
case MESA_FORMAT_SIGNED_RG88_REV:
+ return format == GL_RG && type == GL_BYTE && littleEndian &&
+ !swapBytes;
case MESA_FORMAT_SIGNED_RGBX8888:
return GL_FALSE;
return GL_FALSE;
case MESA_FORMAT_SIGNED_R16:
+ return format == GL_RED && type == GL_SHORT &&
+ !swapBytes;
case MESA_FORMAT_SIGNED_GR1616:
+ return format == GL_RG && type == GL_SHORT && littleEndian && !swapBytes;
case MESA_FORMAT_SIGNED_RGB_16:
+ return format == GL_RGB && type == GL_SHORT && !swapBytes;
case MESA_FORMAT_SIGNED_RGBA_16:
+ return format == GL_RGBA && type == GL_SHORT && !swapBytes;
case MESA_FORMAT_RGBA_16:
- /* FINISHME: SNORM */
- return GL_FALSE;
+ return format == GL_RGBA && type == GL_UNSIGNED_SHORT &&
+ !swapBytes;
case MESA_FORMAT_RED_RGTC1:
case MESA_FORMAT_SIGNED_RED_RGTC1:
return GL_FALSE;
case MESA_FORMAT_SIGNED_A8:
+ return format == GL_ALPHA && type == GL_BYTE;
case MESA_FORMAT_SIGNED_L8:
+ return format == GL_LUMINANCE && type == GL_BYTE;
case MESA_FORMAT_SIGNED_AL88:
+ return format == GL_LUMINANCE_ALPHA && type == GL_BYTE &&
+ littleEndian && !swapBytes;
case MESA_FORMAT_SIGNED_I8:
+ return format == GL_INTENSITY && type == GL_BYTE;
case MESA_FORMAT_SIGNED_A16:
+ return format == GL_ALPHA && type == GL_SHORT && !swapBytes;
case MESA_FORMAT_SIGNED_L16:
+ return format == GL_LUMINANCE && type == GL_SHORT && !swapBytes;
case MESA_FORMAT_SIGNED_AL1616:
+ return format == GL_LUMINANCE_ALPHA && type == GL_SHORT &&
+ littleEndian && !swapBytes;
case MESA_FORMAT_SIGNED_I16:
- /* FINISHME: SNORM */
- return GL_FALSE;
+ return format == GL_INTENSITY && type == GL_SHORT && littleEndian &&
+ !swapBytes;
case MESA_FORMAT_ARGB2101010_UINT:
return (format == GL_BGRA_INTEGER_EXT &&
return format == GL_DEPTH_COMPONENT && type == GL_FLOAT && !swapBytes;
case MESA_FORMAT_Z32_FLOAT_X24S8:
- return GL_FALSE;
+ return format == GL_DEPTH_STENCIL &&
+ type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV && !swapBytes;
case MESA_FORMAT_XRGB4444_UNORM:
case MESA_FORMAT_XRGB1555_UNORM:
case MESA_FORMAT_XBGR32323232_UINT:
case MESA_FORMAT_XBGR32323232_SINT:
return GL_FALSE;
+
+ case MESA_FORMAT_ABGR2101010:
+ return format == GL_RGBA && type == GL_UNSIGNED_INT_2_10_10_10_REV &&
+ !swapBytes;
+
+ case MESA_FORMAT_SIGNED_RG88:
+ return format == GL_RG && type == GL_BYTE && !littleEndian &&
+ !swapBytes;
+
+ case MESA_FORMAT_SIGNED_RG1616:
+ return format == GL_RG && type == GL_SHORT && !littleEndian &&
+ !swapBytes;
}
return GL_FALSE;