Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Mesa 3-D graphics library
  3.  *
  4.  * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved.
  5.  * Copyright (c) 2008-2009 VMware, Inc.
  6.  *
  7.  * Permission is hereby granted, free of charge, to any person obtaining a
  8.  * copy of this software and associated documentation files (the "Software"),
  9.  * to deal in the Software without restriction, including without limitation
  10.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  11.  * and/or sell copies of the Software, and to permit persons to whom the
  12.  * Software is furnished to do so, subject to the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice shall be included
  15.  * in all copies or substantial portions of the Software.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  20.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  21.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  22.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  23.  * OTHER DEALINGS IN THE SOFTWARE.
  24.  */
  25.  
  26.  
  27. /**
  28.  * \file texformat.c
  29.  * Texture formats.
  30.  *
  31.  * \author Gareth Hughes
  32.  * \author Brian Paul
  33.  */
  34.  
  35.  
  36. #include "context.h"
  37. #include "enums.h"
  38. #include "mtypes.h"
  39. #include "texcompress.h"
  40. #include "texformat.h"
  41.  
  42. #define RETURN_IF_SUPPORTED(f) do {             \
  43.    if (ctx->TextureFormatSupported[f])          \
  44.       return f;                                 \
  45. } while (0)
  46.  
  47. /**
  48.  * Choose an appropriate texture format given the format, type and
  49.  * internalFormat parameters passed to glTexImage().
  50.  *
  51.  * \param ctx  the GL context.
  52.  * \param target  a texture target (GL_TEXTURE_x)
  53.  * \param internalFormat  user's prefered internal texture format.
  54.  * \param format  incoming image pixel format.
  55.  * \param type  incoming image data type.
  56.  *
  57.  * \return the closest gl_format for the given format/type arguments
  58.  *
  59.  * This is called via dd_function_table::ChooseTextureFormat.  Hardware
  60.  * drivers may override this function with a specialized version.
  61.  */
  62. gl_format
  63. _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
  64.                         GLint internalFormat, GLenum format, GLenum type)
  65. {
  66.    (void) format;
  67.  
  68.    switch (internalFormat) {
  69.    /* shallow RGBA formats */
  70.    case 4:
  71.    case GL_RGBA:
  72.       if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
  73.          RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
  74.       } else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
  75.          RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
  76.       } else if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
  77.          RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
  78.       }
  79.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
  80.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  81.       break;
  82.  
  83.    case GL_RGBA8:
  84.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
  85.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  86.       break;
  87.    case GL_RGB5_A1:
  88.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB1555);
  89.       break;
  90.    case GL_RGBA2:
  91.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444_REV); /* just to test another format*/
  92.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
  93.       break;
  94.    case GL_RGBA4:
  95.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB4444);
  96.       break;
  97.  
  98.    /* deep RGBA formats */
  99.    case GL_RGB10_A2:
  100.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
  101.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  102.       break;
  103.    case GL_RGBA12:
  104.    case GL_RGBA16:
  105.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
  106.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
  107.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
  108.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  109.       break;
  110.  
  111.    /* shallow RGB formats */
  112.    case 3:
  113.    case GL_RGB:
  114.       if (type == GL_UNSIGNED_INT_2_10_10_10_REV) {
  115.          RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010);
  116.       }
  117.       /* fallthrough */
  118.    case GL_RGB8:
  119.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
  120.       RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
  121.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  122.       break;
  123.    case GL_R3_G3_B2:
  124.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB332);
  125.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
  126.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV);
  127.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
  128.       RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
  129.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  130.       break;
  131.    case GL_RGB4:
  132.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565_REV); /* just to test another format */
  133.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
  134.       break;
  135.    case GL_RGB5:
  136.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
  137.       break;
  138.  
  139.    /* deep RGB formats */
  140.    case GL_RGB10:
  141.    case GL_RGB12:
  142.    case GL_RGB16:
  143.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_UNORM);
  144.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_16);
  145.       RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
  146.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  147.       break;
  148.  
  149.    /* Alpha formats */
  150.    case GL_ALPHA:
  151.    case GL_ALPHA4:
  152.    case GL_ALPHA8:
  153.       RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
  154.       break;
  155.  
  156.    case GL_ALPHA12:
  157.    case GL_ALPHA16:
  158.       RETURN_IF_SUPPORTED(MESA_FORMAT_A16);
  159.       RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
  160.       break;
  161.  
  162.    /* Luminance formats */
  163.    case 1:
  164.    case GL_LUMINANCE:
  165.    case GL_LUMINANCE4:
  166.    case GL_LUMINANCE8:
  167.       RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
  168.       break;
  169.  
  170.    case GL_LUMINANCE12:
  171.    case GL_LUMINANCE16:
  172.       RETURN_IF_SUPPORTED(MESA_FORMAT_L16);
  173.       RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
  174.       break;
  175.  
  176.       /* Luminance/Alpha formats */
  177.    case GL_LUMINANCE4_ALPHA4:
  178.       RETURN_IF_SUPPORTED(MESA_FORMAT_AL44);
  179.       RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
  180.       break;
  181.  
  182.    case 2:
  183.    case GL_LUMINANCE_ALPHA:
  184.    case GL_LUMINANCE6_ALPHA2:
  185.    case GL_LUMINANCE8_ALPHA8:
  186.       RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
  187.       break;
  188.  
  189.    case GL_LUMINANCE12_ALPHA4:
  190.    case GL_LUMINANCE12_ALPHA12:
  191.    case GL_LUMINANCE16_ALPHA16:
  192.       RETURN_IF_SUPPORTED(MESA_FORMAT_AL1616);
  193.       RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
  194.       break;
  195.  
  196.    case GL_INTENSITY:
  197.    case GL_INTENSITY4:
  198.    case GL_INTENSITY8:
  199.       RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
  200.       break;
  201.  
  202.    case GL_INTENSITY12:
  203.    case GL_INTENSITY16:
  204.       RETURN_IF_SUPPORTED(MESA_FORMAT_I16);
  205.       RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
  206.       break;
  207.  
  208.    case GL_DEPTH_COMPONENT:
  209.    case GL_DEPTH_COMPONENT24:
  210.    case GL_DEPTH_COMPONENT32:
  211.       RETURN_IF_SUPPORTED(MESA_FORMAT_Z32);
  212.       RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
  213.       RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
  214.       break;
  215.    case GL_DEPTH_COMPONENT16:
  216.       RETURN_IF_SUPPORTED(MESA_FORMAT_Z16);
  217.       RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24);
  218.       RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
  219.       break;
  220.  
  221.    case GL_COMPRESSED_ALPHA_ARB:
  222.       RETURN_IF_SUPPORTED(MESA_FORMAT_A8);
  223.       break;
  224.    case GL_COMPRESSED_LUMINANCE_ARB:
  225.       RETURN_IF_SUPPORTED(MESA_FORMAT_L8);
  226.       break;
  227.    case GL_COMPRESSED_LUMINANCE_ALPHA_ARB:
  228.       RETURN_IF_SUPPORTED(MESA_FORMAT_AL88);
  229.       break;
  230.    case GL_COMPRESSED_INTENSITY_ARB:
  231.       RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
  232.       break;
  233.    case GL_COMPRESSED_RGB_ARB:
  234.       /* We don't use texture compression for 1D and 1D array textures.
  235.        * For 1D textures, compressions doesn't buy us much.
  236.        * For 1D ARRAY textures, there's complicated issues with updating
  237.        * sub-regions on non-block boundaries with glCopyTexSubImage, among
  238.        * other issues.  FWIW, the GL_EXT_texture_array extension prohibits
  239.        * 1D ARRAY textures in S3TC format.
  240.        */
  241.       if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
  242.          if (ctx->Mesa_DXTn)
  243.             RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
  244.          RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
  245.       }
  246.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
  247.       RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
  248.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  249.       break;
  250.    case GL_COMPRESSED_RGBA_ARB:
  251.       /* We don't use texture compression for 1D and 1D array textures. */
  252.       if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
  253.          if (ctx->Mesa_DXTn)
  254.             RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
  255.          RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
  256.       }
  257.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
  258.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  259.       break;
  260.  
  261.    case GL_RGB565:
  262.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB565);
  263.       break;
  264.  
  265.    case GL_YCBCR_MESA:
  266.       if (type == GL_UNSIGNED_SHORT_8_8_MESA)
  267.          RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR);
  268.       else
  269.          RETURN_IF_SUPPORTED(MESA_FORMAT_YCBCR_REV);
  270.       break;
  271.  
  272.    /* For non-generic compressed format we assert two things:
  273.     *
  274.     * 1. The format has already been validated against the set of available
  275.     *    extensions.
  276.     *
  277.     * 2. The driver only enables the extension if it supports all of the
  278.     *    formats that are part of that extension.
  279.     */
  280.    case GL_COMPRESSED_RGB_FXT1_3DFX:
  281.       return MESA_FORMAT_RGB_FXT1;
  282.    case GL_COMPRESSED_RGBA_FXT1_3DFX:
  283.       return MESA_FORMAT_RGBA_FXT1;
  284.    case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
  285.    case GL_RGB_S3TC:
  286.    case GL_RGB4_S3TC:
  287.       return MESA_FORMAT_RGB_DXT1;
  288.    case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
  289.       return MESA_FORMAT_RGBA_DXT1;
  290.    case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
  291.    case GL_RGBA_S3TC:
  292.    case GL_RGBA4_S3TC:
  293.       return MESA_FORMAT_RGBA_DXT3;
  294.    case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
  295.       return MESA_FORMAT_RGBA_DXT5;
  296.    case GL_COMPRESSED_RED_RGTC1:
  297.       return MESA_FORMAT_RED_RGTC1;
  298.    case GL_COMPRESSED_SIGNED_RED_RGTC1:
  299.       return MESA_FORMAT_SIGNED_RED_RGTC1;
  300.    case GL_COMPRESSED_RG_RGTC2:
  301.       return MESA_FORMAT_RG_RGTC2;
  302.    case GL_COMPRESSED_SIGNED_RG_RGTC2:
  303.       return MESA_FORMAT_SIGNED_RG_RGTC2;
  304.    case GL_COMPRESSED_LUMINANCE_LATC1_EXT:
  305.       return MESA_FORMAT_L_LATC1;
  306.    case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT:
  307.       return MESA_FORMAT_SIGNED_L_LATC1;
  308.    case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT:
  309.       return MESA_FORMAT_LA_LATC2;
  310.    case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT:
  311.       return MESA_FORMAT_SIGNED_LA_LATC2;
  312.    case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI:
  313.       return MESA_FORMAT_LA_LATC2;
  314.    case GL_ETC1_RGB8_OES:
  315.       return MESA_FORMAT_ETC1_RGB8;
  316.    case GL_COMPRESSED_RGB8_ETC2:
  317.       return MESA_FORMAT_ETC2_RGB8;
  318.    case GL_COMPRESSED_SRGB8_ETC2:
  319.       return MESA_FORMAT_ETC2_SRGB8;
  320.    case GL_COMPRESSED_RGBA8_ETC2_EAC:
  321.       return MESA_FORMAT_ETC2_RGBA8_EAC;
  322.    case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
  323.       return MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC;
  324.    case GL_COMPRESSED_R11_EAC:
  325.       return MESA_FORMAT_ETC2_R11_EAC;
  326.    case GL_COMPRESSED_RG11_EAC:
  327.       return MESA_FORMAT_ETC2_RG11_EAC;
  328.    case GL_COMPRESSED_SIGNED_R11_EAC:
  329.       return MESA_FORMAT_ETC2_SIGNED_R11_EAC;
  330.    case GL_COMPRESSED_SIGNED_RG11_EAC:
  331.       return MESA_FORMAT_ETC2_SIGNED_RG11_EAC;
  332.    case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
  333.       return MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1;
  334.    case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
  335.       return MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1;
  336.    case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
  337.       return MESA_FORMAT_SRGB_DXT1;
  338.    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
  339.       return MESA_FORMAT_SRGBA_DXT1;
  340.    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
  341.       return MESA_FORMAT_SRGBA_DXT3;
  342.    case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
  343.       return MESA_FORMAT_SRGBA_DXT5;
  344.  
  345.    case GL_ALPHA16F_ARB:
  346.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
  347.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
  348.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  349.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  350.       break;
  351.    case GL_ALPHA32F_ARB:
  352.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT32);
  353.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  354.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_FLOAT16);
  355.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  356.       break;
  357.    case GL_LUMINANCE16F_ARB:
  358.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
  359.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
  360.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  361.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  362.       break;
  363.    case GL_LUMINANCE32F_ARB:
  364.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT32);
  365.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  366.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_FLOAT16);
  367.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  368.       break;
  369.    case GL_LUMINANCE_ALPHA16F_ARB:
  370.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
  371.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
  372.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  373.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  374.       break;
  375.    case GL_LUMINANCE_ALPHA32F_ARB:
  376.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32);
  377.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  378.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16);
  379.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  380.       break;
  381.    case GL_INTENSITY16F_ARB:
  382.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
  383.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
  384.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  385.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  386.       break;
  387.    case GL_INTENSITY32F_ARB:
  388.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT32);
  389.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  390.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_FLOAT16);
  391.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  392.       break;
  393.    case GL_RGB16F_ARB:
  394.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
  395.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_FLOAT);
  396.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  397.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
  398.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  399.       break;
  400.    case GL_RGB32F_ARB:
  401.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT32);
  402.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR32323232_FLOAT);
  403.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  404.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FLOAT16);
  405.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  406.       break;
  407.    case GL_RGBA16F_ARB:
  408.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  409.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  410.       break;
  411.    case GL_RGBA32F_ARB:
  412.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  413.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  414.       break;
  415.  
  416.    case GL_RGB9_E5:
  417.       /* GL_EXT_texture_shared_exponent -- just one format to support */
  418.       ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_RGB9_E5_FLOAT]);
  419.       return MESA_FORMAT_RGB9_E5_FLOAT;
  420.  
  421.    case GL_R11F_G11F_B10F:
  422.       /* GL_EXT_texture_packed_float -- just one format to support */
  423.       ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_R11_G11_B10_FLOAT]);
  424.       return MESA_FORMAT_R11_G11_B10_FLOAT;
  425.  
  426.    case GL_DEPTH_STENCIL_EXT:
  427.    case GL_DEPTH24_STENCIL8_EXT:
  428.       RETURN_IF_SUPPORTED(MESA_FORMAT_Z24_S8);
  429.       RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24);
  430.       break;
  431.  
  432.    case GL_DEPTH_COMPONENT32F:
  433.       ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT]);
  434.       return MESA_FORMAT_Z32_FLOAT;
  435.    case GL_DEPTH32F_STENCIL8:
  436.       ASSERT(ctx->TextureFormatSupported[MESA_FORMAT_Z32_FLOAT_X24S8]);
  437.       return MESA_FORMAT_Z32_FLOAT_X24S8;
  438.  
  439.    case GL_DUDV_ATI:
  440.    case GL_DU8DV8_ATI:
  441.       RETURN_IF_SUPPORTED(MESA_FORMAT_DUDV8);
  442.       break;
  443.  
  444.    case GL_RED_SNORM:
  445.    case GL_R8_SNORM:
  446.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R8);
  447.       break;
  448.    case GL_RG_SNORM:
  449.    case GL_RG8_SNORM:
  450.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG88_REV);
  451.       break;
  452.    case GL_RGB_SNORM:
  453.    case GL_RGB8_SNORM:
  454.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
  455.       /* FALLTHROUGH */
  456.    case GL_RGBA_SNORM:
  457.    case GL_RGBA8_SNORM:
  458.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  459.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  460.       break;
  461.    case GL_ALPHA_SNORM:
  462.    case GL_ALPHA8_SNORM:
  463.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8);
  464.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  465.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  466.       break;
  467.    case GL_LUMINANCE_SNORM:
  468.    case GL_LUMINANCE8_SNORM:
  469.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8);
  470.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
  471.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  472.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  473.       break;
  474.    case GL_LUMINANCE_ALPHA_SNORM:
  475.    case GL_LUMINANCE8_ALPHA8_SNORM:
  476.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88);
  477.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  478.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  479.       break;
  480.    case GL_INTENSITY_SNORM:
  481.    case GL_INTENSITY8_SNORM:
  482.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8);
  483.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  484.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  485.       break;
  486.    case GL_R16_SNORM:
  487.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16);
  488.       break;
  489.    case GL_RG16_SNORM:
  490.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_GR1616);
  491.       break;
  492.    case GL_RGB16_SNORM:
  493.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16);
  494.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_SNORM);
  495.       /* FALLTHROUGH */
  496.    case GL_RGBA16_SNORM:
  497.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
  498.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  499.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  500.       break;
  501.    case GL_ALPHA16_SNORM:
  502.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16);
  503.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
  504.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  505.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  506.       break;
  507.    case GL_LUMINANCE16_SNORM:
  508.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16);
  509.       /* FALLTHROUGH */
  510.    case GL_LUMINANCE16_ALPHA16_SNORM:
  511.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616);
  512.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
  513.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  514.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  515.       break;
  516.    case GL_INTENSITY16_SNORM:
  517.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16);
  518.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
  519.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
  520.       RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
  521.       break;
  522.  
  523.    case GL_SRGB_EXT:
  524.    case GL_SRGB8_EXT:
  525.       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
  526.       RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
  527.       break;
  528.    case GL_SRGB_ALPHA_EXT:
  529.    case GL_SRGB8_ALPHA8_EXT:
  530.       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
  531.       RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
  532.       break;
  533.    case GL_SLUMINANCE_EXT:
  534.    case GL_SLUMINANCE8_EXT:
  535.       RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
  536.       RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
  537.       break;
  538.    case GL_SLUMINANCE_ALPHA_EXT:
  539.    case GL_SLUMINANCE8_ALPHA8_EXT:
  540.       RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
  541.       RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
  542.       break;
  543.    case GL_COMPRESSED_SLUMINANCE_EXT:
  544.       RETURN_IF_SUPPORTED(MESA_FORMAT_SL8);
  545.       RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
  546.       break;
  547.    case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
  548.       RETURN_IF_SUPPORTED(MESA_FORMAT_SLA8);
  549.       RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
  550.       break;
  551.    case GL_COMPRESSED_SRGB_EXT:
  552.       if (ctx->Mesa_DXTn)
  553.          RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1);
  554.       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB8);
  555.       RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
  556.       break;
  557.    case GL_COMPRESSED_SRGB_ALPHA_EXT:
  558.       if (ctx->Mesa_DXTn)
  559.          RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */
  560.       RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8);
  561.       RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8);
  562.       break;
  563.  
  564.    case GL_ALPHA8UI_EXT:
  565.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT8);
  566.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
  567.       break;
  568.    case GL_ALPHA16UI_EXT:
  569.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT16);
  570.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
  571.       break;
  572.    case GL_ALPHA32UI_EXT:
  573.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_UINT32);
  574.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
  575.       break;
  576.    case GL_ALPHA8I_EXT:
  577.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT8);
  578.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
  579.       break;
  580.    case GL_ALPHA16I_EXT:
  581.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT16);
  582.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
  583.       break;
  584.    case GL_ALPHA32I_EXT:
  585.       RETURN_IF_SUPPORTED(MESA_FORMAT_ALPHA_INT32);
  586.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
  587.       break;
  588.    case GL_LUMINANCE8UI_EXT:
  589.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT8);
  590.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
  591.       break;
  592.    case GL_LUMINANCE16UI_EXT:
  593.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT16);
  594.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
  595.       break;
  596.    case GL_LUMINANCE32UI_EXT:
  597.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_UINT32);
  598.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
  599.       break;
  600.    case GL_LUMINANCE8I_EXT:
  601.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT8);
  602.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
  603.       break;
  604.    case GL_LUMINANCE16I_EXT:
  605.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT16);
  606.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
  607.       break;
  608.    case GL_LUMINANCE32I_EXT:
  609.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_INT32);
  610.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
  611.       break;
  612.    case GL_LUMINANCE_ALPHA8UI_EXT:
  613.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT8);
  614.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
  615.       break;
  616.    case GL_LUMINANCE_ALPHA16UI_EXT:
  617.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT16);
  618.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
  619.       break;
  620.    case GL_LUMINANCE_ALPHA32UI_EXT:
  621.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_UINT32);
  622.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
  623.       break;
  624.    case GL_LUMINANCE_ALPHA8I_EXT:
  625.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT8);
  626.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
  627.       break;
  628.    case GL_LUMINANCE_ALPHA16I_EXT:
  629.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT16);
  630.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
  631.       break;
  632.    case GL_LUMINANCE_ALPHA32I_EXT:
  633.       RETURN_IF_SUPPORTED(MESA_FORMAT_LUMINANCE_ALPHA_INT32);
  634.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
  635.       break;
  636.    case GL_INTENSITY8UI_EXT:
  637.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT8);
  638.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
  639.       break;
  640.    case GL_INTENSITY16UI_EXT:
  641.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT16);
  642.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
  643.       break;
  644.    case GL_INTENSITY32UI_EXT:
  645.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_UINT32);
  646.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
  647.       break;
  648.    case GL_INTENSITY8I_EXT:
  649.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT8);
  650.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
  651.       break;
  652.    case GL_INTENSITY16I_EXT:
  653.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT16);
  654.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
  655.       break;
  656.    case GL_INTENSITY32I_EXT:
  657.       RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32);
  658.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
  659.       break;
  660.  
  661.    case GL_RGB8UI_EXT:
  662.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8);
  663.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR8888_UINT);
  664.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
  665.       break;
  666.    case GL_RGB16UI_EXT:
  667.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT16);
  668.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_UINT);
  669.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
  670.       break;
  671.    case GL_RGB32UI_EXT:
  672.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT32);
  673.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR32323232_UINT);
  674.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
  675.       break;
  676.    case GL_RGB8I_EXT:
  677.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT8);
  678.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR8888_SINT);
  679.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
  680.       break;
  681.    case GL_RGB16I_EXT:
  682.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT16);
  683.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR16161616_SINT);
  684.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
  685.       break;
  686.    case GL_RGB32I_EXT:
  687.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_INT32);
  688.       RETURN_IF_SUPPORTED(MESA_FORMAT_XBGR32323232_SINT);
  689.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
  690.       break;
  691.    case GL_RGBA8UI_EXT:
  692.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
  693.       break;
  694.    case GL_RGBA16UI_EXT:
  695.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT16);
  696.       break;
  697.    case GL_RGBA32UI_EXT:
  698.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT32);
  699.       break;
  700.    case GL_RGBA8I_EXT:
  701.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT8);
  702.       break;
  703.    case GL_RGBA16I_EXT:
  704.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT16);
  705.       break;
  706.    case GL_RGBA32I_EXT:
  707.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
  708.       break;
  709.  
  710.    case GL_R8:
  711.    case GL_RED:
  712.       RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
  713.       break;
  714.  
  715.    case GL_COMPRESSED_RED:
  716.       if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
  717.          RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
  718.       RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
  719.       break;
  720.  
  721.    case GL_R16:
  722.       RETURN_IF_SUPPORTED(MESA_FORMAT_R16);
  723.       break;
  724.  
  725.    case GL_RG:
  726.    case GL_RG8:
  727.       RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
  728.       break;
  729.  
  730.    case GL_COMPRESSED_RG:
  731.       if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
  732.          RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
  733.       RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
  734.       break;
  735.  
  736.    case GL_RG16:
  737.       RETURN_IF_SUPPORTED(MESA_FORMAT_GR1616);
  738.       break;
  739.  
  740.    case GL_R16F:
  741.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
  742.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
  743.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
  744.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
  745.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  746.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  747.       break;
  748.    case GL_R32F:
  749.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT32);
  750.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
  751.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  752.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_FLOAT16);
  753.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
  754.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  755.       break;
  756.    case GL_RG16F:
  757.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
  758.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
  759.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  760.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  761.       break;
  762.    case GL_RG32F:
  763.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT32);
  764.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT32);
  765.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_FLOAT16);
  766.       RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FLOAT16);
  767.       break;
  768.  
  769.    case GL_R8UI:
  770.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8);
  771.       break;
  772.    case GL_RG8UI:
  773.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT8);
  774.       break;
  775.    case GL_R16UI:
  776.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT16);
  777.       break;
  778.    case GL_RG16UI:
  779.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT16);
  780.       break;
  781.    case GL_R32UI:
  782.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT32);
  783.       break;
  784.    case GL_RG32UI:
  785.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_UINT32);
  786.       break;
  787.    case GL_R8I:
  788.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT8);
  789.       break;
  790.    case GL_RG8I:
  791.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT8);
  792.       break;
  793.    case GL_R16I:
  794.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT16);
  795.       break;
  796.    case GL_RG16I:
  797.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT16);
  798.       break;
  799.    case GL_R32I:
  800.       RETURN_IF_SUPPORTED(MESA_FORMAT_R_INT32);
  801.       break;
  802.    case GL_RG32I:
  803.       RETURN_IF_SUPPORTED(MESA_FORMAT_RG_INT32);
  804.       break;
  805.  
  806.    case GL_RGB10_A2UI:
  807.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB2101010_UINT);
  808.       RETURN_IF_SUPPORTED(MESA_FORMAT_ABGR2101010_UINT);
  809.       break;
  810.  
  811.    case GL_BGRA:
  812.       RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
  813.       break;
  814.    }
  815.  
  816.    _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()",
  817.                  _mesa_lookup_enum_by_nr(internalFormat));
  818.    return MESA_FORMAT_NONE;
  819. }
  820.  
  821. GLboolean
  822. _mesa_tex_target_is_array(GLenum target)
  823. {
  824.    switch (target) {
  825.    case GL_TEXTURE_1D_ARRAY_EXT:
  826.    case GL_TEXTURE_2D_ARRAY_EXT:
  827.    case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
  828.    case GL_TEXTURE_CUBE_MAP_ARRAY:
  829.       return GL_TRUE;
  830.    default:
  831.       return GL_FALSE;
  832.    }
  833. }
  834.