1 /**********************************************************
2 * Copyright 2011 VMware, Inc. All rights reserved.
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:
12 * The above copyright notice and this permission notice shall be
13 * included in all copies or substantial portions of the Software.
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
24 **********************************************************/
27 #include "pipe/p_format.h"
28 #include "util/u_debug.h"
29 #include "util/u_memory.h"
31 #include "svga_winsys.h"
32 #include "svga_screen.h"
33 #include "svga_format.h"
37 * Translate from gallium format to SVGA3D format.
40 svga_translate_format(struct svga_screen
*ss
,
41 enum pipe_format format
,
46 case PIPE_FORMAT_B8G8R8A8_UNORM
:
47 return SVGA3D_A8R8G8B8
;
48 case PIPE_FORMAT_B8G8R8X8_UNORM
:
49 return SVGA3D_X8R8G8B8
;
51 /* Required for GL2.1:
53 case PIPE_FORMAT_B8G8R8A8_SRGB
:
54 return SVGA3D_A8R8G8B8
;
56 case PIPE_FORMAT_B5G6R5_UNORM
:
58 case PIPE_FORMAT_B5G5R5A1_UNORM
:
59 return SVGA3D_A1R5G5B5
;
60 case PIPE_FORMAT_B4G4R4A4_UNORM
:
61 return SVGA3D_A4R4G4B4
;
63 case PIPE_FORMAT_Z16_UNORM
:
64 return bind
& PIPE_BIND_SAMPLER_VIEW
? ss
->depth
.z16
: SVGA3D_Z_D16
;
65 case PIPE_FORMAT_S8_USCALED_Z24_UNORM
:
66 return bind
& PIPE_BIND_SAMPLER_VIEW
? ss
->depth
.s8z24
: SVGA3D_Z_D24S8
;
67 case PIPE_FORMAT_X8Z24_UNORM
:
68 return bind
& PIPE_BIND_SAMPLER_VIEW
? ss
->depth
.x8z24
: SVGA3D_Z_D24X8
;
70 case PIPE_FORMAT_A8_UNORM
:
72 case PIPE_FORMAT_L8_UNORM
:
73 return SVGA3D_LUMINANCE8
;
75 case PIPE_FORMAT_DXT1_RGB
:
76 case PIPE_FORMAT_DXT1_RGBA
:
78 case PIPE_FORMAT_DXT3_RGBA
:
80 case PIPE_FORMAT_DXT5_RGBA
:
83 /* Float formats (only 1, 2 and 4-component formats supported) */
84 case PIPE_FORMAT_R32_FLOAT
:
85 return SVGA3D_R_S23E8
;
86 case PIPE_FORMAT_R32G32_FLOAT
:
87 return SVGA3D_RG_S23E8
;
88 case PIPE_FORMAT_R32G32B32A32_FLOAT
:
89 return SVGA3D_ARGB_S23E8
;
90 case PIPE_FORMAT_R16_FLOAT
:
91 return SVGA3D_R_S10E5
;
92 case PIPE_FORMAT_R16G16_FLOAT
:
93 return SVGA3D_RG_S10E5
;
94 case PIPE_FORMAT_R16G16B16A16_FLOAT
:
95 return SVGA3D_ARGB_S10E5
;
97 case PIPE_FORMAT_Z32_UNORM
:
98 /* SVGA3D_Z_D32 is not yet unsupported */
101 return SVGA3D_FORMAT_INVALID
;
107 * Format capability description entry.
110 SVGA3dSurfaceFormat format
;
113 * Capability index corresponding to the format.
115 SVGA3dDevCapIndex index
;
118 * Mask of supported SVGA3dFormatOp operations, to be inferred when the
119 * capability is not explicitly present.
121 uint32 defaultOperations
;
126 * Format capability description table.
128 * Ordererd by increasing SVGA3dSurfaceFormat value, but with gaps.
130 static const struct format_cap format_cap_table
[] = {
133 SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8
,
134 SVGA3DFORMAT_OP_TEXTURE
|
135 SVGA3DFORMAT_OP_CUBETEXTURE
|
136 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
137 SVGA3DFORMAT_OP_DISPLAYMODE
|
138 SVGA3DFORMAT_OP_3DACCELERATION
|
139 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
140 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
141 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
142 SVGA3DFORMAT_OP_SRGBREAD
|
143 SVGA3DFORMAT_OP_SRGBWRITE
|
144 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
145 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
149 SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8
,
150 SVGA3DFORMAT_OP_TEXTURE
|
151 SVGA3DFORMAT_OP_CUBETEXTURE
|
152 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
153 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
154 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
155 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
156 SVGA3DFORMAT_OP_SRGBREAD
|
157 SVGA3DFORMAT_OP_SRGBWRITE
|
158 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
159 SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET
|
160 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
164 SVGA3D_DEVCAP_SURFACEFMT_R5G6B5
,
165 SVGA3DFORMAT_OP_TEXTURE
|
166 SVGA3DFORMAT_OP_CUBETEXTURE
|
167 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
168 SVGA3DFORMAT_OP_DISPLAYMODE
|
169 SVGA3DFORMAT_OP_3DACCELERATION
|
170 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
171 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
172 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
173 SVGA3DFORMAT_OP_SRGBREAD
|
174 SVGA3DFORMAT_OP_SRGBWRITE
|
175 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
176 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
180 SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5
,
181 SVGA3DFORMAT_OP_TEXTURE
|
182 SVGA3DFORMAT_OP_CUBETEXTURE
|
183 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
184 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
185 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
186 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
187 SVGA3DFORMAT_OP_SRGBREAD
|
188 SVGA3DFORMAT_OP_SRGBWRITE
|
189 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
190 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
194 SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5
,
195 SVGA3DFORMAT_OP_TEXTURE
|
196 SVGA3DFORMAT_OP_CUBETEXTURE
|
197 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
198 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
199 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
200 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
201 SVGA3DFORMAT_OP_SRGBREAD
|
202 SVGA3DFORMAT_OP_SRGBWRITE
|
203 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
204 SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET
|
205 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
209 SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4
,
210 SVGA3DFORMAT_OP_TEXTURE
|
211 SVGA3DFORMAT_OP_CUBETEXTURE
|
212 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
213 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
214 SVGA3DFORMAT_OP_SRGBREAD
|
215 SVGA3DFORMAT_OP_SRGBWRITE
|
216 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
217 SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET
|
218 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
221 * SVGA3D_Z_D32 is not yet supported, and has no corresponding
226 SVGA3D_DEVCAP_SURFACEFMT_Z_D16
,
227 SVGA3DFORMAT_OP_ZSTENCIL
|
228 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
232 SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8
,
233 SVGA3DFORMAT_OP_ZSTENCIL
|
234 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
239 SVGA3DFORMAT_OP_ZSTENCIL
|
240 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
244 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8
,
245 SVGA3DFORMAT_OP_TEXTURE
|
246 SVGA3DFORMAT_OP_CUBETEXTURE
|
247 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
248 SVGA3DFORMAT_OP_OFFSCREENPLAIN
251 SVGA3D_LUMINANCE8_ALPHA8
,
252 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8
,
253 SVGA3DFORMAT_OP_TEXTURE
|
254 SVGA3DFORMAT_OP_CUBETEXTURE
|
255 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
256 SVGA3DFORMAT_OP_OFFSCREENPLAIN
259 * SVGA3D_LUMINANCE4_ALPHA4 is not supported, and has no corresponding
264 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16
,
265 SVGA3DFORMAT_OP_TEXTURE
|
266 SVGA3DFORMAT_OP_CUBETEXTURE
|
267 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
268 SVGA3DFORMAT_OP_OFFSCREENPLAIN
272 SVGA3D_DEVCAP_SURFACEFMT_DXT1
,
273 SVGA3DFORMAT_OP_TEXTURE
|
274 SVGA3DFORMAT_OP_SRGBREAD
|
275 SVGA3DFORMAT_OP_CUBETEXTURE
|
276 SVGA3DFORMAT_OP_OFFSCREENPLAIN
280 SVGA3D_DEVCAP_SURFACEFMT_DXT2
,
281 SVGA3DFORMAT_OP_TEXTURE
|
282 SVGA3DFORMAT_OP_SRGBREAD
|
283 SVGA3DFORMAT_OP_CUBETEXTURE
|
284 SVGA3DFORMAT_OP_OFFSCREENPLAIN
288 SVGA3D_DEVCAP_SURFACEFMT_DXT3
,
289 SVGA3DFORMAT_OP_TEXTURE
|
290 SVGA3DFORMAT_OP_SRGBREAD
|
291 SVGA3DFORMAT_OP_CUBETEXTURE
|
292 SVGA3DFORMAT_OP_OFFSCREENPLAIN
296 SVGA3D_DEVCAP_SURFACEFMT_DXT4
,
297 SVGA3DFORMAT_OP_TEXTURE
|
298 SVGA3DFORMAT_OP_SRGBREAD
|
299 SVGA3DFORMAT_OP_CUBETEXTURE
|
300 SVGA3DFORMAT_OP_OFFSCREENPLAIN
304 SVGA3D_DEVCAP_SURFACEFMT_DXT5
,
305 SVGA3DFORMAT_OP_TEXTURE
|
306 SVGA3DFORMAT_OP_SRGBREAD
|
307 SVGA3DFORMAT_OP_CUBETEXTURE
|
308 SVGA3DFORMAT_OP_OFFSCREENPLAIN
312 SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8
,
313 SVGA3DFORMAT_OP_TEXTURE
|
314 SVGA3DFORMAT_OP_CUBETEXTURE
|
315 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
316 SVGA3DFORMAT_OP_BUMPMAP
|
317 SVGA3DFORMAT_OP_OFFSCREENPLAIN
320 * SVGA3D_BUMPL6V5U5 is unsupported; it has no corresponding
325 SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8
,
326 SVGA3DFORMAT_OP_TEXTURE
|
327 SVGA3DFORMAT_OP_CUBETEXTURE
|
328 SVGA3DFORMAT_OP_BUMPMAP
|
329 SVGA3DFORMAT_OP_OFFSCREENPLAIN
332 * SVGA3D_BUMPL8V8U8 is unsupported; it has no corresponding
333 * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
337 SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5
,
338 SVGA3DFORMAT_OP_TEXTURE
|
339 SVGA3DFORMAT_OP_CUBETEXTURE
|
340 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
341 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
342 SVGA3DFORMAT_OP_SRGBREAD
|
343 SVGA3DFORMAT_OP_SRGBWRITE
|
344 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
345 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
349 SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8
,
350 SVGA3DFORMAT_OP_TEXTURE
|
351 SVGA3DFORMAT_OP_CUBETEXTURE
|
352 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
353 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
354 SVGA3DFORMAT_OP_SRGBREAD
|
355 SVGA3DFORMAT_OP_SRGBWRITE
|
356 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
357 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
361 SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10
,
362 SVGA3DFORMAT_OP_TEXTURE
|
363 SVGA3DFORMAT_OP_CUBETEXTURE
|
364 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
365 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
366 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
367 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
368 SVGA3DFORMAT_OP_SRGBREAD
|
369 SVGA3DFORMAT_OP_SRGBWRITE
|
370 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
371 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
374 * SVGA3D_V8U8 is unsupported; it has no corresponding
375 * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPU8V8 should be used instead.
379 SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8
,
380 SVGA3DFORMAT_OP_TEXTURE
|
381 SVGA3DFORMAT_OP_CUBETEXTURE
|
382 SVGA3DFORMAT_OP_BUMPMAP
|
383 SVGA3DFORMAT_OP_OFFSCREENPLAIN
387 SVGA3D_DEVCAP_SURFACEFMT_CxV8U8
,
388 SVGA3DFORMAT_OP_TEXTURE
|
389 SVGA3DFORMAT_OP_BUMPMAP
|
390 SVGA3DFORMAT_OP_OFFSCREENPLAIN
393 * SVGA3D_X8L8V8U8 is unsupported; it has no corresponding
394 * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
398 SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10
,
399 SVGA3DFORMAT_OP_TEXTURE
|
400 SVGA3DFORMAT_OP_BUMPMAP
|
401 SVGA3DFORMAT_OP_OFFSCREENPLAIN
405 SVGA3D_DEVCAP_SURFACEFMT_ALPHA8
,
406 SVGA3DFORMAT_OP_TEXTURE
|
407 SVGA3DFORMAT_OP_CUBETEXTURE
|
408 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
409 SVGA3DFORMAT_OP_OFFSCREENPLAIN
413 SVGA3D_DEVCAP_SURFACEFMT_R_S10E5
,
414 SVGA3DFORMAT_OP_TEXTURE
|
415 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
416 SVGA3DFORMAT_OP_CUBETEXTURE
|
417 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
418 SVGA3DFORMAT_OP_SRGBREAD
|
419 SVGA3DFORMAT_OP_SRGBWRITE
|
420 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
421 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
425 SVGA3D_DEVCAP_SURFACEFMT_R_S23E8
,
426 SVGA3DFORMAT_OP_TEXTURE
|
427 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
428 SVGA3DFORMAT_OP_CUBETEXTURE
|
429 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
430 SVGA3DFORMAT_OP_SRGBREAD
|
431 SVGA3DFORMAT_OP_SRGBWRITE
|
432 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
433 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
437 SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5
,
438 SVGA3DFORMAT_OP_TEXTURE
|
439 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
440 SVGA3DFORMAT_OP_CUBETEXTURE
|
441 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
442 SVGA3DFORMAT_OP_SRGBREAD
|
443 SVGA3DFORMAT_OP_SRGBWRITE
|
444 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
445 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
449 SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8
,
450 SVGA3DFORMAT_OP_TEXTURE
|
451 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
452 SVGA3DFORMAT_OP_CUBETEXTURE
|
453 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
454 SVGA3DFORMAT_OP_SRGBREAD
|
455 SVGA3DFORMAT_OP_SRGBWRITE
|
456 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
457 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
460 * SVGA3D_BUFFER is a placeholder format for index/vertex buffers.
464 SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8
,
465 SVGA3DFORMAT_OP_ZSTENCIL
|
466 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
470 SVGA3D_DEVCAP_SURFACEFMT_V16U16
,
471 SVGA3DFORMAT_OP_TEXTURE
|
472 SVGA3DFORMAT_OP_CUBETEXTURE
|
473 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
474 SVGA3DFORMAT_OP_BUMPMAP
|
475 SVGA3DFORMAT_OP_OFFSCREENPLAIN
479 SVGA3D_DEVCAP_SURFACEFMT_G16R16
,
480 SVGA3DFORMAT_OP_TEXTURE
|
481 SVGA3DFORMAT_OP_CUBETEXTURE
|
482 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
483 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
484 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
485 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
489 SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16
,
490 SVGA3DFORMAT_OP_TEXTURE
|
491 SVGA3DFORMAT_OP_CUBETEXTURE
|
492 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
493 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
494 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
495 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
499 SVGA3D_DEVCAP_SURFACEFMT_UYVY
,
504 SVGA3D_DEVCAP_SURFACEFMT_YUY2
,
509 SVGA3D_DEVCAP_SURFACEFMT_NV12
,
514 SVGA3D_DEVCAP_SURFACEFMT_AYUV
,
519 SVGA3D_DEVCAP_SURFACEFMT_BC4_UNORM
,
524 SVGA3D_DEVCAP_SURFACEFMT_BC5_UNORM
,
529 SVGA3D_DEVCAP_SURFACEFMT_Z_DF16
,
534 SVGA3D_DEVCAP_SURFACEFMT_Z_DF24
,
539 SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT
,
546 * Get format capabilities from the host. It takes in consideration
547 * deprecated/unsupported formats, and formats which are implicitely assumed to
548 * be supported when the host does not provide an explicit capability entry.
551 svga_get_format_cap(struct svga_screen
*ss
,
552 SVGA3dSurfaceFormat format
,
553 SVGA3dSurfaceFormatCaps
*caps
)
555 const struct format_cap
*entry
;
557 for (entry
= format_cap_table
; entry
< format_cap_table
+ Elements(format_cap_table
); ++entry
) {
558 if (entry
->format
== format
) {
559 struct svga_winsys_screen
*sws
= ss
->sws
;
560 SVGA3dDevCapResult result
;
562 if (sws
->get_cap(sws
, entry
->index
, &result
)) {
563 /* Explicitly advertised format */
564 caps
->value
= result
.u
;
566 /* Implicitly advertised format -- use default caps */
567 caps
->value
= entry
->defaultOperations
;
574 /* Unsupported format */