svga: add const qualifier on svga_translate_format()
[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, TF_GEN_MIPS },
52 { PIPE_FORMAT_B8G8R8X8_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_B8G8R8X8_UNORM, TF_GEN_MIPS },
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, TF_GEN_MIPS },
56 { PIPE_FORMAT_B4G4R4A4_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 },
57 { PIPE_FORMAT_B5G6R5_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_B5G6R5_UNORM, TF_GEN_MIPS },
58 { PIPE_FORMAT_R10G10B10A2_UNORM, SVGA3D_R10G10B10A2_UNORM, SVGA3D_R10G10B10A2_UNORM, TF_GEN_MIPS },
59 { PIPE_FORMAT_L8_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 },
60 { PIPE_FORMAT_A8_UNORM, SVGA3D_FORMAT_INVALID, SVGA3D_A8_UNORM, TF_GEN_MIPS },
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, TF_GEN_MIPS },
79 { PIPE_FORMAT_R32G32_FLOAT, SVGA3D_R32G32_FLOAT, SVGA3D_R32G32_FLOAT, TF_GEN_MIPS },
80 { PIPE_FORMAT_R32G32B32_FLOAT, SVGA3D_R32G32B32_FLOAT, SVGA3D_R32G32B32_FLOAT, TF_GEN_MIPS },
81 { PIPE_FORMAT_R32G32B32A32_FLOAT, SVGA3D_R32G32B32A32_FLOAT, SVGA3D_R32G32B32A32_FLOAT, TF_GEN_MIPS },
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, TF_GEN_MIPS },
99 { PIPE_FORMAT_R16G16_UNORM, SVGA3D_R16G16_UNORM, SVGA3D_R16G16_UNORM, TF_GEN_MIPS },
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, TF_GEN_MIPS },
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, TF_GEN_MIPS },
115 { PIPE_FORMAT_R8G8_UNORM, SVGA3D_R8G8_UNORM, SVGA3D_R8G8_UNORM, TF_GEN_MIPS },
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, TF_GEN_MIPS },
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, TF_GEN_MIPS },
142 { PIPE_FORMAT_R16G16_FLOAT, SVGA3D_R16G16_FLOAT, SVGA3D_R16G16_FLOAT, TF_GEN_MIPS },
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, TF_GEN_MIPS },
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, TF_GEN_MIPS },
151 { PIPE_FORMAT_B8G8R8X8_SRGB, SVGA3D_FORMAT_INVALID, SVGA3D_B8G8R8X8_UNORM_SRGB, TF_GEN_MIPS },
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, TF_GEN_MIPS },
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, TF_GEN_MIPS },
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_FORMAT_INVALID, 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_FORMAT_INVALID, 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 < ARRAY_SIZE(format_conversion_table));
370 if (format >= ARRAY_SIZE(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(const 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(ARRAY_SIZE(format_cap_table) == SVGA3D_FORMAT_MAX);
1842 for (i = 0; i < ARRAY_SIZE(format_cap_table); i++) {
1843 assert(format_cap_table[i].format == i);
1844 }
1845
1846 STATIC_ASSERT(ARRAY_SIZE(format_conversion_table) == PIPE_FORMAT_COUNT);
1847 for (i = 0; i < ARRAY_SIZE(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 < ARRAY_SIZE(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 < ARRAY_SIZE(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 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 < ARRAY_SIZE(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 boolean
1971 svga_format_support_gen_mips(enum pipe_format format)
1972 {
1973 assert(format < ARRAY_SIZE(format_conversion_table));
1974 return ((format_conversion_table[format].flags & TF_GEN_MIPS) > 0);
1975 }
1976
1977
1978 /**
1979 * Given a texture format, return the expected data type returned from
1980 * the texture sampler. For example, UNORM8 formats return floating point
1981 * values while SINT formats returned signed integer values.
1982 * Note: this function could be moved into the gallum u_format.[ch] code
1983 * if it's useful to anyone else.
1984 */
1985 enum tgsi_return_type
1986 svga_get_texture_datatype(enum pipe_format format)
1987 {
1988 const struct util_format_description *desc = util_format_description(format);
1989 enum tgsi_return_type t;
1990
1991 if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN ) {
1992 if (util_format_is_depth_or_stencil(format)) {
1993 t = TGSI_RETURN_TYPE_FLOAT; /* XXX revisit this */
1994 }
1995 else if (desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT) {
1996 t = TGSI_RETURN_TYPE_FLOAT;
1997 }
1998 else if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {
1999 t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_UNORM : TGSI_RETURN_TYPE_UINT;
2000 }
2001 else if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
2002 t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_SNORM : TGSI_RETURN_TYPE_SINT;
2003 }
2004 else {
2005 assert(!"Unexpected channel type in svga_get_texture_datatype()");
2006 t = TGSI_RETURN_TYPE_FLOAT;
2007 }
2008 }
2009 else {
2010 /* compressed format, shared exponent format, etc. */
2011 switch (format) {
2012 case PIPE_FORMAT_DXT1_RGB:
2013 case PIPE_FORMAT_DXT1_RGBA:
2014 case PIPE_FORMAT_DXT3_RGBA:
2015 case PIPE_FORMAT_DXT5_RGBA:
2016 case PIPE_FORMAT_DXT1_SRGB:
2017 case PIPE_FORMAT_DXT1_SRGBA:
2018 case PIPE_FORMAT_DXT3_SRGBA:
2019 case PIPE_FORMAT_DXT5_SRGBA:
2020 case PIPE_FORMAT_RGTC1_UNORM:
2021 case PIPE_FORMAT_RGTC2_UNORM:
2022 case PIPE_FORMAT_LATC1_UNORM:
2023 case PIPE_FORMAT_LATC2_UNORM:
2024 case PIPE_FORMAT_ETC1_RGB8:
2025 t = TGSI_RETURN_TYPE_UNORM;
2026 break;
2027 case PIPE_FORMAT_RGTC1_SNORM:
2028 case PIPE_FORMAT_RGTC2_SNORM:
2029 case PIPE_FORMAT_LATC1_SNORM:
2030 case PIPE_FORMAT_LATC2_SNORM:
2031 case PIPE_FORMAT_R10G10B10X2_SNORM:
2032 t = TGSI_RETURN_TYPE_SNORM;
2033 break;
2034 case PIPE_FORMAT_R11G11B10_FLOAT:
2035 case PIPE_FORMAT_R9G9B9E5_FLOAT:
2036 t = TGSI_RETURN_TYPE_FLOAT;
2037 break;
2038 default:
2039 assert(!"Unexpected channel type in svga_get_texture_datatype()");
2040 t = TGSI_RETURN_TYPE_FLOAT;
2041 }
2042 }
2043
2044 return t;
2045 }
2046
2047
2048 /**
2049 * Given an svga context, return true iff there are currently any integer color
2050 * buffers attached to the framebuffer.
2051 */
2052 boolean
2053 svga_has_any_integer_cbufs(const struct svga_context *svga)
2054 {
2055 unsigned i;
2056 for (i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) {
2057 struct pipe_surface *cbuf = svga->curr.framebuffer.cbufs[i];
2058
2059 if (cbuf && util_format_is_pure_integer(cbuf->format)) {
2060 return TRUE;
2061 }
2062 }
2063 return FALSE;
2064 }
2065
2066
2067 /**
2068 * Given an SVGA format, return the corresponding typeless format.
2069 * If there is no typeless format, return the format unchanged.
2070 */
2071 SVGA3dSurfaceFormat
2072 svga_typeless_format(SVGA3dSurfaceFormat format)
2073 {
2074 switch (format) {
2075 case SVGA3D_R32G32B32A32_UINT:
2076 case SVGA3D_R32G32B32A32_SINT:
2077 case SVGA3D_R32G32B32A32_FLOAT:
2078 return SVGA3D_R32G32B32A32_TYPELESS;
2079 case SVGA3D_R32G32B32_FLOAT:
2080 case SVGA3D_R32G32B32_UINT:
2081 case SVGA3D_R32G32B32_SINT:
2082 return SVGA3D_R32G32B32_TYPELESS;
2083 case SVGA3D_R16G16B16A16_UINT:
2084 case SVGA3D_R16G16B16A16_UNORM:
2085 case SVGA3D_R16G16B16A16_SNORM:
2086 case SVGA3D_R16G16B16A16_SINT:
2087 case SVGA3D_R16G16B16A16_FLOAT:
2088 return SVGA3D_R16G16B16A16_TYPELESS;
2089 case SVGA3D_R32G32_UINT:
2090 case SVGA3D_R32G32_SINT:
2091 case SVGA3D_R32G32_FLOAT:
2092 return SVGA3D_R32G32_TYPELESS;
2093 case SVGA3D_D32_FLOAT_S8X24_UINT:
2094 return SVGA3D_R32G8X24_TYPELESS;
2095 case SVGA3D_X32_TYPELESS_G8X24_UINT:
2096 return SVGA3D_R32_FLOAT_X8X24_TYPELESS;
2097 case SVGA3D_R10G10B10A2_UINT:
2098 case SVGA3D_R10G10B10A2_UNORM:
2099 return SVGA3D_R10G10B10A2_TYPELESS;
2100 case SVGA3D_R8G8B8A8_UNORM:
2101 case SVGA3D_R8G8B8A8_SNORM:
2102 case SVGA3D_R8G8B8A8_UNORM_SRGB:
2103 case SVGA3D_R8G8B8A8_UINT:
2104 case SVGA3D_R8G8B8A8_SINT:
2105 return SVGA3D_R8G8B8A8_TYPELESS;
2106 case SVGA3D_R16G16_UINT:
2107 case SVGA3D_R16G16_SINT:
2108 case SVGA3D_R16G16_UNORM:
2109 case SVGA3D_R16G16_SNORM:
2110 case SVGA3D_R16G16_FLOAT:
2111 return SVGA3D_R16G16_TYPELESS;
2112 case SVGA3D_D32_FLOAT:
2113 case SVGA3D_R32_FLOAT:
2114 case SVGA3D_R32_UINT:
2115 case SVGA3D_R32_SINT:
2116 return SVGA3D_R32_TYPELESS;
2117 case SVGA3D_D24_UNORM_S8_UINT:
2118 return SVGA3D_R24G8_TYPELESS;
2119 case SVGA3D_X24_TYPELESS_G8_UINT:
2120 return SVGA3D_R24_UNORM_X8_TYPELESS;
2121 case SVGA3D_R8G8_UNORM:
2122 case SVGA3D_R8G8_SNORM:
2123 case SVGA3D_R8G8_UINT:
2124 case SVGA3D_R8G8_SINT:
2125 return SVGA3D_R8G8_TYPELESS;
2126 case SVGA3D_D16_UNORM:
2127 case SVGA3D_R16_UNORM:
2128 case SVGA3D_R16_UINT:
2129 case SVGA3D_R16_SNORM:
2130 case SVGA3D_R16_SINT:
2131 case SVGA3D_R16_FLOAT:
2132 return SVGA3D_R16_TYPELESS;
2133 case SVGA3D_R8_UNORM:
2134 case SVGA3D_R8_UINT:
2135 case SVGA3D_R8_SNORM:
2136 case SVGA3D_R8_SINT:
2137 return SVGA3D_R8_TYPELESS;
2138 case SVGA3D_B8G8R8A8_UNORM_SRGB:
2139 case SVGA3D_B8G8R8A8_UNORM:
2140 return SVGA3D_B8G8R8A8_TYPELESS;
2141 case SVGA3D_B8G8R8X8_UNORM_SRGB:
2142 case SVGA3D_B8G8R8X8_UNORM:
2143 return SVGA3D_B8G8R8X8_TYPELESS;
2144 case SVGA3D_BC1_UNORM:
2145 case SVGA3D_BC1_UNORM_SRGB:
2146 return SVGA3D_BC1_TYPELESS;
2147 case SVGA3D_BC2_UNORM:
2148 case SVGA3D_BC2_UNORM_SRGB:
2149 return SVGA3D_BC2_TYPELESS;
2150 case SVGA3D_BC3_UNORM:
2151 case SVGA3D_BC3_UNORM_SRGB:
2152 return SVGA3D_BC3_TYPELESS;
2153 case SVGA3D_BC4_UNORM:
2154 case SVGA3D_BC4_SNORM:
2155 return SVGA3D_BC4_TYPELESS;
2156 case SVGA3D_BC5_UNORM:
2157 case SVGA3D_BC5_SNORM:
2158 return SVGA3D_BC5_TYPELESS;
2159
2160 /* Special cases (no corresponding _TYPELESS formats) */
2161 case SVGA3D_A8_UNORM:
2162 case SVGA3D_B5G5R5A1_UNORM:
2163 case SVGA3D_B5G6R5_UNORM:
2164 case SVGA3D_R11G11B10_FLOAT:
2165 case SVGA3D_R9G9B9E5_SHAREDEXP:
2166 return format;
2167 default:
2168 debug_printf("Unexpected format %s in %s\n",
2169 svga_format_name(format), __FUNCTION__);
2170 return format;
2171 }
2172 }
2173
2174
2175 /**
2176 * Given a surface format, return the corresponding format to use for
2177 * a texture sampler. In most cases, it's the format unchanged, but there
2178 * are some special cases.
2179 */
2180 SVGA3dSurfaceFormat
2181 svga_sampler_format(SVGA3dSurfaceFormat format)
2182 {
2183 switch (format) {
2184 case SVGA3D_D16_UNORM:
2185 return SVGA3D_R16_UNORM;
2186 case SVGA3D_D24_UNORM_S8_UINT:
2187 return SVGA3D_R24_UNORM_X8_TYPELESS;
2188 case SVGA3D_D32_FLOAT:
2189 return SVGA3D_R32_FLOAT;
2190 case SVGA3D_D32_FLOAT_S8X24_UINT:
2191 return SVGA3D_R32_FLOAT_X8X24_TYPELESS;
2192 default:
2193 return format;
2194 }
2195 }
2196
2197
2198 /**
2199 * Is the given format an uncompressed snorm format?
2200 */
2201 bool
2202 svga_format_is_uncompressed_snorm(SVGA3dSurfaceFormat format)
2203 {
2204 switch (format) {
2205 case SVGA3D_R8G8B8A8_SNORM:
2206 case SVGA3D_R8G8_SNORM:
2207 case SVGA3D_R8_SNORM:
2208 case SVGA3D_R16G16B16A16_SNORM:
2209 case SVGA3D_R16G16_SNORM:
2210 case SVGA3D_R16_SNORM:
2211 return true;
2212 default:
2213 return false;
2214 }
2215 }