svga: update driver for version 10 GPU interface
[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_A4R4G4B4, 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_Z_D16, 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_DXT1, 0 },
156 { PIPE_FORMAT_DXT1_RGBA, SVGA3D_FORMAT_INVALID, SVGA3D_DXT1, 0 },
157 { PIPE_FORMAT_DXT3_RGBA, SVGA3D_FORMAT_INVALID, SVGA3D_DXT3, 0 },
158 { PIPE_FORMAT_DXT5_RGBA, SVGA3D_FORMAT_INVALID, SVGA3D_DXT5, 0 },
159 { PIPE_FORMAT_DXT1_SRGB, SVGA3D_FORMAT_INVALID, SVGA3D_DXT1, 0 },
160 { PIPE_FORMAT_DXT1_SRGBA, SVGA3D_FORMAT_INVALID, SVGA3D_DXT1, 0 },
161 { PIPE_FORMAT_DXT3_SRGBA, SVGA3D_FORMAT_INVALID, SVGA3D_DXT3, 0 },
162 { PIPE_FORMAT_DXT5_SRGBA, SVGA3D_FORMAT_INVALID, SVGA3D_DXT5, 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 };
330
331
332 /**
333 * Translate a gallium vertex format to a vgpu10 vertex format.
334 * Also, return any special vertex format flags.
335 */
336 void
337 svga_translate_vertex_format_vgpu10(enum pipe_format format,
338 SVGA3dSurfaceFormat *svga_format,
339 unsigned *vf_flags)
340 {
341 assert(format < Elements(format_conversion_table));
342 if (format >= Elements(format_conversion_table)) {
343 format = PIPE_FORMAT_NONE;
344 }
345 *svga_format = format_conversion_table[format].vertex_format;
346 *vf_flags = format_conversion_table[format].flags;
347 }
348
349
350 /*
351 * Translate from gallium format to SVGA3D format.
352 */
353 SVGA3dSurfaceFormat
354 svga_translate_format(struct svga_screen *ss,
355 enum pipe_format format,
356 unsigned bind)
357 {
358 if (ss->sws->have_vgpu10) {
359 if (bind & (PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_INDEX_BUFFER)) {
360 return format_conversion_table[format].vertex_format;
361 }
362 else {
363 return format_conversion_table[format].pixel_format;
364 }
365 }
366
367 switch(format) {
368 case PIPE_FORMAT_B8G8R8A8_UNORM:
369 return SVGA3D_A8R8G8B8;
370 case PIPE_FORMAT_B8G8R8X8_UNORM:
371 return SVGA3D_X8R8G8B8;
372
373 /* sRGB required for GL2.1 */
374 case PIPE_FORMAT_B8G8R8A8_SRGB:
375 return SVGA3D_A8R8G8B8;
376 case PIPE_FORMAT_DXT1_SRGB:
377 case PIPE_FORMAT_DXT1_SRGBA:
378 return SVGA3D_DXT1;
379 case PIPE_FORMAT_DXT3_SRGBA:
380 return SVGA3D_DXT3;
381 case PIPE_FORMAT_DXT5_SRGBA:
382 return SVGA3D_DXT5;
383
384 case PIPE_FORMAT_B5G6R5_UNORM:
385 return SVGA3D_R5G6B5;
386 case PIPE_FORMAT_B5G5R5A1_UNORM:
387 return SVGA3D_A1R5G5B5;
388 case PIPE_FORMAT_B4G4R4A4_UNORM:
389 return SVGA3D_A4R4G4B4;
390
391 case PIPE_FORMAT_R16G16B16A16_UNORM:
392 return SVGA3D_A16B16G16R16;
393
394 case PIPE_FORMAT_Z16_UNORM:
395 assert(!ss->sws->have_vgpu10);
396 return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.z16 : SVGA3D_Z_D16;
397 case PIPE_FORMAT_S8_UINT_Z24_UNORM:
398 assert(!ss->sws->have_vgpu10);
399 return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.s8z24 : SVGA3D_Z_D24S8;
400 case PIPE_FORMAT_X8Z24_UNORM:
401 assert(!ss->sws->have_vgpu10);
402 return bind & PIPE_BIND_SAMPLER_VIEW ? ss->depth.x8z24 : SVGA3D_Z_D24X8;
403
404 case PIPE_FORMAT_A8_UNORM:
405 return SVGA3D_ALPHA8;
406 case PIPE_FORMAT_L8_UNORM:
407 return SVGA3D_LUMINANCE8;
408
409 case PIPE_FORMAT_DXT1_RGB:
410 case PIPE_FORMAT_DXT1_RGBA:
411 return SVGA3D_DXT1;
412 case PIPE_FORMAT_DXT3_RGBA:
413 return SVGA3D_DXT3;
414 case PIPE_FORMAT_DXT5_RGBA:
415 return SVGA3D_DXT5;
416
417 /* Float formats (only 1, 2 and 4-component formats supported) */
418 case PIPE_FORMAT_R32_FLOAT:
419 return SVGA3D_R_S23E8;
420 case PIPE_FORMAT_R32G32_FLOAT:
421 return SVGA3D_RG_S23E8;
422 case PIPE_FORMAT_R32G32B32A32_FLOAT:
423 return SVGA3D_ARGB_S23E8;
424 case PIPE_FORMAT_R16_FLOAT:
425 return SVGA3D_R_S10E5;
426 case PIPE_FORMAT_R16G16_FLOAT:
427 return SVGA3D_RG_S10E5;
428 case PIPE_FORMAT_R16G16B16A16_FLOAT:
429 return SVGA3D_ARGB_S10E5;
430
431 case PIPE_FORMAT_Z32_UNORM:
432 /* SVGA3D_Z_D32 is not yet unsupported */
433 /* fall-through */
434 default:
435 return SVGA3D_FORMAT_INVALID;
436 }
437 }
438
439
440 /*
441 * Format capability description entry.
442 */
443 struct format_cap {
444 const char *name;
445
446 SVGA3dSurfaceFormat format;
447
448 /*
449 * Capability index corresponding to the format.
450 */
451 SVGA3dDevCapIndex devcap;
452
453 /* size of each pixel/block */
454 unsigned block_width, block_height, block_bytes;
455
456 /*
457 * Mask of supported SVGA3dFormatOp operations, to be inferred when the
458 * capability is not explicitly present.
459 */
460 uint32 defaultOperations;
461 };
462
463
464 /*
465 * Format capability description table.
466 *
467 * Ordered by increasing SVGA3dSurfaceFormat value, but with gaps.
468 *
469 * Note: there are some special cases below where we set devcap=0 and
470 * avoid querying the host. In particular, depth/stencil formats which
471 * can be rendered to and sampled from. For example, the gallium format
472 * PIPE_FORMAT_Z24_UNORM_S8_UINT is converted to SVGA3D_D24_UNORM_S8_UINT
473 * for rendering but converted to SVGA3D_R24_UNORM_X8_TYPELESS for sampling.
474 * If we want to query if a format supports both rendering and sampling the
475 * host will tell us no for both SVGA3D_D24_UNORM_S8_UINT and
476 * SVGA3D_R24_UNORM_X8_TYPELESS. So we override the host query for those
477 * formats and report that both can do rendering and sampling.
478 */
479 static const struct format_cap format_cap_table[] = {
480 {
481 "SVGA3D_FORMAT_INVALID",
482 SVGA3D_FORMAT_INVALID, 0, 0, 0, 0, 0
483 },
484 {
485 "SVGA3D_X8R8G8B8",
486 SVGA3D_X8R8G8B8,
487 SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8,
488 1, 1, 4,
489 SVGA3DFORMAT_OP_TEXTURE |
490 SVGA3DFORMAT_OP_CUBETEXTURE |
491 SVGA3DFORMAT_OP_VOLUMETEXTURE |
492 SVGA3DFORMAT_OP_DISPLAYMODE |
493 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
494 },
495 {
496 "SVGA3D_A8R8G8B8",
497 SVGA3D_A8R8G8B8,
498 SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8,
499 1, 1, 4,
500 SVGA3DFORMAT_OP_TEXTURE |
501 SVGA3DFORMAT_OP_CUBETEXTURE |
502 SVGA3DFORMAT_OP_VOLUMETEXTURE |
503 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
504 },
505 {
506 "SVGA3D_R5G6B5",
507 SVGA3D_R5G6B5,
508 SVGA3D_DEVCAP_SURFACEFMT_R5G6B5,
509 1, 1, 2,
510 SVGA3DFORMAT_OP_TEXTURE |
511 SVGA3DFORMAT_OP_CUBETEXTURE |
512 SVGA3DFORMAT_OP_VOLUMETEXTURE |
513 SVGA3DFORMAT_OP_DISPLAYMODE |
514 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
515 },
516 {
517 "SVGA3D_X1R5G5B5",
518 SVGA3D_X1R5G5B5,
519 SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5,
520 1, 1, 2,
521 SVGA3DFORMAT_OP_TEXTURE |
522 SVGA3DFORMAT_OP_CUBETEXTURE |
523 SVGA3DFORMAT_OP_VOLUMETEXTURE |
524 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
525 },
526 {
527 "SVGA3D_A1R5G5B5",
528 SVGA3D_A1R5G5B5,
529 SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5,
530 1, 1, 2,
531 SVGA3DFORMAT_OP_TEXTURE |
532 SVGA3DFORMAT_OP_CUBETEXTURE |
533 SVGA3DFORMAT_OP_VOLUMETEXTURE |
534 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
535 },
536 {
537 "SVGA3D_A4R4G4B4",
538 SVGA3D_A4R4G4B4,
539 SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4,
540 1, 1, 2,
541 SVGA3DFORMAT_OP_TEXTURE |
542 SVGA3DFORMAT_OP_CUBETEXTURE |
543 SVGA3DFORMAT_OP_VOLUMETEXTURE |
544 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
545 },
546 {
547 /*
548 * SVGA3D_Z_D32 is not yet supported, and has no corresponding
549 * SVGA3D_DEVCAP_xxx.
550 */
551 "SVGA3D_Z_D32",
552 SVGA3D_Z_D32, 0, 0, 0, 0, 0
553 },
554 {
555 "SVGA3D_Z_D16",
556 SVGA3D_Z_D16,
557 SVGA3D_DEVCAP_SURFACEFMT_Z_D16,
558 1, 1, 2,
559 SVGA3DFORMAT_OP_ZSTENCIL
560 },
561 {
562 "SVGA3D_Z_D24S8",
563 SVGA3D_Z_D24S8,
564 SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8,
565 1, 1, 4,
566 SVGA3DFORMAT_OP_ZSTENCIL
567 },
568 {
569 "SVGA3D_Z_D15S1",
570 SVGA3D_Z_D15S1,
571 SVGA3D_DEVCAP_MAX,
572 1, 1, 2,
573 SVGA3DFORMAT_OP_ZSTENCIL
574 },
575 {
576 "SVGA3D_LUMINANCE8",
577 SVGA3D_LUMINANCE8,
578 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8,
579 1, 1, 1,
580 SVGA3DFORMAT_OP_TEXTURE |
581 SVGA3DFORMAT_OP_CUBETEXTURE |
582 SVGA3DFORMAT_OP_VOLUMETEXTURE
583 },
584 {
585 /*
586 * SVGA3D_LUMINANCE4_ALPHA4 is not supported, and has no corresponding
587 * SVGA3D_DEVCAP_xxx.
588 */
589 "SVGA3D_LUMINANCE4_ALPHA4",
590 SVGA3D_LUMINANCE4_ALPHA4, 0, 0, 0, 0, 0
591 },
592 {
593 "SVGA3D_LUMINANCE16",
594 SVGA3D_LUMINANCE16,
595 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16,
596 1, 1, 2,
597 SVGA3DFORMAT_OP_TEXTURE |
598 SVGA3DFORMAT_OP_CUBETEXTURE |
599 SVGA3DFORMAT_OP_VOLUMETEXTURE
600 },
601 {
602 "SVGA3D_LUMINANCE8_ALPHA8",
603 SVGA3D_LUMINANCE8_ALPHA8,
604 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8,
605 1, 1, 2,
606 SVGA3DFORMAT_OP_TEXTURE |
607 SVGA3DFORMAT_OP_CUBETEXTURE |
608 SVGA3DFORMAT_OP_VOLUMETEXTURE
609 },
610 {
611 "SVGA3D_DXT1",
612 SVGA3D_DXT1,
613 SVGA3D_DEVCAP_SURFACEFMT_DXT1,
614 4, 4, 8,
615 SVGA3DFORMAT_OP_TEXTURE |
616 SVGA3DFORMAT_OP_CUBETEXTURE
617 },
618 {
619 "SVGA3D_DXT2",
620 SVGA3D_DXT2,
621 SVGA3D_DEVCAP_SURFACEFMT_DXT2,
622 4, 4, 8,
623 SVGA3DFORMAT_OP_TEXTURE |
624 SVGA3DFORMAT_OP_CUBETEXTURE
625 },
626 {
627 "SVGA3D_DXT3",
628 SVGA3D_DXT3,
629 SVGA3D_DEVCAP_SURFACEFMT_DXT3,
630 4, 4, 16,
631 SVGA3DFORMAT_OP_TEXTURE |
632 SVGA3DFORMAT_OP_CUBETEXTURE
633 },
634 {
635 "SVGA3D_DXT4",
636 SVGA3D_DXT4,
637 SVGA3D_DEVCAP_SURFACEFMT_DXT4,
638 4, 4, 16,
639 SVGA3DFORMAT_OP_TEXTURE |
640 SVGA3DFORMAT_OP_CUBETEXTURE
641 },
642 {
643 "SVGA3D_DXT5",
644 SVGA3D_DXT5,
645 SVGA3D_DEVCAP_SURFACEFMT_DXT5,
646 4, 4, 8,
647 SVGA3DFORMAT_OP_TEXTURE |
648 SVGA3DFORMAT_OP_CUBETEXTURE
649 },
650 {
651 "SVGA3D_BUMPU8V8",
652 SVGA3D_BUMPU8V8,
653 SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8,
654 1, 1, 2,
655 SVGA3DFORMAT_OP_TEXTURE |
656 SVGA3DFORMAT_OP_CUBETEXTURE |
657 SVGA3DFORMAT_OP_VOLUMETEXTURE
658 },
659 {
660 /*
661 * SVGA3D_BUMPL6V5U5 is unsupported; it has no corresponding
662 * SVGA3D_DEVCAP_xxx.
663 */
664 "SVGA3D_BUMPL6V5U5",
665 SVGA3D_BUMPL6V5U5, 0, 0, 0, 0, 0
666 },
667 {
668 "SVGA3D_BUMPX8L8V8U8",
669 SVGA3D_BUMPX8L8V8U8,
670 SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8,
671 1, 1, 4,
672 SVGA3DFORMAT_OP_TEXTURE |
673 SVGA3DFORMAT_OP_CUBETEXTURE
674 },
675 {
676 "SVGA3D_FORMAT_DEAD1",
677 SVGA3D_FORMAT_DEAD1, 0, 0, 0, 0, 0
678 },
679 {
680 "SVGA3D_ARGB_S10E5",
681 SVGA3D_ARGB_S10E5,
682 SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5,
683 1, 1, 2,
684 SVGA3DFORMAT_OP_TEXTURE |
685 SVGA3DFORMAT_OP_CUBETEXTURE |
686 SVGA3DFORMAT_OP_VOLUMETEXTURE |
687 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
688 },
689 {
690 "SVGA3D_ARGB_S23E8",
691 SVGA3D_ARGB_S23E8,
692 SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8,
693 1, 1, 4,
694 SVGA3DFORMAT_OP_TEXTURE |
695 SVGA3DFORMAT_OP_CUBETEXTURE |
696 SVGA3DFORMAT_OP_VOLUMETEXTURE |
697 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
698 },
699 {
700 "SVGA3D_A2R10G10B10",
701 SVGA3D_A2R10G10B10,
702 SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10,
703 1, 1, 4,
704 SVGA3DFORMAT_OP_TEXTURE |
705 SVGA3DFORMAT_OP_CUBETEXTURE |
706 SVGA3DFORMAT_OP_VOLUMETEXTURE |
707 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
708 },
709 {
710 /*
711 * SVGA3D_V8U8 is unsupported; it has no corresponding
712 * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPU8V8 should be used instead.
713 */
714 "SVGA3D_V8U8",
715 SVGA3D_V8U8, 0, 0, 0, 0, 0
716 },
717 {
718 "SVGA3D_Q8W8V8U8",
719 SVGA3D_Q8W8V8U8,
720 SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8,
721 1, 1, 4,
722 SVGA3DFORMAT_OP_TEXTURE |
723 SVGA3DFORMAT_OP_CUBETEXTURE
724 },
725 {
726 "SVGA3D_CxV8U8",
727 SVGA3D_CxV8U8,
728 SVGA3D_DEVCAP_SURFACEFMT_CxV8U8,
729 1, 1, 2,
730 SVGA3DFORMAT_OP_TEXTURE
731 },
732 {
733 /*
734 * SVGA3D_X8L8V8U8 is unsupported; it has no corresponding
735 * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
736 */
737 "SVGA3D_X8L8V8U8",
738 SVGA3D_X8L8V8U8, 0, 0, 0, 0, 0
739 },
740 {
741 "SVGA3D_A2W10V10U10",
742 SVGA3D_A2W10V10U10,
743 SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10,
744 1, 1, 4,
745 SVGA3DFORMAT_OP_TEXTURE
746 },
747 {
748 "SVGA3D_ALPHA8",
749 SVGA3D_ALPHA8,
750 SVGA3D_DEVCAP_SURFACEFMT_ALPHA8,
751 1, 1, 1,
752 SVGA3DFORMAT_OP_TEXTURE |
753 SVGA3DFORMAT_OP_CUBETEXTURE |
754 SVGA3DFORMAT_OP_VOLUMETEXTURE
755 },
756 {
757 "SVGA3D_R_S10E5",
758 SVGA3D_R_S10E5,
759 SVGA3D_DEVCAP_SURFACEFMT_R_S10E5,
760 1, 1, 2,
761 SVGA3DFORMAT_OP_TEXTURE |
762 SVGA3DFORMAT_OP_VOLUMETEXTURE |
763 SVGA3DFORMAT_OP_CUBETEXTURE |
764 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
765 },
766 {
767 "SVGA3D_R_S23E8",
768 SVGA3D_R_S23E8,
769 SVGA3D_DEVCAP_SURFACEFMT_R_S23E8,
770 1, 1, 4,
771 SVGA3DFORMAT_OP_TEXTURE |
772 SVGA3DFORMAT_OP_VOLUMETEXTURE |
773 SVGA3DFORMAT_OP_CUBETEXTURE |
774 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
775 },
776 {
777 "SVGA3D_RG_S10E5",
778 SVGA3D_RG_S10E5,
779 SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5,
780 1, 1, 2,
781 SVGA3DFORMAT_OP_TEXTURE |
782 SVGA3DFORMAT_OP_VOLUMETEXTURE |
783 SVGA3DFORMAT_OP_CUBETEXTURE |
784 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
785 },
786 {
787 "SVGA3D_RG_S23E8",
788 SVGA3D_RG_S23E8,
789 SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8,
790 1, 1, 4,
791 SVGA3DFORMAT_OP_TEXTURE |
792 SVGA3DFORMAT_OP_VOLUMETEXTURE |
793 SVGA3DFORMAT_OP_CUBETEXTURE |
794 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
795 },
796 {
797 /*
798 * SVGA3D_BUFFER is a placeholder format for index/vertex buffers.
799 */
800 "SVGA3D_BUFFER",
801 SVGA3D_BUFFER, 0, 1, 1, 1, 0
802 },
803 {
804 "SVGA3D_Z_D24X8",
805 SVGA3D_Z_D24X8,
806 SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8,
807 1, 1, 4,
808 SVGA3DFORMAT_OP_ZSTENCIL
809 },
810 {
811 "SVGA3D_V16U16",
812 SVGA3D_V16U16,
813 SVGA3D_DEVCAP_SURFACEFMT_V16U16,
814 1, 1, 4,
815 SVGA3DFORMAT_OP_TEXTURE |
816 SVGA3DFORMAT_OP_CUBETEXTURE |
817 SVGA3DFORMAT_OP_VOLUMETEXTURE
818 },
819 {
820 "SVGA3D_G16R16",
821 SVGA3D_G16R16,
822 SVGA3D_DEVCAP_SURFACEFMT_G16R16,
823 1, 1, 4,
824 SVGA3DFORMAT_OP_TEXTURE |
825 SVGA3DFORMAT_OP_CUBETEXTURE |
826 SVGA3DFORMAT_OP_VOLUMETEXTURE |
827 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
828 },
829 {
830 "SVGA3D_A16B16G16R16",
831 SVGA3D_A16B16G16R16,
832 SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16,
833 1, 1, 8,
834 SVGA3DFORMAT_OP_TEXTURE |
835 SVGA3DFORMAT_OP_CUBETEXTURE |
836 SVGA3DFORMAT_OP_VOLUMETEXTURE |
837 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
838 },
839 {
840 "SVGA3D_UYVY",
841 SVGA3D_UYVY,
842 SVGA3D_DEVCAP_SURFACEFMT_UYVY,
843 0, 0, 0,
844 0
845 },
846 {
847 "SVGA3D_YUY2",
848 SVGA3D_YUY2,
849 SVGA3D_DEVCAP_SURFACEFMT_YUY2,
850 0, 0, 0,
851 0
852 },
853 {
854 "SVGA3D_NV12",
855 SVGA3D_NV12,
856 SVGA3D_DEVCAP_SURFACEFMT_NV12,
857 0, 0, 0,
858 0
859 },
860 {
861 "SVGA3D_AYUV",
862 SVGA3D_AYUV,
863 SVGA3D_DEVCAP_SURFACEFMT_AYUV,
864 0, 0, 0,
865 0
866 },
867 {
868 "SVGA3D_R32G32B32A32_TYPELESS",
869 SVGA3D_R32G32B32A32_TYPELESS,
870 SVGA3D_DEVCAP_DXFMT_R32G32B32A32_TYPELESS,
871 1, 1, 16,
872 SVGA3DFORMAT_OP_TEXTURE |
873 SVGA3DFORMAT_OP_CUBETEXTURE |
874 SVGA3DFORMAT_OP_VOLUMETEXTURE |
875 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
876 },
877 {
878 "SVGA3D_R32G32B32A32_UINT",
879 SVGA3D_R32G32B32A32_UINT,
880 SVGA3D_DEVCAP_DXFMT_R32G32B32A32_UINT,
881 1, 1, 16,
882 SVGA3DFORMAT_OP_TEXTURE |
883 SVGA3DFORMAT_OP_CUBETEXTURE |
884 SVGA3DFORMAT_OP_VOLUMETEXTURE |
885 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
886 },
887 {
888 "SVGA3D_R32G32B32A32_SINT",
889 SVGA3D_R32G32B32A32_SINT,
890 SVGA3D_DEVCAP_DXFMT_R32G32B32A32_SINT,
891 1, 1, 16,
892 SVGA3DFORMAT_OP_TEXTURE |
893 SVGA3DFORMAT_OP_CUBETEXTURE |
894 SVGA3DFORMAT_OP_VOLUMETEXTURE |
895 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
896 },
897 {
898 "SVGA3D_R32G32B32_TYPELESS",
899 SVGA3D_R32G32B32_TYPELESS,
900 SVGA3D_DEVCAP_DXFMT_R32G32B32_TYPELESS,
901 1, 1, 12,
902 SVGA3DFORMAT_OP_TEXTURE |
903 SVGA3DFORMAT_OP_CUBETEXTURE |
904 SVGA3DFORMAT_OP_VOLUMETEXTURE |
905 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
906 },
907 {
908 "SVGA3D_R32G32B32_FLOAT",
909 SVGA3D_R32G32B32_FLOAT,
910 SVGA3D_DEVCAP_DXFMT_R32G32B32_FLOAT,
911 1, 1, 12,
912 SVGA3DFORMAT_OP_TEXTURE |
913 SVGA3DFORMAT_OP_CUBETEXTURE |
914 SVGA3DFORMAT_OP_VOLUMETEXTURE |
915 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
916 },
917 {
918 "SVGA3D_R32G32B32_UINT",
919 SVGA3D_R32G32B32_UINT,
920 SVGA3D_DEVCAP_DXFMT_R32G32B32_UINT,
921 1, 1, 12,
922 SVGA3DFORMAT_OP_TEXTURE |
923 SVGA3DFORMAT_OP_CUBETEXTURE |
924 SVGA3DFORMAT_OP_VOLUMETEXTURE |
925 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
926 },
927 {
928 "SVGA3D_R32G32B32_SINT",
929 SVGA3D_R32G32B32_SINT,
930 SVGA3D_DEVCAP_DXFMT_R32G32B32_SINT,
931 1, 1, 12,
932 SVGA3DFORMAT_OP_TEXTURE |
933 SVGA3DFORMAT_OP_CUBETEXTURE |
934 SVGA3DFORMAT_OP_VOLUMETEXTURE |
935 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
936 },
937 {
938 "SVGA3D_R16G16B16A16_TYPELESS",
939 SVGA3D_R16G16B16A16_TYPELESS,
940 SVGA3D_DEVCAP_DXFMT_R16G16B16A16_TYPELESS,
941 1, 1, 8,
942 SVGA3DFORMAT_OP_TEXTURE |
943 SVGA3DFORMAT_OP_CUBETEXTURE |
944 SVGA3DFORMAT_OP_VOLUMETEXTURE |
945 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
946 },
947 {
948 "SVGA3D_R16G16B16A16_UINT",
949 SVGA3D_R16G16B16A16_UINT,
950 SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UINT,
951 1, 1, 8,
952 SVGA3DFORMAT_OP_TEXTURE |
953 SVGA3DFORMAT_OP_CUBETEXTURE |
954 SVGA3DFORMAT_OP_VOLUMETEXTURE |
955 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
956 },
957 {
958 "SVGA3D_R16G16B16A16_SNORM",
959 SVGA3D_R16G16B16A16_SNORM,
960 SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SNORM,
961 1, 1, 8,
962 SVGA3DFORMAT_OP_TEXTURE |
963 SVGA3DFORMAT_OP_CUBETEXTURE |
964 SVGA3DFORMAT_OP_VOLUMETEXTURE |
965 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
966 },
967 {
968 "SVGA3D_R16G16B16A16_SINT",
969 SVGA3D_R16G16B16A16_SINT,
970 SVGA3D_DEVCAP_DXFMT_R16G16B16A16_SINT,
971 1, 1, 8,
972 SVGA3DFORMAT_OP_TEXTURE |
973 SVGA3DFORMAT_OP_CUBETEXTURE |
974 SVGA3DFORMAT_OP_VOLUMETEXTURE |
975 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
976 },
977 {
978 "SVGA3D_R32G32_TYPELESS",
979 SVGA3D_R32G32_TYPELESS,
980 SVGA3D_DEVCAP_DXFMT_R32G32_TYPELESS,
981 1, 1, 8,
982 SVGA3DFORMAT_OP_TEXTURE |
983 SVGA3DFORMAT_OP_CUBETEXTURE |
984 SVGA3DFORMAT_OP_VOLUMETEXTURE |
985 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
986 },
987 {
988 "SVGA3D_R32G32_UINT",
989 SVGA3D_R32G32_UINT,
990 SVGA3D_DEVCAP_DXFMT_R32G32_UINT,
991 1, 1, 8,
992 SVGA3DFORMAT_OP_TEXTURE |
993 SVGA3DFORMAT_OP_CUBETEXTURE |
994 SVGA3DFORMAT_OP_VOLUMETEXTURE |
995 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
996 },
997 {
998 "SVGA3D_R32G32_SINT",
999 SVGA3D_R32G32_SINT,
1000 SVGA3D_DEVCAP_DXFMT_R32G32_SINT,
1001 1, 1, 8,
1002 SVGA3DFORMAT_OP_TEXTURE |
1003 SVGA3DFORMAT_OP_CUBETEXTURE |
1004 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1005 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1006 },
1007 {
1008 "SVGA3D_R32G8X24_TYPELESS",
1009 SVGA3D_R32G8X24_TYPELESS,
1010 SVGA3D_DEVCAP_DXFMT_R32G8X24_TYPELESS,
1011 1, 1, 8,
1012 SVGA3DFORMAT_OP_TEXTURE |
1013 SVGA3DFORMAT_OP_CUBETEXTURE |
1014 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1015 SVGA3DFORMAT_OP_ZSTENCIL
1016 },
1017 {
1018 /* Special case: no devcap / report sampler and depth/stencil ability
1019 */
1020 "SVGA3D_D32_FLOAT_S8X24_UINT",
1021 SVGA3D_D32_FLOAT_S8X24_UINT,
1022 0, /*SVGA3D_DEVCAP_DXFMT_D32_FLOAT_S8X24_UINT*/
1023 1, 1, 8,
1024 SVGA3DFORMAT_OP_TEXTURE |
1025 SVGA3DFORMAT_OP_CUBETEXTURE |
1026 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1027 SVGA3DFORMAT_OP_ZSTENCIL
1028 },
1029 {
1030 /* Special case: no devcap / report sampler and depth/stencil ability
1031 */
1032 "SVGA3D_R32_FLOAT_X8X24_TYPELESS",
1033 SVGA3D_R32_FLOAT_X8X24_TYPELESS,
1034 0, /*SVGA3D_DEVCAP_DXFMT_R32_FLOAT_X8X24_TYPELESS*/
1035 1, 1, 8,
1036 SVGA3DFORMAT_OP_TEXTURE |
1037 SVGA3DFORMAT_OP_CUBETEXTURE |
1038 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1039 SVGA3DFORMAT_OP_ZSTENCIL
1040 },
1041 {
1042 "SVGA3D_X32_TYPELESS_G8X24_UINT",
1043 SVGA3D_X32_TYPELESS_G8X24_UINT,
1044 SVGA3D_DEVCAP_DXFMT_X32_TYPELESS_G8X24_UINT,
1045 1, 1, 4,
1046 SVGA3DFORMAT_OP_TEXTURE |
1047 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1048 SVGA3DFORMAT_OP_CUBETEXTURE |
1049 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1050 },
1051 {
1052 "SVGA3D_R10G10B10A2_TYPELESS",
1053 SVGA3D_R10G10B10A2_TYPELESS,
1054 SVGA3D_DEVCAP_DXFMT_R10G10B10A2_TYPELESS,
1055 1, 1, 4,
1056 SVGA3DFORMAT_OP_TEXTURE |
1057 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1058 SVGA3DFORMAT_OP_CUBETEXTURE |
1059 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1060 },
1061 {
1062 "SVGA3D_R10G10B10A2_UINT",
1063 SVGA3D_R10G10B10A2_UINT,
1064 SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UINT,
1065 1, 1, 4,
1066 SVGA3DFORMAT_OP_TEXTURE |
1067 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1068 SVGA3DFORMAT_OP_CUBETEXTURE |
1069 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1070 },
1071 {
1072 "SVGA3D_R11G11B10_FLOAT",
1073 SVGA3D_R11G11B10_FLOAT,
1074 SVGA3D_DEVCAP_DXFMT_R11G11B10_FLOAT,
1075 1, 1, 4,
1076 SVGA3DFORMAT_OP_TEXTURE |
1077 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1078 SVGA3DFORMAT_OP_CUBETEXTURE |
1079 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1080 },
1081 {
1082 "SVGA3D_R8G8B8A8_TYPELESS",
1083 SVGA3D_R8G8B8A8_TYPELESS,
1084 SVGA3D_DEVCAP_DXFMT_R8G8B8A8_TYPELESS,
1085 1, 1, 4,
1086 SVGA3DFORMAT_OP_TEXTURE |
1087 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1088 SVGA3DFORMAT_OP_CUBETEXTURE |
1089 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1090 },
1091 {
1092 "SVGA3D_R8G8B8A8_UNORM",
1093 SVGA3D_R8G8B8A8_UNORM,
1094 SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM,
1095 1, 1, 4,
1096 SVGA3DFORMAT_OP_TEXTURE |
1097 SVGA3DFORMAT_OP_CUBETEXTURE |
1098 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1099 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1100 },
1101 {
1102 "SVGA3D_R8G8B8A8_UNORM_SRGB",
1103 SVGA3D_R8G8B8A8_UNORM_SRGB,
1104 SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UNORM_SRGB,
1105 1, 1, 4,
1106 SVGA3DFORMAT_OP_TEXTURE |
1107 SVGA3DFORMAT_OP_CUBETEXTURE |
1108 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1109 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1110 },
1111 {
1112 "SVGA3D_R8G8B8A8_UINT",
1113 SVGA3D_R8G8B8A8_UINT,
1114 SVGA3D_DEVCAP_DXFMT_R8G8B8A8_UINT,
1115 1, 1, 4,
1116 SVGA3DFORMAT_OP_TEXTURE |
1117 SVGA3DFORMAT_OP_CUBETEXTURE |
1118 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1119 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1120 },
1121 {
1122 "SVGA3D_R8G8B8A8_SINT",
1123 SVGA3D_R8G8B8A8_SINT,
1124 SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SINT,
1125 1, 1, 4,
1126 SVGA3DFORMAT_OP_TEXTURE |
1127 SVGA3DFORMAT_OP_CUBETEXTURE |
1128 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1129 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1130 },
1131 {
1132 "SVGA3D_R16G16_TYPELESS",
1133 SVGA3D_R16G16_TYPELESS,
1134 SVGA3D_DEVCAP_DXFMT_R16G16_TYPELESS,
1135 1, 1, 4,
1136 SVGA3DFORMAT_OP_TEXTURE |
1137 SVGA3DFORMAT_OP_CUBETEXTURE |
1138 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1139 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1140 },
1141 {
1142 "SVGA3D_R16G16_UINT",
1143 SVGA3D_R16G16_UINT,
1144 SVGA3D_DEVCAP_DXFMT_R16G16_UINT,
1145 1, 1, 4,
1146 SVGA3DFORMAT_OP_TEXTURE |
1147 SVGA3DFORMAT_OP_CUBETEXTURE |
1148 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1149 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1150 },
1151 {
1152 "SVGA3D_R16G16_SINT",
1153 SVGA3D_R16G16_SINT,
1154 SVGA3D_DEVCAP_DXFMT_R16G16_SINT,
1155 1, 1, 4,
1156 SVGA3DFORMAT_OP_TEXTURE |
1157 SVGA3DFORMAT_OP_CUBETEXTURE |
1158 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1159 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1160 },
1161 {
1162 "SVGA3D_R32_TYPELESS",
1163 SVGA3D_R32_TYPELESS,
1164 SVGA3D_DEVCAP_DXFMT_R32_TYPELESS,
1165 1, 1, 4,
1166 SVGA3DFORMAT_OP_TEXTURE |
1167 SVGA3DFORMAT_OP_CUBETEXTURE |
1168 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1169 SVGA3DFORMAT_OP_ZSTENCIL |
1170 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1171 },
1172 {
1173 /* Special case: no devcap / report sampler and depth/stencil ability
1174 */
1175 "SVGA3D_D32_FLOAT",
1176 SVGA3D_D32_FLOAT,
1177 0, /*SVGA3D_DEVCAP_DXFMT_D32_FLOAT*/
1178 1, 1, 4,
1179 SVGA3DFORMAT_OP_TEXTURE |
1180 SVGA3DFORMAT_OP_CUBETEXTURE |
1181 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1182 SVGA3DFORMAT_OP_ZSTENCIL
1183 },
1184 {
1185 "SVGA3D_R32_UINT",
1186 SVGA3D_R32_UINT,
1187 SVGA3D_DEVCAP_DXFMT_R32_UINT,
1188 1, 1, 4,
1189 SVGA3DFORMAT_OP_TEXTURE |
1190 SVGA3DFORMAT_OP_CUBETEXTURE |
1191 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1192 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1193 },
1194 {
1195 "SVGA3D_R32_SINT",
1196 SVGA3D_R32_SINT,
1197 SVGA3D_DEVCAP_DXFMT_R32_SINT,
1198 1, 1, 4,
1199 SVGA3DFORMAT_OP_TEXTURE |
1200 SVGA3DFORMAT_OP_CUBETEXTURE |
1201 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1202 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1203 },
1204 {
1205 "SVGA3D_R24G8_TYPELESS",
1206 SVGA3D_R24G8_TYPELESS,
1207 SVGA3D_DEVCAP_DXFMT_R24G8_TYPELESS,
1208 1, 1, 4,
1209 SVGA3DFORMAT_OP_TEXTURE |
1210 SVGA3DFORMAT_OP_CUBETEXTURE |
1211 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1212 SVGA3DFORMAT_OP_ZSTENCIL
1213 },
1214 {
1215 /* Special case: no devcap / report sampler and depth/stencil ability
1216 */
1217 "SVGA3D_D24_UNORM_S8_UINT",
1218 SVGA3D_D24_UNORM_S8_UINT,
1219 0, /*SVGA3D_DEVCAP_DXFMT_D24_UNORM_S8_UINT*/
1220 1, 1, 4,
1221 SVGA3DFORMAT_OP_TEXTURE |
1222 SVGA3DFORMAT_OP_CUBETEXTURE |
1223 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1224 SVGA3DFORMAT_OP_ZSTENCIL
1225 },
1226 {
1227 /* Special case: no devcap / report sampler and depth/stencil ability
1228 */
1229 "SVGA3D_R24_UNORM_X8_TYPELESS",
1230 SVGA3D_R24_UNORM_X8_TYPELESS,
1231 0, /*SVGA3D_DEVCAP_DXFMT_R24_UNORM_X8_TYPELESS*/
1232 1, 1, 4,
1233 SVGA3DFORMAT_OP_TEXTURE |
1234 SVGA3DFORMAT_OP_CUBETEXTURE |
1235 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1236 SVGA3DFORMAT_OP_ZSTENCIL
1237 },
1238 {
1239 "SVGA3D_X24_TYPELESS_G8_UINT",
1240 SVGA3D_X24_TYPELESS_G8_UINT,
1241 SVGA3D_DEVCAP_DXFMT_X24_TYPELESS_G8_UINT,
1242 1, 1, 4,
1243 SVGA3DFORMAT_OP_TEXTURE |
1244 SVGA3DFORMAT_OP_CUBETEXTURE |
1245 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1246 SVGA3DFORMAT_OP_ZSTENCIL
1247 },
1248 {
1249 "SVGA3D_R8G8_TYPELESS",
1250 SVGA3D_R8G8_TYPELESS,
1251 SVGA3D_DEVCAP_DXFMT_R8G8_TYPELESS,
1252 1, 1, 2,
1253 SVGA3DFORMAT_OP_TEXTURE |
1254 SVGA3DFORMAT_OP_CUBETEXTURE |
1255 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1256 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1257 },
1258 {
1259 "SVGA3D_R8G8_UNORM",
1260 SVGA3D_R8G8_UNORM,
1261 SVGA3D_DEVCAP_DXFMT_R8G8_UNORM,
1262 1, 1, 2,
1263 SVGA3DFORMAT_OP_TEXTURE |
1264 SVGA3DFORMAT_OP_CUBETEXTURE |
1265 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1266 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1267 },
1268 {
1269 "SVGA3D_R8G8_UINT",
1270 SVGA3D_R8G8_UINT,
1271 SVGA3D_DEVCAP_DXFMT_R8G8_UINT,
1272 1, 1, 2,
1273 SVGA3DFORMAT_OP_TEXTURE |
1274 SVGA3DFORMAT_OP_CUBETEXTURE |
1275 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1276 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1277 },
1278 {
1279 "SVGA3D_R8G8_SINT",
1280 SVGA3D_R8G8_SINT,
1281 SVGA3D_DEVCAP_DXFMT_R8G8_SINT,
1282 1, 1, 2,
1283 SVGA3DFORMAT_OP_TEXTURE |
1284 SVGA3DFORMAT_OP_CUBETEXTURE |
1285 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1286 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1287 },
1288 {
1289 "SVGA3D_R16_TYPELESS",
1290 SVGA3D_R16_TYPELESS,
1291 SVGA3D_DEVCAP_DXFMT_R16_TYPELESS,
1292 1, 1, 2,
1293 SVGA3DFORMAT_OP_ZSTENCIL |
1294 SVGA3DFORMAT_OP_TEXTURE |
1295 SVGA3DFORMAT_OP_CUBETEXTURE |
1296 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1297 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1298 },
1299 {
1300 "SVGA3D_R16_UNORM",
1301 SVGA3D_R16_UNORM,
1302 SVGA3D_DEVCAP_DXFMT_R16_UNORM,
1303 1, 1, 2,
1304 SVGA3DFORMAT_OP_TEXTURE |
1305 SVGA3DFORMAT_OP_CUBETEXTURE |
1306 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1307 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1308 },
1309 {
1310 "SVGA3D_R16_UINT",
1311 SVGA3D_R16_UINT,
1312 SVGA3D_DEVCAP_DXFMT_R16_UINT,
1313 1, 1, 2,
1314 SVGA3DFORMAT_OP_TEXTURE |
1315 SVGA3DFORMAT_OP_CUBETEXTURE |
1316 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1317 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1318 },
1319 {
1320 "SVGA3D_R16_SNORM",
1321 SVGA3D_R16_SNORM,
1322 SVGA3D_DEVCAP_DXFMT_R16_SNORM,
1323 1, 1, 2,
1324 SVGA3DFORMAT_OP_TEXTURE |
1325 SVGA3DFORMAT_OP_CUBETEXTURE |
1326 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1327 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1328 },
1329 {
1330 "SVGA3D_R16_SINT",
1331 SVGA3D_R16_SINT,
1332 SVGA3D_DEVCAP_DXFMT_R16_SINT,
1333 1, 1, 2,
1334 SVGA3DFORMAT_OP_TEXTURE |
1335 SVGA3DFORMAT_OP_CUBETEXTURE |
1336 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1337 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1338 },
1339 {
1340 "SVGA3D_R8_TYPELESS",
1341 SVGA3D_R8_TYPELESS,
1342 SVGA3D_DEVCAP_DXFMT_R8_TYPELESS,
1343 1, 1, 1,
1344 SVGA3DFORMAT_OP_TEXTURE |
1345 SVGA3DFORMAT_OP_CUBETEXTURE |
1346 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1347 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1348 },
1349 {
1350 "SVGA3D_R8_UNORM",
1351 SVGA3D_R8_UNORM,
1352 SVGA3D_DEVCAP_DXFMT_R8_UNORM,
1353 1, 1, 1,
1354 SVGA3DFORMAT_OP_TEXTURE |
1355 SVGA3DFORMAT_OP_CUBETEXTURE |
1356 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1357 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1358 },
1359 {
1360 "SVGA3D_R8_UINT",
1361 SVGA3D_R8_UINT,
1362 SVGA3D_DEVCAP_DXFMT_R8_UINT,
1363 1, 1, 1,
1364 SVGA3DFORMAT_OP_TEXTURE |
1365 SVGA3DFORMAT_OP_CUBETEXTURE |
1366 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1367 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1368 },
1369 {
1370 "SVGA3D_R8_SNORM",
1371 SVGA3D_R8_SNORM,
1372 SVGA3D_DEVCAP_DXFMT_R8_SNORM,
1373 1, 1, 1,
1374 SVGA3DFORMAT_OP_TEXTURE |
1375 SVGA3DFORMAT_OP_CUBETEXTURE |
1376 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1377 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1378 },
1379 {
1380 "SVGA3D_R8_SINT",
1381 SVGA3D_R8_SINT,
1382 SVGA3D_DEVCAP_DXFMT_R8_SINT,
1383 1, 1, 1,
1384 SVGA3DFORMAT_OP_TEXTURE |
1385 SVGA3DFORMAT_OP_CUBETEXTURE |
1386 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1387 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1388 },
1389 {
1390 "SVGA3D_P8",
1391 SVGA3D_P8, 0, 0, 0, 0, 0
1392 },
1393 {
1394 "SVGA3D_R9G9B9E5_SHAREDEXP",
1395 SVGA3D_R9G9B9E5_SHAREDEXP,
1396 SVGA3D_DEVCAP_DXFMT_R9G9B9E5_SHAREDEXP,
1397 1, 1, 4,
1398 SVGA3DFORMAT_OP_TEXTURE |
1399 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1400 SVGA3DFORMAT_OP_CUBETEXTURE |
1401 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1402 },
1403 {
1404 "SVGA3D_R8G8_B8G8_UNORM",
1405 SVGA3D_R8G8_B8G8_UNORM, 0, 0, 0, 0, 0
1406 },
1407 {
1408 "SVGA3D_G8R8_G8B8_UNORM",
1409 SVGA3D_G8R8_G8B8_UNORM, 0, 0, 0, 0, 0
1410 },
1411 {
1412 "SVGA3D_BC1_TYPELESS",
1413 SVGA3D_BC1_TYPELESS, 0, 0, 0, 0, 0
1414 },
1415 {
1416 "SVGA3D_BC1_UNORM_SRGB",
1417 SVGA3D_BC1_UNORM_SRGB, 0, 0, 0, 0, 0
1418 },
1419 {
1420 "SVGA3D_BC2_TYPELESS",
1421 SVGA3D_BC2_TYPELESS, 0, 0, 0, 0, 0
1422 },
1423 {
1424 "SVGA3D_BC2_UNORM_SRGB",
1425 SVGA3D_BC2_UNORM_SRGB, 0, 0, 0, 0, 0
1426 },
1427 {
1428 "SVGA3D_BC3_TYPELESS",
1429 SVGA3D_BC3_TYPELESS, 0, 0, 0, 0, 0
1430 },
1431 {
1432 "SVGA3D_BC3_UNORM_SRGB",
1433 SVGA3D_BC3_UNORM_SRGB, 0, 0, 0, 0, 0
1434 },
1435 {
1436 "SVGA3D_BC4_TYPELESS",
1437 SVGA3D_BC4_TYPELESS,
1438 SVGA3D_DEVCAP_DXFMT_BC4_TYPELESS,
1439 4, 4, 8,
1440 SVGA3DFORMAT_OP_TEXTURE |
1441 SVGA3DFORMAT_OP_CUBETEXTURE
1442 },
1443 {
1444 "SVGA3D_ATI1",
1445 SVGA3D_ATI1, 0, 0, 0, 0, 0
1446 },
1447 {
1448 "SVGA3D_BC4_SNORM",
1449 SVGA3D_BC4_SNORM,
1450 SVGA3D_DEVCAP_DXFMT_BC4_SNORM,
1451 4, 4, 8,
1452 SVGA3DFORMAT_OP_TEXTURE |
1453 SVGA3DFORMAT_OP_CUBETEXTURE
1454 },
1455 {
1456 "SVGA3D_BC5_TYPELESS",
1457 SVGA3D_BC5_TYPELESS,
1458 SVGA3D_DEVCAP_DXFMT_BC5_TYPELESS,
1459 4, 4, 16,
1460 SVGA3DFORMAT_OP_TEXTURE |
1461 SVGA3DFORMAT_OP_CUBETEXTURE
1462 },
1463 {
1464 "SVGA3D_ATI2",
1465 SVGA3D_ATI2, 0, 0, 0, 0, 0
1466 },
1467 {
1468 "SVGA3D_BC5_SNORM",
1469 SVGA3D_BC5_SNORM,
1470 SVGA3D_DEVCAP_DXFMT_BC5_SNORM,
1471 4, 4, 16,
1472 SVGA3DFORMAT_OP_TEXTURE |
1473 SVGA3DFORMAT_OP_CUBETEXTURE
1474 },
1475 {
1476 "SVGA3D_R10G10B10_XR_BIAS_A2_UNORM",
1477 SVGA3D_R10G10B10_XR_BIAS_A2_UNORM, 0, 0, 0, 0, 0
1478 },
1479 {
1480 "SVGA3D_B8G8R8A8_TYPELESS",
1481 SVGA3D_B8G8R8A8_TYPELESS,
1482 SVGA3D_DEVCAP_DXFMT_B8G8R8A8_TYPELESS,
1483 1, 1, 4,
1484 SVGA3DFORMAT_OP_TEXTURE |
1485 SVGA3DFORMAT_OP_CUBETEXTURE |
1486 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1487 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1488 },
1489 {
1490 "SVGA3D_B8G8R8A8_UNORM_SRGB",
1491 SVGA3D_B8G8R8A8_UNORM_SRGB,
1492 SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM_SRGB,
1493 1, 1, 4,
1494 SVGA3DFORMAT_OP_TEXTURE |
1495 SVGA3DFORMAT_OP_CUBETEXTURE |
1496 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1497 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1498 },
1499 {
1500 "SVGA3D_B8G8R8X8_TYPELESS",
1501 SVGA3D_B8G8R8X8_TYPELESS,
1502 SVGA3D_DEVCAP_DXFMT_B8G8R8X8_TYPELESS,
1503 1, 1, 4,
1504 SVGA3DFORMAT_OP_TEXTURE |
1505 SVGA3DFORMAT_OP_CUBETEXTURE |
1506 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1507 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1508 },
1509 {
1510 "SVGA3D_B8G8R8X8_UNORM_SRGB",
1511 SVGA3D_B8G8R8X8_UNORM_SRGB,
1512 SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM_SRGB,
1513 1, 1, 4,
1514 SVGA3DFORMAT_OP_TEXTURE |
1515 SVGA3DFORMAT_OP_CUBETEXTURE |
1516 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1517 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1518 },
1519 {
1520 "SVGA3D_Z_DF16",
1521 SVGA3D_Z_DF16,
1522 SVGA3D_DEVCAP_SURFACEFMT_Z_DF16,
1523 1, 1, 2,
1524 0
1525 },
1526 {
1527 "SVGA3D_Z_DF24",
1528 SVGA3D_Z_DF24,
1529 SVGA3D_DEVCAP_SURFACEFMT_Z_DF24,
1530 1, 1, 4,
1531 0
1532 },
1533 {
1534 "SVGA3D_Z_D24S8_INT",
1535 SVGA3D_Z_D24S8_INT,
1536 SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT,
1537 1, 1, 4,
1538 SVGA3DFORMAT_OP_TEXTURE |
1539 SVGA3DFORMAT_OP_CUBETEXTURE |
1540 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1541 SVGA3DFORMAT_OP_ZSTENCIL
1542 },
1543 {
1544 "SVGA3D_YV12",
1545 SVGA3D_YV12, 0, 0, 0, 0, 0
1546 },
1547 {
1548 "SVGA3D_R32G32B32A32_FLOAT",
1549 SVGA3D_R32G32B32A32_FLOAT,
1550 SVGA3D_DEVCAP_DXFMT_R32G32B32A32_FLOAT,
1551 1, 1, 16,
1552 SVGA3DFORMAT_OP_TEXTURE |
1553 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1554 SVGA3DFORMAT_OP_CUBETEXTURE |
1555 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1556 },
1557 {
1558 "SVGA3D_R16G16B16A16_FLOAT",
1559 SVGA3D_R16G16B16A16_FLOAT,
1560 SVGA3D_DEVCAP_DXFMT_R16G16B16A16_FLOAT,
1561 1, 1, 8,
1562 SVGA3DFORMAT_OP_TEXTURE |
1563 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1564 SVGA3DFORMAT_OP_CUBETEXTURE |
1565 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1566 },
1567 {
1568 "SVGA3D_R16G16B16A16_UNORM",
1569 SVGA3D_R16G16B16A16_UNORM,
1570 SVGA3D_DEVCAP_DXFMT_R16G16B16A16_UNORM,
1571 1, 1, 8,
1572 SVGA3DFORMAT_OP_TEXTURE |
1573 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1574 SVGA3DFORMAT_OP_CUBETEXTURE |
1575 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1576 },
1577 {
1578 "SVGA3D_R32G32_FLOAT",
1579 SVGA3D_R32G32_FLOAT,
1580 SVGA3D_DEVCAP_DXFMT_R32G32_FLOAT,
1581 1, 1, 8,
1582 SVGA3DFORMAT_OP_TEXTURE |
1583 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1584 SVGA3DFORMAT_OP_CUBETEXTURE |
1585 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1586 },
1587 {
1588 "SVGA3D_R10G10B10A2_UNORM",
1589 SVGA3D_R10G10B10A2_UNORM,
1590 SVGA3D_DEVCAP_DXFMT_R10G10B10A2_UNORM,
1591 1, 1, 4,
1592 SVGA3DFORMAT_OP_TEXTURE |
1593 SVGA3DFORMAT_OP_CUBETEXTURE |
1594 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1595 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1596 },
1597 {
1598 "SVGA3D_R8G8B8A8_SNORM",
1599 SVGA3D_R8G8B8A8_SNORM,
1600 SVGA3D_DEVCAP_DXFMT_R8G8B8A8_SNORM,
1601 1, 1, 4,
1602 SVGA3DFORMAT_OP_TEXTURE |
1603 SVGA3DFORMAT_OP_CUBETEXTURE |
1604 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1605 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1606 },
1607 {
1608 "SVGA3D_R16G16_FLOAT",
1609 SVGA3D_R16G16_FLOAT,
1610 SVGA3D_DEVCAP_DXFMT_R16G16_FLOAT,
1611 1, 1, 4,
1612 SVGA3DFORMAT_OP_TEXTURE |
1613 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1614 SVGA3DFORMAT_OP_CUBETEXTURE |
1615 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1616 },
1617 {
1618 "SVGA3D_R16G16_UNORM",
1619 SVGA3D_R16G16_UNORM,
1620 SVGA3D_DEVCAP_DXFMT_R16G16_UNORM,
1621 1, 1, 4,
1622 SVGA3DFORMAT_OP_TEXTURE |
1623 SVGA3DFORMAT_OP_CUBETEXTURE |
1624 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1625 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1626 },
1627 {
1628 "SVGA3D_R16G16_SNORM",
1629 SVGA3D_R16G16_SNORM,
1630 SVGA3D_DEVCAP_DXFMT_R16G16_SNORM,
1631 1, 1, 4,
1632 SVGA3DFORMAT_OP_TEXTURE |
1633 SVGA3DFORMAT_OP_CUBETEXTURE |
1634 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1635 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1636 },
1637 {
1638 /* Special case: no devcap / report sampler, render target and
1639 * depth/stencil ability
1640 */
1641 "SVGA3D_R32_FLOAT",
1642 SVGA3D_R32_FLOAT,
1643 0, /*SVGA3D_DEVCAP_DXFMT_R32_FLOAT*/
1644 1, 1, 4,
1645 SVGA3DFORMAT_OP_TEXTURE |
1646 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1647 SVGA3DFORMAT_OP_CUBETEXTURE |
1648 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET |
1649 SVGA3DFORMAT_OP_ZSTENCIL
1650 },
1651 {
1652 "SVGA3D_R8G8_SNORM",
1653 SVGA3D_R8G8_SNORM,
1654 SVGA3D_DEVCAP_DXFMT_R8G8_SNORM,
1655 1, 1, 2,
1656 SVGA3DFORMAT_OP_TEXTURE |
1657 SVGA3DFORMAT_OP_CUBETEXTURE |
1658 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1659 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1660 },
1661 {
1662 "SVGA3D_R16_FLOAT",
1663 SVGA3D_R16_FLOAT,
1664 SVGA3D_DEVCAP_DXFMT_R16_FLOAT,
1665 1, 1, 2,
1666 SVGA3DFORMAT_OP_TEXTURE |
1667 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1668 SVGA3DFORMAT_OP_CUBETEXTURE |
1669 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1670 },
1671 {
1672 "SVGA3D_D16_UNORM",
1673 SVGA3D_D16_UNORM,
1674 SVGA3D_DEVCAP_DXFMT_D16_UNORM,
1675 1, 1, 2,
1676 SVGA3DFORMAT_OP_TEXTURE |
1677 SVGA3DFORMAT_OP_CUBETEXTURE |
1678 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1679 SVGA3DFORMAT_OP_ZSTENCIL
1680 },
1681 {
1682 "SVGA3D_A8_UNORM",
1683 SVGA3D_A8_UNORM,
1684 SVGA3D_DEVCAP_DXFMT_A8_UNORM,
1685 1, 1, 1,
1686 SVGA3DFORMAT_OP_TEXTURE |
1687 SVGA3DFORMAT_OP_CUBETEXTURE |
1688 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1689 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1690 },
1691 {
1692 "SVGA3D_BC1_UNORM",
1693 SVGA3D_BC1_UNORM, 0, 0, 0, 0, 0
1694 },
1695 {
1696 "SVGA3D_BC2_UNORM",
1697 SVGA3D_BC2_UNORM, 0, 0, 0, 0, 0
1698 },
1699 {
1700 "SVGA3D_BC3_UNORM",
1701 SVGA3D_BC3_UNORM, 0, 0, 0, 0, 0
1702 },
1703 {
1704 "SVGA3D_B5G6R5_UNORM",
1705 SVGA3D_B5G6R5_UNORM,
1706 SVGA3D_DEVCAP_DXFMT_B5G6R5_UNORM,
1707 1, 1, 2,
1708 SVGA3DFORMAT_OP_TEXTURE |
1709 SVGA3DFORMAT_OP_CUBETEXTURE |
1710 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1711 SVGA3DFORMAT_OP_DISPLAYMODE |
1712 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1713 },
1714 {
1715 "SVGA3D_B5G5R5A1_UNORM",
1716 SVGA3D_B5G5R5A1_UNORM,
1717 SVGA3D_DEVCAP_DXFMT_B5G5R5A1_UNORM,
1718 1, 1, 2,
1719 SVGA3DFORMAT_OP_TEXTURE |
1720 SVGA3DFORMAT_OP_CUBETEXTURE |
1721 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1722 SVGA3DFORMAT_OP_DISPLAYMODE |
1723 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1724 },
1725 {
1726 "SVGA3D_B8G8R8A8_UNORM",
1727 SVGA3D_B8G8R8A8_UNORM,
1728 SVGA3D_DEVCAP_DXFMT_B8G8R8A8_UNORM,
1729 1, 1, 4,
1730 SVGA3DFORMAT_OP_TEXTURE |
1731 SVGA3DFORMAT_OP_CUBETEXTURE |
1732 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1733 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1734 },
1735 {
1736 "SVGA3D_B8G8R8X8_UNORM",
1737 SVGA3D_B8G8R8X8_UNORM,
1738 SVGA3D_DEVCAP_DXFMT_B8G8R8X8_UNORM,
1739 1, 1, 4,
1740 SVGA3DFORMAT_OP_TEXTURE |
1741 SVGA3DFORMAT_OP_CUBETEXTURE |
1742 SVGA3DFORMAT_OP_VOLUMETEXTURE |
1743 SVGA3DFORMAT_OP_DISPLAYMODE |
1744 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
1745 },
1746 {
1747 "SVGA3D_BC4_UNORM",
1748 SVGA3D_BC4_UNORM,
1749 SVGA3D_DEVCAP_DXFMT_BC4_UNORM,
1750 4, 4, 8,
1751 SVGA3DFORMAT_OP_TEXTURE |
1752 SVGA3DFORMAT_OP_CUBETEXTURE
1753 },
1754 {
1755 "SVGA3D_BC5_UNORM",
1756 SVGA3D_BC5_UNORM,
1757 SVGA3D_DEVCAP_DXFMT_BC5_UNORM,
1758 4, 4, 16,
1759 SVGA3DFORMAT_OP_TEXTURE |
1760 SVGA3DFORMAT_OP_CUBETEXTURE
1761 }
1762 };
1763
1764
1765 /**
1766 * Debug only:
1767 * 1. check that format_cap_table[i] matches the i-th SVGA3D format.
1768 * 2. check that format_conversion_table[i].pformat == i.
1769 */
1770 static void
1771 check_format_tables(void)
1772 {
1773 static boolean first_call = TRUE;
1774
1775 if (first_call) {
1776 unsigned i;
1777
1778 STATIC_ASSERT(Elements(format_cap_table) == SVGA3D_FORMAT_MAX);
1779 for (i = 0; i < Elements(format_cap_table); i++) {
1780 assert(format_cap_table[i].format == i);
1781 }
1782
1783 STATIC_ASSERT(Elements(format_conversion_table) == PIPE_FORMAT_COUNT);
1784 for (i = 0; i < Elements(format_conversion_table); i++) {
1785 assert(format_conversion_table[i].pformat == i);
1786 }
1787
1788 first_call = FALSE;
1789 }
1790 }
1791
1792
1793 /*
1794 * Get format capabilities from the host. It takes in consideration
1795 * deprecated/unsupported formats, and formats which are implicitely assumed to
1796 * be supported when the host does not provide an explicit capability entry.
1797 */
1798 void
1799 svga_get_format_cap(struct svga_screen *ss,
1800 SVGA3dSurfaceFormat format,
1801 SVGA3dSurfaceFormatCaps *caps)
1802 {
1803 struct svga_winsys_screen *sws = ss->sws;
1804 SVGA3dDevCapResult result;
1805 const struct format_cap *entry;
1806
1807 #ifdef DEBUG
1808 check_format_tables();
1809 #else
1810 (void) check_format_tables;
1811 #endif
1812
1813 assert(format < Elements(format_cap_table));
1814 entry = &format_cap_table[format];
1815 assert(entry->format == format);
1816
1817 if (entry->devcap && sws->get_cap(sws, entry->devcap, &result)) {
1818 /* Explicitly advertised format */
1819 if (entry->devcap > SVGA3D_DEVCAP_DX) {
1820 /* Translate DX/VGPU10 format cap to VGPU9 cap */
1821 caps->value = 0;
1822 if (result.u & SVGA3D_DXFMT_COLOR_RENDERTARGET)
1823 caps->value |= SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET;
1824 if (!(result.u & SVGA3D_DXFMT_BLENDABLE))
1825 caps->value |= SVGA3DFORMAT_OP_NOALPHABLEND;
1826 if (result.u & SVGA3D_DXFMT_DEPTH_RENDERTARGET)
1827 caps->value |= SVGA3DFORMAT_OP_ZSTENCIL;
1828 if (result.u & SVGA3D_DXFMT_SHADER_SAMPLE)
1829 caps->value |= (SVGA3DFORMAT_OP_TEXTURE |
1830 SVGA3DFORMAT_OP_CUBETEXTURE);
1831 if (result.u & SVGA3D_DXFMT_VOLUME)
1832 caps->value |= SVGA3DFORMAT_OP_VOLUMETEXTURE;
1833 }
1834 else {
1835 /* Return VGPU9 format cap as-is */
1836 caps->value = result.u;
1837 }
1838
1839 } else {
1840 /* Implicitly advertised format -- use default caps */
1841 caps->value = entry->defaultOperations;
1842 }
1843 }
1844
1845
1846 void
1847 svga_format_size(SVGA3dSurfaceFormat format,
1848 unsigned *block_width,
1849 unsigned *block_height,
1850 unsigned *bytes_per_block)
1851 {
1852 assert(format < Elements(format_cap_table));
1853 *block_width = format_cap_table[format].block_width;
1854 *block_height = format_cap_table[format].block_height;
1855 *bytes_per_block = format_cap_table[format].block_bytes;
1856 /* Make sure the the table entry was valid */
1857 if (*block_width == 0)
1858 debug_printf("Bad table entry for %s\n", svga_format_name(format));
1859 assert(*block_width);
1860 assert(*block_height);
1861 assert(*bytes_per_block);
1862 }
1863
1864
1865 const char *
1866 svga_format_name(SVGA3dSurfaceFormat format)
1867 {
1868 assert(format < Elements(format_cap_table));
1869 return format_cap_table[format].name;
1870 }
1871
1872
1873 /**
1874 * Is the given SVGA3dSurfaceFormat a signed or unsigned integer color format?
1875 */
1876 boolean
1877 svga_format_is_integer(SVGA3dSurfaceFormat format)
1878 {
1879 switch (format) {
1880 case SVGA3D_R32G32B32A32_SINT:
1881 case SVGA3D_R32G32B32_SINT:
1882 case SVGA3D_R32G32_SINT:
1883 case SVGA3D_R32_SINT:
1884 case SVGA3D_R16G16B16A16_SINT:
1885 case SVGA3D_R16G16_SINT:
1886 case SVGA3D_R16_SINT:
1887 case SVGA3D_R8G8B8A8_SINT:
1888 case SVGA3D_R8G8_SINT:
1889 case SVGA3D_R8_SINT:
1890 case SVGA3D_R32G32B32A32_UINT:
1891 case SVGA3D_R32G32B32_UINT:
1892 case SVGA3D_R32G32_UINT:
1893 case SVGA3D_R32_UINT:
1894 case SVGA3D_R16G16B16A16_UINT:
1895 case SVGA3D_R16G16_UINT:
1896 case SVGA3D_R16_UINT:
1897 case SVGA3D_R8G8B8A8_UINT:
1898 case SVGA3D_R8G8_UINT:
1899 case SVGA3D_R8_UINT:
1900 case SVGA3D_R10G10B10A2_UINT:
1901 return TRUE;
1902 default:
1903 return FALSE;
1904 }
1905 }
1906
1907
1908 /**
1909 * Given a texture format, return the expected data type returned from
1910 * the texture sampler. For example, UNORM8 formats return floating point
1911 * values while SINT formats returned signed integer values.
1912 * Note: this function could be moved into the gallum u_format.[ch] code
1913 * if it's useful to anyone else.
1914 */
1915 enum tgsi_return_type
1916 svga_get_texture_datatype(enum pipe_format format)
1917 {
1918 const struct util_format_description *desc = util_format_description(format);
1919 enum tgsi_return_type t;
1920
1921 if (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN ) {
1922 if (util_format_is_depth_or_stencil(format)) {
1923 t = TGSI_RETURN_TYPE_FLOAT; /* XXX revisit this */
1924 }
1925 else if (desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT) {
1926 t = TGSI_RETURN_TYPE_FLOAT;
1927 }
1928 else if (desc->channel[0].type == UTIL_FORMAT_TYPE_UNSIGNED) {
1929 t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_UNORM : TGSI_RETURN_TYPE_UINT;
1930 }
1931 else if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) {
1932 t = desc->channel[0].normalized ? TGSI_RETURN_TYPE_SNORM : TGSI_RETURN_TYPE_SINT;
1933 }
1934 else {
1935 assert(!"Unexpected channel type in svga_get_texture_datatype()");
1936 t = TGSI_RETURN_TYPE_FLOAT;
1937 }
1938 }
1939 else {
1940 /* compressed format, shared exponent format, etc. */
1941 switch (format) {
1942 case PIPE_FORMAT_DXT1_RGB:
1943 case PIPE_FORMAT_DXT1_RGBA:
1944 case PIPE_FORMAT_DXT3_RGBA:
1945 case PIPE_FORMAT_DXT5_RGBA:
1946 case PIPE_FORMAT_DXT1_SRGB:
1947 case PIPE_FORMAT_DXT1_SRGBA:
1948 case PIPE_FORMAT_DXT3_SRGBA:
1949 case PIPE_FORMAT_DXT5_SRGBA:
1950 case PIPE_FORMAT_RGTC1_UNORM:
1951 case PIPE_FORMAT_RGTC2_UNORM:
1952 case PIPE_FORMAT_LATC1_UNORM:
1953 case PIPE_FORMAT_LATC2_UNORM:
1954 case PIPE_FORMAT_ETC1_RGB8:
1955 t = TGSI_RETURN_TYPE_UNORM;
1956 break;
1957 case PIPE_FORMAT_RGTC1_SNORM:
1958 case PIPE_FORMAT_RGTC2_SNORM:
1959 case PIPE_FORMAT_LATC1_SNORM:
1960 case PIPE_FORMAT_LATC2_SNORM:
1961 case PIPE_FORMAT_R10G10B10X2_SNORM:
1962 t = TGSI_RETURN_TYPE_SNORM;
1963 break;
1964 case PIPE_FORMAT_R11G11B10_FLOAT:
1965 case PIPE_FORMAT_R9G9B9E5_FLOAT:
1966 t = TGSI_RETURN_TYPE_FLOAT;
1967 break;
1968 default:
1969 assert(!"Unexpected channel type in svga_get_texture_datatype()");
1970 t = TGSI_RETURN_TYPE_FLOAT;
1971 }
1972 }
1973
1974 return t;
1975 }
1976
1977
1978 /**
1979 * Given an svga context, return true iff there are currently any integer color
1980 * buffers attached to the framebuffer.
1981 */
1982 boolean
1983 svga_has_any_integer_cbufs(const struct svga_context *svga)
1984 {
1985 unsigned i;
1986 for (i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) {
1987 struct pipe_surface *cbuf = svga->curr.framebuffer.cbufs[i];
1988
1989 if (cbuf && util_format_is_pure_integer(cbuf->format)) {
1990 return TRUE;
1991 }
1992 }
1993 return FALSE;
1994 }
1995
1996
1997 /**
1998 * Given an SVGA format, return the corresponding typeless format.
1999 * If there is no typeless format, return the format unchanged.
2000 */
2001 SVGA3dSurfaceFormat
2002 svga_typeless_format(SVGA3dSurfaceFormat format)
2003 {
2004 switch (format) {
2005 case SVGA3D_R32G32B32A32_UINT:
2006 case SVGA3D_R32G32B32A32_SINT:
2007 case SVGA3D_R32G32B32A32_FLOAT:
2008 return SVGA3D_R32G32B32A32_TYPELESS;
2009 case SVGA3D_R32G32B32_FLOAT:
2010 case SVGA3D_R32G32B32_UINT:
2011 case SVGA3D_R32G32B32_SINT:
2012 return SVGA3D_R32G32B32_TYPELESS;
2013 case SVGA3D_R16G16B16A16_UINT:
2014 case SVGA3D_R16G16B16A16_UNORM:
2015 case SVGA3D_R16G16B16A16_SNORM:
2016 case SVGA3D_R16G16B16A16_SINT:
2017 case SVGA3D_R16G16B16A16_FLOAT:
2018 return SVGA3D_R16G16B16A16_TYPELESS;
2019 case SVGA3D_R32G32_UINT:
2020 case SVGA3D_R32G32_SINT:
2021 case SVGA3D_R32G32_FLOAT:
2022 return SVGA3D_R32G32_TYPELESS;
2023 case SVGA3D_D32_FLOAT_S8X24_UINT:
2024 return SVGA3D_R32G8X24_TYPELESS;
2025 case SVGA3D_X32_TYPELESS_G8X24_UINT:
2026 return SVGA3D_R32_FLOAT_X8X24_TYPELESS;
2027 case SVGA3D_R10G10B10A2_UINT:
2028 case SVGA3D_R10G10B10A2_UNORM:
2029 return SVGA3D_R10G10B10A2_TYPELESS;
2030 case SVGA3D_R8G8B8A8_UNORM:
2031 case SVGA3D_R8G8B8A8_SNORM:
2032 case SVGA3D_R8G8B8A8_UNORM_SRGB:
2033 case SVGA3D_R8G8B8A8_UINT:
2034 case SVGA3D_R8G8B8A8_SINT:
2035 return SVGA3D_R8G8B8A8_TYPELESS;
2036 case SVGA3D_R16G16_UINT:
2037 case SVGA3D_R16G16_SINT:
2038 case SVGA3D_R16G16_UNORM:
2039 case SVGA3D_R16G16_SNORM:
2040 case SVGA3D_R16G16_FLOAT:
2041 return SVGA3D_R16G16_TYPELESS;
2042 case SVGA3D_D32_FLOAT:
2043 case SVGA3D_R32_FLOAT:
2044 case SVGA3D_R32_UINT:
2045 case SVGA3D_R32_SINT:
2046 return SVGA3D_R32_TYPELESS;
2047 case SVGA3D_D24_UNORM_S8_UINT:
2048 return SVGA3D_R24G8_TYPELESS;
2049 case SVGA3D_X24_TYPELESS_G8_UINT:
2050 return SVGA3D_R24_UNORM_X8_TYPELESS;
2051 case SVGA3D_R8G8_UNORM:
2052 case SVGA3D_R8G8_SNORM:
2053 case SVGA3D_R8G8_UINT:
2054 case SVGA3D_R8G8_SINT:
2055 return SVGA3D_R8G8_TYPELESS;
2056 case SVGA3D_R16_UNORM:
2057 case SVGA3D_R16_UINT:
2058 case SVGA3D_R16_SNORM:
2059 case SVGA3D_R16_SINT:
2060 case SVGA3D_R16_FLOAT:
2061 return SVGA3D_R16_TYPELESS;
2062 case SVGA3D_R8_UNORM:
2063 case SVGA3D_R8_UINT:
2064 case SVGA3D_R8_SNORM:
2065 case SVGA3D_R8_SINT:
2066 return SVGA3D_R8_TYPELESS;
2067 case SVGA3D_B8G8R8A8_UNORM_SRGB:
2068 case SVGA3D_B8G8R8A8_UNORM:
2069 return SVGA3D_B8G8R8A8_TYPELESS;
2070 case SVGA3D_B8G8R8X8_UNORM_SRGB:
2071 case SVGA3D_B8G8R8X8_UNORM:
2072 return SVGA3D_B8G8R8X8_TYPELESS;
2073 case SVGA3D_BC4_UNORM:
2074 case SVGA3D_BC4_SNORM:
2075 return SVGA3D_BC4_TYPELESS;
2076 case SVGA3D_BC5_UNORM:
2077 case SVGA3D_BC5_SNORM:
2078 return SVGA3D_BC5_TYPELESS;
2079
2080 /* Special cases (no corresponding _TYPELESS formats) */
2081 case SVGA3D_A8_UNORM:
2082 case SVGA3D_A4R4G4B4:
2083 case SVGA3D_B5G5R5A1_UNORM:
2084 case SVGA3D_B5G6R5_UNORM:
2085 case SVGA3D_DXT1:
2086 case SVGA3D_DXT2:
2087 case SVGA3D_DXT3:
2088 case SVGA3D_DXT4:
2089 case SVGA3D_DXT5:
2090 case SVGA3D_R11G11B10_FLOAT:
2091 case SVGA3D_R9G9B9E5_SHAREDEXP:
2092 case SVGA3D_Z_D32:
2093 case SVGA3D_Z_D16:
2094 return format;
2095 default:
2096 debug_printf("Unexpected format %s in %s\n",
2097 svga_format_name(format), __FUNCTION__);
2098 return format;
2099 }
2100 }