case GL_INTENSITY:
set_swizzle(swizzle, 0, 0, 0, 0);
return true;
+ case GL_DEPTH_COMPONENT:
+ set_swizzle(swizzle, 0, 6, 6, 6);
+ return true;
+ case GL_STENCIL_INDEX:
+ set_swizzle(swizzle, 6, 0, 6, 6);
+ return true;
default:
return false;
}
}
+bool
+_mesa_swap_bytes_in_type_enum(GLenum *type)
+{
+ switch (*type) {
+ case GL_UNSIGNED_INT_8_8_8_8:
+ *type = GL_UNSIGNED_INT_8_8_8_8_REV;
+ return true;
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ *type = GL_UNSIGNED_INT_8_8_8_8;
+ return true;
+ case GL_UNSIGNED_SHORT_8_8_MESA:
+ *type = GL_UNSIGNED_SHORT_8_8_REV_MESA;
+ return true;
+ case GL_UNSIGNED_SHORT_8_8_REV_MESA:
+ *type = GL_UNSIGNED_SHORT_8_8_MESA;
+ return true;
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ /* format/types that are arrays of 8-bit values are unaffected by
+ * swapBytes.
+ */
+ return true;
+ default:
+ /* swapping bytes on 4444, 1555, or >8 bit per channel types etc. will
+ * never match a Mesa format.
+ */
+ return false;
+ }
+}
+
/**
* Take an OpenGL format (GL_RGB, GL_RGBA, etc), OpenGL data type (GL_INT,
* GL_FOAT, etc) and return a matching mesa_array_format or a mesa_format
bool normalized = false, is_float = false, is_signed = false;
int num_channels = 0, type_size = 0;
+ if (format == GL_COLOR_INDEX)
+ return MESA_FORMAT_NONE;
+
/* Extract array format type information from the OpenGL data type */
switch (type) {
case GL_UNSIGNED_BYTE:
* create the array format
*/
if (is_array_format) {
- normalized = !_mesa_is_enum_format_integer(format);
+ enum mesa_array_format_base_format bf;
+ switch (format) {
+ case GL_DEPTH_COMPONENT:
+ bf = MESA_ARRAY_FORMAT_BASE_FORMAT_DEPTH;
+ break;
+ case GL_STENCIL_INDEX:
+ bf = MESA_ARRAY_FORMAT_BASE_FORMAT_STENCIL;
+ break;
+ default:
+ bf = MESA_ARRAY_FORMAT_BASE_FORMAT_RGBA_VARIANTS;
+ break;
+ }
+
+ normalized = !(_mesa_is_enum_format_integer(format) ||
+ format == GL_STENCIL_INDEX);
num_channels = _mesa_components_in_format(format);
- return MESA_ARRAY_FORMAT(type_size, is_signed, is_float,
+ return MESA_ARRAY_FORMAT(bf, type_size, is_signed, is_float,
normalized, num_channels,
swizzle[0], swizzle[1], swizzle[2], swizzle[3]);
}