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 /* sRGB required for GL2.1 */
52 case PIPE_FORMAT_B8G8R8A8_SRGB
:
53 return SVGA3D_A8R8G8B8
;
54 case PIPE_FORMAT_DXT1_SRGB
:
55 case PIPE_FORMAT_DXT1_SRGBA
:
57 case PIPE_FORMAT_DXT3_SRGBA
:
59 case PIPE_FORMAT_DXT5_SRGBA
:
62 case PIPE_FORMAT_B5G6R5_UNORM
:
64 case PIPE_FORMAT_B5G5R5A1_UNORM
:
65 return SVGA3D_A1R5G5B5
;
66 case PIPE_FORMAT_B4G4R4A4_UNORM
:
67 return SVGA3D_A4R4G4B4
;
69 case PIPE_FORMAT_R16G16B16A16_UNORM
:
70 return SVGA3D_A16B16G16R16
;
72 case PIPE_FORMAT_Z16_UNORM
:
73 return bind
& PIPE_BIND_SAMPLER_VIEW
? ss
->depth
.z16
: SVGA3D_Z_D16
;
74 case PIPE_FORMAT_S8_UINT_Z24_UNORM
:
75 return bind
& PIPE_BIND_SAMPLER_VIEW
? ss
->depth
.s8z24
: SVGA3D_Z_D24S8
;
76 case PIPE_FORMAT_X8Z24_UNORM
:
77 return bind
& PIPE_BIND_SAMPLER_VIEW
? ss
->depth
.x8z24
: SVGA3D_Z_D24X8
;
79 case PIPE_FORMAT_A8_UNORM
:
81 case PIPE_FORMAT_L8_UNORM
:
82 return SVGA3D_LUMINANCE8
;
84 case PIPE_FORMAT_DXT1_RGB
:
85 case PIPE_FORMAT_DXT1_RGBA
:
87 case PIPE_FORMAT_DXT3_RGBA
:
89 case PIPE_FORMAT_DXT5_RGBA
:
92 /* Float formats (only 1, 2 and 4-component formats supported) */
93 case PIPE_FORMAT_R32_FLOAT
:
94 return SVGA3D_R_S23E8
;
95 case PIPE_FORMAT_R32G32_FLOAT
:
96 return SVGA3D_RG_S23E8
;
97 case PIPE_FORMAT_R32G32B32A32_FLOAT
:
98 return SVGA3D_ARGB_S23E8
;
99 case PIPE_FORMAT_R16_FLOAT
:
100 return SVGA3D_R_S10E5
;
101 case PIPE_FORMAT_R16G16_FLOAT
:
102 return SVGA3D_RG_S10E5
;
103 case PIPE_FORMAT_R16G16B16A16_FLOAT
:
104 return SVGA3D_ARGB_S10E5
;
106 case PIPE_FORMAT_Z32_UNORM
:
107 /* SVGA3D_Z_D32 is not yet unsupported */
110 return SVGA3D_FORMAT_INVALID
;
116 * Format capability description entry.
119 SVGA3dSurfaceFormat format
;
122 * Capability index corresponding to the format.
124 SVGA3dDevCapIndex index
;
127 * Mask of supported SVGA3dFormatOp operations, to be inferred when the
128 * capability is not explicitly present.
130 uint32 defaultOperations
;
135 * Format capability description table.
137 * Ordererd by increasing SVGA3dSurfaceFormat value, but with gaps.
139 static const struct format_cap format_cap_table
[] = {
142 SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8
,
143 SVGA3DFORMAT_OP_TEXTURE
|
144 SVGA3DFORMAT_OP_CUBETEXTURE
|
145 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
146 SVGA3DFORMAT_OP_DISPLAYMODE
|
147 SVGA3DFORMAT_OP_3DACCELERATION
|
148 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
149 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
150 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
151 SVGA3DFORMAT_OP_SRGBREAD
|
152 SVGA3DFORMAT_OP_SRGBWRITE
|
153 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
154 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
158 SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8
,
159 SVGA3DFORMAT_OP_TEXTURE
|
160 SVGA3DFORMAT_OP_CUBETEXTURE
|
161 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
162 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
163 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
164 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
165 SVGA3DFORMAT_OP_SRGBREAD
|
166 SVGA3DFORMAT_OP_SRGBWRITE
|
167 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
168 SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET
|
169 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
173 SVGA3D_DEVCAP_SURFACEFMT_R5G6B5
,
174 SVGA3DFORMAT_OP_TEXTURE
|
175 SVGA3DFORMAT_OP_CUBETEXTURE
|
176 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
177 SVGA3DFORMAT_OP_DISPLAYMODE
|
178 SVGA3DFORMAT_OP_3DACCELERATION
|
179 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
180 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
181 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
182 SVGA3DFORMAT_OP_SRGBREAD
|
183 SVGA3DFORMAT_OP_SRGBWRITE
|
184 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
185 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
189 SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5
,
190 SVGA3DFORMAT_OP_TEXTURE
|
191 SVGA3DFORMAT_OP_CUBETEXTURE
|
192 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
193 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
194 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
195 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
196 SVGA3DFORMAT_OP_SRGBREAD
|
197 SVGA3DFORMAT_OP_SRGBWRITE
|
198 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
199 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
203 SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5
,
204 SVGA3DFORMAT_OP_TEXTURE
|
205 SVGA3DFORMAT_OP_CUBETEXTURE
|
206 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
207 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
208 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
209 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
210 SVGA3DFORMAT_OP_SRGBREAD
|
211 SVGA3DFORMAT_OP_SRGBWRITE
|
212 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
213 SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET
|
214 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
218 SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4
,
219 SVGA3DFORMAT_OP_TEXTURE
|
220 SVGA3DFORMAT_OP_CUBETEXTURE
|
221 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
222 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
223 SVGA3DFORMAT_OP_SRGBREAD
|
224 SVGA3DFORMAT_OP_SRGBWRITE
|
225 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
226 SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET
|
227 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
230 * SVGA3D_Z_D32 is not yet supported, and has no corresponding
235 SVGA3D_DEVCAP_SURFACEFMT_Z_D16
,
236 SVGA3DFORMAT_OP_ZSTENCIL
|
237 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
241 SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8
,
242 SVGA3DFORMAT_OP_ZSTENCIL
|
243 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
248 SVGA3DFORMAT_OP_ZSTENCIL
|
249 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
253 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8
,
254 SVGA3DFORMAT_OP_TEXTURE
|
255 SVGA3DFORMAT_OP_CUBETEXTURE
|
256 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
257 SVGA3DFORMAT_OP_OFFSCREENPLAIN
260 SVGA3D_LUMINANCE8_ALPHA8
,
261 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8
,
262 SVGA3DFORMAT_OP_TEXTURE
|
263 SVGA3DFORMAT_OP_CUBETEXTURE
|
264 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
265 SVGA3DFORMAT_OP_OFFSCREENPLAIN
268 * SVGA3D_LUMINANCE4_ALPHA4 is not supported, and has no corresponding
273 SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16
,
274 SVGA3DFORMAT_OP_TEXTURE
|
275 SVGA3DFORMAT_OP_CUBETEXTURE
|
276 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
277 SVGA3DFORMAT_OP_OFFSCREENPLAIN
281 SVGA3D_DEVCAP_SURFACEFMT_DXT1
,
282 SVGA3DFORMAT_OP_TEXTURE
|
283 SVGA3DFORMAT_OP_SRGBREAD
|
284 SVGA3DFORMAT_OP_CUBETEXTURE
|
285 SVGA3DFORMAT_OP_OFFSCREENPLAIN
289 SVGA3D_DEVCAP_SURFACEFMT_DXT2
,
290 SVGA3DFORMAT_OP_TEXTURE
|
291 SVGA3DFORMAT_OP_SRGBREAD
|
292 SVGA3DFORMAT_OP_CUBETEXTURE
|
293 SVGA3DFORMAT_OP_OFFSCREENPLAIN
297 SVGA3D_DEVCAP_SURFACEFMT_DXT3
,
298 SVGA3DFORMAT_OP_TEXTURE
|
299 SVGA3DFORMAT_OP_SRGBREAD
|
300 SVGA3DFORMAT_OP_CUBETEXTURE
|
301 SVGA3DFORMAT_OP_OFFSCREENPLAIN
305 SVGA3D_DEVCAP_SURFACEFMT_DXT4
,
306 SVGA3DFORMAT_OP_TEXTURE
|
307 SVGA3DFORMAT_OP_SRGBREAD
|
308 SVGA3DFORMAT_OP_CUBETEXTURE
|
309 SVGA3DFORMAT_OP_OFFSCREENPLAIN
313 SVGA3D_DEVCAP_SURFACEFMT_DXT5
,
314 SVGA3DFORMAT_OP_TEXTURE
|
315 SVGA3DFORMAT_OP_SRGBREAD
|
316 SVGA3DFORMAT_OP_CUBETEXTURE
|
317 SVGA3DFORMAT_OP_OFFSCREENPLAIN
321 SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8
,
322 SVGA3DFORMAT_OP_TEXTURE
|
323 SVGA3DFORMAT_OP_CUBETEXTURE
|
324 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
325 SVGA3DFORMAT_OP_BUMPMAP
|
326 SVGA3DFORMAT_OP_OFFSCREENPLAIN
329 * SVGA3D_BUMPL6V5U5 is unsupported; it has no corresponding
334 SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8
,
335 SVGA3DFORMAT_OP_TEXTURE
|
336 SVGA3DFORMAT_OP_CUBETEXTURE
|
337 SVGA3DFORMAT_OP_BUMPMAP
|
338 SVGA3DFORMAT_OP_OFFSCREENPLAIN
341 * SVGA3D_BUMPL8V8U8 is unsupported; it has no corresponding
342 * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
346 SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5
,
347 SVGA3DFORMAT_OP_TEXTURE
|
348 SVGA3DFORMAT_OP_CUBETEXTURE
|
349 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
350 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
351 SVGA3DFORMAT_OP_SRGBREAD
|
352 SVGA3DFORMAT_OP_SRGBWRITE
|
353 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
354 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
358 SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8
,
359 SVGA3DFORMAT_OP_TEXTURE
|
360 SVGA3DFORMAT_OP_CUBETEXTURE
|
361 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
362 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
363 SVGA3DFORMAT_OP_SRGBREAD
|
364 SVGA3DFORMAT_OP_SRGBWRITE
|
365 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
366 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
370 SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10
,
371 SVGA3DFORMAT_OP_TEXTURE
|
372 SVGA3DFORMAT_OP_CUBETEXTURE
|
373 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
374 SVGA3DFORMAT_OP_CONVERT_TO_ARGB
|
375 SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
|
376 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
377 SVGA3DFORMAT_OP_SRGBREAD
|
378 SVGA3DFORMAT_OP_SRGBWRITE
|
379 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
380 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
383 * SVGA3D_V8U8 is unsupported; it has no corresponding
384 * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPU8V8 should be used instead.
388 SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8
,
389 SVGA3DFORMAT_OP_TEXTURE
|
390 SVGA3DFORMAT_OP_CUBETEXTURE
|
391 SVGA3DFORMAT_OP_BUMPMAP
|
392 SVGA3DFORMAT_OP_OFFSCREENPLAIN
396 SVGA3D_DEVCAP_SURFACEFMT_CxV8U8
,
397 SVGA3DFORMAT_OP_TEXTURE
|
398 SVGA3DFORMAT_OP_BUMPMAP
|
399 SVGA3DFORMAT_OP_OFFSCREENPLAIN
402 * SVGA3D_X8L8V8U8 is unsupported; it has no corresponding
403 * SVGA3D_DEVCAP_xxx. SVGA3D_BUMPX8L8V8U8 should be used instead.
407 SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10
,
408 SVGA3DFORMAT_OP_TEXTURE
|
409 SVGA3DFORMAT_OP_BUMPMAP
|
410 SVGA3DFORMAT_OP_OFFSCREENPLAIN
414 SVGA3D_DEVCAP_SURFACEFMT_ALPHA8
,
415 SVGA3DFORMAT_OP_TEXTURE
|
416 SVGA3DFORMAT_OP_CUBETEXTURE
|
417 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
418 SVGA3DFORMAT_OP_OFFSCREENPLAIN
422 SVGA3D_DEVCAP_SURFACEFMT_R_S10E5
,
423 SVGA3DFORMAT_OP_TEXTURE
|
424 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
425 SVGA3DFORMAT_OP_CUBETEXTURE
|
426 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
427 SVGA3DFORMAT_OP_SRGBREAD
|
428 SVGA3DFORMAT_OP_SRGBWRITE
|
429 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
430 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
434 SVGA3D_DEVCAP_SURFACEFMT_R_S23E8
,
435 SVGA3DFORMAT_OP_TEXTURE
|
436 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
437 SVGA3DFORMAT_OP_CUBETEXTURE
|
438 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
439 SVGA3DFORMAT_OP_SRGBREAD
|
440 SVGA3DFORMAT_OP_SRGBWRITE
|
441 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
442 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
446 SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5
,
447 SVGA3DFORMAT_OP_TEXTURE
|
448 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
449 SVGA3DFORMAT_OP_CUBETEXTURE
|
450 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
451 SVGA3DFORMAT_OP_SRGBREAD
|
452 SVGA3DFORMAT_OP_SRGBWRITE
|
453 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
454 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
458 SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8
,
459 SVGA3DFORMAT_OP_TEXTURE
|
460 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
461 SVGA3DFORMAT_OP_CUBETEXTURE
|
462 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
463 SVGA3DFORMAT_OP_SRGBREAD
|
464 SVGA3DFORMAT_OP_SRGBWRITE
|
465 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
466 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
469 * SVGA3D_BUFFER is a placeholder format for index/vertex buffers.
473 SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8
,
474 SVGA3DFORMAT_OP_ZSTENCIL
|
475 SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
479 SVGA3D_DEVCAP_SURFACEFMT_V16U16
,
480 SVGA3DFORMAT_OP_TEXTURE
|
481 SVGA3DFORMAT_OP_CUBETEXTURE
|
482 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
483 SVGA3DFORMAT_OP_BUMPMAP
|
484 SVGA3DFORMAT_OP_OFFSCREENPLAIN
488 SVGA3D_DEVCAP_SURFACEFMT_G16R16
,
489 SVGA3DFORMAT_OP_TEXTURE
|
490 SVGA3DFORMAT_OP_CUBETEXTURE
|
491 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
492 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
493 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
494 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
498 SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16
,
499 SVGA3DFORMAT_OP_TEXTURE
|
500 SVGA3DFORMAT_OP_CUBETEXTURE
|
501 SVGA3DFORMAT_OP_VOLUMETEXTURE
|
502 SVGA3DFORMAT_OP_OFFSCREENPLAIN
|
503 SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
|
504 SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
508 SVGA3D_DEVCAP_SURFACEFMT_UYVY
,
513 SVGA3D_DEVCAP_SURFACEFMT_YUY2
,
518 SVGA3D_DEVCAP_SURFACEFMT_NV12
,
523 SVGA3D_DEVCAP_SURFACEFMT_AYUV
,
528 SVGA3D_DEVCAP_SURFACEFMT_Z_DF16
,
533 SVGA3D_DEVCAP_SURFACEFMT_Z_DF24
,
538 SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT
,
545 * Get format capabilities from the host. It takes in consideration
546 * deprecated/unsupported formats, and formats which are implicitely assumed to
547 * be supported when the host does not provide an explicit capability entry.
550 svga_get_format_cap(struct svga_screen
*ss
,
551 SVGA3dSurfaceFormat format
,
552 SVGA3dSurfaceFormatCaps
*caps
)
554 const struct format_cap
*entry
;
556 for (entry
= format_cap_table
; entry
< format_cap_table
+ Elements(format_cap_table
); ++entry
) {
557 if (entry
->format
== format
) {
558 struct svga_winsys_screen
*sws
= ss
->sws
;
559 SVGA3dDevCapResult result
;
561 if (sws
->get_cap(sws
, entry
->index
, &result
)) {
562 /* Explicitly advertised format */
563 caps
->value
= result
.u
;
565 /* Implicitly advertised format -- use default caps */
566 caps
->value
= entry
->defaultOperations
;
573 /* Unsupported format */
579 * Return block size and bytes per block for the given SVGA3D format.
580 * block_width and block_height are one for uncompressed formats and
581 * greater than one for compressed formats.
582 * Note: we don't handle formats that are unsupported, according to
583 * the format_cap_table above.
586 svga_format_size(SVGA3dSurfaceFormat format
,
587 unsigned *block_width
,
588 unsigned *block_height
,
589 unsigned *bytes_per_block
)
591 *block_width
= *block_height
= 1;
594 case SVGA3D_X8R8G8B8
:
595 case SVGA3D_A8R8G8B8
:
596 *bytes_per_block
= 4;
600 case SVGA3D_X1R5G5B5
:
601 case SVGA3D_A1R5G5B5
:
602 case SVGA3D_A4R4G4B4
:
603 *bytes_per_block
= 2;
607 *bytes_per_block
= 4;
611 *bytes_per_block
= 2;
615 *bytes_per_block
= 4;
619 *bytes_per_block
= 2;
622 case SVGA3D_LUMINANCE8
:
623 case SVGA3D_LUMINANCE4_ALPHA4
:
624 *bytes_per_block
= 1;
627 case SVGA3D_LUMINANCE16
:
628 case SVGA3D_LUMINANCE8_ALPHA8
:
629 *bytes_per_block
= 2;
634 *block_width
= *block_height
= 4;
635 *bytes_per_block
= 8;
641 *block_width
= *block_height
= 4;
642 *bytes_per_block
= 16;
645 case SVGA3D_BUMPU8V8
:
646 case SVGA3D_BUMPL6V5U5
:
647 *bytes_per_block
= 2;
650 case SVGA3D_BUMPX8L8V8U8
:
651 *bytes_per_block
= 4;
654 case SVGA3D_ARGB_S10E5
:
655 *bytes_per_block
= 8;
658 case SVGA3D_ARGB_S23E8
:
659 *bytes_per_block
= 16;
662 case SVGA3D_A2R10G10B10
:
663 *bytes_per_block
= 4;
666 case SVGA3D_Q8W8V8U8
:
667 *bytes_per_block
= 4;
671 *bytes_per_block
= 2;
674 case SVGA3D_X8L8V8U8
:
675 case SVGA3D_A2W10V10U10
:
676 *bytes_per_block
= 4;
680 *bytes_per_block
= 1;
684 *bytes_per_block
= 2;
687 *bytes_per_block
= 4;
689 case SVGA3D_RG_S10E5
:
690 *bytes_per_block
= 4;
692 case SVGA3D_RG_S23E8
:
693 *bytes_per_block
= 8;
697 *bytes_per_block
= 1;
701 *bytes_per_block
= 4;
705 *bytes_per_block
= 4;
709 *bytes_per_block
= 4;
712 case SVGA3D_A16B16G16R16
:
713 *bytes_per_block
= 8;
717 *bytes_per_block
= 2;
720 *bytes_per_block
= 4;
722 case SVGA3D_Z_D24S8_INT
:
723 *bytes_per_block
= 4;
727 debug_printf("format %u\n", (unsigned) format
);
728 assert(!"unexpected format in svga_format_size()");
729 *bytes_per_block
= 4;