summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mueller <MarkKMueller@gmail.com>2013-11-11 09:28:41 -0800
committerMark Mueller <MarkKMueller@gmail.com>2013-11-11 09:28:41 -0800
commitc902749bc0c024894a81b6549a0baa60ea22642e (patch)
treeed4009d8db7efc20c0a98b2bc51cc604d2cb0393
parent25c326d340b28135ec630bb1d1bce16061245958 (diff)
added missing fileblorp-flush
-rw-r--r--src/mesa/main/cachedtexformat.c323
1 files changed, 323 insertions, 0 deletions
diff --git a/src/mesa/main/cachedtexformat.c b/src/mesa/main/cachedtexformat.c
new file mode 100644
index 0000000000..6ae39d5b74
--- /dev/null
+++ b/src/mesa/main/cachedtexformat.c
@@ -0,0 +1,323 @@
+/*
+ * Mesa 3-D graphics library
+ *
+ * Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
+ * Copyright (c) 2008-2009 VMware, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * 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
+ * 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.
+ */
+
+
+/**
+ * \file cachedtexformat.c
+ * Texture formats.
+ *
+ * \author Gareth Hughes
+ * \author Brian Paul
+ * \author Mark Mueller
+ */
+
+
+#include "context.h"
+#include "enums.h"
+#include "mtypes.h"
+#include "texcompress.h"
+#include "texformat.h"
+
+/**
+ * Choose an appropriate texture format given the format, and type
+ *
+ * \param ctx the GL context.
+ * \param target a texture target (GL_TEXTURE_x)
+ * \param internalFormat user's prefered internal texture format.
+ * \param format incoming image pixel format.
+ * \param type incoming image data type.
+ *
+ * \return the closest gl_format for the given format/type arguments
+ *
+ * This is called via dd_function_table::ChooseTextureFormat. Hardware
+ * drivers may override this function with a specialized version.
+ */
+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;
+
+ /* shallow RGBA formats */
+ case GL_BGR:
+ /*
+ * Return none until support for these formats are added to blorp.
+ */
+ 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_RGBA_UINT8;
+ 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:
+ /*
+ * Return none until support for these formats are added to blorp.
+ */
+ 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;
+}