From c902749bc0c024894a81b6549a0baa60ea22642e Mon Sep 17 00:00:00 2001 From: Mark Mueller Date: Mon, 11 Nov 2013 09:28:41 -0800 Subject: added missing file --- src/mesa/main/cachedtexformat.c | 323 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 src/mesa/main/cachedtexformat.c 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; +} -- cgit v1.2.3