1974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca/**********************************************************
2974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * Copyright 2011 VMware, Inc.  All rights reserved.
3974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca *
4974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * Permission is hereby granted, free of charge, to any person
5974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * obtaining a copy of this software and associated documentation
6974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * files (the "Software"), to deal in the Software without
7974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * restriction, including without limitation the rights to use, copy,
8974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * modify, merge, publish, distribute, sublicense, and/or sell copies
9974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * of the Software, and to permit persons to whom the Software is
10974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * furnished to do so, subject to the following conditions:
11974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca *
12974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * The above copyright notice and this permission notice shall be
13974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * included in all copies or substantial portions of the Software.
14974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca *
15974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * SOFTWARE.
23974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca *
24974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca **********************************************************/
25974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
26974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
27974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca#include "pipe/p_format.h"
28974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca#include "util/u_debug.h"
29974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca#include "util/u_memory.h"
30974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
31974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca#include "svga_winsys.h"
32974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca#include "svga_screen.h"
33974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca#include "svga_format.h"
34974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
35974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
36974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca/*
37974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * Translate from gallium format to SVGA3D format.
38974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca */
39974b6413f4540d73c21c092cc0a62abb6d546e21José FonsecaSVGA3dSurfaceFormat
40974b6413f4540d73c21c092cc0a62abb6d546e21José Fonsecasvga_translate_format(struct svga_screen *ss,
41974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca                      enum pipe_format format,
42974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca                      unsigned bind)
43974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca{
44974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   switch(format) {
45974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
46974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_B8G8R8A8_UNORM:
47974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_A8R8G8B8;
48974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_B8G8R8X8_UNORM:
49974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_X8R8G8B8;
50974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
51681f92140c2f4170ec222a8213e0895c7fa8483aBrian Paul   /* sRGB required for GL2.1 */
52974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_B8G8R8A8_SRGB:
53974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_A8R8G8B8;
54681f92140c2f4170ec222a8213e0895c7fa8483aBrian Paul   case PIPE_FORMAT_DXT1_SRGB:
55681f92140c2f4170ec222a8213e0895c7fa8483aBrian Paul   case PIPE_FORMAT_DXT1_SRGBA:
56681f92140c2f4170ec222a8213e0895c7fa8483aBrian Paul      return SVGA3D_DXT1;
57681f92140c2f4170ec222a8213e0895c7fa8483aBrian Paul   case PIPE_FORMAT_DXT3_SRGBA:
58681f92140c2f4170ec222a8213e0895c7fa8483aBrian Paul      return SVGA3D_DXT3;
59681f92140c2f4170ec222a8213e0895c7fa8483aBrian Paul   case PIPE_FORMAT_DXT5_SRGBA:
60681f92140c2f4170ec222a8213e0895c7fa8483aBrian Paul      return SVGA3D_DXT5;
61974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
62974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_B5G6R5_UNORM:
63974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_R5G6B5;
64974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_B5G5R5A1_UNORM:
65974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_A1R5G5B5;
66974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_B4G4R4A4_UNORM:
67974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_A4R4G4B4;
68974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
69974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_Z16_UNORM:
70974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.z16 : SVGA3D_Z_D16;
71866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie   case PIPE_FORMAT_S8_UINT_Z24_UNORM:
72974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.s8z24 : SVGA3D_Z_D24S8;
73974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_X8Z24_UNORM:
74974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.x8z24 : SVGA3D_Z_D24X8;
75974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
76974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_A8_UNORM:
77974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_ALPHA8;
78974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_L8_UNORM:
79974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_LUMINANCE8;
80974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
81974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_DXT1_RGB:
82974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_DXT1_RGBA:
83974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_DXT1;
84974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_DXT3_RGBA:
85974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_DXT3;
86974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_DXT5_RGBA:
87974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_DXT5;
88974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
899a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul   /* Float formats (only 1, 2 and 4-component formats supported) */
909a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul   case PIPE_FORMAT_R32_FLOAT:
919a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul      return SVGA3D_R_S23E8;
929a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul   case PIPE_FORMAT_R32G32_FLOAT:
939a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul      return SVGA3D_RG_S23E8;
949a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul   case PIPE_FORMAT_R32G32B32A32_FLOAT:
959a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul      return SVGA3D_ARGB_S23E8;
969a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul   case PIPE_FORMAT_R16_FLOAT:
979a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul      return SVGA3D_R_S10E5;
989a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul   case PIPE_FORMAT_R16G16_FLOAT:
999a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul      return SVGA3D_RG_S10E5;
1009a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul   case PIPE_FORMAT_R16G16B16A16_FLOAT:
1019a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul      return SVGA3D_ARGB_S10E5;
1029a41ecaddddb2f371e207901ae4d86918049c5aaBrian Paul
103974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   case PIPE_FORMAT_Z32_UNORM:
104974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      /* SVGA3D_Z_D32 is not yet unsupported */
105974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      /* fall-through */
106974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   default:
107974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      return SVGA3D_FORMAT_INVALID;
108974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   }
109974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca}
110974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
111974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
112974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca/*
113974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * Format capability description entry.
114974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca */
115974b6413f4540d73c21c092cc0a62abb6d546e21José Fonsecastruct format_cap {
116974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   SVGA3dSurfaceFormat format;
117974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
118974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
119974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * Capability index corresponding to the format.
120974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
121974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   SVGA3dDevCapIndex index;
122974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
123974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
124974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * Mask of supported SVGA3dFormatOp operations, to be inferred when the
125974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * capability is not explicitly present.
126974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
127974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   uint32 defaultOperations;
128974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca};
129974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
130974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
131974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca/*
132974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * Format capability description table.
133974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca *
134974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * Ordererd by increasing SVGA3dSurfaceFormat value, but with gaps.
135974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca */
136974b6413f4540d73c21c092cc0a62abb6d546e21José Fonsecastatic const struct format_cap format_cap_table[] = {
137974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
138974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_X8R8G8B8,
139974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8,
140974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
141974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
142974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
143974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_DISPLAYMODE |
144974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_3DACCELERATION |
145974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CONVERT_TO_ARGB |
146974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB |
147974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
148974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
149974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
150974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
151974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
152974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
153974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
154974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_A8R8G8B8,
155974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8,
156974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
157974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
158974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
159974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CONVERT_TO_ARGB |
160974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB |
161974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
162974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
163974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
164974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
165974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET |
166974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
167974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
168974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
169974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_R5G6B5,
170974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_R5G6B5,
171974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
172974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
173974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
174974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_DISPLAYMODE |
175974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_3DACCELERATION |
176974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CONVERT_TO_ARGB |
177974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB |
178974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
179974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
180974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
181974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
182974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
183974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
184974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
185974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_X1R5G5B5,
186974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5,
187974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
188974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
189974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
190974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CONVERT_TO_ARGB |
191974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB |
192974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
193974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
194974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
195974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
196974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
197974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
198974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
199974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_A1R5G5B5,
200974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5,
201974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
202974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
203974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
204974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CONVERT_TO_ARGB |
205974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB |
206974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
207974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
208974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
209974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
210974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET |
211974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
212974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
213974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
214974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_A4R4G4B4,
215974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4,
216974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
217974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
218974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
219974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
220974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
221974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
222974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
223974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET |
224974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
225974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
226974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
227974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_Z_D32 is not yet supported, and has no corresponding
228974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_DEVCAP_xxx.
229974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
230974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
231974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_Z_D16,
232974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_Z_D16,
233974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_ZSTENCIL |
234974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
235974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
236974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
237974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_Z_D24S8,
238974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8,
239974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_ZSTENCIL |
240974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
241974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
242974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
243974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_Z_D15S1,
244974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_MAX,
245974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_ZSTENCIL |
246974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
247974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
248974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
249974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_LUMINANCE8,
250974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8,
251974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
252974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
253974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
254974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
255974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
256974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
257974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_LUMINANCE8_ALPHA8,
258974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8,
259974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
260974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
261974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
262974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
263974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
264974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
265974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_LUMINANCE4_ALPHA4 is not supported, and has no corresponding
266974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_DEVCAP_xxx.
267974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
268974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
269974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_LUMINANCE16,
270974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16,
271974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
272974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
273974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
274974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
275974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
276974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
277974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DXT1,
278974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_DXT1,
279974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
280974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
281974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
282974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
283974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
284974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
285974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DXT2,
286974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_DXT2,
287974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
288974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
289974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
290974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
291974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
292974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
293974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DXT3,
294974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_DXT3,
295974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
296974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
297974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
298974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
299974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
300974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
301974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DXT4,
302974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_DXT4,
303974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
304974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
305974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
306974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
307974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
308974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
309974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DXT5,
310974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_DXT5,
311974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
312974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
313974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
314974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
315974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
316974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
317974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_BUMPU8V8,
318974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8,
319974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
320974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
321974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
322974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_BUMPMAP |
323974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
324974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
325974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
326974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_BUMPL6V5U5 is unsupported; it has no corresponding
327974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_DEVCAP_xxx.
328974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
329974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
330974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_BUMPX8L8V8U8,
331974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8,
332974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
333974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
334974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_BUMPMAP |
335974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
336974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
337974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
338974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_BUMPL8V8U8 is unsupported; it has no corresponding
339974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
340974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
341974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
342974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_ARGB_S10E5,
343974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5,
344974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
345974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
346974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
347974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
348974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
349974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
350974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
351974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
352974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
353974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
354974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_ARGB_S23E8,
355974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8,
356974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
357974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
358974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
359974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
360974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
361974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
362974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
363974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
364974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
365974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
366974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_A2R10G10B10,
367974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10,
368974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
369974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
370974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
371974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CONVERT_TO_ARGB |
372974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB |
373974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
374974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
375974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
376974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
377974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
378974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
379974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
380974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_V8U8 is unsupported; it has no corresponding
381974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPU8V8 should be used instead.
382974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
383974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
384974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_Q8W8V8U8,
385974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8,
386974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
387974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
388974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_BUMPMAP |
389974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
390974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
391974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
392974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_CxV8U8,
393974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_CxV8U8,
394974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
395974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_BUMPMAP |
396974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
397974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
398974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
399974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_X8L8V8U8 is unsupported; it has no corresponding
400974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
401974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
402974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
403974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_A2W10V10U10,
404974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10,
405974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
406974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_BUMPMAP |
407974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
408974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
409974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
410974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_ALPHA8,
411974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_ALPHA8,
412974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
413974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
414974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
415974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
416974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
417974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
418974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_R_S10E5,
419974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_R_S10E5,
420974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
421974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
422974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
423974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
424974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
425974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
426974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
427974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
428974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
429974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
430974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_R_S23E8,
431974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_R_S23E8,
432974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
433974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
434974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
435974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
436974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
437974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
438974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
439974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
440974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
441974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
442974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_RG_S10E5,
443974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5,
444974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
445974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
446974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
447974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
448974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
449974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
450974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
451974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
452974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
453974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
454974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_RG_S23E8,
455974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8,
456974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
457974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
458974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
459974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
460974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBREAD |
461974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SRGBWRITE |
462974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
463974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
464974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
465974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /*
466974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    * SVGA3D_BUFFER is a placeholder format for index/vertex buffers.
467974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca    */
468974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
469974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_Z_D24X8,
470974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8,
471974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_ZSTENCIL |
472974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
473974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
474974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
475974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_V16U16,
476974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_V16U16,
477974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
478974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
479974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
480974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_BUMPMAP |
481974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN
482974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
483974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
484974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_G16R16,
485974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_G16R16,
486974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
487974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
488974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
489974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
490974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
491974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
492974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
493974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
494974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_A16B16G16R16,
495974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16,
496974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_TEXTURE |
497974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_CUBETEXTURE |
498974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_VOLUMETEXTURE |
499974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREENPLAIN |
500974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET |
501974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
502974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
503974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
504974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_UYVY,
505974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_UYVY,
506974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
507974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
508974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
509974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_YUY2,
510974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_YUY2,
511974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
512974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
513974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
514974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_NV12,
515974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_NV12,
516974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
517974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
518974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
519974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_AYUV,
520974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_AYUV,
521974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
522974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
523974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
524974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_BC4_UNORM,
525974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM,
526974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
527974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
528974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
529974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_BC5_UNORM,
530974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM,
531974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
532974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
533974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
534974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_Z_DF16,
535974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_Z_DF16,
536974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
537974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
538974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
539974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_Z_DF24,
540974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_Z_DF24,
541974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
542974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
543974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   {
544974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_Z_D24S8_INT,
545974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT,
546974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      0
547974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   },
548974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca};
549974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
550974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
551974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca/*
552974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * Get format capabilities from the host.  It takes in consideration
553974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * deprecated/unsupported formats, and formats which are implicitely assumed to
554974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca * be supported when the host does not provide an explicit capability entry.
555974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca */
556974b6413f4540d73c21c092cc0a62abb6d546e21José Fonsecavoid
557974b6413f4540d73c21c092cc0a62abb6d546e21José Fonsecasvga_get_format_cap(struct svga_screen *ss,
558974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca                    SVGA3dSurfaceFormat format,
559974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca                    SVGA3dSurfaceFormatCaps *caps)
560974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca{
561974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   const struct format_cap *entry;
562974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
563974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   for (entry = format_cap_table; entry < format_cap_table + Elements(format_cap_table); ++entry) {
564974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      if (entry->format == format) {
565974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca         struct svga_winsys_screen *sws = ss->sws;
566974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca         SVGA3dDevCapResult result;
567974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
568974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca         if (sws->get_cap(sws, entry->index, &result)) {
569974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca            /* Explicitly advertised format */
570974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca            caps->value = result.u;
571974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca         } else {
572974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca            /* Implicitly advertised format -- use default caps */
573974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca            caps->value = entry->defaultOperations;
574974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca         }
575974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
576974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca         return;
577974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca      }
578974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   }
579974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca
580974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   /* Unsupported format */
581974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca   caps->value = 0;
582974b6413f4540d73c21c092cc0a62abb6d546e21José Fonseca}
58332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
58432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
58532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul/**
58632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul * Return block size and bytes per block for the given SVGA3D format.
58732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul * block_width and block_height are one for uncompressed formats and
58832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul * greater than one for compressed formats.
58932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul * Note: we don't handle formats that are unsupported, according to
59032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul * the format_cap_table above.
59132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul */
59232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paulvoid
59332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paulsvga_format_size(SVGA3dSurfaceFormat format,
59432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul                 unsigned *block_width,
59532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul                 unsigned *block_height,
59632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul                 unsigned *bytes_per_block)
59732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul{
59832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   *block_width = *block_height = 1;
59932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
60032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   switch (format) {
60132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_X8R8G8B8:
60232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_A8R8G8B8:
60332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
60432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
60532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
60632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_R5G6B5:
60732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_X1R5G5B5:
60832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_A1R5G5B5:
60932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_A4R4G4B4:
61032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 2;
61132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
61232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
61332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Z_D32:
61432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
61532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
61632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
61732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Z_D16:
61832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 2;
61932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
62032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
62132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Z_D24S8:
62232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
62332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
62432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
62532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Z_D15S1:
62632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 2;
62732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
62832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
62932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_LUMINANCE8:
63032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_LUMINANCE4_ALPHA4:
63132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 1;
63232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
63332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
63432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_LUMINANCE16:
63532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_LUMINANCE8_ALPHA8:
63632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 2;
63732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
63832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
63932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_DXT1:
64032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_DXT2:
64132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *block_width = *block_height = 4;
64232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 8;
64332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
64432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
64532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_DXT3:
64632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_DXT4:
64732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_DXT5:
64832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *block_width = *block_height = 4;
64932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 16;
65032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
65132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
65232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_BUMPU8V8:
65332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_BUMPL6V5U5:
65432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 2;
65532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
65632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
65732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_BUMPX8L8V8U8:
65832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
65932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
66032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
66132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_ARGB_S10E5:
66232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 8;
66332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
66432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
66532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_ARGB_S23E8:
66632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 16;
66732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
66832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
66932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_A2R10G10B10:
67032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
67132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
67232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
67332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Q8W8V8U8:
67432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
67532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
67632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
67732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_CxV8U8:
67832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 2;
67932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
68032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
68132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_X8L8V8U8:
68232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_A2W10V10U10:
68332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
68432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
68532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
68632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_ALPHA8:
68732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 1;
68832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
68932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
69032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_R_S10E5:
69132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 2;
69232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
69332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_R_S23E8:
69432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
69532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
69632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_RG_S10E5:
69732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
69832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
69932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_RG_S23E8:
70032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 8;
70132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
70232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
70332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_BUFFER:
70432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 1;
70532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
70632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
70732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Z_D24X8:
70832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
70932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
71032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
71132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_V16U16:
71232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
71332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
71432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
71532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_G16R16:
71632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
71732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
71832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
71932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_A16B16G16R16:
72032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 8;
72132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
72232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
72332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Z_DF16:
72432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 2;
72532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
72632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Z_DF24:
72732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
72832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
72932f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   case SVGA3D_Z_D24S8_INT:
73032f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
73132f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      return;
73232f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul
73332f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   default:
73432f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      debug_printf("format %u\n", (unsigned) format);
73532f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      assert(!"unexpected format in svga_format_size()");
73632f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul      *bytes_per_block = 4;
73732f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul   }
73832f669e7fc17ff89cf132b7d42c72de75625d32aBrian Paul}
739