1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**************************************************************************
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright (c) 2008-2010 VMware, Inc.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved.
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish,
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions:
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software.
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Mesa / Gallium format conversion and format selection code.
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \author Brian Paul
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/imports.h"
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/context.h"
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/glformats.h"
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/texstore.h"
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/image.h"
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/macros.h"
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "main/mfeatures.h"
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_context.h"
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_defines.h"
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_screen.h"
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_format.h"
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "st_context.h"
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "st_format.h"
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Translate Mesa format to Gallium format.
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum pipe_format
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgst_mesa_format_to_pipe_format(gl_format mesaFormat)
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (mesaFormat) {
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA8888:
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A8B8G8R8_UNORM;
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA8888_REV:
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8B8A8_UNORM;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ARGB8888:
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B8G8R8A8_UNORM;
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ARGB8888_REV:
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A8R8G8B8_UNORM;
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBX8888:
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_X8B8G8R8_UNORM;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBX8888_REV:
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8B8X8_UNORM;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_XRGB8888:
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B8G8R8X8_UNORM;
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_XRGB8888_REV:
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_X8R8G8B8_UNORM;
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ARGB1555:
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B5G5R5A1_UNORM;
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ARGB4444:
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B4G4R4A4_UNORM;
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB565:
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B5G6R5_UNORM;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB332:
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B2G3R3_UNORM;
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ARGB2101010:
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B10G10R10A2_UNORM;
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_AL44:
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L4A4_UNORM;
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_AL88:
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8A8_UNORM;
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_AL1616:
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16A16_UNORM;
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_A8:
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A8_UNORM;
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_A16:
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A16_UNORM;
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_L8:
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8_UNORM;
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_L16:
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16_UNORM;
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_I8:
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I8_UNORM;
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_I16:
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I16_UNORM;
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_Z16:
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_Z16_UNORM;
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_Z32:
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_Z32_UNORM;
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_Z24_S8:
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_S8_UINT_Z24_UNORM;
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_S8_Z24:
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_Z24_UNORM_S8_UINT;
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_Z24_X8:
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_X8Z24_UNORM;
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_X8_Z24:
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_Z24X8_UNORM;
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_S8:
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_S8_UINT;
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_Z32_FLOAT:
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_Z32_FLOAT;
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_Z32_FLOAT_X24S8:
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_Z32_FLOAT_S8X24_UINT;
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_YCBCR:
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_UYVY;
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_texture_s3tc
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_DXT1:
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_DXT1_RGB;
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_DXT1:
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_DXT1_RGBA;
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_DXT3:
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_DXT3_RGBA;
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_DXT5:
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_DXT5_RGBA;
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_EXT_texture_sRGB
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SRGB_DXT1:
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_DXT1_SRGB;
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SRGBA_DXT1:
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_DXT1_SRGBA;
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SRGBA_DXT3:
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_DXT3_SRGBA;
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SRGBA_DXT5:
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_DXT5_SRGBA;
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_EXT_texture_sRGB
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SLA8:
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8A8_SRGB;
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SL8:
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8_SRGB;
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SRGB8:
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8B8_SRGB;
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SRGBA8:
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A8B8G8R8_SRGB;
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SARGB8:
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B8G8R8A8_SRGB;
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_FLOAT32:
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32B32A32_FLOAT;
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_FLOAT16:
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16B16A16_FLOAT;
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_FLOAT32:
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32B32_FLOAT;
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_FLOAT16:
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16B16_FLOAT;
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32:
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L32A32_FLOAT;
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16:
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16A16_FLOAT;
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_FLOAT32:
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L32_FLOAT;
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_FLOAT16:
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16_FLOAT;
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ALPHA_FLOAT32:
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A32_FLOAT;
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ALPHA_FLOAT16:
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A16_FLOAT;
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_INTENSITY_FLOAT32:
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I32_FLOAT;
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_INTENSITY_FLOAT16:
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I16_FLOAT;
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R_FLOAT32:
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32_FLOAT;
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R_FLOAT16:
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16_FLOAT;
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_FLOAT32:
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32_FLOAT;
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_FLOAT16:
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16_FLOAT;
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R8:
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8_UNORM;
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R16:
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16_UNORM;
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_GR88:
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8_UNORM;
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG1616:
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16_UNORM;
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_16:
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16B16A16_UNORM;
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* signed int formats */
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ALPHA_UINT8:
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A8_UINT;
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ALPHA_UINT16:
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A16_UINT;
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ALPHA_UINT32:
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A32_UINT;
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ALPHA_INT8:
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A8_SINT;
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ALPHA_INT16:
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A16_SINT;
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ALPHA_INT32:
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A32_SINT;
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_INTENSITY_UINT8:
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I8_UINT;
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_INTENSITY_UINT16:
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I16_UINT;
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_INTENSITY_UINT32:
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I32_UINT;
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_INTENSITY_INT8:
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I8_SINT;
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_INTENSITY_INT16:
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I16_SINT;
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_INTENSITY_INT32:
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I32_SINT;
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_UINT8:
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8_UINT;
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_UINT16:
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16_UINT;
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_UINT32:
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L32_UINT;
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_INT8:
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8_SINT;
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_INT16:
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16_SINT;
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_INT32:
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L32_SINT;
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_ALPHA_UINT8:
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8A8_UINT;
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_ALPHA_UINT16:
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16A16_UINT;
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_ALPHA_UINT32:
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L32A32_UINT;
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_ALPHA_INT8:
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8A8_SINT;
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_ALPHA_INT16:
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16A16_SINT;
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LUMINANCE_ALPHA_INT32:
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L32A32_SINT;
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R_INT8:
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8_SINT;
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_INT8:
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8_SINT;
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_INT8:
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8B8_SINT;
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_INT8:
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8B8A8_SINT;
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R_INT16:
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16_SINT;
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_INT16:
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16_SINT;
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_INT16:
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16B16_SINT;
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_INT16:
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16B16A16_SINT;
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R_INT32:
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32_SINT;
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_INT32:
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32_SINT;
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_INT32:
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32B32_SINT;
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_INT32:
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32B32A32_SINT;
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* unsigned int formats */
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R_UINT8:
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8_UINT;
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_UINT8:
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8_UINT;
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_UINT8:
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8B8_UINT;
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_UINT8:
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8B8A8_UINT;
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R_UINT16:
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16_UINT;
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_UINT16:
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16_UINT;
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_UINT16:
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16B16_UINT;
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_UINT16:
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16B16A16_UINT;
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R_UINT32:
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32_UINT;
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_UINT32:
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32_UINT;
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB_UINT32:
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32B32_UINT;
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGBA_UINT32:
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R32G32B32A32_UINT;
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RED_RGTC1:
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_RGTC1_UNORM;
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_RED_RGTC1:
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_RGTC1_SNORM;
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RG_RGTC2:
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_RGTC2_UNORM;
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_RG_RGTC2:
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_RGTC2_SNORM;
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_L_LATC1:
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_LATC1_UNORM;
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_L_LATC1:
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_LATC1_SNORM;
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_LA_LATC2:
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_LATC2_UNORM;
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_LA_LATC2:
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_LATC2_SNORM;
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ETC1_RGB8:
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_ETC1_RGB8;
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* signed normalized formats */
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_R8:
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8_SNORM;
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_RG88_REV:
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8_SNORM;
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_RGBA8888_REV:
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R8G8B8A8_SNORM;
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_A8:
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A8_SNORM;
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_L8:
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8_SNORM;
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_AL88:
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L8A8_SNORM;
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_I8:
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I8_SNORM;
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_R16:
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16_SNORM;
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_GR1616:
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16_SNORM;
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_RGBA_16:
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R16G16B16A16_SNORM;
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_A16:
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_A16_SNORM;
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_L16:
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16_SNORM;
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_AL1616:
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_L16A16_SNORM;
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_SIGNED_I16:
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_I16_SNORM;
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_RGB9_E5_FLOAT:
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R9G9B9E5_FLOAT;
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_R11_G11_B10_FLOAT:
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_R11G11B10_FLOAT;
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case MESA_FORMAT_ARGB2101010_UINT:
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_B10G10R10A2_UINT;
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      assert(0);
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_NONE;
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Translate Gallium format to Mesa format.
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggl_format
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgst_pipe_format_to_mesa_format(enum pipe_format format)
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (format) {
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A8B8G8R8_UNORM:
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA8888;
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8B8A8_UNORM:
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA8888_REV;
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B8G8R8A8_UNORM:
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ARGB8888;
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A8R8G8B8_UNORM:
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ARGB8888_REV;
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_X8B8G8R8_UNORM:
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBX8888;
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8B8X8_UNORM:
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBX8888_REV;
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B8G8R8X8_UNORM:
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_XRGB8888;
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_X8R8G8B8_UNORM:
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_XRGB8888_REV;
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B5G5R5A1_UNORM:
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ARGB1555;
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B4G4R4A4_UNORM:
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ARGB4444;
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B5G6R5_UNORM:
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB565;
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B2G3R3_UNORM:
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB332;
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B10G10R10A2_UNORM:
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ARGB2101010;
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L4A4_UNORM:
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_AL44;
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8A8_UNORM:
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_AL88;
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16A16_UNORM:
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_AL1616;
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A8_UNORM:
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_A8;
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A16_UNORM:
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_A16;
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8_UNORM:
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_L8;
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16_UNORM:
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_L16;
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I8_UNORM:
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_I8;
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I16_UNORM:
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_I16;
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_S8_UINT:
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_S8;
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16B16A16_UNORM:
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_16;
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_Z16_UNORM:
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_Z16;
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_Z32_UNORM:
433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_Z32;
434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_S8_UINT_Z24_UNORM:
435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_Z24_S8;
436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_X8Z24_UNORM:
437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_Z24_X8;
438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_Z24X8_UNORM:
439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_X8_Z24;
440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_Z24_UNORM_S8_UINT:
441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_S8_Z24;
442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_Z32_FLOAT:
443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_Z32_FLOAT;
444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_Z32_FLOAT_X24S8;
446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_UYVY:
448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_YCBCR;
449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_YUYV:
450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_YCBCR_REV;
451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_texture_s3tc
453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_DXT1_RGB:
454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_DXT1;
455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_DXT1_RGBA:
456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_DXT1;
457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_DXT3_RGBA:
458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_DXT3;
459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_DXT5_RGBA:
460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_DXT5;
461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_EXT_texture_sRGB
462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_DXT1_SRGB:
463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SRGB_DXT1;
464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_DXT1_SRGBA:
465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SRGBA_DXT1;
466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_DXT3_SRGBA:
467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SRGBA_DXT3;
468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_DXT5_SRGBA:
469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SRGBA_DXT5;
470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if FEATURE_EXT_texture_sRGB
474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8A8_SRGB:
475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SLA8;
476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8_SRGB:
477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SL8;
478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8B8_SRGB:
479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SRGB8;
480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A8B8G8R8_SRGB:
481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SRGBA8;
482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B8G8R8A8_SRGB:
483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SARGB8;
484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32B32A32_FLOAT:
486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_FLOAT32;
487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16B16A16_FLOAT:
488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_FLOAT16;
489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32B32_FLOAT:
490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_FLOAT32;
491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16B16_FLOAT:
492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_FLOAT16;
493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L32A32_FLOAT:
494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32;
495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16A16_FLOAT:
496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16;
497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L32_FLOAT:
498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_FLOAT32;
499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16_FLOAT:
500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_FLOAT16;
501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A32_FLOAT:
502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ALPHA_FLOAT32;
503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A16_FLOAT:
504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ALPHA_FLOAT16;
505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I32_FLOAT:
506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_INTENSITY_FLOAT32;
507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I16_FLOAT:
508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_INTENSITY_FLOAT16;
509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32_FLOAT:
510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R_FLOAT32;
511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16_FLOAT:
512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R_FLOAT16;
513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32_FLOAT:
514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_FLOAT32;
515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16_FLOAT:
516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_FLOAT16;
517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8_UNORM:
519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R8;
520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16_UNORM:
521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R16;
522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8_UNORM:
523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_GR88;
524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16_UNORM:
525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG1616;
526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A8_UINT:
528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ALPHA_UINT8;
529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A16_UINT:
530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ALPHA_UINT16;
531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A32_UINT:
532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ALPHA_UINT32;
533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A8_SINT:
534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ALPHA_INT8;
535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A16_SINT:
536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ALPHA_INT16;
537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A32_SINT:
538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ALPHA_INT32;
539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I8_UINT:
541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_INTENSITY_UINT8;
542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I16_UINT:
543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_INTENSITY_UINT16;
544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I32_UINT:
545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_INTENSITY_UINT32;
546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I8_SINT:
547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_INTENSITY_INT8;
548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I16_SINT:
549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_INTENSITY_INT16;
550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I32_SINT:
551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_INTENSITY_INT32;
552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  case PIPE_FORMAT_L8_UINT:
554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_UINT8;
555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16_UINT:
556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_UINT16;
557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L32_UINT:
558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_UINT32;
559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8_SINT:
560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_INT8;
561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16_SINT:
562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_INT16;
563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L32_SINT:
564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_INT32;
565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8A8_UINT:
567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_ALPHA_UINT8;
568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16A16_UINT:
569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_ALPHA_UINT16;
570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L32A32_UINT:
571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_ALPHA_UINT32;
572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8A8_SINT:
573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_ALPHA_INT8;
574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16A16_SINT:
575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_ALPHA_INT16;
576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L32A32_SINT:
577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LUMINANCE_ALPHA_INT32;
578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8_SINT:
580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R_INT8;
581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8_SINT:
582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_INT8;
583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8B8_SINT:
584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_INT8;
585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8B8A8_SINT:
586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_INT8;
587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16_SINT:
589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R_INT16;
590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16_SINT:
591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_INT16;
592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16B16_SINT:
593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_INT16;
594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16B16A16_SINT:
595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_INT16;
596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32_SINT:
598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R_INT32;
599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32_SINT:
600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_INT32;
601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32B32_SINT:
602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_INT32;
603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32B32A32_SINT:
604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_INT32;
605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* unsigned int formats */
607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8_UINT:
608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R_UINT8;
609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8_UINT:
610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_UINT8;
611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8B8_UINT:
612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_UINT8;
613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8B8A8_UINT:
614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_UINT8;
615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16_UINT:
617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R_UINT16;
618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16_UINT:
619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_UINT16;
620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16B16_UINT:
621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_UINT16;
622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16B16A16_UINT:
623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_UINT16;
624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32_UINT:
626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R_UINT32;
627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32_UINT:
628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_UINT32;
629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32B32_UINT:
630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB_UINT32;
631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R32G32B32A32_UINT:
632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGBA_UINT32;
633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_RGTC1_UNORM:
635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RED_RGTC1;
636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_RGTC1_SNORM:
637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_RED_RGTC1;
638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_RGTC2_UNORM:
639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RG_RGTC2;
640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_RGTC2_SNORM:
641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_RG_RGTC2;
642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_LATC1_UNORM:
644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_L_LATC1;
645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_LATC1_SNORM:
646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_L_LATC1;
647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_LATC2_UNORM:
648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_LA_LATC2;
649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_LATC2_SNORM:
650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_LA_LATC2;
651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_ETC1_RGB8:
653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ETC1_RGB8;
654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* signed normalized formats */
656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8_SNORM:
657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_R8;
658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8_SNORM:
659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_RG88_REV;
660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R8G8B8A8_SNORM:
661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_RGBA8888_REV;
662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A8_SNORM:
664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_A8;
665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8_SNORM:
666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_L8;
667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L8A8_SNORM:
668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_AL88;
669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I8_SNORM:
670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_I8;
671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16_SNORM:
673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_R16;
674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16_SNORM:
675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_GR1616;
676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R16G16B16A16_SNORM:
677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_RGBA_16;
678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_A16_SNORM:
680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_A16;
681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16_SNORM:
682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_L16;
683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_L16A16_SNORM:
684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_AL1616;
685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_I16_SNORM:
686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_SIGNED_I16;
687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R9G9B9E5_FLOAT:
689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_RGB9_E5_FLOAT;
690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_R11G11B10_FLOAT:
691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_R11_G11_B10_FLOAT;
692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case PIPE_FORMAT_B10G10R10A2_UINT:
694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_ARGB2101010_UINT;
695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      assert(0);
697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_NONE;
698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Map GL texture formats to Gallium pipe formats.
704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct format_mapping
706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLenum glFormats[18];       /**< list of GLenum formats, 0-terminated */
708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   enum pipe_format pipeFormats[10]; /**< list of pipe formats, 0-terminated */
709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEFAULT_RGBA_FORMATS \
713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_B8G8R8A8_UNORM, \
714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_A8R8G8B8_UNORM, \
715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_A8B8G8R8_UNORM, \
716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_B5G6R5_UNORM, \
717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      0
718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEFAULT_RGB_FORMATS \
720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_B8G8R8X8_UNORM, \
721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_X8R8G8B8_UNORM, \
722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_X8B8G8R8_UNORM, \
723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_B8G8R8A8_UNORM, \
724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_A8R8G8B8_UNORM, \
725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_A8B8G8R8_UNORM, \
726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_B5G6R5_UNORM, \
727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      0
728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEFAULT_SRGBA_FORMATS \
730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_B8G8R8A8_SRGB, \
731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_A8R8G8B8_SRGB, \
732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_A8B8G8R8_SRGB, \
733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      0
734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEFAULT_DEPTH_FORMATS \
736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_Z24X8_UNORM, \
737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_X8Z24_UNORM, \
738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_Z16_UNORM, \
739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_Z24_UNORM_S8_UINT, \
740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_S8_UINT_Z24_UNORM, \
741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      0
742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEFAULT_SNORM8_RGBA_FORMATS \
744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_R8G8B8A8_SNORM, \
745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      0
746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define DEFAULT_UNORM16_RGBA_FORMATS \
748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      PIPE_FORMAT_R16G16B16A16_UNORM, \
749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      DEFAULT_RGBA_FORMATS
750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This table maps OpenGL texture format enums to Gallium pipe_format enums.
754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Multiple GL enums might map to multiple pipe_formats.
755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The first pipe format in the list that's supported is the one that's chosen.
756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const struct format_mapping format_map[] = {
758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* Basic RGB, RGBA formats */
759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB10, GL_RGB10_A2, 0 },
761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_B10G10R10A2_UNORM, DEFAULT_RGBA_FORMATS }
762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 4, GL_RGBA, GL_RGBA8, 0 },
765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8G8B8A8_UNORM, DEFAULT_RGBA_FORMATS }
766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_BGRA, 0 },
769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_B8G8R8A8_UNORM, DEFAULT_RGBA_FORMATS }
770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 3, GL_RGB, GL_RGB8, 0 },
773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { DEFAULT_RGB_FORMATS }
774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB12, GL_RGB16, GL_RGBA12, GL_RGBA16, 0 },
777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16B16A16_UNORM, DEFAULT_RGBA_FORMATS }
778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA4, GL_RGBA2, 0 },
781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_B4G4R4A4_UNORM, DEFAULT_RGBA_FORMATS }
782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB5_A1, 0 },
785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_B5G5R5A1_UNORM, DEFAULT_RGBA_FORMATS }
786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_R3_G3_B2, 0 },
789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_B2G3R3_UNORM, PIPE_FORMAT_B5G6R5_UNORM,
790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_B5G5R5A1_UNORM, DEFAULT_RGBA_FORMATS }
791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB5, GL_RGB4 },
794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_B5G6R5_UNORM, PIPE_FORMAT_B5G5R5A1_UNORM,
795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        DEFAULT_RGBA_FORMATS }
796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB565 },
799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_B5G6R5_UNORM, DEFAULT_RGBA_FORMATS }
800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* basic Alpha formats */
803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA12, GL_ALPHA16, 0 },
805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A16_UNORM, PIPE_FORMAT_A8_UNORM,
806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        DEFAULT_RGBA_FORMATS }
807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_COMPRESSED_ALPHA, 0 },
810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A8_UNORM, DEFAULT_RGBA_FORMATS }
811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* basic Luminance formats */
814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE12, GL_LUMINANCE16, 0 },
816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16_UNORM, PIPE_FORMAT_L8_UNORM, DEFAULT_RGB_FORMATS }
817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 1, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, 0 },
820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8_UNORM, DEFAULT_RGB_FORMATS }
821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* basic Luminance/Alpha formats */
824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12,
826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_LUMINANCE16_ALPHA16, 0},
827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16A16_UNORM, PIPE_FORMAT_L8A8_UNORM,
828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        DEFAULT_RGBA_FORMATS }
829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 2, GL_LUMINANCE_ALPHA, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, 0 },
832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8A8_UNORM, DEFAULT_RGBA_FORMATS }
833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE4_ALPHA4, 0 },
836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L4A4_UNORM, PIPE_FORMAT_L8A8_UNORM,
837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        DEFAULT_RGBA_FORMATS }
838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* basic Intensity formats */
841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY12, GL_INTENSITY16, 0 },
843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I16_UNORM, PIPE_FORMAT_I8_UNORM, DEFAULT_RGBA_FORMATS }
844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8,
847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_COMPRESSED_INTENSITY, 0 },
848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I8_UNORM, DEFAULT_RGBA_FORMATS }
849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* YCbCr */
852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_YCBCR_MESA, 0 },
854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_UYVY, PIPE_FORMAT_YUYV, 0 }
855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* compressed formats */ /* XXX PIPE_BIND_SAMPLER_VIEW only */
858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_RGB, 0 },
860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT1_RGB, DEFAULT_RGB_FORMATS }
861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_RGBA, 0 },
864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT5_RGBA, DEFAULT_RGBA_FORMATS }
865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB_S3TC, GL_RGB4_S3TC, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 0 },
868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT1_RGB, 0 }
869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 0 },
872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT1_RGBA, 0 }
873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA_S3TC, GL_RGBA4_S3TC, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 0 },
876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT3_RGBA, 0 }
877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 0 },
880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT5_RGBA, 0 }
881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0
884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_RGB_FXT1_3DFX, 0 },
886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_RGB_FXT1, 0 }
887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_RGBA_FXT1_3DFX, 0 },
890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_RGBA_FXT1, 0 }
891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* Depth formats */
895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_DEPTH_COMPONENT16, 0 },
897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_Z16_UNORM, DEFAULT_DEPTH_FORMATS }
898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_DEPTH_COMPONENT24, 0 },
901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_Z24X8_UNORM, PIPE_FORMAT_X8Z24_UNORM,
902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        DEFAULT_DEPTH_FORMATS }
903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_DEPTH_COMPONENT32, 0 },
906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_Z32_UNORM, DEFAULT_DEPTH_FORMATS }
907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_DEPTH_COMPONENT, 0 },
910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { DEFAULT_DEPTH_FORMATS }
911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_DEPTH_COMPONENT32F, 0 },
914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_Z32_FLOAT, 0 }
915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* stencil formats */
918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_STENCIL_INDEX, GL_STENCIL_INDEX1_EXT, GL_STENCIL_INDEX4_EXT,
920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_STENCIL_INDEX8_EXT, GL_STENCIL_INDEX16_EXT, 0 },
921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {
922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         PIPE_FORMAT_S8_UINT, PIPE_FORMAT_Z24_UNORM_S8_UINT,
923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         PIPE_FORMAT_S8_UINT_Z24_UNORM, 0
924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* Depth / Stencil formats */
928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_DEPTH_STENCIL_EXT, GL_DEPTH24_STENCIL8_EXT, 0 },
930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_Z24_UNORM_S8_UINT, PIPE_FORMAT_S8_UINT_Z24_UNORM, 0 }
931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_DEPTH32F_STENCIL8, 0 },
934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_Z32_FLOAT_S8X24_UINT, 0 }
935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* sRGB formats */
938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_SRGB_EXT, GL_SRGB8_EXT, GL_SRGB_ALPHA_EXT, GL_SRGB8_ALPHA8_EXT, 0 },
940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { DEFAULT_SRGBA_FORMATS }
941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_SRGB_EXT, GL_COMPRESSED_SRGB_S3TC_DXT1_EXT, 0 },
944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT1_SRGB, DEFAULT_SRGBA_FORMATS }
945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT, 0 },
948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT1_SRGBA, 0 }
949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_SRGB_ALPHA_EXT,
952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, 0 },
953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT3_SRGBA, DEFAULT_SRGBA_FORMATS }
954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, 0 },
957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_DXT5_SRGBA, 0 }
958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_SLUMINANCE_ALPHA_EXT, GL_SLUMINANCE8_ALPHA8_EXT,
961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_COMPRESSED_SLUMINANCE_EXT, GL_COMPRESSED_SLUMINANCE_ALPHA_EXT, 0 },
962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8A8_SRGB, DEFAULT_SRGBA_FORMATS }
963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_SLUMINANCE_EXT, GL_SLUMINANCE8_EXT, 0 },
966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8_SRGB, DEFAULT_SRGBA_FORMATS }
967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* 16-bit float formats */
970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA16F_ARB, 0 },
972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16B16A16_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 }
973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB16F_ARB, 0 },
976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16B16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT,
977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32B32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 }
978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA16F_ARB, 0 },
981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT,
982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 }
983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA16F_ARB, 0 },
986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A16_FLOAT, PIPE_FORMAT_L16A16_FLOAT,
987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_A32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT,
988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 }
989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY16F_ARB, 0 },
992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I16_FLOAT, PIPE_FORMAT_L16A16_FLOAT,
993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_I32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT,
994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 }
995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE16F_ARB, 0 },
998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16_FLOAT, PIPE_FORMAT_L16A16_FLOAT,
999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT,
1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 }
1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_R16F, 0 },
1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16_FLOAT, PIPE_FORMAT_R16G16_FLOAT,
1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT,
1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 }
1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RG16F, 0 },
1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT,
1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 }
1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* 32-bit float formats */
1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA32F_ARB, 0 },
1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 }
1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB32F_ARB, 0 },
1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R32G32B32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT,
1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R16G16B16A16_FLOAT, 0 }
1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA32F_ARB, 0 },
1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT,
1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 }
1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA32F_ARB, 0 },
1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A32_FLOAT, PIPE_FORMAT_L32A32_FLOAT,
1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_A16_FLOAT,
1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 }
1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY32F_ARB, 0 },
1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I32_FLOAT, PIPE_FORMAT_L32A32_FLOAT,
1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_I16_FLOAT,
1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 }
1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE32F_ARB, 0 },
1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L32_FLOAT, PIPE_FORMAT_L32A32_FLOAT,
1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_L16_FLOAT,
1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 }
1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_R32F, 0 },
1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R32_FLOAT, PIPE_FORMAT_R32G32_FLOAT,
1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_R16_FLOAT,
1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R16G16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 }
1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RG32F, 0 },
1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R32G32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT,
1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R16G16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 }
1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* R, RG formats */
1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RED, GL_R8, 0 },
1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8_UNORM, PIPE_FORMAT_R8G8_UNORM, DEFAULT_RGBA_FORMATS }
1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RG, GL_RG8, 0 },
1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8G8_UNORM, DEFAULT_RGBA_FORMATS }
1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_R16, 0 },
1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16_UNORM, PIPE_FORMAT_R16G16_UNORM,
1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        DEFAULT_UNORM16_RGBA_FORMATS }
1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RG16, 0 },
1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16_UNORM, DEFAULT_UNORM16_RGBA_FORMATS }
1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* compressed R, RG formats */
1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_RED, GL_COMPRESSED_RED_RGTC1, 0 },
1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_RGTC1_UNORM, PIPE_FORMAT_R8_UNORM, DEFAULT_RGBA_FORMATS }
1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_SIGNED_RED_RGTC1, 0 },
1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_RGTC1_SNORM, DEFAULT_SNORM8_RGBA_FORMATS }
1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_RG, GL_COMPRESSED_RG_RGTC2, 0 },
1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_RGTC2_UNORM, PIPE_FORMAT_R8G8_UNORM, DEFAULT_RGBA_FORMATS }
1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_SIGNED_RG_RGTC2, 0 },
1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_RGTC2_SNORM, DEFAULT_SNORM8_RGBA_FORMATS }
1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_LUMINANCE, GL_COMPRESSED_LUMINANCE_LATC1_EXT, 0 },
1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_LATC1_UNORM, PIPE_FORMAT_L8_UNORM, DEFAULT_RGBA_FORMATS }
1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT, 0 },
1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_LATC1_SNORM, DEFAULT_SNORM8_RGBA_FORMATS }
1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_LUMINANCE_ALPHA, GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT,
1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI, 0 },
1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_LATC2_UNORM, PIPE_FORMAT_L8A8_UNORM, DEFAULT_RGBA_FORMATS }
1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT, 0 },
1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_LATC2_SNORM, DEFAULT_SNORM8_RGBA_FORMATS }
1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* ETC1 */
1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ETC1_RGB8_OES, 0 },
1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_ETC1_RGB8, 0 }
1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* signed/unsigned integer formats.
1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RED_INTEGER_EXT,
1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_GREEN_INTEGER_EXT,
1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_BLUE_INTEGER_EXT,
1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_RGBA_INTEGER_EXT,
1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_BGRA_INTEGER_EXT,
1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_RGBA8I_EXT, 0 },
1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8G8B8A8_SINT, 0 }
1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB_INTEGER_EXT,
1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_BGR_INTEGER_EXT,
1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_RGB8I_EXT, 0 },
1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8G8B8_SINT,
1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R8G8B8A8_SINT, 0 }
1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA_INTEGER_EXT,
1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_ALPHA8I_EXT, 0 },
1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A8_SINT, 0 }
1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA16I_EXT, 0 },
1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A16_SINT, 0 }
1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA32I_EXT, 0 },
1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A32_SINT, 0 }
1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA8UI_EXT, 0 },
1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A8_UINT, 0 }
1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA16UI_EXT, 0 },
1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A16_UINT, 0 }
1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA32UI_EXT, 0 },
1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A32_UINT, 0 }
1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY8I_EXT, 0 },
1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I8_SINT, 0 }
1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY16I_EXT, 0 },
1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I16_SINT, 0 }
1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY32I_EXT, 0 },
1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I32_SINT, 0 }
1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY8UI_EXT, 0 },
1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I8_UINT, 0 }
1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY16UI_EXT, 0 },
1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I16_UINT, 0 }
1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY32UI_EXT, 0 },
1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I32_UINT, 0 }
1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE8I_EXT, 0 },
1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8_SINT, 0 }
1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE16I_EXT, 0 },
1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16_SINT, 0 }
1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE32I_EXT, 0 },
1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L32_SINT, 0 }
1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_INTEGER_EXT,
1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_LUMINANCE8UI_EXT, 0 },
1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8_UINT, 0 }
1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE16UI_EXT, 0 },
1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16_UINT, 0 }
1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE32UI_EXT, 0 },
1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L32_UINT, 0 }
1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA_INTEGER_EXT,
1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        GL_LUMINANCE_ALPHA8I_EXT, 0 },
1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8A8_SINT, 0 }
1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA16I_EXT, 0 },
1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16A16_SINT, 0 }
1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA32I_EXT, 0 },
1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L32A32_SINT, 0 }
1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA8UI_EXT, 0 },
1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8A8_UINT, 0 }
1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA16UI_EXT, 0 },
1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16A16_UINT, 0 }
1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA32UI_EXT, 0 },
1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L32A32_UINT, 0 }
1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB16I_EXT, 0 },
1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16B16_SINT,
1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R16G16B16A16_SINT, 0 },
1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA16I_EXT, 0 },
1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16B16A16_SINT, 0 },
1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB32I_EXT, 0 },
1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R32G32B32_SINT,
1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32B32A32_SINT, 0 },
1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA32I_EXT, 0 },
1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R32G32B32A32_SINT, 0 }
1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA8UI_EXT, 0 },
1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8G8B8A8_UINT, 0 }
1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB8UI_EXT, 0 },
1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8G8B8_UINT,
1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R8G8B8A8_UINT, 0 }
1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB16UI_EXT, 0 },
1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16B16_UINT,
1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R16G16B16A16_UINT, 0 }
1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA16UI_EXT, 0 },
1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16B16A16_UINT, 0 }
1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB32UI_EXT, 0},
1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R32G32B32_UINT,
1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R32G32B32A32_UINT, 0 }
1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGBA32UI_EXT, 0},
1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R32G32B32A32_UINT, 0 }
1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_R8I, 0},
1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R8_SINT, 0},
1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_R16I, 0},
1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R16_SINT, 0},
1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_R32I, 0},
1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R32_SINT, 0},
1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  {
1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_R8UI, 0},
1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R8_UINT, 0},
1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_R16UI, 0},
1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R16_UINT, 0},
1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_R32UI, 0},
1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R32_UINT, 0},
1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_RG8I, 0},
1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R8G8_SINT, 0},
1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_RG16I, 0},
1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R16G16_SINT, 0},
1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_RG32I, 0},
1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R32G32_SINT, 0},
1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  {
1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_RG8UI, 0},
1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R8G8_UINT, 0},
1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_RG16UI, 0},
1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R16G16_UINT, 0},
1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { GL_RG32UI, 0},
1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org     { PIPE_FORMAT_R32G32_UINT, 0},
1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* signed normalized formats */
1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RED_SNORM, GL_R8_SNORM, 0 },
1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8_SNORM, PIPE_FORMAT_R8G8_SNORM,
1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_R16_SNORM, 0 },
1337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16_SNORM,
1338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R16G16_SNORM,
1339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R16G16B16A16_SNORM,
1340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R8_SNORM,
1341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R8G8_SNORM,
1342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RG_SNORM, GL_RG8_SNORM, 0 },
1346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8G8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RG16_SNORM, 0 },
1350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM,
1351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_R8G8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB_SNORM, GL_RGB8_SNORM, GL_RGBA_SNORM, GL_RGBA8_SNORM, 0 },
1355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB16_SNORM, GL_RGBA16_SNORM, 0 },
1359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R16G16B16A16_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA_SNORM, GL_ALPHA8_SNORM, 0 },
1363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_ALPHA16_SNORM, 0 },
1367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_A16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM,
1368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_A8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_SNORM, GL_LUMINANCE8_SNORM, 0 },
1372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE16_SNORM, 0 },
1376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM,
1377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE_ALPHA_SNORM, GL_LUMINANCE8_ALPHA8_SNORM, 0 },
1381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L8A8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_LUMINANCE16_ALPHA16_SNORM, 0 },
1385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_L16A16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM,
1386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_L8A8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY_SNORM, GL_INTENSITY8_SNORM, 0 },
1390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_INTENSITY16_SNORM, 0 },
1394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_I16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM,
1395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        PIPE_FORMAT_I8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 }
1396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB9_E5, 0 },
1399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R9G9B9E5_FLOAT, 0 }
1400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_R11F_G11F_B10F, 0 },
1403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_R11G11B10_FLOAT, 0 }
1404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
1406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { GL_RGB10_A2UI, 0 },
1407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { PIPE_FORMAT_B10G10R10A2_UINT, 0 }
1408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
1409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
1410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
1413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Return first supported format from the given list.
1414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
1415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic enum pipe_format
1416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfind_supported_format(struct pipe_screen *screen,
1417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      const enum pipe_format formats[],
1418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      enum pipe_texture_target target,
1419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      unsigned sample_count,
1420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                      unsigned tex_usage)
1421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint i;
1423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for (i = 0; formats[i]; i++) {
1424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (screen->is_format_supported(screen, formats[i], target,
1425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                      sample_count, tex_usage)) {
1426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return formats[i];
1427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return PIPE_FORMAT_NONE;
1430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct exact_format_mapping
1433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLenum format;
1435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GLenum type;
1436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   enum pipe_format pformat;
1437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
1438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const struct exact_format_mapping rgba8888_tbl[] =
1440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_RGBA,     GL_UNSIGNED_INT_8_8_8_8,        PIPE_FORMAT_A8B8G8R8_UNORM },
1442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_ABGR_EXT, GL_UNSIGNED_INT_8_8_8_8_REV,    PIPE_FORMAT_A8B8G8R8_UNORM },
1443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_RGBA,     GL_UNSIGNED_INT_8_8_8_8_REV,    PIPE_FORMAT_R8G8B8A8_UNORM },
1444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_ABGR_EXT, GL_UNSIGNED_INT_8_8_8_8,        PIPE_FORMAT_R8G8B8A8_UNORM },
1445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_BGRA,     GL_UNSIGNED_INT_8_8_8_8,        PIPE_FORMAT_A8R8G8B8_UNORM },
1446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_BGRA,     GL_UNSIGNED_INT_8_8_8_8_REV,    PIPE_FORMAT_B8G8R8A8_UNORM },
1447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_RGBA,     GL_UNSIGNED_BYTE,               PIPE_FORMAT_R8G8B8A8_UNORM },
1448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_ABGR_EXT, GL_UNSIGNED_BYTE,               PIPE_FORMAT_A8B8G8R8_UNORM },
1449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_BGRA,     GL_UNSIGNED_BYTE,               PIPE_FORMAT_B8G8R8A8_UNORM },
1450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { 0,           0,                              0                          }
1451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
1452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const struct exact_format_mapping rgbx8888_tbl[] =
1454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_BGRA,     GL_UNSIGNED_INT_8_8_8_8,        PIPE_FORMAT_X8R8G8B8_UNORM },
1456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_BGRA,     GL_UNSIGNED_INT_8_8_8_8_REV,    PIPE_FORMAT_B8G8R8X8_UNORM },
1457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_BGRA,     GL_UNSIGNED_BYTE,               PIPE_FORMAT_B8G8R8X8_UNORM },
1458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* No Mesa formats for these Gallium formats:
1459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_RGBA,     GL_UNSIGNED_INT_8_8_8_8,        PIPE_FORMAT_X8B8G8R8_UNORM },
1460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_ABGR_EXT, GL_UNSIGNED_INT_8_8_8_8_REV,    PIPE_FORMAT_X8B8G8R8_UNORM },
1461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_RGBA,     GL_UNSIGNED_INT_8_8_8_8_REV,    PIPE_FORMAT_R8G8B8X8_UNORM },
1462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_ABGR_EXT, GL_UNSIGNED_INT_8_8_8_8,        PIPE_FORMAT_R8G8B8X8_UNORM },
1463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_RGBA,     GL_UNSIGNED_BYTE,               PIPE_FORMAT_R8G8B8X8_UNORM },
1464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_ABGR_EXT, GL_UNSIGNED_BYTE,               PIPE_FORMAT_X8B8G8R8_UNORM },
1465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   */
1466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { 0,           0,                              0                          }
1467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
1468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const struct exact_format_mapping rgba1010102_tbl[] =
1470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_BGRA,     GL_UNSIGNED_INT_2_10_10_10_REV, PIPE_FORMAT_B10G10R10A2_UNORM },
1472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* No Mesa formats for these Gallium formats:
1473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_RGBA,     GL_UNSIGNED_INT_2_10_10_10_REV, PIPE_FORMAT_R10G10B10A2_UNORM },
1474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_ABGR_EXT, GL_UNSIGNED_INT_10_10_10_2,     PIPE_FORMAT_R10G10B10A2_UNORM },
1475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { GL_ABGR_EXT, GL_UNSIGNED_INT,                PIPE_FORMAT_R10G10B10A2_UNORM },
1476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   */
1477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   { 0,           0,                              0                             }
1478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
1479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
1481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * If there is an exact pipe_format match for {internalFormat, format, type}
1482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * return that, otherwise return PIPE_FORMAT_NONE so we can do fuzzy matching.
1483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
1484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic enum pipe_format
1485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfind_exact_format(GLint internalFormat, GLenum format, GLenum type)
1486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint i;
1488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct exact_format_mapping* tbl;
1489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (format == GL_NONE || type == GL_NONE)
1491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_NONE;
1492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   switch (internalFormat) {
1494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case 4:
1495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_RGBA:
1496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_RGBA8:
1497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      tbl = rgba8888_tbl;
1498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case 3:
1500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_RGB:
1501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_RGB8:
1502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      tbl = rgbx8888_tbl;
1503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   case GL_RGB10_A2:
1505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      tbl = rgba1010102_tbl;
1506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      break;
1507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   default:
1508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_NONE;
1509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for (i = 0; tbl[i].format; i++)
1512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (tbl[i].format == format && tbl[i].type == type)
1513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         return tbl[i].pformat;
1514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return PIPE_FORMAT_NONE;
1516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
1519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Given an OpenGL internalFormat value for a texture or surface, return
1520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the best matching PIPE_FORMAT_x, or PIPE_FORMAT_NONE if there's no match.
1521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is called during glTexImage2D, for example.
1522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
1523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The bindings parameter typically has PIPE_BIND_SAMPLER_VIEW set, plus
1524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * either PIPE_BINDING_RENDER_TARGET or PIPE_BINDING_DEPTH_STENCIL if
1525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * we want render-to-texture ability.
1526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
1527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param internalFormat  the user value passed to glTexImage2D
1528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param target  one of PIPE_TEXTURE_x
1529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \param bindings  bitmask of PIPE_BIND_x flags.
1530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
1531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum pipe_format
1532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgst_choose_format(struct pipe_screen *screen, GLenum internalFormat,
1533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 GLenum format, GLenum type,
1534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 enum pipe_texture_target target, unsigned sample_count,
1535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 unsigned bindings)
1536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   GET_CURRENT_CONTEXT(ctx); /* XXX this should be a function parameter */
1538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int i, j;
1539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   enum pipe_format pf;
1540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* can't render to compressed formats at this time */
1542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (_mesa_is_compressed_format(ctx, internalFormat)
1543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       && (bindings & ~PIPE_BIND_SAMPLER_VIEW)) {
1544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return PIPE_FORMAT_NONE;
1545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* search for exact matches */
1548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   pf = find_exact_format(internalFormat, format, type);
1549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (pf != PIPE_FORMAT_NONE &&
1550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       screen->is_format_supported(screen, pf,
1551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                   target, sample_count, bindings))
1552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return pf;
1553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* search table for internalFormat */
1555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   for (i = 0; i < Elements(format_map); i++) {
1556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      const struct format_mapping *mapping = &format_map[i];
1557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      for (j = 0; mapping->glFormats[j]; j++) {
1558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         if (mapping->glFormats[j] == internalFormat) {
1559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            /* Found the desired internal format.  Find first pipe format
1560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org             * which is supported by the driver.
1561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org             */
1562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return find_supported_format(screen, mapping->pipeFormats,
1563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                         target, sample_count, bindings);
1564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         }
1565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   _mesa_problem(NULL, "unhandled format!\n");
1569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return PIPE_FORMAT_NONE;
1570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
1574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Called by FBO code to choose a PIPE_FORMAT_ for drawing surfaces.
1575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
1576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum pipe_format
1577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgst_choose_renderbuffer_format(struct pipe_screen *screen,
1578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              GLenum internalFormat, unsigned sample_count)
1579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint usage;
1581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (_mesa_is_depth_or_stencil_format(internalFormat))
1582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      usage = PIPE_BIND_DEPTH_STENCIL;
1583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   else
1584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      usage = PIPE_BIND_RENDER_TARGET;
1585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return st_choose_format(screen, internalFormat, GL_NONE, GL_NONE, PIPE_TEXTURE_2D,
1586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                           sample_count, usage);
1587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggl_format
1591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgst_ChooseTextureFormat_renderable(struct gl_context *ctx, GLint internalFormat,
1592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org				  GLenum format, GLenum type, GLboolean renderable)
1593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_screen *screen = st_context(ctx)->pipe->screen;
1595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   enum pipe_format pFormat;
1596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   uint bindings;
1597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   (void) format;
1599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   (void) type;
1600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* GL textures may wind up being render targets, but we don't know
1602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * that in advance.  Specify potential render target flags now.
1603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
1604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   bindings = PIPE_BIND_SAMPLER_VIEW;
1605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (renderable) {
1606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (_mesa_is_depth_or_stencil_format(internalFormat))
1607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 bindings |= PIPE_BIND_DEPTH_STENCIL;
1608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      else
1609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	 bindings |= PIPE_BIND_RENDER_TARGET;
1610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   pFormat = st_choose_format(screen, internalFormat, format, type,
1613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              PIPE_TEXTURE_2D, 0, bindings);
1614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (pFormat == PIPE_FORMAT_NONE) {
1616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* try choosing format again, this time without render target bindings */
1617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      pFormat = st_choose_format(screen, internalFormat, format, type,
1618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 PIPE_TEXTURE_2D, 0, PIPE_BIND_SAMPLER_VIEW);
1619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (pFormat == PIPE_FORMAT_NONE) {
1622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* no luck at all */
1623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return MESA_FORMAT_NONE;
1624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return st_pipe_format_to_mesa_format(pFormat);
1627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
1631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Called via ctx->Driver.ChooseTextureFormat().
1632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
1633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orggl_format
1634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgst_ChooseTextureFormat(struct gl_context *ctx, GLenum target,
1635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       GLint internalFormat,
1636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       GLenum format, GLenum type)
1637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   boolean want_renderable =
1639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      internalFormat == 3 || internalFormat == 4 ||
1640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      internalFormat == GL_RGB || internalFormat == GL_RGBA ||
1641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      internalFormat == GL_RGB8 || internalFormat == GL_RGBA8 ||
1642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      internalFormat == GL_BGRA;
1643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (target == GL_TEXTURE_1D || target == GL_TEXTURE_1D_ARRAY) {
1645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      /* We don't do compression for these texture targets because of
1646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * difficulty with sub-texture updates on non-block boundaries, etc.
1647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       * So change the internal format request to an uncompressed format.
1648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       */
1649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      internalFormat =
1650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        _mesa_generic_compressed_format_to_uncompressed_format(internalFormat);
1651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return st_ChooseTextureFormat_renderable(ctx, internalFormat,
1654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org					    format, type, want_renderable);
1655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgGLboolean
1659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgst_sampler_compat_formats(enum pipe_format format1, enum pipe_format format2)
1660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (format1 == format2)
1662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
1663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (format1 == PIPE_FORMAT_B8G8R8A8_UNORM &&
1665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       format2 == PIPE_FORMAT_B8G8R8X8_UNORM)
1666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
1667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (format1 == PIPE_FORMAT_B8G8R8X8_UNORM &&
1669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       format2 == PIPE_FORMAT_B8G8R8A8_UNORM)
1670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
1671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (format1 == PIPE_FORMAT_A8B8G8R8_UNORM &&
1673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       format2 == PIPE_FORMAT_X8B8G8R8_UNORM)
1674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
1675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (format1 == PIPE_FORMAT_X8B8G8R8_UNORM &&
1677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       format2 == PIPE_FORMAT_A8B8G8R8_UNORM)
1678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
1679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (format1 == PIPE_FORMAT_A8R8G8B8_UNORM &&
1681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       format2 == PIPE_FORMAT_X8R8G8B8_UNORM)
1682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
1683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (format1 == PIPE_FORMAT_X8R8G8B8_UNORM &&
1685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org       format2 == PIPE_FORMAT_A8R8G8B8_UNORM)
1686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return GL_TRUE;
1687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return GL_FALSE;
1689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
1694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This is used for translating texture border color and the clear
1695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * color.  For example, the clear color is interpreted according to
1696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the renderbuffer's base format.  For example, if clearing a
1697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GL_LUMINANCE buffer, we'll return colorOut[0] = colorOut[1] =
1698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * colorOut[2] = colorIn[0].
1699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Similarly for texture border colors.
1700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
1701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
1702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgst_translate_color(union gl_color_union *colorIn,
1703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   union pipe_color_union *colorOut,
1704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   GLenum baseFormat, GLboolean is_integer)
1705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (is_integer) {
1707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      int *in = colorIn->i;
1708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      int *out = colorOut->i;
1709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      switch (baseFormat) {
1711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_RED:
1712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = in[0];
1713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[1] = 0;
1714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[2] = 0;
1715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = 1;
1716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_RG:
1718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = in[0];
1719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[1] = in[1];
1720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[2] = 0;
1721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = 1;
1722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_RGB:
1724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = in[0];
1725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[1] = in[1];
1726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[2] = in[2];
1727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = 1;
1728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_ALPHA:
1730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = out[1] = out[2] = 0;
1731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = in[3];
1732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_LUMINANCE:
1734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = out[1] = out[2] = in[0];
1735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = 1;
1736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_LUMINANCE_ALPHA:
1738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = out[1] = out[2] = in[0];
1739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = in[3];
1740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_INTENSITY:
1742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = out[1] = out[2] = out[3] = in[0];
1743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      default:
1745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         COPY_4V(out, in);
1746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   else {
1749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      float *in = colorIn->f;
1750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      float *out = colorOut->f;
1751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      switch (baseFormat) {
1753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_RED:
1754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = in[0];
1755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[1] = 0.0F;
1756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[2] = 0.0F;
1757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = 1.0F;
1758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_RG:
1760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = in[0];
1761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[1] = in[1];
1762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[2] = 0.0F;
1763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = 1.0F;
1764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_RGB:
1766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = in[0];
1767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[1] = in[1];
1768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[2] = in[2];
1769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = 1.0F;
1770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_ALPHA:
1772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = out[1] = out[2] = 0.0F;
1773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = in[3];
1774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_LUMINANCE:
1776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = out[1] = out[2] = in[0];
1777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = 1.0F;
1778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_LUMINANCE_ALPHA:
1780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = out[1] = out[2] = in[0];
1781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[3] = in[3];
1782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GL_INTENSITY:
1784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         out[0] = out[1] = out[2] = out[3] = in[0];
1785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
1786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      default:
1787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         COPY_4V(out, in);
1788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
1789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
1790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1791