OSDN Git Service

2b549dfa5bb2a5e82b7964d55a692baa2b72abdb
[android-x86/external-mesa.git] / src / gallium / drivers / svga / svga_format.c
1 /**********************************************************
2  * Copyright 2011 VMware, Inc.  All rights reserved.
3  *
4  * Permission is hereby granted, free of charge, to any person
5  * obtaining a copy of this software and associated documentation
6  * files (the "Software"), to deal in the Software without
7  * restriction, including without limitation the rights to use, copy,
8  * modify, merge, publish, distribute, sublicense, and/or sell copies
9  * of the Software, and to permit persons to whom the Software is
10  * furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  *
24  **********************************************************/
25
26
27 #include "pipe/p_format.h"
28 #include "util/u_debug.h"
29 #include "util/u_format.h"
30 #include "util/u_memory.h"
31
32 #include "svga_winsys.h"
33 #include "svga_screen.h"
34 #include "svga_format.h"
35
36
37 /** Describes mapping from gallium formats to SVGA vertex/pixel formats */
38 struct vgpu10_format_entry
39 {
40    enum pipe_format pformat;
41    SVGA3dSurfaceFormat vertex_format;
42    SVGA3dSurfaceFormat pixel_format;
43    unsigned flags;
44 };
45
46
47 static const struct vgpu10_format_entry format_conversion_table[] =
48 {
49    /* Gallium format                    SVGA3D vertex format        SVGA3D pixel format          Flags */
50    { PIPE_FORMAT_NONE,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
51    { PIPE_FORMAT_B8G8R8A8_UNORM,        SVGA3D_B8G8R8A8_UNORM,      SVGA3D_B8G8R8A8_UNORM,       0 },
52    { PIPE_FORMAT_B8G8R8X8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_B8G8R8X8_UNORM,       0 },
53    { PIPE_FORMAT_A8R8G8B8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
54    { PIPE_FORMAT_X8R8G8B8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
55    { PIPE_FORMAT_B5G5R5A1_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_B5G5R5A1_UNORM,       0 },
56    { PIPE_FORMAT_B4G4R4A4_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
57    { PIPE_FORMAT_B5G6R5_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_B5G6R5_UNORM,         0 },
58    { PIPE_FORMAT_R10G10B10A2_UNORM,     SVGA3D_R10G10B10A2_UNORM,   SVGA3D_R10G10B10A2_UNORM,    0 },
59    { PIPE_FORMAT_L8_UNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
60    { PIPE_FORMAT_A8_UNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_A8_UNORM,             0 },
61    { PIPE_FORMAT_I8_UNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
62    { PIPE_FORMAT_L8A8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
63    { PIPE_FORMAT_L16_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
64    { PIPE_FORMAT_UYVY,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
65    { PIPE_FORMAT_YUYV,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
66    { PIPE_FORMAT_Z16_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_D16_UNORM,            0 },
67    { PIPE_FORMAT_Z32_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
68    { PIPE_FORMAT_Z32_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_D32_FLOAT,            0 },
69    { PIPE_FORMAT_Z24_UNORM_S8_UINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_D24_UNORM_S8_UINT,    0 },
70    { PIPE_FORMAT_S8_UINT_Z24_UNORM,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
71    { PIPE_FORMAT_Z24X8_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_D24_UNORM_S8_UINT,    0 },
72    { PIPE_FORMAT_X8Z24_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
73    { PIPE_FORMAT_S8_UINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
74    { PIPE_FORMAT_R64_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
75    { PIPE_FORMAT_R64G64_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
76    { PIPE_FORMAT_R64G64B64_FLOAT,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
77    { PIPE_FORMAT_R64G64B64A64_FLOAT,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
78    { PIPE_FORMAT_R32_FLOAT,             SVGA3D_R32_FLOAT,           SVGA3D_R32_FLOAT,            0 },
79    { PIPE_FORMAT_R32G32_FLOAT,          SVGA3D_R32G32_FLOAT,        SVGA3D_R32G32_FLOAT,         0 },
80    { PIPE_FORMAT_R32G32B32_FLOAT,       SVGA3D_R32G32B32_FLOAT,     SVGA3D_R32G32B32_FLOAT,      0 },
81    { PIPE_FORMAT_R32G32B32A32_FLOAT,    SVGA3D_R32G32B32A32_FLOAT,  SVGA3D_R32G32B32A32_FLOAT,   0 },
82    { PIPE_FORMAT_R32_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
83    { PIPE_FORMAT_R32G32_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
84    { PIPE_FORMAT_R32G32B32_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
85    { PIPE_FORMAT_R32G32B32A32_UNORM,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
86    { PIPE_FORMAT_R32_USCALED,           SVGA3D_R32_UINT,            SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
87    { PIPE_FORMAT_R32G32_USCALED,        SVGA3D_R32G32_UINT,         SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
88    { PIPE_FORMAT_R32G32B32_USCALED,     SVGA3D_R32G32B32_UINT,      SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
89    { PIPE_FORMAT_R32G32B32A32_USCALED,  SVGA3D_R32G32B32A32_UINT,   SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
90    { PIPE_FORMAT_R32_SNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
91    { PIPE_FORMAT_R32G32_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
92    { PIPE_FORMAT_R32G32B32_SNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
93    { PIPE_FORMAT_R32G32B32A32_SNORM,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
94    { PIPE_FORMAT_R32_SSCALED,           SVGA3D_R32_SINT,            SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
95    { PIPE_FORMAT_R32G32_SSCALED,        SVGA3D_R32G32_SINT,         SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
96    { PIPE_FORMAT_R32G32B32_SSCALED,     SVGA3D_R32G32B32_SINT,      SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
97    { PIPE_FORMAT_R32G32B32A32_SSCALED,  SVGA3D_R32G32B32A32_SINT,   SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
98    { PIPE_FORMAT_R16_UNORM,             SVGA3D_R16_UNORM,           SVGA3D_R16_UNORM,            0 },
99    { PIPE_FORMAT_R16G16_UNORM,          SVGA3D_R16G16_UNORM,        SVGA3D_R16G16_UNORM,         0 },
100    { PIPE_FORMAT_R16G16B16_UNORM,       SVGA3D_R16G16B16A16_UNORM,  SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
101    { PIPE_FORMAT_R16G16B16A16_UNORM,    SVGA3D_R16G16B16A16_UNORM,  SVGA3D_R16G16B16A16_UNORM,   0 },
102    { PIPE_FORMAT_R16_USCALED,           SVGA3D_R16_UINT,            SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
103    { PIPE_FORMAT_R16G16_USCALED,        SVGA3D_R16G16_UINT,         SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
104    { PIPE_FORMAT_R16G16B16_USCALED,     SVGA3D_R16G16B16A16_UINT,   SVGA3D_FORMAT_INVALID,       VF_W_TO_1 | VF_U_TO_F_CAST },
105    { PIPE_FORMAT_R16G16B16A16_USCALED,  SVGA3D_R16G16B16A16_UINT,   SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
106    { PIPE_FORMAT_R16_SNORM,             SVGA3D_R16_SNORM,           SVGA3D_R16_SNORM,            0 },
107    { PIPE_FORMAT_R16G16_SNORM,          SVGA3D_R16G16_SNORM,        SVGA3D_R16G16_SNORM,         0 },
108    { PIPE_FORMAT_R16G16B16_SNORM,       SVGA3D_R16G16B16A16_SNORM,  SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
109    { PIPE_FORMAT_R16G16B16A16_SNORM,    SVGA3D_R16G16B16A16_SNORM,  SVGA3D_R16G16B16A16_SNORM,   0 },
110    { PIPE_FORMAT_R16_SSCALED,           SVGA3D_R16_SINT,            SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
111    { PIPE_FORMAT_R16G16_SSCALED,        SVGA3D_R16G16_SINT,         SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
112    { PIPE_FORMAT_R16G16B16_SSCALED,     SVGA3D_R16G16B16A16_SINT,   SVGA3D_FORMAT_INVALID,       VF_W_TO_1 | VF_I_TO_F_CAST },
113    { PIPE_FORMAT_R16G16B16A16_SSCALED,  SVGA3D_R16G16B16A16_SINT,   SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
114    { PIPE_FORMAT_R8_UNORM,              SVGA3D_R8_UNORM,            SVGA3D_R8_UNORM,             0 },
115    { PIPE_FORMAT_R8G8_UNORM,            SVGA3D_R8G8_UNORM,          SVGA3D_R8G8_UNORM,           0 },
116    { PIPE_FORMAT_R8G8B8_UNORM,          SVGA3D_R8G8B8A8_UNORM,      SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
117    { PIPE_FORMAT_R8G8B8A8_UNORM,        SVGA3D_R8G8B8A8_UNORM,      SVGA3D_R8G8B8A8_UNORM,       0 },
118    { PIPE_FORMAT_X8B8G8R8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
119    { PIPE_FORMAT_R8_USCALED,            SVGA3D_R8_UINT,             SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
120    { PIPE_FORMAT_R8G8_USCALED,          SVGA3D_R8G8_UINT,           SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
121    { PIPE_FORMAT_R8G8B8_USCALED,        SVGA3D_R8G8B8A8_UINT,       SVGA3D_FORMAT_INVALID,       VF_W_TO_1 | VF_U_TO_F_CAST },
122    { PIPE_FORMAT_R8G8B8A8_USCALED,      SVGA3D_R8G8B8A8_UINT,       SVGA3D_FORMAT_INVALID,       VF_U_TO_F_CAST },
123    { 73,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
124    { PIPE_FORMAT_R8_SNORM,              SVGA3D_R8_SNORM,            SVGA3D_R8_SNORM,             0 },
125    { PIPE_FORMAT_R8G8_SNORM,            SVGA3D_R8G8_SNORM,          SVGA3D_R8G8_SNORM,           0 },
126    { PIPE_FORMAT_R8G8B8_SNORM,          SVGA3D_R8G8B8A8_SNORM,      SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
127    { PIPE_FORMAT_R8G8B8A8_SNORM,        SVGA3D_R8G8B8A8_SNORM,      SVGA3D_R8G8B8A8_SNORM,       0 },
128    { 78,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
129    { 79,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
130    { 80,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
131    { 81,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
132    { PIPE_FORMAT_R8_SSCALED,            SVGA3D_R8_SINT,             SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
133    { PIPE_FORMAT_R8G8_SSCALED,          SVGA3D_R8G8_SINT,           SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
134    { PIPE_FORMAT_R8G8B8_SSCALED,        SVGA3D_R8G8B8A8_SINT,       SVGA3D_FORMAT_INVALID,       VF_W_TO_1 | VF_I_TO_F_CAST },
135    { PIPE_FORMAT_R8G8B8A8_SSCALED,      SVGA3D_R8G8B8A8_SINT,       SVGA3D_FORMAT_INVALID,       VF_I_TO_F_CAST },
136    { 86,                                SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
137    { PIPE_FORMAT_R32_FIXED,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
138    { PIPE_FORMAT_R32G32_FIXED,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
139    { PIPE_FORMAT_R32G32B32_FIXED,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
140    { PIPE_FORMAT_R32G32B32A32_FIXED,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
141    { PIPE_FORMAT_R16_FLOAT,             SVGA3D_R16_FLOAT,           SVGA3D_R16_FLOAT,            0 },
142    { PIPE_FORMAT_R16G16_FLOAT,          SVGA3D_R16G16_FLOAT,        SVGA3D_R16G16_FLOAT,         0 },
143    { PIPE_FORMAT_R16G16B16_FLOAT,       SVGA3D_R16G16B16A16_FLOAT,  SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
144    { PIPE_FORMAT_R16G16B16A16_FLOAT,    SVGA3D_R16G16B16A16_FLOAT,  SVGA3D_R16G16B16A16_FLOAT,   0 },
145    { PIPE_FORMAT_L8_SRGB,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
146    { PIPE_FORMAT_L8A8_SRGB,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
147    { PIPE_FORMAT_R8G8B8_SRGB,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
148    { PIPE_FORMAT_A8B8G8R8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
149    { PIPE_FORMAT_X8B8G8R8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
150    { PIPE_FORMAT_B8G8R8A8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_B8G8R8A8_UNORM_SRGB,  0 },
151    { PIPE_FORMAT_B8G8R8X8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_B8G8R8X8_UNORM_SRGB,  0 },
152    { PIPE_FORMAT_A8R8G8B8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
153    { PIPE_FORMAT_X8R8G8B8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
154    { PIPE_FORMAT_R8G8B8A8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_R8G8B8A8_UNORM_SRGB,  0 },
155    { PIPE_FORMAT_DXT1_RGB,              SVGA3D_FORMAT_INVALID,      SVGA3D_BC1_UNORM,            0 },
156    { PIPE_FORMAT_DXT1_RGBA,             SVGA3D_FORMAT_INVALID,      SVGA3D_BC1_UNORM,            0 },
157    { PIPE_FORMAT_DXT3_RGBA,             SVGA3D_FORMAT_INVALID,      SVGA3D_BC2_UNORM,            0 },
158    { PIPE_FORMAT_DXT5_RGBA,             SVGA3D_FORMAT_INVALID,      SVGA3D_BC3_UNORM,            0 },
159    { PIPE_FORMAT_DXT1_SRGB,             SVGA3D_FORMAT_INVALID,      SVGA3D_BC1_UNORM_SRGB,       0 },
160    { PIPE_FORMAT_DXT1_SRGBA,            SVGA3D_FORMAT_INVALID,      SVGA3D_BC1_UNORM_SRGB,       0 },
161    { PIPE_FORMAT_DXT3_SRGBA,            SVGA3D_FORMAT_INVALID,      SVGA3D_BC2_UNORM_SRGB,       0 },
162    { PIPE_FORMAT_DXT5_SRGBA,            SVGA3D_FORMAT_INVALID,      SVGA3D_BC3_UNORM_SRGB,       0 },
163    { PIPE_FORMAT_RGTC1_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_BC4_UNORM,            0 },
164    { PIPE_FORMAT_RGTC1_SNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_BC4_SNORM,            0 },
165    { PIPE_FORMAT_RGTC2_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_BC5_UNORM,            0 },
166    { PIPE_FORMAT_RGTC2_SNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_BC5_SNORM,            0 },
167    { PIPE_FORMAT_R8G8_B8G8_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
168    { PIPE_FORMAT_G8R8_G8B8_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
169    { PIPE_FORMAT_R8SG8SB8UX8U_NORM,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
170    { PIPE_FORMAT_R5SG5SB6U_NORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
171    { PIPE_FORMAT_A8B8G8R8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
172    { PIPE_FORMAT_B5G5R5X1_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
173    { PIPE_FORMAT_R10G10B10A2_USCALED,   SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_PUINT_TO_USCALED },
174    { PIPE_FORMAT_R11G11B10_FLOAT,       SVGA3D_FORMAT_INVALID,      SVGA3D_R11G11B10_FLOAT,      0 },
175    { PIPE_FORMAT_R9G9B9E5_FLOAT,        SVGA3D_FORMAT_INVALID,      SVGA3D_R9G9B9E5_SHAREDEXP,   0 },
176    { PIPE_FORMAT_Z32_FLOAT_S8X24_UINT,  SVGA3D_FORMAT_INVALID,      SVGA3D_D32_FLOAT_S8X24_UINT, 0 },
177    { PIPE_FORMAT_R1_UNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
178    { PIPE_FORMAT_R10G10B10X2_USCALED,   SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
179    { PIPE_FORMAT_R10G10B10X2_SNORM,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
180    { PIPE_FORMAT_L4A4_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
181    { PIPE_FORMAT_B10G10R10A2_UNORM,     SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_BGRA },
182    { PIPE_FORMAT_R10SG10SB10SA2U_NORM,  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
183    { PIPE_FORMAT_R8G8Bx_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
184    { PIPE_FORMAT_R8G8B8X8_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
185    { PIPE_FORMAT_B4G4R4X4_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
186    { PIPE_FORMAT_X24S8_UINT,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
187    { PIPE_FORMAT_S8X24_UINT,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
188    { PIPE_FORMAT_X32_S8X24_UINT,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
189    { PIPE_FORMAT_B2G3R3_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
190    { PIPE_FORMAT_L16A16_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
191    { PIPE_FORMAT_A16_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
192    { PIPE_FORMAT_I16_UNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
193    { PIPE_FORMAT_LATC1_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
194    { PIPE_FORMAT_LATC1_SNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
195    { PIPE_FORMAT_LATC2_UNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
196    { PIPE_FORMAT_LATC2_SNORM,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
197    { PIPE_FORMAT_A8_SNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
198    { PIPE_FORMAT_L8_SNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
199    { PIPE_FORMAT_L8A8_SNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
200    { PIPE_FORMAT_I8_SNORM,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
201    { PIPE_FORMAT_A16_SNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
202    { PIPE_FORMAT_L16_SNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
203    { PIPE_FORMAT_L16A16_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
204    { PIPE_FORMAT_I16_SNORM,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
205    { PIPE_FORMAT_A16_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
206    { PIPE_FORMAT_L16_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
207    { PIPE_FORMAT_L16A16_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
208    { PIPE_FORMAT_I16_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
209    { PIPE_FORMAT_A32_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
210    { PIPE_FORMAT_L32_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
211    { PIPE_FORMAT_L32A32_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
212    { PIPE_FORMAT_I32_FLOAT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
213    { PIPE_FORMAT_YV12,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
214    { PIPE_FORMAT_YV16,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
215    { PIPE_FORMAT_IYUV,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
216    { PIPE_FORMAT_NV12,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
217    { PIPE_FORMAT_NV21,                  SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
218    { PIPE_FORMAT_A4R4_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
219    { PIPE_FORMAT_R4A4_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
220    { PIPE_FORMAT_R8A8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
221    { PIPE_FORMAT_A8R8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
222    { PIPE_FORMAT_R10G10B10A2_SSCALED,   SVGA3D_R32_UINT,            SVGA3D_FORMAT_INVALID,       VF_PUINT_TO_SSCALED },
223    { PIPE_FORMAT_R10G10B10A2_SNORM,     SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_PUINT_TO_SNORM },
224    { PIPE_FORMAT_B10G10R10A2_USCALED,   SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_BGRA | VF_PUINT_TO_USCALED },
225    { PIPE_FORMAT_B10G10R10A2_SSCALED,   SVGA3D_R32_UINT,            SVGA3D_FORMAT_INVALID,       VF_BGRA | VF_PUINT_TO_SSCALED },
226    { PIPE_FORMAT_B10G10R10A2_SNORM,     SVGA3D_R10G10B10A2_UNORM,   SVGA3D_FORMAT_INVALID,       VF_BGRA | VF_PUINT_TO_SNORM },
227    { PIPE_FORMAT_R8_UINT,               SVGA3D_R8_UINT,             SVGA3D_R8_UINT,              0 },
228    { PIPE_FORMAT_R8G8_UINT,             SVGA3D_R8G8_UINT,           SVGA3D_R8G8_UINT,            0 },
229    { PIPE_FORMAT_R8G8B8_UINT,           SVGA3D_R8G8B8A8_UINT,       SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
230    { PIPE_FORMAT_R8G8B8A8_UINT,         SVGA3D_R8G8B8A8_UINT,       SVGA3D_R8G8B8A8_UINT,        0 },
231    { PIPE_FORMAT_R8_SINT,               SVGA3D_R8_SINT,             SVGA3D_R8_SINT,              0 },
232    { PIPE_FORMAT_R8G8_SINT,             SVGA3D_R8G8_SINT,           SVGA3D_R8G8_SINT,            0 },
233    { PIPE_FORMAT_R8G8B8_SINT,           SVGA3D_R8G8B8A8_SINT,       SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
234    { PIPE_FORMAT_R8G8B8A8_SINT,         SVGA3D_R8G8B8A8_SINT,       SVGA3D_R8G8B8A8_SINT,        0 },
235    { PIPE_FORMAT_R16_UINT,              SVGA3D_R16_UINT,            SVGA3D_R16_UINT,             0 },
236    { PIPE_FORMAT_R16G16_UINT,           SVGA3D_R16G16_UINT,         SVGA3D_R16G16_UINT,          0 },
237    { PIPE_FORMAT_R16G16B16_UINT,        SVGA3D_R16G16B16A16_UINT,   SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
238    { PIPE_FORMAT_R16G16B16A16_UINT,     SVGA3D_R16G16B16A16_UINT,   SVGA3D_R16G16B16A16_UINT,    0 },
239    { PIPE_FORMAT_R16_SINT,              SVGA3D_R16_SINT,            SVGA3D_R16_SINT,             0 },
240    { PIPE_FORMAT_R16G16_SINT,           SVGA3D_R16G16_SINT,         SVGA3D_R16G16_SINT,          0 },
241    { PIPE_FORMAT_R16G16B16_SINT,        SVGA3D_R16G16B16A16_SINT,   SVGA3D_FORMAT_INVALID,       VF_W_TO_1 },
242    { PIPE_FORMAT_R16G16B16A16_SINT,     SVGA3D_R16G16B16A16_SINT,   SVGA3D_R16G16B16A16_SINT,    0 },
243    { PIPE_FORMAT_R32_UINT,              SVGA3D_R32_UINT,            SVGA3D_R32_UINT,             0 },
244    { PIPE_FORMAT_R32G32_UINT,           SVGA3D_R32G32_UINT,         SVGA3D_R32G32_UINT,          0 },
245    { PIPE_FORMAT_R32G32B32_UINT,        SVGA3D_R32G32B32_UINT,      SVGA3D_R32G32B32_UINT,       0 },
246    { PIPE_FORMAT_R32G32B32A32_UINT,     SVGA3D_R32G32B32A32_UINT,   SVGA3D_R32G32B32A32_UINT,    0 },
247    { PIPE_FORMAT_R32_SINT,              SVGA3D_R32_SINT,            SVGA3D_R32_SINT,             0 },
248    { PIPE_FORMAT_R32G32_SINT,           SVGA3D_R32G32_SINT,         SVGA3D_R32G32_SINT,          0 },
249    { PIPE_FORMAT_R32G32B32_SINT,        SVGA3D_R32G32B32_SINT,      SVGA3D_R32G32B32_SINT,       0 },
250    { PIPE_FORMAT_R32G32B32A32_SINT,     SVGA3D_R32G32B32A32_SINT,   SVGA3D_R32G32B32A32_SINT,    0 },
251    { PIPE_FORMAT_A8_UINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
252    { PIPE_FORMAT_I8_UINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
253    { PIPE_FORMAT_L8_UINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
254    { PIPE_FORMAT_L8A8_UINT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
255    { PIPE_FORMAT_A8_SINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
256    { PIPE_FORMAT_I8_SINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
257    { PIPE_FORMAT_L8_SINT,               SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
258    { PIPE_FORMAT_L8A8_SINT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
259    { PIPE_FORMAT_A16_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
260    { PIPE_FORMAT_I16_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
261    { PIPE_FORMAT_L16_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
262    { PIPE_FORMAT_L16A16_UINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
263    { PIPE_FORMAT_A16_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
264    { PIPE_FORMAT_I16_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
265    { PIPE_FORMAT_L16_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
266    { PIPE_FORMAT_L16A16_SINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
267    { PIPE_FORMAT_A32_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
268    { PIPE_FORMAT_I32_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
269    { PIPE_FORMAT_L32_UINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
270    { PIPE_FORMAT_L32A32_UINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
271    { PIPE_FORMAT_A32_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
272    { PIPE_FORMAT_I32_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
273    { PIPE_FORMAT_L32_SINT,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
274    { PIPE_FORMAT_L32A32_SINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
275    { PIPE_FORMAT_B10G10R10A2_UINT,      SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
276    { PIPE_FORMAT_ETC1_RGB8,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
277    { PIPE_FORMAT_R8G8_R8B8_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
278    { PIPE_FORMAT_G8R8_B8R8_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
279    { PIPE_FORMAT_R8G8B8X8_SNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
280    { PIPE_FORMAT_R8G8B8X8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
281    { PIPE_FORMAT_R8G8B8X8_UINT,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
282    { PIPE_FORMAT_R8G8B8X8_SINT,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
283    { PIPE_FORMAT_B10G10R10X2_UNORM,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
284    { PIPE_FORMAT_R16G16B16X16_UNORM,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
285    { PIPE_FORMAT_R16G16B16X16_SNORM,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
286    { PIPE_FORMAT_R16G16B16X16_FLOAT,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
287    { PIPE_FORMAT_R16G16B16X16_UINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
288    { PIPE_FORMAT_R16G16B16X16_SINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
289    { PIPE_FORMAT_R32G32B32X32_FLOAT,    SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
290    { PIPE_FORMAT_R32G32B32X32_UINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
291    { PIPE_FORMAT_R32G32B32X32_SINT,     SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
292    { PIPE_FORMAT_R8A8_SNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
293    { PIPE_FORMAT_R16A16_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
294    { PIPE_FORMAT_R16A16_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
295    { PIPE_FORMAT_R16A16_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
296    { PIPE_FORMAT_R32A32_FLOAT,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
297    { PIPE_FORMAT_R8A8_UINT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
298    { PIPE_FORMAT_R8A8_SINT,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
299    { PIPE_FORMAT_R16A16_UINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
300    { PIPE_FORMAT_R16A16_SINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
301    { PIPE_FORMAT_R32A32_UINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
302    { PIPE_FORMAT_R32A32_SINT,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
303    { PIPE_FORMAT_R10G10B10A2_UINT,      SVGA3D_R10G10B10A2_UINT,    SVGA3D_R10G10B10A2_UINT,     0 },
304    { PIPE_FORMAT_B5G6R5_SRGB,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
305    { PIPE_FORMAT_BPTC_RGBA_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
306    { PIPE_FORMAT_BPTC_SRGBA,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
307    { PIPE_FORMAT_BPTC_RGB_FLOAT,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
308    { PIPE_FORMAT_BPTC_RGB_UFLOAT,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
309    { PIPE_FORMAT_A8L8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
310    { PIPE_FORMAT_A8L8_SNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
311    { PIPE_FORMAT_A8L8_SRGB,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
312    { PIPE_FORMAT_A16L16_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
313    { PIPE_FORMAT_G8R8_UNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
314    { PIPE_FORMAT_G8R8_SNORM,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
315    { PIPE_FORMAT_G16R16_UNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
316    { PIPE_FORMAT_G16R16_SNORM,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
317    { PIPE_FORMAT_A8B8G8R8_SNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
318    { PIPE_FORMAT_X8B8G8R8_SNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
319    { PIPE_FORMAT_ETC2_RGB8,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
320    { PIPE_FORMAT_ETC2_SRGB8,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
321    { PIPE_FORMAT_ETC2_RGB8A1,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
322    { PIPE_FORMAT_ETC2_SRGB8A1,          SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
323    { PIPE_FORMAT_ETC2_RGBA8,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
324    { PIPE_FORMAT_ETC2_SRGBA8,           SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
325    { PIPE_FORMAT_ETC2_R11_UNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
326    { PIPE_FORMAT_ETC2_R11_SNORM,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
327    { PIPE_FORMAT_ETC2_RG11_UNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
328    { PIPE_FORMAT_ETC2_RG11_SNORM,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
329    { PIPE_FORMAT_ASTC_4x4,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
330    { PIPE_FORMAT_ASTC_5x4,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
331    { PIPE_FORMAT_ASTC_5x5,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
332    { PIPE_FORMAT_ASTC_6x5,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
333    { PIPE_FORMAT_ASTC_6x6,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
334    { PIPE_FORMAT_ASTC_8x5,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
335    { PIPE_FORMAT_ASTC_8x6,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
336    { PIPE_FORMAT_ASTC_8x8,              SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
337    { PIPE_FORMAT_ASTC_10x5,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
338    { PIPE_FORMAT_ASTC_10x6,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
339    { PIPE_FORMAT_ASTC_10x8,             SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
340    { PIPE_FORMAT_ASTC_10x10,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
341    { PIPE_FORMAT_ASTC_12x10,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
342    { PIPE_FORMAT_ASTC_12x12,            SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
343    { PIPE_FORMAT_ASTC_4x4_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
344    { PIPE_FORMAT_ASTC_5x4_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
345    { PIPE_FORMAT_ASTC_5x5_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
346    { PIPE_FORMAT_ASTC_6x5_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
347    { PIPE_FORMAT_ASTC_6x6_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
348    { PIPE_FORMAT_ASTC_8x5_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
349    { PIPE_FORMAT_ASTC_8x6_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
350    { PIPE_FORMAT_ASTC_8x8_SRGB,         SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
351    { PIPE_FORMAT_ASTC_10x5_SRGB,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
352    { PIPE_FORMAT_ASTC_10x6_SRGB,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
353    { PIPE_FORMAT_ASTC_10x8_SRGB,        SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
354    { PIPE_FORMAT_ASTC_10x10_SRGB,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
355    { PIPE_FORMAT_ASTC_12x10_SRGB,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
356    { PIPE_FORMAT_ASTC_12x12_SRGB,       SVGA3D_FORMAT_INVALID,      SVGA3D_FORMAT_INVALID,       0 },
357 };
358
359
360 /**
361  * Translate a gallium vertex format to a vgpu10 vertex format.
362  * Also, return any special vertex format flags.
363  */
364 void
365 svga_translate_vertex_format_vgpu10(enum pipe_format format,
366                                     SVGA3dSurfaceFormat *svga_format,
367                                     unsigned *vf_flags)
368 {
369    assert(format < Elements(format_conversion_table));
370    if (format >= Elements(format_conversion_table)) {
371       format = PIPE_FORMAT_NONE;
372    }
373    *svga_format = format_conversion_table[format].vertex_format;
374    *vf_flags = format_conversion_table[format].flags;
375 }
376
377
378 /*
379  * Translate from gallium format to SVGA3D format.
380  */
381 SVGA3dSurfaceFormat
382 svga_translate_format(struct svga_screen *ss,
383                       enum pipe_format format,
384                       unsigned bind)
385 {
386    if (ss->sws->have_vgpu10) {
387       if (bind & (PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER)) {
388          return format_conversion_table[format].vertex_format;
389       }
390       else {
391          return format_conversion_table[format].pixel_format;
392       }
393    }
394
395    switch(format) {
396    case PIPE_FORMAT_B8G8R8A8_UNORM:
397       return SVGA3D_A8R8G8B8;
398    case PIPE_FORMAT_B8G8R8X8_UNORM:
399       return SVGA3D_X8R8G8B8;
400
401    /* sRGB required for GL2.1 */
402    case PIPE_FORMAT_B8G8R8A8_SRGB:
403       return SVGA3D_A8R8G8B8;
404    case PIPE_FORMAT_DXT1_SRGB:
405    case PIPE_FORMAT_DXT1_SRGBA:
406       return SVGA3D_DXT1;
407    case PIPE_FORMAT_DXT3_SRGBA:
408       return SVGA3D_DXT3;
409    case PIPE_FORMAT_DXT5_SRGBA:
410       return SVGA3D_DXT5;
411
412    case PIPE_FORMAT_B5G6R5_UNORM:
413       return SVGA3D_R5G6B5;
414    case PIPE_FORMAT_B5G5R5A1_UNORM:
415       return SVGA3D_A1R5G5B5;
416    case PIPE_FORMAT_B4G4R4A4_UNORM:
417       return SVGA3D_A4R4G4B4;
418
419    case PIPE_FORMAT_R16G16B16A16_UNORM:
420       return SVGA3D_A16B16G16R16;
421
422    case PIPE_FORMAT_Z16_UNORM:
423       assert(!ss->sws->have_vgpu10);
424       return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.z16 : SVGA3D_Z_D16;
425    case PIPE_FORMAT_S8_UINT_Z24_UNORM:
426       assert(!ss->sws->have_vgpu10);
427       return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.s8z24 : SVGA3D_Z_D24S8;
428    case PIPE_FORMAT_X8Z24_UNORM:
429       assert(!ss->sws->have_vgpu10);
430       return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.x8z24 : SVGA3D_Z_D24X8;
431
432    case PIPE_FORMAT_A8_UNORM:
433       return SVGA3D_ALPHA8;
434    case PIPE_FORMAT_L8_UNORM:
435       return SVGA3D_LUMINANCE8;
436
437    case PIPE_FORMAT_DXT1_RGB:
438    case PIPE_FORMAT_DXT1_RGBA:
439       return SVGA3D_DXT1;
440    case PIPE_FORMAT_DXT3_RGBA:
441       return SVGA3D_DXT3;
442    case PIPE_FORMAT_DXT5_RGBA:
443       return SVGA3D_DXT5;
444
445    /* Float formats (only 1, 2 and 4-component formats supported) */
446    case PIPE_FORMAT_R32_FLOAT:
447       return SVGA3D_R_S23E8;
448    case PIPE_FORMAT_R32G32_FLOAT:
449       return SVGA3D_RG_S23E8;
450    case PIPE_FORMAT_R32G32B32A32_FLOAT:
451       return SVGA3D_ARGB_S23E8;
452    case PIPE_FORMAT_R16_FLOAT:
453       return SVGA3D_R_S10E5;
454    case PIPE_FORMAT_R16G16_FLOAT:
455       return SVGA3D_RG_S10E5;
456    case PIPE_FORMAT_R16G16B16A16_FLOAT:
457       return SVGA3D_ARGB_S10E5;
458
459    case PIPE_FORMAT_Z32_UNORM:
460       /* SVGA3D_Z_D32 is not yet unsupported */
461       /* fall-through */
462    default:
463       return SVGA3D_FORMAT_INVALID;
464    }
465 }
466
467
468 /*
469  * Format capability description entry.
470  */
471 struct format_cap {
472    const char *name;
473
474    SVGA3dSurfaceFormat format;
475
476    /*
477     * Capability index corresponding to the format.
478     */
479    SVGA3dDevCapIndex devcap;
480
481    /* size of each pixel/block */
482    unsigned block_width, block_height, block_bytes;
483
484    /*
485     * Mask of supported SVGA3dFormatOp operations, to be inferred when the
486     * capability is not explicitly present.
487     */
488    uint32 defaultOperations;
489 };
490
491
492 /*
493  * Format capability description table.
494  *
495  * Ordered by increasing SVGA3dSurfaceFormat value, but with gaps.
496  *
497  * Note: there are some special cases below where we set devcap=0 and
498  * avoid querying the host.  In particular, depth/stencil formats which
499  * can be rendered to and sampled from.  For example, the gallium format
500  * PIPE_FORMAT_Z24_UNORM_S8_UINT is converted to SVGA3D_D24_UNORM_S8_UINT
501  * for rendering but converted to SVGA3D_R24_UNORM_X8_TYPELESS for sampling.
502  * If we want to query if a format supports both rendering and sampling the
503  * host will tell us no for SVGA3D_D24_UNORM_S8_UINT, SVGA3D_D16_UNORM and
504  * SVGA3D_R24_UNORM_X8_TYPELESS.  So we override the host query for those
505  * formats and report that both can do rendering and sampling.
506  */
507 static const struct format_cap format_cap_table[] = {
508    {
509       "SVGA3D_FORMAT_INVALID",
510       SVGA3D_FORMAT_INVALID, 0, 0, 0, 0, 0
511    },
512    {
513       "SVGA3D_X8R8G8B8",
514       SVGA3D_X8R8G8B8,
515       SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8,
516       1, 1, 4,
517       SVGA3DFORMAT_OP_TEXTURE |
518       SVGA3DFORMAT_OP_CUBETEXTURE |
519       SVGA3DFORMAT_OP_VOLUMETEXTURE |
520       SVGA3DFORMAT_OP_DISPLAYMODE |
521       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
522    },
523    {
524       "SVGA3D_A8R8G8B8",
525       SVGA3D_A8R8G8B8,
526       SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8,
527       1, 1, 4,
528       SVGA3DFORMAT_OP_TEXTURE |
529       SVGA3DFORMAT_OP_CUBETEXTURE |
530       SVGA3DFORMAT_OP_VOLUMETEXTURE |
531       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
532    },
533    {
534       "SVGA3D_R5G6B5",
535       SVGA3D_R5G6B5,
536       SVGA3D_DEVCAP_SURFACEFMT_R5G6B5,
537       1, 1, 2,
538       SVGA3DFORMAT_OP_TEXTURE |
539       SVGA3DFORMAT_OP_CUBETEXTURE |
540       SVGA3DFORMAT_OP_VOLUMETEXTURE |
541       SVGA3DFORMAT_OP_DISPLAYMODE |
542       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
543    },
544    {
545       "SVGA3D_X1R5G5B5",
546       SVGA3D_X1R5G5B5,
547       SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5,
548       1, 1, 2,
549       SVGA3DFORMAT_OP_TEXTURE |
550       SVGA3DFORMAT_OP_CUBETEXTURE |
551       SVGA3DFORMAT_OP_VOLUMETEXTURE |
552       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
553    },
554    {
555       "SVGA3D_A1R5G5B5",
556       SVGA3D_A1R5G5B5,
557       SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5,
558       1, 1, 2,
559       SVGA3DFORMAT_OP_TEXTURE |
560       SVGA3DFORMAT_OP_CUBETEXTURE |
561       SVGA3DFORMAT_OP_VOLUMETEXTURE |
562       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
563    },
564    {
565       "SVGA3D_A4R4G4B4",
566       SVGA3D_A4R4G4B4,
567       SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4,
568       1, 1, 2,
569       SVGA3DFORMAT_OP_TEXTURE |
570       SVGA3DFORMAT_OP_CUBETEXTURE |
571       SVGA3DFORMAT_OP_VOLUMETEXTURE |
572       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
573    },
574    {
575       /*
576        * SVGA3D_Z_D32 is not yet supported, and has no corresponding
577        * SVGA3D_DEVCAP_xxx.
578        */
579       "SVGA3D_Z_D32",
580       SVGA3D_Z_D32, 0, 0, 0, 0, 0
581    },
582    {
583       "SVGA3D_Z_D16",
584       SVGA3D_Z_D16,
585       SVGA3D_DEVCAP_SURFACEFMT_Z_D16,
586       1, 1, 2,
587       SVGA3DFORMAT_OP_ZSTENCIL
588    },
589    {
590       "SVGA3D_Z_D24S8",
591       SVGA3D_Z_D24S8,
592       SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8,
593       1, 1, 4,
594       SVGA3DFORMAT_OP_ZSTENCIL
595    },
596    {
597       "SVGA3D_Z_D15S1",
598       SVGA3D_Z_D15S1,
599       SVGA3D_DEVCAP_MAX,
600       1, 1, 2,
601       SVGA3DFORMAT_OP_ZSTENCIL
602    },
603    {
604       "SVGA3D_LUMINANCE8",
605       SVGA3D_LUMINANCE8,
606       SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8,
607       1, 1, 1,
608       SVGA3DFORMAT_OP_TEXTURE |
609       SVGA3DFORMAT_OP_CUBETEXTURE |
610       SVGA3DFORMAT_OP_VOLUMETEXTURE
611    },
612    {
613       /*
614        * SVGA3D_LUMINANCE4_ALPHA4 is not supported, and has no corresponding
615        * SVGA3D_DEVCAP_xxx.
616        */
617       "SVGA3D_LUMINANCE4_ALPHA4",
618       SVGA3D_LUMINANCE4_ALPHA4, 0, 0, 0, 0, 0
619    },
620    {
621       "SVGA3D_LUMINANCE16",
622       SVGA3D_LUMINANCE16,
623       SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16,
624       1, 1, 2,
625       SVGA3DFORMAT_OP_TEXTURE |
626       SVGA3DFORMAT_OP_CUBETEXTURE |
627       SVGA3DFORMAT_OP_VOLUMETEXTURE
628    },
629    {
630       "SVGA3D_LUMINANCE8_ALPHA8",
631       SVGA3D_LUMINANCE8_ALPHA8,
632       SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8,
633       1, 1, 2,
634       SVGA3DFORMAT_OP_TEXTURE |
635       SVGA3DFORMAT_OP_CUBETEXTURE |
636       SVGA3DFORMAT_OP_VOLUMETEXTURE
637    },
638    {
639       "SVGA3D_DXT1",
640       SVGA3D_DXT1,
641       SVGA3D_DEVCAP_SURFACEFMT_DXT1,
642       4, 4, 8,
643       SVGA3DFORMAT_OP_TEXTURE |
644       SVGA3DFORMAT_OP_CUBETEXTURE
645    },
646    {
647       "SVGA3D_DXT2",
648       SVGA3D_DXT2,
649       SVGA3D_DEVCAP_SURFACEFMT_DXT2,
650       4, 4, 8,
651       SVGA3DFORMAT_OP_TEXTURE |
652       SVGA3DFORMAT_OP_CUBETEXTURE
653    },
654    {
655       "SVGA3D_DXT3",
656       SVGA3D_DXT3,
657       SVGA3D_DEVCAP_SURFACEFMT_DXT3,
658       4, 4, 16,
659       SVGA3DFORMAT_OP_TEXTURE |
660       SVGA3DFORMAT_OP_CUBETEXTURE
661    },
662    {
663       "SVGA3D_DXT4",
664       SVGA3D_DXT4,
665       SVGA3D_DEVCAP_SURFACEFMT_DXT4,
666       4, 4, 16,
667       SVGA3DFORMAT_OP_TEXTURE |
668       SVGA3DFORMAT_OP_CUBETEXTURE
669    },
670    {
671       "SVGA3D_DXT5",
672       SVGA3D_DXT5,
673       SVGA3D_DEVCAP_SURFACEFMT_DXT5,
674       4, 4, 8,
675       SVGA3DFORMAT_OP_TEXTURE |
676       SVGA3DFORMAT_OP_CUBETEXTURE
677    },
678    {
679       "SVGA3D_BUMPU8V8",
680       SVGA3D_BUMPU8V8,
681       SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8,
682       1, 1, 2,
683       SVGA3DFORMAT_OP_TEXTURE |
684       SVGA3DFORMAT_OP_CUBETEXTURE |
685       SVGA3DFORMAT_OP_VOLUMETEXTURE
686    },
687    {
688       /*
689        * SVGA3D_BUMPL6V5U5 is unsupported; it has no corresponding
690        * SVGA3D_DEVCAP_xxx.
691        */
692       "SVGA3D_BUMPL6V5U5",
693       SVGA3D_BUMPL6V5U5, 0, 0, 0, 0, 0
694    },
695    {
696       "SVGA3D_BUMPX8L8V8U8",
697       SVGA3D_BUMPX8L8V8U8,
698       SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8,
699       1, 1, 4,
700       SVGA3DFORMAT_OP_TEXTURE |
701       SVGA3DFORMAT_OP_CUBETEXTURE
702    },
703    {
704       "SVGA3D_FORMAT_DEAD1",
705       SVGA3D_FORMAT_DEAD1, 0, 0, 0, 0, 0
706    },
707    {
708       "SVGA3D_ARGB_S10E5",
709       SVGA3D_ARGB_S10E5,
710       SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5,
711       1, 1, 2,
712       SVGA3DFORMAT_OP_TEXTURE |
713       SVGA3DFORMAT_OP_CUBETEXTURE |
714       SVGA3DFORMAT_OP_VOLUMETEXTURE |
715       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
716    },
717    {
718       "SVGA3D_ARGB_S23E8",
719       SVGA3D_ARGB_S23E8,
720       SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8,
721       1, 1, 4,
722       SVGA3DFORMAT_OP_TEXTURE |
723       SVGA3DFORMAT_OP_CUBETEXTURE |
724       SVGA3DFORMAT_OP_VOLUMETEXTURE |
725       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
726    },
727    {
728       "SVGA3D_A2R10G10B10",
729       SVGA3D_A2R10G10B10,
730       SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10,
731       1, 1, 4,
732       SVGA3DFORMAT_OP_TEXTURE |
733       SVGA3DFORMAT_OP_CUBETEXTURE |
734       SVGA3DFORMAT_OP_VOLUMETEXTURE |
735       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
736    },
737    {
738       /*
739        * SVGA3D_V8U8 is unsupported; it has no corresponding
740        * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPU8V8 should be used instead.
741        */
742       "SVGA3D_V8U8",
743       SVGA3D_V8U8, 0, 0, 0, 0, 0
744    },
745    {
746       "SVGA3D_Q8W8V8U8",
747       SVGA3D_Q8W8V8U8,
748       SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8,
749       1, 1, 4,
750       SVGA3DFORMAT_OP_TEXTURE |
751       SVGA3DFORMAT_OP_CUBETEXTURE
752    },
753    {
754       "SVGA3D_CxV8U8",
755       SVGA3D_CxV8U8,
756       SVGA3D_DEVCAP_SURFACEFMT_CxV8U8,
757       1, 1, 2,
758       SVGA3DFORMAT_OP_TEXTURE
759    },
760    {
761       /*
762        * SVGA3D_X8L8V8U8 is unsupported; it has no corresponding
763        * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
764        */
765       "SVGA3D_X8L8V8U8",
766       SVGA3D_X8L8V8U8, 0, 0, 0, 0, 0
767    },
768    {
769       "SVGA3D_A2W10V10U10",
770       SVGA3D_A2W10V10U10,
771       SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10,
772       1, 1, 4,
773       SVGA3DFORMAT_OP_TEXTURE
774    },
775    {
776       "SVGA3D_ALPHA8",
777       SVGA3D_ALPHA8,
778       SVGA3D_DEVCAP_SURFACEFMT_ALPHA8,
779       1, 1, 1,
780       SVGA3DFORMAT_OP_TEXTURE |
781       SVGA3DFORMAT_OP_CUBETEXTURE |
782       SVGA3DFORMAT_OP_VOLUMETEXTURE
783    },
784    {
785       "SVGA3D_R_S10E5",
786       SVGA3D_R_S10E5,
787       SVGA3D_DEVCAP_SURFACEFMT_R_S10E5,
788       1, 1, 2,
789       SVGA3DFORMAT_OP_TEXTURE |
790       SVGA3DFORMAT_OP_VOLUMETEXTURE |
791       SVGA3DFORMAT_OP_CUBETEXTURE |
792       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
793    },
794    {
795       "SVGA3D_R_S23E8",
796       SVGA3D_R_S23E8,
797       SVGA3D_DEVCAP_SURFACEFMT_R_S23E8,
798       1, 1, 4,
799       SVGA3DFORMAT_OP_TEXTURE |
800       SVGA3DFORMAT_OP_VOLUMETEXTURE |
801       SVGA3DFORMAT_OP_CUBETEXTURE |
802       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
803    },
804    {
805       "SVGA3D_RG_S10E5",
806       SVGA3D_RG_S10E5,
807       SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5,
808       1, 1, 2,
809       SVGA3DFORMAT_OP_TEXTURE |
810       SVGA3DFORMAT_OP_VOLUMETEXTURE |
811       SVGA3DFORMAT_OP_CUBETEXTURE |
812       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
813    },
814    {
815       "SVGA3D_RG_S23E8",
816       SVGA3D_RG_S23E8,
817       SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8,
818       1, 1, 4,
819       SVGA3DFORMAT_OP_TEXTURE |
820       SVGA3DFORMAT_OP_VOLUMETEXTURE |
821       SVGA3DFORMAT_OP_CUBETEXTURE |
822       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
823    },
824    {
825       /*
826        * SVGA3D_BUFFER is a placeholder format for index/vertex buffers.
827        */
828       "SVGA3D_BUFFER",
829       SVGA3D_BUFFER, 0, 1, 1, 1, 0
830    },
831    {
832       "SVGA3D_Z_D24X8",
833       SVGA3D_Z_D24X8,
834       SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8,
835       1, 1, 4,
836       SVGA3DFORMAT_OP_ZSTENCIL
837    },
838    {
839       "SVGA3D_V16U16",
840       SVGA3D_V16U16,
841       SVGA3D_DEVCAP_SURFACEFMT_V16U16,
842       1, 1, 4,
843       SVGA3DFORMAT_OP_TEXTURE |
844       SVGA3DFORMAT_OP_CUBETEXTURE |
845       SVGA3DFORMAT_OP_VOLUMETEXTURE
846    },
847    {
848       "SVGA3D_G16R16",
849       SVGA3D_G16R16,
850       SVGA3D_DEVCAP_SURFACEFMT_G16R16,
851       1, 1, 4,
852       SVGA3DFORMAT_OP_TEXTURE |
853       SVGA3DFORMAT_OP_CUBETEXTURE |
854       SVGA3DFORMAT_OP_VOLUMETEXTURE |
855       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
856    },
857    {
858       "SVGA3D_A16B16G16R16",
859       SVGA3D_A16B16G16R16,
860       SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16,
861       1, 1, 8,
862       SVGA3DFORMAT_OP_TEXTURE |
863       SVGA3DFORMAT_OP_CUBETEXTURE |
864       SVGA3DFORMAT_OP_VOLUMETEXTURE |
865       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
866    },
867    {
868       "SVGA3D_UYVY",
869       SVGA3D_UYVY,
870       SVGA3D_DEVCAP_SURFACEFMT_UYVY,
871       0, 0, 0,
872       0
873    },
874    {
875       "SVGA3D_YUY2",
876       SVGA3D_YUY2,
877       SVGA3D_DEVCAP_SURFACEFMT_YUY2,
878       0, 0, 0,
879       0
880    },
881    {
882       "SVGA3D_NV12",
883       SVGA3D_NV12,
884       SVGA3D_DEVCAP_SURFACEFMT_NV12,
885       0, 0, 0,
886       0
887    },
888    {
889       "SVGA3D_AYUV",
890       SVGA3D_AYUV,
891       SVGA3D_DEVCAP_SURFACEFMT_AYUV,
892       0, 0, 0,
893       0
894    },
895    {
896       "SVGA3D_R32G32B32A32_TYPELESS",
897       SVGA3D_R32G32B32A32_TYPELESS,
898       SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS,
899       1, 1, 16,
900       SVGA3DFORMAT_OP_TEXTURE |
901       SVGA3DFORMAT_OP_CUBETEXTURE |
902       SVGA3DFORMAT_OP_VOLUMETEXTURE |
903       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
904    },
905    {
906       "SVGA3D_R32G32B32A32_UINT",
907       SVGA3D_R32G32B32A32_UINT,
908       SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT,
909       1, 1, 16,
910       SVGA3DFORMAT_OP_TEXTURE |
911       SVGA3DFORMAT_OP_CUBETEXTURE |
912       SVGA3DFORMAT_OP_VOLUMETEXTURE |
913       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
914    },
915    {
916       "SVGA3D_R32G32B32A32_SINT",
917       SVGA3D_R32G32B32A32_SINT,
918       SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT,
919       1, 1, 16,
920       SVGA3DFORMAT_OP_TEXTURE |
921       SVGA3DFORMAT_OP_CUBETEXTURE |
922       SVGA3DFORMAT_OP_VOLUMETEXTURE |
923       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
924    },
925    {
926       "SVGA3D_R32G32B32_TYPELESS",
927       SVGA3D_R32G32B32_TYPELESS,
928       SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS,
929       1, 1, 12,
930       SVGA3DFORMAT_OP_TEXTURE |
931       SVGA3DFORMAT_OP_CUBETEXTURE |
932       SVGA3DFORMAT_OP_VOLUMETEXTURE |
933       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
934    },
935    {
936       "SVGA3D_R32G32B32_FLOAT",
937       SVGA3D_R32G32B32_FLOAT,
938       SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT,
939       1, 1, 12,
940       SVGA3DFORMAT_OP_TEXTURE |
941       SVGA3DFORMAT_OP_CUBETEXTURE |
942       SVGA3DFORMAT_OP_VOLUMETEXTURE |
943       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
944    },
945    {
946       "SVGA3D_R32G32B32_UINT",
947       SVGA3D_R32G32B32_UINT,
948       SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT,
949       1, 1, 12,
950       SVGA3DFORMAT_OP_TEXTURE |
951       SVGA3DFORMAT_OP_CUBETEXTURE |
952       SVGA3DFORMAT_OP_VOLUMETEXTURE |
953       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
954    },
955    {
956       "SVGA3D_R32G32B32_SINT",
957       SVGA3D_R32G32B32_SINT,
958       SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT,
959       1, 1, 12,
960       SVGA3DFORMAT_OP_TEXTURE |
961       SVGA3DFORMAT_OP_CUBETEXTURE |
962       SVGA3DFORMAT_OP_VOLUMETEXTURE |
963       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
964    },
965    {
966       "SVGA3D_R16G16B16A16_TYPELESS",
967       SVGA3D_R16G16B16A16_TYPELESS,
968       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS,
969       1, 1, 8,
970       SVGA3DFORMAT_OP_TEXTURE |
971       SVGA3DFORMAT_OP_CUBETEXTURE |
972       SVGA3DFORMAT_OP_VOLUMETEXTURE |
973       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
974    },
975    {
976       "SVGA3D_R16G16B16A16_UINT",
977       SVGA3D_R16G16B16A16_UINT,
978       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT,
979       1, 1, 8,
980       SVGA3DFORMAT_OP_TEXTURE |
981       SVGA3DFORMAT_OP_CUBETEXTURE |
982       SVGA3DFORMAT_OP_VOLUMETEXTURE |
983       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
984    },
985    {
986       "SVGA3D_R16G16B16A16_SNORM",
987       SVGA3D_R16G16B16A16_SNORM,
988       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM,
989       1, 1, 8,
990       SVGA3DFORMAT_OP_TEXTURE |
991       SVGA3DFORMAT_OP_CUBETEXTURE |
992       SVGA3DFORMAT_OP_VOLUMETEXTURE |
993       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
994    },
995    {
996       "SVGA3D_R16G16B16A16_SINT",
997       SVGA3D_R16G16B16A16_SINT,
998       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT,
999       1, 1, 8,
1000       SVGA3DFORMAT_OP_TEXTURE |
1001       SVGA3DFORMAT_OP_CUBETEXTURE |
1002       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1003       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1004    },
1005    {
1006       "SVGA3D_R32G32_TYPELESS",
1007       SVGA3D_R32G32_TYPELESS,
1008       SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS,
1009       1, 1, 8,
1010       SVGA3DFORMAT_OP_TEXTURE |
1011       SVGA3DFORMAT_OP_CUBETEXTURE |
1012       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1013       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1014    },
1015    {
1016       "SVGA3D_R32G32_UINT",
1017       SVGA3D_R32G32_UINT,
1018       SVGA3D_DEVCAP_DXFMT_R32G32_UINT,
1019       1, 1, 8,
1020       SVGA3DFORMAT_OP_TEXTURE |
1021       SVGA3DFORMAT_OP_CUBETEXTURE |
1022       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1023       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1024    },
1025    {
1026       "SVGA3D_R32G32_SINT",
1027       SVGA3D_R32G32_SINT,
1028       SVGA3D_DEVCAP_DXFMT_R32G32_SINT,
1029       1, 1, 8,
1030       SVGA3DFORMAT_OP_TEXTURE |
1031       SVGA3DFORMAT_OP_CUBETEXTURE |
1032       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1033       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1034    },
1035    {
1036       "SVGA3D_R32G8X24_TYPELESS",
1037       SVGA3D_R32G8X24_TYPELESS,
1038       SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS,
1039       1, 1, 8,
1040       SVGA3DFORMAT_OP_TEXTURE |
1041       SVGA3DFORMAT_OP_CUBETEXTURE |
1042       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1043       SVGA3DFORMAT_OP_ZSTENCIL
1044    },
1045    {
1046       /* Special case: no devcap / report sampler and depth/stencil ability
1047        */
1048       "SVGA3D_D32_FLOAT_S8X24_UINT",
1049       SVGA3D_D32_FLOAT_S8X24_UINT,
1050       0, /*SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT*/
1051       1, 1, 8,
1052       SVGA3DFORMAT_OP_TEXTURE |
1053       SVGA3DFORMAT_OP_CUBETEXTURE |
1054       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1055       SVGA3DFORMAT_OP_ZSTENCIL
1056    },
1057    {
1058       /* Special case: no devcap / report sampler and depth/stencil ability
1059        */
1060       "SVGA3D_R32_FLOAT_X8X24_TYPELESS",
1061       SVGA3D_R32_FLOAT_X8X24_TYPELESS,
1062       0, /*SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24_TYPELESS*/
1063       1, 1, 8,
1064       SVGA3DFORMAT_OP_TEXTURE |
1065       SVGA3DFORMAT_OP_CUBETEXTURE |
1066       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1067       SVGA3DFORMAT_OP_ZSTENCIL
1068    },
1069    {
1070       "SVGA3D_X32_TYPELESS_G8X24_UINT",
1071       SVGA3D_X32_TYPELESS_G8X24_UINT,
1072       SVGA3D_DEVCAP_DXFMT_X32_TYPELESS_G8X24_UINT,
1073       1, 1, 4,
1074       SVGA3DFORMAT_OP_TEXTURE |
1075       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1076       SVGA3DFORMAT_OP_CUBETEXTURE |
1077       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1078    },
1079    {
1080       "SVGA3D_R10G10B10A2_TYPELESS",
1081       SVGA3D_R10G10B10A2_TYPELESS,
1082       SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS,
1083       1, 1, 4,
1084       SVGA3DFORMAT_OP_TEXTURE |
1085       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1086       SVGA3DFORMAT_OP_CUBETEXTURE |
1087       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1088    },
1089    {
1090       "SVGA3D_R10G10B10A2_UINT",
1091       SVGA3D_R10G10B10A2_UINT,
1092       SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT,
1093       1, 1, 4,
1094       SVGA3DFORMAT_OP_TEXTURE |
1095       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1096       SVGA3DFORMAT_OP_CUBETEXTURE |
1097       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1098    },
1099    {
1100       "SVGA3D_R11G11B10_FLOAT",
1101       SVGA3D_R11G11B10_FLOAT,
1102       SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT,
1103       1, 1, 4,
1104       SVGA3DFORMAT_OP_TEXTURE |
1105       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1106       SVGA3DFORMAT_OP_CUBETEXTURE |
1107       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1108    },
1109    {
1110       "SVGA3D_R8G8B8A8_TYPELESS",
1111       SVGA3D_R8G8B8A8_TYPELESS,
1112       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS,
1113       1, 1, 4,
1114       SVGA3DFORMAT_OP_TEXTURE |
1115       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1116       SVGA3DFORMAT_OP_CUBETEXTURE |
1117       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1118    },
1119    {
1120       "SVGA3D_R8G8B8A8_UNORM",
1121       SVGA3D_R8G8B8A8_UNORM,
1122       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM,
1123       1, 1, 4,
1124       SVGA3DFORMAT_OP_TEXTURE |
1125       SVGA3DFORMAT_OP_CUBETEXTURE |
1126       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1127       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1128    },
1129    {
1130       "SVGA3D_R8G8B8A8_UNORM_SRGB",
1131       SVGA3D_R8G8B8A8_UNORM_SRGB,
1132       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB,
1133       1, 1, 4,
1134       SVGA3DFORMAT_OP_TEXTURE |
1135       SVGA3DFORMAT_OP_CUBETEXTURE |
1136       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1137       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1138    },
1139    {
1140       "SVGA3D_R8G8B8A8_UINT",
1141       SVGA3D_R8G8B8A8_UINT,
1142       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT,
1143       1, 1, 4,
1144       SVGA3DFORMAT_OP_TEXTURE |
1145       SVGA3DFORMAT_OP_CUBETEXTURE |
1146       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1147       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1148       },
1149    {
1150       "SVGA3D_R8G8B8A8_SINT",
1151       SVGA3D_R8G8B8A8_SINT,
1152       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT,
1153       1, 1, 4,
1154       SVGA3DFORMAT_OP_TEXTURE |
1155       SVGA3DFORMAT_OP_CUBETEXTURE |
1156       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1157       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1158    },
1159    {
1160       "SVGA3D_R16G16_TYPELESS",
1161       SVGA3D_R16G16_TYPELESS,
1162       SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS,
1163       1, 1, 4,
1164       SVGA3DFORMAT_OP_TEXTURE |
1165       SVGA3DFORMAT_OP_CUBETEXTURE |
1166       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1167       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1168    },
1169    {
1170       "SVGA3D_R16G16_UINT",
1171       SVGA3D_R16G16_UINT,
1172       SVGA3D_DEVCAP_DXFMT_R16G16_UINT,
1173       1, 1, 4,
1174       SVGA3DFORMAT_OP_TEXTURE |
1175       SVGA3DFORMAT_OP_CUBETEXTURE |
1176       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1177       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1178    },
1179    {
1180       "SVGA3D_R16G16_SINT",
1181       SVGA3D_R16G16_SINT,
1182       SVGA3D_DEVCAP_DXFMT_R16G16_SINT,
1183       1, 1, 4,
1184       SVGA3DFORMAT_OP_TEXTURE |
1185       SVGA3DFORMAT_OP_CUBETEXTURE |
1186       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1187       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1188    },
1189    {
1190       "SVGA3D_R32_TYPELESS",
1191       SVGA3D_R32_TYPELESS,
1192       SVGA3D_DEVCAP_DXFMT_R32_TYPELESS,
1193       1, 1, 4,
1194       SVGA3DFORMAT_OP_TEXTURE |
1195       SVGA3DFORMAT_OP_CUBETEXTURE |
1196       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1197       SVGA3DFORMAT_OP_ZSTENCIL |
1198       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1199    },
1200    {
1201       /* Special case: no devcap / report sampler and depth/stencil ability
1202        */
1203       "SVGA3D_D32_FLOAT",
1204       SVGA3D_D32_FLOAT,
1205       0, /*SVGA3D_DEVCAP_DXFMT_D32_FLOAT*/
1206       1, 1, 4,
1207       SVGA3DFORMAT_OP_TEXTURE |
1208       SVGA3DFORMAT_OP_CUBETEXTURE |
1209       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1210       SVGA3DFORMAT_OP_ZSTENCIL
1211    },
1212    {
1213       "SVGA3D_R32_UINT",
1214       SVGA3D_R32_UINT,
1215       SVGA3D_DEVCAP_DXFMT_R32_UINT,
1216       1, 1, 4,
1217       SVGA3DFORMAT_OP_TEXTURE |
1218       SVGA3DFORMAT_OP_CUBETEXTURE |
1219       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1220       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1221    },
1222    {
1223       "SVGA3D_R32_SINT",
1224       SVGA3D_R32_SINT,
1225       SVGA3D_DEVCAP_DXFMT_R32_SINT,
1226       1, 1, 4,
1227       SVGA3DFORMAT_OP_TEXTURE |
1228       SVGA3DFORMAT_OP_CUBETEXTURE |
1229       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1230       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1231    },
1232    {
1233       "SVGA3D_R24G8_TYPELESS",
1234       SVGA3D_R24G8_TYPELESS,
1235       SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS,
1236       1, 1, 4,
1237       SVGA3DFORMAT_OP_TEXTURE |
1238       SVGA3DFORMAT_OP_CUBETEXTURE |
1239       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1240       SVGA3DFORMAT_OP_ZSTENCIL
1241    },
1242    {
1243       /* Special case: no devcap / report sampler and depth/stencil ability
1244        */
1245       "SVGA3D_D24_UNORM_S8_UINT",
1246       SVGA3D_D24_UNORM_S8_UINT,
1247       0, /*SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT*/
1248       1, 1, 4,
1249       SVGA3DFORMAT_OP_TEXTURE |
1250       SVGA3DFORMAT_OP_CUBETEXTURE |
1251       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1252       SVGA3DFORMAT_OP_ZSTENCIL
1253    },
1254    {
1255       /* Special case: no devcap / report sampler and depth/stencil ability
1256        */
1257       "SVGA3D_R24_UNORM_X8_TYPELESS",
1258       SVGA3D_R24_UNORM_X8_TYPELESS,
1259       0, /*SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8_TYPELESS*/
1260       1, 1, 4,
1261       SVGA3DFORMAT_OP_TEXTURE |
1262       SVGA3DFORMAT_OP_CUBETEXTURE |
1263       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1264       SVGA3DFORMAT_OP_ZSTENCIL
1265    },
1266    {
1267       "SVGA3D_X24_TYPELESS_G8_UINT",
1268       SVGA3D_X24_TYPELESS_G8_UINT,
1269       SVGA3D_DEVCAP_DXFMT_X24_TYPELESS_G8_UINT,
1270       1, 1, 4,
1271       SVGA3DFORMAT_OP_TEXTURE |
1272       SVGA3DFORMAT_OP_CUBETEXTURE |
1273       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1274       SVGA3DFORMAT_OP_ZSTENCIL
1275    },
1276    {
1277       "SVGA3D_R8G8_TYPELESS",
1278       SVGA3D_R8G8_TYPELESS,
1279       SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS,
1280       1, 1, 2,
1281       SVGA3DFORMAT_OP_TEXTURE |
1282       SVGA3DFORMAT_OP_CUBETEXTURE |
1283       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1284       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1285    },
1286    {
1287       "SVGA3D_R8G8_UNORM",
1288       SVGA3D_R8G8_UNORM,
1289       SVGA3D_DEVCAP_DXFMT_R8G8_UNORM,
1290       1, 1, 2,
1291       SVGA3DFORMAT_OP_TEXTURE |
1292       SVGA3DFORMAT_OP_CUBETEXTURE |
1293       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1294       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1295    },
1296    {
1297       "SVGA3D_R8G8_UINT",
1298       SVGA3D_R8G8_UINT,
1299       SVGA3D_DEVCAP_DXFMT_R8G8_UINT,
1300       1, 1, 2,
1301       SVGA3DFORMAT_OP_TEXTURE |
1302       SVGA3DFORMAT_OP_CUBETEXTURE |
1303       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1304       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1305    },
1306    {
1307       "SVGA3D_R8G8_SINT",
1308       SVGA3D_R8G8_SINT,
1309       SVGA3D_DEVCAP_DXFMT_R8G8_SINT,
1310       1, 1, 2,
1311       SVGA3DFORMAT_OP_TEXTURE |
1312       SVGA3DFORMAT_OP_CUBETEXTURE |
1313       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1314       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1315    },
1316    {
1317       "SVGA3D_R16_TYPELESS",
1318       SVGA3D_R16_TYPELESS,
1319       SVGA3D_DEVCAP_DXFMT_R16_TYPELESS,
1320       1, 1, 2,
1321       SVGA3DFORMAT_OP_ZSTENCIL |
1322       SVGA3DFORMAT_OP_TEXTURE |
1323       SVGA3DFORMAT_OP_CUBETEXTURE |
1324       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1325       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1326    },
1327    {
1328       "SVGA3D_R16_UNORM",
1329       SVGA3D_R16_UNORM,
1330       SVGA3D_DEVCAP_DXFMT_R16_UNORM,
1331       1, 1, 2,
1332       SVGA3DFORMAT_OP_TEXTURE |
1333       SVGA3DFORMAT_OP_CUBETEXTURE |
1334       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1335       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1336    },
1337    {
1338       "SVGA3D_R16_UINT",
1339       SVGA3D_R16_UINT,
1340       SVGA3D_DEVCAP_DXFMT_R16_UINT,
1341       1, 1, 2,
1342       SVGA3DFORMAT_OP_TEXTURE |
1343       SVGA3DFORMAT_OP_CUBETEXTURE |
1344       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1345       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1346    },
1347    {
1348       "SVGA3D_R16_SNORM",
1349       SVGA3D_R16_SNORM,
1350       SVGA3D_DEVCAP_DXFMT_R16_SNORM,
1351       1, 1, 2,
1352       SVGA3DFORMAT_OP_TEXTURE |
1353       SVGA3DFORMAT_OP_CUBETEXTURE |
1354       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1355       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1356    },
1357    {
1358       "SVGA3D_R16_SINT",
1359       SVGA3D_R16_SINT,
1360       SVGA3D_DEVCAP_DXFMT_R16_SINT,
1361       1, 1, 2,
1362       SVGA3DFORMAT_OP_TEXTURE |
1363       SVGA3DFORMAT_OP_CUBETEXTURE |
1364       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1365       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1366    },
1367    {
1368       "SVGA3D_R8_TYPELESS",
1369       SVGA3D_R8_TYPELESS,
1370       SVGA3D_DEVCAP_DXFMT_R8_TYPELESS,
1371       1, 1, 1,
1372       SVGA3DFORMAT_OP_TEXTURE |
1373       SVGA3DFORMAT_OP_CUBETEXTURE |
1374       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1375       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1376    },
1377    {
1378       "SVGA3D_R8_UNORM",
1379       SVGA3D_R8_UNORM,
1380       SVGA3D_DEVCAP_DXFMT_R8_UNORM,
1381       1, 1, 1,
1382       SVGA3DFORMAT_OP_TEXTURE |
1383       SVGA3DFORMAT_OP_CUBETEXTURE |
1384       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1385       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1386    },
1387    {
1388       "SVGA3D_R8_UINT",
1389       SVGA3D_R8_UINT,
1390       SVGA3D_DEVCAP_DXFMT_R8_UINT,
1391       1, 1, 1,
1392       SVGA3DFORMAT_OP_TEXTURE |
1393       SVGA3DFORMAT_OP_CUBETEXTURE |
1394       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1395       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1396    },
1397    {
1398       "SVGA3D_R8_SNORM",
1399       SVGA3D_R8_SNORM,
1400       SVGA3D_DEVCAP_DXFMT_R8_SNORM,
1401       1, 1, 1,
1402       SVGA3DFORMAT_OP_TEXTURE |
1403       SVGA3DFORMAT_OP_CUBETEXTURE |
1404       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1405       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1406    },
1407    {
1408       "SVGA3D_R8_SINT",
1409       SVGA3D_R8_SINT,
1410       SVGA3D_DEVCAP_DXFMT_R8_SINT,
1411       1, 1, 1,
1412       SVGA3DFORMAT_OP_TEXTURE |
1413       SVGA3DFORMAT_OP_CUBETEXTURE |
1414       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1415       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1416    },
1417    {
1418       "SVGA3D_P8",
1419       SVGA3D_P8, 0, 0, 0, 0, 0
1420    },
1421    {
1422       "SVGA3D_R9G9B9E5_SHAREDEXP",
1423       SVGA3D_R9G9B9E5_SHAREDEXP,
1424       SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP,
1425       1, 1, 4,
1426       SVGA3DFORMAT_OP_TEXTURE |
1427       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1428       SVGA3DFORMAT_OP_CUBETEXTURE |
1429       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1430    },
1431    {
1432       "SVGA3D_R8G8_B8G8_UNORM",
1433       SVGA3D_R8G8_B8G8_UNORM, 0, 0, 0, 0, 0
1434    },
1435    {
1436       "SVGA3D_G8R8_G8B8_UNORM",
1437       SVGA3D_G8R8_G8B8_UNORM, 0, 0, 0, 0, 0
1438    },
1439    {
1440       "SVGA3D_BC1_TYPELESS",
1441       SVGA3D_BC1_TYPELESS,
1442       SVGA3D_DEVCAP_DXFMT_BC1_TYPELESS,
1443       4, 4, 8,
1444       SVGA3DFORMAT_OP_TEXTURE |
1445       SVGA3DFORMAT_OP_CUBETEXTURE
1446    },
1447    {
1448       "SVGA3D_BC1_UNORM_SRGB",
1449       SVGA3D_BC1_UNORM_SRGB,
1450       SVGA3D_DEVCAP_DXFMT_BC1_UNORM_SRGB,
1451       4, 4, 8,
1452       SVGA3DFORMAT_OP_TEXTURE |
1453       SVGA3DFORMAT_OP_CUBETEXTURE
1454    },
1455    {
1456       "SVGA3D_BC2_TYPELESS",
1457       SVGA3D_BC2_TYPELESS,
1458       SVGA3D_DEVCAP_DXFMT_BC2_TYPELESS,
1459       4, 4, 16,
1460       SVGA3DFORMAT_OP_TEXTURE |
1461       SVGA3DFORMAT_OP_CUBETEXTURE
1462    },
1463    {
1464       "SVGA3D_BC2_UNORM_SRGB",
1465       SVGA3D_BC2_UNORM_SRGB,
1466       SVGA3D_DEVCAP_DXFMT_BC2_UNORM_SRGB,
1467       4, 4, 16,
1468       SVGA3DFORMAT_OP_TEXTURE |
1469       SVGA3DFORMAT_OP_CUBETEXTURE
1470    },
1471    {
1472       "SVGA3D_BC3_TYPELESS",
1473       SVGA3D_BC3_TYPELESS,
1474       SVGA3D_DEVCAP_DXFMT_BC3_TYPELESS,
1475       4, 4, 16,
1476       SVGA3DFORMAT_OP_TEXTURE |
1477       SVGA3DFORMAT_OP_CUBETEXTURE
1478    },
1479    {
1480       "SVGA3D_BC3_UNORM_SRGB",
1481       SVGA3D_BC3_UNORM_SRGB,
1482       4, 4, 16,
1483       SVGA3DFORMAT_OP_TEXTURE |
1484       SVGA3DFORMAT_OP_CUBETEXTURE
1485    },
1486    {
1487       "SVGA3D_BC4_TYPELESS",
1488       SVGA3D_BC4_TYPELESS,
1489       SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS,
1490       4, 4, 8,
1491       SVGA3DFORMAT_OP_TEXTURE |
1492       SVGA3DFORMAT_OP_CUBETEXTURE
1493    },
1494    {
1495       "SVGA3D_ATI1",
1496       SVGA3D_ATI1, 0, 0, 0, 0, 0
1497    },
1498    {
1499       "SVGA3D_BC4_SNORM",
1500       SVGA3D_BC4_SNORM,
1501       SVGA3D_DEVCAP_DXFMT_BC4_SNORM,
1502       4, 4, 8,
1503       SVGA3DFORMAT_OP_TEXTURE |
1504       SVGA3DFORMAT_OP_CUBETEXTURE
1505    },
1506    {
1507       "SVGA3D_BC5_TYPELESS",
1508       SVGA3D_BC5_TYPELESS,
1509       SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS,
1510       4, 4, 16,
1511       SVGA3DFORMAT_OP_TEXTURE |
1512       SVGA3DFORMAT_OP_CUBETEXTURE
1513    },
1514    {
1515       "SVGA3D_ATI2",
1516       SVGA3D_ATI2, 0, 0, 0, 0, 0
1517    },
1518    {
1519       "SVGA3D_BC5_SNORM",
1520       SVGA3D_BC5_SNORM,
1521       SVGA3D_DEVCAP_DXFMT_BC5_SNORM,
1522       4, 4, 16,
1523       SVGA3DFORMAT_OP_TEXTURE |
1524       SVGA3DFORMAT_OP_CUBETEXTURE
1525    },
1526    {
1527       "SVGA3D_R10G10B10_XR_BIAS_A2_UNORM",
1528       SVGA3D_R10G10B10_XR_BIAS_A2_UNORM, 0, 0, 0, 0, 0
1529    },
1530    {
1531       "SVGA3D_B8G8R8A8_TYPELESS",
1532       SVGA3D_B8G8R8A8_TYPELESS,
1533       SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS,
1534       1, 1, 4,
1535       SVGA3DFORMAT_OP_TEXTURE |
1536       SVGA3DFORMAT_OP_CUBETEXTURE |
1537       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1538       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1539    },
1540    {
1541       "SVGA3D_B8G8R8A8_UNORM_SRGB",
1542       SVGA3D_B8G8R8A8_UNORM_SRGB,
1543       SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB,
1544       1, 1, 4,
1545       SVGA3DFORMAT_OP_TEXTURE |
1546       SVGA3DFORMAT_OP_CUBETEXTURE |
1547       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1548       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1549    },
1550    {
1551       "SVGA3D_B8G8R8X8_TYPELESS",
1552       SVGA3D_B8G8R8X8_TYPELESS,
1553       SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS,
1554       1, 1, 4,
1555       SVGA3DFORMAT_OP_TEXTURE |
1556       SVGA3DFORMAT_OP_CUBETEXTURE |
1557       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1558       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1559    },
1560    {
1561       "SVGA3D_B8G8R8X8_UNORM_SRGB",
1562       SVGA3D_B8G8R8X8_UNORM_SRGB,
1563       SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB,
1564       1, 1, 4,
1565       SVGA3DFORMAT_OP_TEXTURE |
1566       SVGA3DFORMAT_OP_CUBETEXTURE |
1567       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1568       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1569    },
1570    {
1571       "SVGA3D_Z_DF16",
1572       SVGA3D_Z_DF16,
1573       SVGA3D_DEVCAP_SURFACEFMT_Z_DF16,
1574       1, 1, 2,
1575       0
1576    },
1577    {
1578       "SVGA3D_Z_DF24",
1579       SVGA3D_Z_DF24,
1580       SVGA3D_DEVCAP_SURFACEFMT_Z_DF24,
1581       1, 1, 4,
1582       0
1583    },
1584    {
1585       "SVGA3D_Z_D24S8_INT",
1586       SVGA3D_Z_D24S8_INT,
1587       SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT,
1588       1, 1, 4,
1589       SVGA3DFORMAT_OP_TEXTURE |
1590       SVGA3DFORMAT_OP_CUBETEXTURE |
1591       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1592       SVGA3DFORMAT_OP_ZSTENCIL
1593    },
1594    {
1595       "SVGA3D_YV12",
1596       SVGA3D_YV12, 0, 0, 0, 0, 0
1597    },
1598    {
1599       "SVGA3D_R32G32B32A32_FLOAT",
1600       SVGA3D_R32G32B32A32_FLOAT,
1601       SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT,
1602       1, 1, 16,
1603       SVGA3DFORMAT_OP_TEXTURE |
1604       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1605       SVGA3DFORMAT_OP_CUBETEXTURE |
1606       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1607    },
1608    {
1609       "SVGA3D_R16G16B16A16_FLOAT",
1610       SVGA3D_R16G16B16A16_FLOAT,
1611       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT,
1612       1, 1, 8,
1613       SVGA3DFORMAT_OP_TEXTURE |
1614       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1615       SVGA3DFORMAT_OP_CUBETEXTURE |
1616       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1617    },
1618    {
1619       "SVGA3D_R16G16B16A16_UNORM",
1620       SVGA3D_R16G16B16A16_UNORM,
1621       SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM,
1622       1, 1, 8,
1623       SVGA3DFORMAT_OP_TEXTURE |
1624       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1625       SVGA3DFORMAT_OP_CUBETEXTURE |
1626       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1627    },
1628    {
1629       "SVGA3D_R32G32_FLOAT",
1630       SVGA3D_R32G32_FLOAT,
1631       SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT,
1632       1, 1, 8,
1633       SVGA3DFORMAT_OP_TEXTURE |
1634       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1635       SVGA3DFORMAT_OP_CUBETEXTURE |
1636       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1637    },
1638    {
1639       "SVGA3D_R10G10B10A2_UNORM",
1640       SVGA3D_R10G10B10A2_UNORM,
1641       SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM,
1642       1, 1, 4,
1643       SVGA3DFORMAT_OP_TEXTURE |
1644       SVGA3DFORMAT_OP_CUBETEXTURE |
1645       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1646       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1647    },
1648    {
1649       "SVGA3D_R8G8B8A8_SNORM",
1650       SVGA3D_R8G8B8A8_SNORM,
1651       SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM,
1652       1, 1, 4,
1653       SVGA3DFORMAT_OP_TEXTURE |
1654       SVGA3DFORMAT_OP_CUBETEXTURE |
1655       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1656       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1657    },
1658    {
1659       "SVGA3D_R16G16_FLOAT",
1660       SVGA3D_R16G16_FLOAT,
1661       SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT,
1662       1, 1, 4,
1663       SVGA3DFORMAT_OP_TEXTURE |
1664       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1665       SVGA3DFORMAT_OP_CUBETEXTURE |
1666       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1667    },
1668    {
1669       "SVGA3D_R16G16_UNORM",
1670       SVGA3D_R16G16_UNORM,
1671       SVGA3D_DEVCAP_DXFMT_R16G16_UNORM,
1672       1, 1, 4,
1673       SVGA3DFORMAT_OP_TEXTURE |
1674       SVGA3DFORMAT_OP_CUBETEXTURE |
1675       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1676       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1677    },
1678    {
1679       "SVGA3D_R16G16_SNORM",
1680       SVGA3D_R16G16_SNORM,
1681       SVGA3D_DEVCAP_DXFMT_R16G16_SNORM,
1682       1, 1, 4,
1683       SVGA3DFORMAT_OP_TEXTURE |
1684       SVGA3DFORMAT_OP_CUBETEXTURE |
1685       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1686       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1687    },
1688    {
1689       /* Special case: no devcap / report sampler, render target and
1690        * depth/stencil ability
1691        */
1692       "SVGA3D_R32_FLOAT",
1693       SVGA3D_R32_FLOAT,
1694       0, /*SVGA3D_DEVCAP_DXFMT_R32_FLOAT*/
1695       1, 1, 4,
1696       SVGA3DFORMAT_OP_TEXTURE |
1697       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1698       SVGA3DFORMAT_OP_CUBETEXTURE |
1699       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET |
1700       SVGA3DFORMAT_OP_ZSTENCIL
1701    },
1702    {
1703       "SVGA3D_R8G8_SNORM",
1704       SVGA3D_R8G8_SNORM,
1705       SVGA3D_DEVCAP_DXFMT_R8G8_SNORM,
1706       1, 1, 2,
1707       SVGA3DFORMAT_OP_TEXTURE |
1708       SVGA3DFORMAT_OP_CUBETEXTURE |
1709       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1710       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1711    },
1712    {
1713       "SVGA3D_R16_FLOAT",
1714       SVGA3D_R16_FLOAT,
1715       SVGA3D_DEVCAP_DXFMT_R16_FLOAT,
1716       1, 1, 2,
1717       SVGA3DFORMAT_OP_TEXTURE |
1718       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1719       SVGA3DFORMAT_OP_CUBETEXTURE |
1720       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1721    },
1722    {
1723       "SVGA3D_D16_UNORM",
1724       SVGA3D_D16_UNORM,
1725       0, /*SVGA3D_DEVCAP_DXFMT_D16_UNORM*/
1726       1, 1, 2,
1727       SVGA3DFORMAT_OP_TEXTURE |
1728       SVGA3DFORMAT_OP_CUBETEXTURE |
1729       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1730       SVGA3DFORMAT_OP_ZSTENCIL
1731    },
1732    {
1733       "SVGA3D_A8_UNORM",
1734       SVGA3D_A8_UNORM,
1735       SVGA3D_DEVCAP_DXFMT_A8_UNORM,
1736       1, 1, 1,
1737       SVGA3DFORMAT_OP_TEXTURE |
1738       SVGA3DFORMAT_OP_CUBETEXTURE |
1739       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1740       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1741    },
1742    {
1743       "SVGA3D_BC1_UNORM",
1744       SVGA3D_BC1_UNORM,
1745       SVGA3D_DEVCAP_DXFMT_BC1_UNORM,
1746       4, 4, 8,
1747       SVGA3DFORMAT_OP_TEXTURE |
1748       SVGA3DFORMAT_OP_CUBETEXTURE
1749    },
1750    {
1751       "SVGA3D_BC2_UNORM",
1752       SVGA3D_BC2_UNORM,
1753       SVGA3D_DEVCAP_DXFMT_BC2_UNORM,
1754       4, 4, 16,
1755       SVGA3DFORMAT_OP_TEXTURE |
1756       SVGA3DFORMAT_OP_CUBETEXTURE
1757    },
1758    {
1759       "SVGA3D_BC3_UNORM",
1760       SVGA3D_BC3_UNORM,
1761       SVGA3D_DEVCAP_DXFMT_BC3_UNORM,
1762       4, 4, 16,
1763       SVGA3DFORMAT_OP_TEXTURE |
1764       SVGA3DFORMAT_OP_CUBETEXTURE
1765    },
1766    {
1767       "SVGA3D_B5G6R5_UNORM",
1768       SVGA3D_B5G6R5_UNORM,
1769       SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM,
1770       1, 1, 2,
1771       SVGA3DFORMAT_OP_TEXTURE |
1772       SVGA3DFORMAT_OP_CUBETEXTURE |
1773       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1774       SVGA3DFORMAT_OP_DISPLAYMODE |
1775       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1776    },
1777    {
1778       "SVGA3D_B5G5R5A1_UNORM",
1779       SVGA3D_B5G5R5A1_UNORM,
1780       SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM,
1781       1, 1, 2,
1782       SVGA3DFORMAT_OP_TEXTURE |
1783       SVGA3DFORMAT_OP_CUBETEXTURE |
1784       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1785       SVGA3DFORMAT_OP_DISPLAYMODE |
1786       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1787    },
1788    {
1789       "SVGA3D_B8G8R8A8_UNORM",
1790       SVGA3D_B8G8R8A8_UNORM,
1791       SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM,
1792       1, 1, 4,
1793       SVGA3DFORMAT_OP_TEXTURE |
1794       SVGA3DFORMAT_OP_CUBETEXTURE |
1795       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1796       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1797    },
1798    {
1799       "SVGA3D_B8G8R8X8_UNORM",
1800       SVGA3D_B8G8R8X8_UNORM,
1801       SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM,
1802       1, 1, 4,
1803       SVGA3DFORMAT_OP_TEXTURE |
1804       SVGA3DFORMAT_OP_CUBETEXTURE |
1805       SVGA3DFORMAT_OP_VOLUMETEXTURE |
1806       SVGA3DFORMAT_OP_DISPLAYMODE |
1807       SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1808    },
1809    {
1810       "SVGA3D_BC4_UNORM",
1811      SVGA3D_BC4_UNORM,
1812      SVGA3D_DEVCAP_DXFMT_BC4_UNORM,
1813      4, 4, 8,
1814      SVGA3DFORMAT_OP_TEXTURE |
1815      SVGA3DFORMAT_OP_CUBETEXTURE
1816    },
1817    {
1818       "SVGA3D_BC5_UNORM",
1819      SVGA3D_BC5_UNORM,
1820      SVGA3D_DEVCAP_DXFMT_BC5_UNORM,
1821      4, 4, 16,
1822      SVGA3DFORMAT_OP_TEXTURE |
1823      SVGA3DFORMAT_OP_CUBETEXTURE
1824    }
1825 };
1826
1827
1828 /**
1829  * Debug only:
1830  * 1. check that format_cap_table[i] matches the i-th SVGA3D format.
1831  * 2. check that format_conversion_table[i].pformat == i.
1832  */
1833 static void
1834 check_format_tables(void)
1835 {
1836    static boolean first_call = TRUE;
1837
1838    if (first_call) {
1839       unsigned i;
1840
1841       STATIC_ASSERT(Elements(format_cap_table) == SVGA3D_FORMAT_MAX);
1842       for (i = 0; i < Elements(format_cap_table); i++) {
1843          assert(format_cap_table[i].format == i);
1844       }
1845
1846       STATIC_ASSERT(Elements(format_conversion_table) == PIPE_FORMAT_COUNT);
1847       for (i = 0; i < Elements(format_conversion_table); i++) {
1848          assert(format_conversion_table[i].pformat == i);
1849       }
1850
1851       first_call = FALSE;
1852    }
1853 }
1854
1855
1856 /*
1857  * Get format capabilities from the host.  It takes in consideration
1858  * deprecated/unsupported formats, and formats which are implicitely assumed to
1859  * be supported when the host does not provide an explicit capability entry.
1860  */
1861 void
1862 svga_get_format_cap(struct svga_screen *ss,
1863                     SVGA3dSurfaceFormat format,
1864                     SVGA3dSurfaceFormatCaps *caps)
1865 {
1866    struct svga_winsys_screen *sws = ss->sws;
1867    SVGA3dDevCapResult result;
1868    const struct format_cap *entry;
1869
1870 #ifdef DEBUG
1871    check_format_tables();
1872 #else
1873    (void) check_format_tables;
1874 #endif
1875
1876    assert(format < Elements(format_cap_table));
1877    entry = &format_cap_table[format];
1878    assert(entry->format == format);
1879
1880    if (entry->devcap && sws->get_cap(sws, entry->devcap, &result)) {
1881       /* Explicitly advertised format */
1882       if (entry->devcap > SVGA3D_DEVCAP_DX) {
1883          /* Translate DX/VGPU10 format cap to VGPU9 cap */
1884          caps->value = 0;
1885          if (result.u & SVGA3D_DXFMT_COLOR_RENDERTARGET)
1886             caps->value |= SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET;
1887          if (!(result.u & SVGA3D_DXFMT_BLENDABLE))
1888             caps->value |= SVGA3DFORMAT_OP_NOALPHABLEND;
1889          if (result.u & SVGA3D_DXFMT_DEPTH_RENDERTARGET)
1890             caps->value |= SVGA3DFORMAT_OP_ZSTENCIL;
1891          if (result.u & SVGA3D_DXFMT_SHADER_SAMPLE)
1892             caps->value |= (SVGA3DFORMAT_OP_TEXTURE |
1893                             SVGA3DFORMAT_OP_CUBETEXTURE);
1894          if (result.u & SVGA3D_DXFMT_VOLUME)
1895             caps->value |= SVGA3DFORMAT_OP_VOLUMETEXTURE;
1896       }
1897       else {
1898          /* Return VGPU9 format cap as-is */
1899          caps->value = result.u;
1900       }
1901
1902    } else {
1903       /* Implicitly advertised format -- use default caps */
1904       caps->value = entry->defaultOperations;
1905    }
1906 }
1907
1908
1909 void
1910 svga_format_size(SVGA3dSurfaceFormat format,
1911                  unsigned *block_width,
1912                  unsigned *block_height,
1913                  unsigned *bytes_per_block)
1914 {
1915    assert(format < Elements(format_cap_table));
1916    *block_width = format_cap_table[format].block_width;
1917    *block_height = format_cap_table[format].block_height;
1918    *bytes_per_block = format_cap_table[format].block_bytes;
1919    /* Make sure the the table entry was valid */
1920    if (*block_width == 0)
1921       debug_printf("Bad table entry for %s\n", svga_format_name(format));
1922    assert(*block_width);
1923    assert(*block_height);
1924    assert(*bytes_per_block);
1925 }
1926
1927
1928 const char *
1929 svga_format_name(SVGA3dSurfaceFormat format)
1930 {
1931    assert(format < Elements(format_cap_table));
1932    return format_cap_table[format].name;
1933 }
1934
1935
1936 /**
1937  * Is the given SVGA3dSurfaceFormat a signed or unsigned integer color format?
1938  */
1939 boolean
1940 svga_format_is_integer(SVGA3dSurfaceFormat format)
1941 {
1942    switch (format) {
1943    case SVGA3D_R32G32B32A32_SINT:
1944    case SVGA3D_R32G32B32_SINT:
1945    case SVGA3D_R32G32_SINT:
1946    case SVGA3D_R32_SINT:
1947    case SVGA3D_R16G16B16A16_SINT:
1948    case SVGA3D_R16G16_SINT:
1949    case SVGA3D_R16_SINT:
1950    case SVGA3D_R8G8B8A8_SINT:
1951    case SVGA3D_R8G8_SINT:
1952    case SVGA3D_R8_SINT:
1953    case SVGA3D_R32G32B32A32_UINT:
1954    case SVGA3D_R32G32B32_UINT:
1955    case SVGA3D_R32G32_UINT:
1956    case SVGA3D_R32_UINT:
1957    case SVGA3D_R16G16B16A16_UINT:
1958    case SVGA3D_R16G16_UINT:
1959    case SVGA3D_R16_UINT:
1960    case SVGA3D_R8G8B8A8_UINT:
1961    case SVGA3D_R8G8_UINT:
1962    case SVGA3D_R8_UINT:
1963    case SVGA3D_R10G10B10A2_UINT:
1964       return TRUE;
1965    default:
1966       return FALSE;
1967    }
1968 }
1969
1970
1971 /**
1972  * Given a texture format, return the expected data type returned from
1973  * the texture sampler.  For example, UNORM8 formats return floating point
1974  * values while SINT formats returned signed integer values.
1975  * Note: this function could be moved into the gallum u_format.[ch] code
1976  * if it's useful to anyone else.
1977  */
1978 enum tgsi_return_type
1979 svga_get_texture_datatype(enum pipe_format format)
1980 {
1981    const struct util_format_description *desc = util_format_description(format);
1982    enum tgsi_return_type t;
1983
1984    if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN ) {
1985       if (util_format_is_depth_or_stencil(format)) {
1986          t = TGSI_RETURN_TYPE_FLOAT; /* XXX revisit this */
1987       }
1988       else if (desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT) {
1989          t = TGSI_RETURN_TYPE_FLOAT;
1990       }
1991       else if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {
1992          t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_UNORM : TGSI_RETURN_TYPE_UINT;
1993       }
1994       else if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
1995          t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_SNORM : TGSI_RETURN_TYPE_SINT;
1996       }
1997       else {
1998          assert(!"Unexpected channel type in svga_get_texture_datatype()");
1999          t = TGSI_RETURN_TYPE_FLOAT;
2000       }
2001    }
2002    else {
2003       /* compressed format, shared exponent format, etc. */
2004       switch (format) {
2005       case PIPE_FORMAT_DXT1_RGB:
2006       case PIPE_FORMAT_DXT1_RGBA:
2007       case PIPE_FORMAT_DXT3_RGBA:
2008       case PIPE_FORMAT_DXT5_RGBA:
2009       case PIPE_FORMAT_DXT1_SRGB:
2010       case PIPE_FORMAT_DXT1_SRGBA:
2011       case PIPE_FORMAT_DXT3_SRGBA:
2012       case PIPE_FORMAT_DXT5_SRGBA:
2013       case PIPE_FORMAT_RGTC1_UNORM:
2014       case PIPE_FORMAT_RGTC2_UNORM:
2015       case PIPE_FORMAT_LATC1_UNORM:
2016       case PIPE_FORMAT_LATC2_UNORM:
2017       case PIPE_FORMAT_ETC1_RGB8:
2018          t = TGSI_RETURN_TYPE_UNORM;
2019          break;
2020       case PIPE_FORMAT_RGTC1_SNORM:
2021       case PIPE_FORMAT_RGTC2_SNORM:
2022       case PIPE_FORMAT_LATC1_SNORM:
2023       case PIPE_FORMAT_LATC2_SNORM:
2024       case PIPE_FORMAT_R10G10B10X2_SNORM:
2025          t = TGSI_RETURN_TYPE_SNORM;
2026          break;
2027       case PIPE_FORMAT_R11G11B10_FLOAT:
2028       case PIPE_FORMAT_R9G9B9E5_FLOAT:
2029          t = TGSI_RETURN_TYPE_FLOAT;
2030          break;
2031       default:
2032          assert(!"Unexpected channel type in svga_get_texture_datatype()");
2033          t = TGSI_RETURN_TYPE_FLOAT;
2034       }
2035    }
2036
2037    return t;
2038 }
2039
2040
2041 /**
2042  * Given an svga context, return true iff there are currently any integer color
2043  * buffers attached to the framebuffer.
2044  */
2045 boolean
2046 svga_has_any_integer_cbufs(const struct svga_context *svga)
2047 {
2048    unsigned i;
2049    for (i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) {
2050       struct pipe_surface *cbuf = svga->curr.framebuffer.cbufs[i];
2051
2052       if (cbuf && util_format_is_pure_integer(cbuf->format)) {
2053          return TRUE;
2054       }
2055    }
2056    return FALSE;
2057 }
2058
2059
2060 /**
2061  * Given an SVGA format, return the corresponding typeless format.
2062  * If there is no typeless format, return the format unchanged.
2063  */
2064 SVGA3dSurfaceFormat
2065 svga_typeless_format(SVGA3dSurfaceFormat format)
2066 {
2067    switch (format) {
2068    case SVGA3D_R32G32B32A32_UINT:
2069    case SVGA3D_R32G32B32A32_SINT:
2070    case SVGA3D_R32G32B32A32_FLOAT:
2071       return SVGA3D_R32G32B32A32_TYPELESS;
2072    case SVGA3D_R32G32B32_FLOAT:
2073    case SVGA3D_R32G32B32_UINT:
2074    case SVGA3D_R32G32B32_SINT:
2075       return SVGA3D_R32G32B32_TYPELESS;
2076    case SVGA3D_R16G16B16A16_UINT:
2077    case SVGA3D_R16G16B16A16_UNORM:
2078    case SVGA3D_R16G16B16A16_SNORM:
2079    case SVGA3D_R16G16B16A16_SINT:
2080    case SVGA3D_R16G16B16A16_FLOAT:
2081       return SVGA3D_R16G16B16A16_TYPELESS;
2082    case SVGA3D_R32G32_UINT:
2083    case SVGA3D_R32G32_SINT:
2084    case SVGA3D_R32G32_FLOAT:
2085       return SVGA3D_R32G32_TYPELESS;
2086    case SVGA3D_D32_FLOAT_S8X24_UINT:
2087       return SVGA3D_R32G8X24_TYPELESS;
2088    case SVGA3D_X32_TYPELESS_G8X24_UINT:
2089       return SVGA3D_R32_FLOAT_X8X24_TYPELESS;
2090    case SVGA3D_R10G10B10A2_UINT:
2091    case SVGA3D_R10G10B10A2_UNORM:
2092       return SVGA3D_R10G10B10A2_TYPELESS;
2093    case SVGA3D_R8G8B8A8_UNORM:
2094    case SVGA3D_R8G8B8A8_SNORM:
2095    case SVGA3D_R8G8B8A8_UNORM_SRGB:
2096    case SVGA3D_R8G8B8A8_UINT:
2097    case SVGA3D_R8G8B8A8_SINT:
2098       return SVGA3D_R8G8B8A8_TYPELESS;
2099    case SVGA3D_R16G16_UINT:
2100    case SVGA3D_R16G16_SINT:
2101    case SVGA3D_R16G16_UNORM:
2102    case SVGA3D_R16G16_SNORM:
2103    case SVGA3D_R16G16_FLOAT:
2104       return SVGA3D_R16G16_TYPELESS;
2105    case SVGA3D_D32_FLOAT:
2106    case SVGA3D_R32_FLOAT:
2107    case SVGA3D_R32_UINT:
2108    case SVGA3D_R32_SINT:
2109       return SVGA3D_R32_TYPELESS;
2110    case SVGA3D_D24_UNORM_S8_UINT:
2111       return SVGA3D_R24G8_TYPELESS;
2112    case SVGA3D_X24_TYPELESS_G8_UINT:
2113       return SVGA3D_R24_UNORM_X8_TYPELESS;
2114    case SVGA3D_R8G8_UNORM:
2115    case SVGA3D_R8G8_SNORM:
2116    case SVGA3D_R8G8_UINT:
2117    case SVGA3D_R8G8_SINT:
2118       return SVGA3D_R8G8_TYPELESS;
2119    case SVGA3D_D16_UNORM:
2120    case SVGA3D_R16_UNORM:
2121    case SVGA3D_R16_UINT:
2122    case SVGA3D_R16_SNORM:
2123    case SVGA3D_R16_SINT:
2124    case SVGA3D_R16_FLOAT:
2125       return SVGA3D_R16_TYPELESS;
2126    case SVGA3D_R8_UNORM:
2127    case SVGA3D_R8_UINT:
2128    case SVGA3D_R8_SNORM:
2129    case SVGA3D_R8_SINT:
2130       return SVGA3D_R8_TYPELESS;
2131    case SVGA3D_B8G8R8A8_UNORM_SRGB:
2132    case SVGA3D_B8G8R8A8_UNORM:
2133       return SVGA3D_B8G8R8A8_TYPELESS;
2134    case SVGA3D_B8G8R8X8_UNORM_SRGB:
2135    case SVGA3D_B8G8R8X8_UNORM:
2136       return SVGA3D_B8G8R8X8_TYPELESS;
2137    case SVGA3D_BC1_UNORM:
2138    case SVGA3D_BC1_UNORM_SRGB:
2139       return SVGA3D_BC1_TYPELESS;
2140    case SVGA3D_BC2_UNORM:
2141    case SVGA3D_BC2_UNORM_SRGB:
2142       return SVGA3D_BC2_TYPELESS;
2143    case SVGA3D_BC3_UNORM:
2144    case SVGA3D_BC3_UNORM_SRGB:
2145       return SVGA3D_BC3_TYPELESS;
2146    case SVGA3D_BC4_UNORM:
2147    case SVGA3D_BC4_SNORM:
2148       return SVGA3D_BC4_TYPELESS;
2149    case SVGA3D_BC5_UNORM:
2150    case SVGA3D_BC5_SNORM:
2151       return SVGA3D_BC5_TYPELESS;
2152
2153    /* Special cases (no corresponding _TYPELESS formats) */
2154    case SVGA3D_A8_UNORM:
2155    case SVGA3D_B5G5R5A1_UNORM:
2156    case SVGA3D_B5G6R5_UNORM:
2157    case SVGA3D_R11G11B10_FLOAT:
2158    case SVGA3D_R9G9B9E5_SHAREDEXP:
2159       return format;
2160    default:
2161       debug_printf("Unexpected format %s in %s\n",
2162                    svga_format_name(format), __FUNCTION__);
2163       return format;
2164    }
2165 }
2166
2167
2168 /**
2169  * Given a surface format, return the corresponding format to use for
2170  * a texture sampler.  In most cases, it's the format unchanged, but there
2171  * are some special cases.
2172  */
2173 SVGA3dSurfaceFormat
2174 svga_sampler_format(SVGA3dSurfaceFormat format)
2175 {
2176    switch (format) {
2177    case SVGA3D_D16_UNORM:
2178       return SVGA3D_R16_UNORM;
2179    case SVGA3D_D24_UNORM_S8_UINT:
2180       return SVGA3D_R24_UNORM_X8_TYPELESS;
2181    case SVGA3D_D32_FLOAT:
2182       return SVGA3D_R32_FLOAT;
2183    case SVGA3D_D32_FLOAT_S8X24_UINT:
2184       return SVGA3D_R32_FLOAT_X8X24_TYPELESS;
2185    default:
2186       return format;
2187    }
2188 }