Loading...
1/**************************************************************************
2 *
3 * Copyright © 2008-2015 VMware, Inc., Palo Alto, CA., USA
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
22 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24 * USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 **************************************************************************/
27
28#include <linux/kernel.h>
29
30#ifdef __KERNEL__
31
32#include <drm/vmwgfx_drm.h>
33#define surf_size_struct struct drm_vmw_size
34
35#else /* __KERNEL__ */
36
37#ifndef ARRAY_SIZE
38#define ARRAY_SIZE(_A) (sizeof(_A) / sizeof((_A)[0]))
39#endif /* ARRAY_SIZE */
40
41#define max_t(type, x, y) ((x) > (y) ? (x) : (y))
42#define surf_size_struct SVGA3dSize
43#define u32 uint32
44
45#endif /* __KERNEL__ */
46
47#include "svga3d_reg.h"
48
49/*
50 * enum svga3d_block_desc describes the active data channels in a block.
51 *
52 * There can be at-most four active channels in a block:
53 * 1. Red, bump W, luminance and depth are stored in the first channel.
54 * 2. Green, bump V and stencil are stored in the second channel.
55 * 3. Blue and bump U are stored in the third channel.
56 * 4. Alpha and bump Q are stored in the fourth channel.
57 *
58 * Block channels can be used to store compressed and buffer data:
59 * 1. For compressed formats, only the data channel is used and its size
60 * is equal to that of a singular block in the compression scheme.
61 * 2. For buffer formats, only the data channel is used and its size is
62 * exactly one byte in length.
63 * 3. In each case the bit depth represent the size of a singular block.
64 *
65 * Note: Compressed and IEEE formats do not use the bitMask structure.
66 */
67
68enum svga3d_block_desc {
69 SVGA3DBLOCKDESC_NONE = 0, /* No channels are active */
70 SVGA3DBLOCKDESC_BLUE = 1 << 0, /* Block with red channel
71 data */
72 SVGA3DBLOCKDESC_U = 1 << 0, /* Block with bump U channel
73 data */
74 SVGA3DBLOCKDESC_UV_VIDEO = 1 << 7, /* Block with alternating video
75 U and V */
76 SVGA3DBLOCKDESC_GREEN = 1 << 1, /* Block with green channel
77 data */
78 SVGA3DBLOCKDESC_V = 1 << 1, /* Block with bump V channel
79 data */
80 SVGA3DBLOCKDESC_STENCIL = 1 << 1, /* Block with a stencil
81 channel */
82 SVGA3DBLOCKDESC_RED = 1 << 2, /* Block with blue channel
83 data */
84 SVGA3DBLOCKDESC_W = 1 << 2, /* Block with bump W channel
85 data */
86 SVGA3DBLOCKDESC_LUMINANCE = 1 << 2, /* Block with luminance channel
87 data */
88 SVGA3DBLOCKDESC_Y = 1 << 2, /* Block with video luminance
89 data */
90 SVGA3DBLOCKDESC_DEPTH = 1 << 2, /* Block with depth channel */
91 SVGA3DBLOCKDESC_ALPHA = 1 << 3, /* Block with an alpha
92 channel */
93 SVGA3DBLOCKDESC_Q = 1 << 3, /* Block with bump Q channel
94 data */
95 SVGA3DBLOCKDESC_BUFFER = 1 << 4, /* Block stores 1 byte of
96 data */
97 SVGA3DBLOCKDESC_COMPRESSED = 1 << 5, /* Block stores n bytes of
98 data depending on the
99 compression method used */
100 SVGA3DBLOCKDESC_IEEE_FP = 1 << 6, /* Block stores data in an IEEE
101 floating point
102 representation in
103 all channels */
104 SVGA3DBLOCKDESC_PLANAR_YUV = 1 << 8, /* Three separate blocks store
105 data. */
106 SVGA3DBLOCKDESC_U_VIDEO = 1 << 9, /* Block with U video data */
107 SVGA3DBLOCKDESC_V_VIDEO = 1 << 10, /* Block with V video data */
108 SVGA3DBLOCKDESC_EXP = 1 << 11, /* Shared exponent */
109 SVGA3DBLOCKDESC_SRGB = 1 << 12, /* Data is in sRGB format */
110 SVGA3DBLOCKDESC_2PLANAR_YUV = 1 << 13, /* 2 planes of Y, UV,
111 e.g., NV12. */
112 SVGA3DBLOCKDESC_3PLANAR_YUV = 1 << 14, /* 3 planes of separate
113 Y, U, V, e.g., YV12. */
114
115 SVGA3DBLOCKDESC_RG = SVGA3DBLOCKDESC_RED |
116 SVGA3DBLOCKDESC_GREEN,
117 SVGA3DBLOCKDESC_RGB = SVGA3DBLOCKDESC_RG |
118 SVGA3DBLOCKDESC_BLUE,
119 SVGA3DBLOCKDESC_RGB_SRGB = SVGA3DBLOCKDESC_RGB |
120 SVGA3DBLOCKDESC_SRGB,
121 SVGA3DBLOCKDESC_RGBA = SVGA3DBLOCKDESC_RGB |
122 SVGA3DBLOCKDESC_ALPHA,
123 SVGA3DBLOCKDESC_RGBA_SRGB = SVGA3DBLOCKDESC_RGBA |
124 SVGA3DBLOCKDESC_SRGB,
125 SVGA3DBLOCKDESC_UV = SVGA3DBLOCKDESC_U |
126 SVGA3DBLOCKDESC_V,
127 SVGA3DBLOCKDESC_UVL = SVGA3DBLOCKDESC_UV |
128 SVGA3DBLOCKDESC_LUMINANCE,
129 SVGA3DBLOCKDESC_UVW = SVGA3DBLOCKDESC_UV |
130 SVGA3DBLOCKDESC_W,
131 SVGA3DBLOCKDESC_UVWA = SVGA3DBLOCKDESC_UVW |
132 SVGA3DBLOCKDESC_ALPHA,
133 SVGA3DBLOCKDESC_UVWQ = SVGA3DBLOCKDESC_U |
134 SVGA3DBLOCKDESC_V |
135 SVGA3DBLOCKDESC_W |
136 SVGA3DBLOCKDESC_Q,
137 SVGA3DBLOCKDESC_LA = SVGA3DBLOCKDESC_LUMINANCE |
138 SVGA3DBLOCKDESC_ALPHA,
139 SVGA3DBLOCKDESC_R_FP = SVGA3DBLOCKDESC_RED |
140 SVGA3DBLOCKDESC_IEEE_FP,
141 SVGA3DBLOCKDESC_RG_FP = SVGA3DBLOCKDESC_R_FP |
142 SVGA3DBLOCKDESC_GREEN,
143 SVGA3DBLOCKDESC_RGB_FP = SVGA3DBLOCKDESC_RG_FP |
144 SVGA3DBLOCKDESC_BLUE,
145 SVGA3DBLOCKDESC_RGBA_FP = SVGA3DBLOCKDESC_RGB_FP |
146 SVGA3DBLOCKDESC_ALPHA,
147 SVGA3DBLOCKDESC_DS = SVGA3DBLOCKDESC_DEPTH |
148 SVGA3DBLOCKDESC_STENCIL,
149 SVGA3DBLOCKDESC_YUV = SVGA3DBLOCKDESC_UV_VIDEO |
150 SVGA3DBLOCKDESC_Y,
151 SVGA3DBLOCKDESC_AYUV = SVGA3DBLOCKDESC_ALPHA |
152 SVGA3DBLOCKDESC_Y |
153 SVGA3DBLOCKDESC_U_VIDEO |
154 SVGA3DBLOCKDESC_V_VIDEO,
155 SVGA3DBLOCKDESC_RGBE = SVGA3DBLOCKDESC_RGB |
156 SVGA3DBLOCKDESC_EXP,
157 SVGA3DBLOCKDESC_COMPRESSED_SRGB = SVGA3DBLOCKDESC_COMPRESSED |
158 SVGA3DBLOCKDESC_SRGB,
159 SVGA3DBLOCKDESC_NV12 = SVGA3DBLOCKDESC_PLANAR_YUV |
160 SVGA3DBLOCKDESC_2PLANAR_YUV,
161 SVGA3DBLOCKDESC_YV12 = SVGA3DBLOCKDESC_PLANAR_YUV |
162 SVGA3DBLOCKDESC_3PLANAR_YUV,
163};
164
165/*
166 * SVGA3dSurfaceDesc describes the actual pixel data.
167 *
168 * This structure provides the following information:
169 * 1. Block description.
170 * 2. Dimensions of a block in the surface.
171 * 3. Size of block in bytes.
172 * 4. Bit depth of the pixel data.
173 * 5. Channel bit depths and masks (if applicable).
174 */
175struct svga3d_channel_def {
176 union {
177 u8 blue;
178 u8 u;
179 u8 uv_video;
180 u8 u_video;
181 };
182 union {
183 u8 green;
184 u8 v;
185 u8 stencil;
186 u8 v_video;
187 };
188 union {
189 u8 red;
190 u8 w;
191 u8 luminance;
192 u8 y;
193 u8 depth;
194 u8 data;
195 };
196 union {
197 u8 alpha;
198 u8 q;
199 u8 exp;
200 };
201};
202
203struct svga3d_surface_desc {
204 SVGA3dSurfaceFormat format;
205 enum svga3d_block_desc block_desc;
206 surf_size_struct block_size;
207 u32 bytes_per_block;
208 u32 pitch_bytes_per_block;
209
210 u32 total_bit_depth;
211 struct svga3d_channel_def bit_depth;
212 struct svga3d_channel_def bit_offset;
213};
214
215static const struct svga3d_surface_desc svga3d_surface_descs[] = {
216 {SVGA3D_FORMAT_INVALID, SVGA3DBLOCKDESC_NONE,
217 {1, 1, 1}, 0, 0,
218 0, {{0}, {0}, {0}, {0}},
219 {{0}, {0}, {0}, {0}}},
220
221 {SVGA3D_X8R8G8B8, SVGA3DBLOCKDESC_RGB,
222 {1, 1, 1}, 4, 4,
223 24, {{8}, {8}, {8}, {0}},
224 {{0}, {8}, {16}, {24}}},
225
226 {SVGA3D_A8R8G8B8, SVGA3DBLOCKDESC_RGBA,
227 {1, 1, 1}, 4, 4,
228 32, {{8}, {8}, {8}, {8}},
229 {{0}, {8}, {16}, {24}}},
230
231 {SVGA3D_R5G6B5, SVGA3DBLOCKDESC_RGB,
232 {1, 1, 1}, 2, 2,
233 16, {{5}, {6}, {5}, {0}},
234 {{0}, {5}, {11}, {0}}},
235
236 {SVGA3D_X1R5G5B5, SVGA3DBLOCKDESC_RGB,
237 {1, 1, 1}, 2, 2,
238 15, {{5}, {5}, {5}, {0}},
239 {{0}, {5}, {10}, {0}}},
240
241 {SVGA3D_A1R5G5B5, SVGA3DBLOCKDESC_RGBA,
242 {1, 1, 1}, 2, 2,
243 16, {{5}, {5}, {5}, {1}},
244 {{0}, {5}, {10}, {15}}},
245
246 {SVGA3D_A4R4G4B4, SVGA3DBLOCKDESC_RGBA,
247 {1, 1, 1}, 2, 2,
248 16, {{4}, {4}, {4}, {4}},
249 {{0}, {4}, {8}, {12}}},
250
251 {SVGA3D_Z_D32, SVGA3DBLOCKDESC_DEPTH,
252 {1, 1, 1}, 4, 4,
253 32, {{0}, {0}, {32}, {0}},
254 {{0}, {0}, {0}, {0}}},
255
256 {SVGA3D_Z_D16, SVGA3DBLOCKDESC_DEPTH,
257 {1, 1, 1}, 2, 2,
258 16, {{0}, {0}, {16}, {0}},
259 {{0}, {0}, {0}, {0}}},
260
261 {SVGA3D_Z_D24S8, SVGA3DBLOCKDESC_DS,
262 {1, 1, 1}, 4, 4,
263 32, {{0}, {8}, {24}, {0}},
264 {{0}, {24}, {0}, {0}}},
265
266 {SVGA3D_Z_D15S1, SVGA3DBLOCKDESC_DS,
267 {1, 1, 1}, 2, 2,
268 16, {{0}, {1}, {15}, {0}},
269 {{0}, {15}, {0}, {0}}},
270
271 {SVGA3D_LUMINANCE8, SVGA3DBLOCKDESC_LUMINANCE,
272 {1, 1, 1}, 1, 1,
273 8, {{0}, {0}, {8}, {0}},
274 {{0}, {0}, {0}, {0}}},
275
276 {SVGA3D_LUMINANCE4_ALPHA4, SVGA3DBLOCKDESC_LA,
277 {1 , 1, 1}, 1, 1,
278 8, {{0}, {0}, {4}, {4}},
279 {{0}, {0}, {0}, {4}}},
280
281 {SVGA3D_LUMINANCE16, SVGA3DBLOCKDESC_LUMINANCE,
282 {1, 1, 1}, 2, 2,
283 16, {{0}, {0}, {16}, {0}},
284 {{0}, {0}, {0}, {0}}},
285
286 {SVGA3D_LUMINANCE8_ALPHA8, SVGA3DBLOCKDESC_LA,
287 {1, 1, 1}, 2, 2,
288 16, {{0}, {0}, {8}, {8}},
289 {{0}, {0}, {0}, {8}}},
290
291 {SVGA3D_DXT1, SVGA3DBLOCKDESC_COMPRESSED,
292 {4, 4, 1}, 8, 8,
293 64, {{0}, {0}, {64}, {0}},
294 {{0}, {0}, {0}, {0}}},
295
296 {SVGA3D_DXT2, SVGA3DBLOCKDESC_COMPRESSED,
297 {4, 4, 1}, 16, 16,
298 128, {{0}, {0}, {128}, {0}},
299 {{0}, {0}, {0}, {0}}},
300
301 {SVGA3D_DXT3, SVGA3DBLOCKDESC_COMPRESSED,
302 {4, 4, 1}, 16, 16,
303 128, {{0}, {0}, {128}, {0}},
304 {{0}, {0}, {0}, {0}}},
305
306 {SVGA3D_DXT4, SVGA3DBLOCKDESC_COMPRESSED,
307 {4, 4, 1}, 16, 16,
308 128, {{0}, {0}, {128}, {0}},
309 {{0}, {0}, {0}, {0}}},
310
311 {SVGA3D_DXT5, SVGA3DBLOCKDESC_COMPRESSED,
312 {4, 4, 1}, 16, 16,
313 128, {{0}, {0}, {128}, {0}},
314 {{0}, {0}, {0}, {0}}},
315
316 {SVGA3D_BUMPU8V8, SVGA3DBLOCKDESC_UV,
317 {1, 1, 1}, 2, 2,
318 16, {{0}, {0}, {8}, {8}},
319 {{0}, {0}, {0}, {8}}},
320
321 {SVGA3D_BUMPL6V5U5, SVGA3DBLOCKDESC_UVL,
322 {1, 1, 1}, 2, 2,
323 16, {{5}, {5}, {6}, {0}},
324 {{11}, {6}, {0}, {0}}},
325
326 {SVGA3D_BUMPX8L8V8U8, SVGA3DBLOCKDESC_UVL,
327 {1, 1, 1}, 4, 4,
328 32, {{8}, {8}, {8}, {0}},
329 {{16}, {8}, {0}, {0}}},
330
331 {SVGA3D_BUMPL8V8U8, SVGA3DBLOCKDESC_UVL,
332 {1, 1, 1}, 3, 3,
333 24, {{8}, {8}, {8}, {0}},
334 {{16}, {8}, {0}, {0}}},
335
336 {SVGA3D_ARGB_S10E5, SVGA3DBLOCKDESC_RGBA_FP,
337 {1, 1, 1}, 8, 8,
338 64, {{16}, {16}, {16}, {16}},
339 {{32}, {16}, {0}, {48}}},
340
341 {SVGA3D_ARGB_S23E8, SVGA3DBLOCKDESC_RGBA_FP,
342 {1, 1, 1}, 16, 16,
343 128, {{32}, {32}, {32}, {32}},
344 {{64}, {32}, {0}, {96}}},
345
346 {SVGA3D_A2R10G10B10, SVGA3DBLOCKDESC_RGBA,
347 {1, 1, 1}, 4, 4,
348 32, {{10}, {10}, {10}, {2}},
349 {{0}, {10}, {20}, {30}}},
350
351 {SVGA3D_V8U8, SVGA3DBLOCKDESC_UV,
352 {1, 1, 1}, 2, 2,
353 16, {{8}, {8}, {0}, {0}},
354 {{8}, {0}, {0}, {0}}},
355
356 {SVGA3D_Q8W8V8U8, SVGA3DBLOCKDESC_UVWQ,
357 {1, 1, 1}, 4, 4,
358 32, {{8}, {8}, {8}, {8}},
359 {{24}, {16}, {8}, {0}}},
360
361 {SVGA3D_CxV8U8, SVGA3DBLOCKDESC_UV,
362 {1, 1, 1}, 2, 2,
363 16, {{8}, {8}, {0}, {0}},
364 {{8}, {0}, {0}, {0}}},
365
366 {SVGA3D_X8L8V8U8, SVGA3DBLOCKDESC_UVL,
367 {1, 1, 1}, 4, 4,
368 24, {{8}, {8}, {8}, {0}},
369 {{16}, {8}, {0}, {0}}},
370
371 {SVGA3D_A2W10V10U10, SVGA3DBLOCKDESC_UVWA,
372 {1, 1, 1}, 4, 4,
373 32, {{10}, {10}, {10}, {2}},
374 {{0}, {10}, {20}, {30}}},
375
376 {SVGA3D_ALPHA8, SVGA3DBLOCKDESC_ALPHA,
377 {1, 1, 1}, 1, 1,
378 8, {{0}, {0}, {0}, {8}},
379 {{0}, {0}, {0}, {0}}},
380
381 {SVGA3D_R_S10E5, SVGA3DBLOCKDESC_R_FP,
382 {1, 1, 1}, 2, 2,
383 16, {{0}, {0}, {16}, {0}},
384 {{0}, {0}, {0}, {0}}},
385
386 {SVGA3D_R_S23E8, SVGA3DBLOCKDESC_R_FP,
387 {1, 1, 1}, 4, 4,
388 32, {{0}, {0}, {32}, {0}},
389 {{0}, {0}, {0}, {0}}},
390
391 {SVGA3D_RG_S10E5, SVGA3DBLOCKDESC_RG_FP,
392 {1, 1, 1}, 4, 4,
393 32, {{0}, {16}, {16}, {0}},
394 {{0}, {16}, {0}, {0}}},
395
396 {SVGA3D_RG_S23E8, SVGA3DBLOCKDESC_RG_FP,
397 {1, 1, 1}, 8, 8,
398 64, {{0}, {32}, {32}, {0}},
399 {{0}, {32}, {0}, {0}}},
400
401 {SVGA3D_BUFFER, SVGA3DBLOCKDESC_BUFFER,
402 {1, 1, 1}, 1, 1,
403 8, {{0}, {0}, {8}, {0}},
404 {{0}, {0}, {0}, {0}}},
405
406 {SVGA3D_Z_D24X8, SVGA3DBLOCKDESC_DEPTH,
407 {1, 1, 1}, 4, 4,
408 32, {{0}, {0}, {24}, {0}},
409 {{0}, {24}, {0}, {0}}},
410
411 {SVGA3D_V16U16, SVGA3DBLOCKDESC_UV,
412 {1, 1, 1}, 4, 4,
413 32, {{16}, {16}, {0}, {0}},
414 {{16}, {0}, {0}, {0}}},
415
416 {SVGA3D_G16R16, SVGA3DBLOCKDESC_RG,
417 {1, 1, 1}, 4, 4,
418 32, {{0}, {16}, {16}, {0}},
419 {{0}, {0}, {16}, {0}}},
420
421 {SVGA3D_A16B16G16R16, SVGA3DBLOCKDESC_RGBA,
422 {1, 1, 1}, 8, 8,
423 64, {{16}, {16}, {16}, {16}},
424 {{32}, {16}, {0}, {48}}},
425
426 {SVGA3D_UYVY, SVGA3DBLOCKDESC_YUV,
427 {1, 1, 1}, 2, 2,
428 16, {{8}, {0}, {8}, {0}},
429 {{0}, {0}, {8}, {0}}},
430
431 {SVGA3D_YUY2, SVGA3DBLOCKDESC_YUV,
432 {1, 1, 1}, 2, 2,
433 16, {{8}, {0}, {8}, {0}},
434 {{8}, {0}, {0}, {0}}},
435
436 {SVGA3D_NV12, SVGA3DBLOCKDESC_NV12,
437 {2, 2, 1}, 6, 2,
438 48, {{0}, {0}, {48}, {0}},
439 {{0}, {0}, {0}, {0}}},
440
441 {SVGA3D_AYUV, SVGA3DBLOCKDESC_AYUV,
442 {1, 1, 1}, 4, 4,
443 32, {{8}, {8}, {8}, {8}},
444 {{0}, {8}, {16}, {24}}},
445
446 {SVGA3D_R32G32B32A32_TYPELESS, SVGA3DBLOCKDESC_RGBA,
447 {1, 1, 1}, 16, 16,
448 128, {{32}, {32}, {32}, {32}},
449 {{64}, {32}, {0}, {96}}},
450
451 {SVGA3D_R32G32B32A32_UINT, SVGA3DBLOCKDESC_RGBA,
452 {1, 1, 1}, 16, 16,
453 128, {{32}, {32}, {32}, {32}},
454 {{64}, {32}, {0}, {96}}},
455
456 {SVGA3D_R32G32B32A32_SINT, SVGA3DBLOCKDESC_UVWQ,
457 {1, 1, 1}, 16, 16,
458 128, {{32}, {32}, {32}, {32}},
459 {{64}, {32}, {0}, {96}}},
460
461 {SVGA3D_R32G32B32_TYPELESS, SVGA3DBLOCKDESC_RGB,
462 {1, 1, 1}, 12, 12,
463 96, {{32}, {32}, {32}, {0}},
464 {{64}, {32}, {0}, {0}}},
465
466 {SVGA3D_R32G32B32_FLOAT, SVGA3DBLOCKDESC_RGB_FP,
467 {1, 1, 1}, 12, 12,
468 96, {{32}, {32}, {32}, {0}},
469 {{64}, {32}, {0}, {0}}},
470
471 {SVGA3D_R32G32B32_UINT, SVGA3DBLOCKDESC_RGB,
472 {1, 1, 1}, 12, 12,
473 96, {{32}, {32}, {32}, {0}},
474 {{64}, {32}, {0}, {0}}},
475
476 {SVGA3D_R32G32B32_SINT, SVGA3DBLOCKDESC_UVW,
477 {1, 1, 1}, 12, 12,
478 96, {{32}, {32}, {32}, {0}},
479 {{64}, {32}, {0}, {0}}},
480
481 {SVGA3D_R16G16B16A16_TYPELESS, SVGA3DBLOCKDESC_RGBA,
482 {1, 1, 1}, 8, 8,
483 64, {{16}, {16}, {16}, {16}},
484 {{32}, {16}, {0}, {48}}},
485
486 {SVGA3D_R16G16B16A16_UINT, SVGA3DBLOCKDESC_RGBA,
487 {1, 1, 1}, 8, 8,
488 64, {{16}, {16}, {16}, {16}},
489 {{32}, {16}, {0}, {48}}},
490
491 {SVGA3D_R16G16B16A16_SNORM, SVGA3DBLOCKDESC_UVWQ,
492 {1, 1, 1}, 8, 8,
493 64, {{16}, {16}, {16}, {16}},
494 {{32}, {16}, {0}, {48}}},
495
496 {SVGA3D_R16G16B16A16_SINT, SVGA3DBLOCKDESC_UVWQ,
497 {1, 1, 1}, 8, 8,
498 64, {{16}, {16}, {16}, {16}},
499 {{32}, {16}, {0}, {48}}},
500
501 {SVGA3D_R32G32_TYPELESS, SVGA3DBLOCKDESC_RG,
502 {1, 1, 1}, 8, 8,
503 64, {{0}, {32}, {32}, {0}},
504 {{0}, {32}, {0}, {0}}},
505
506 {SVGA3D_R32G32_UINT, SVGA3DBLOCKDESC_RG,
507 {1, 1, 1}, 8, 8,
508 64, {{0}, {32}, {32}, {0}},
509 {{0}, {32}, {0}, {0}}},
510
511 {SVGA3D_R32G32_SINT, SVGA3DBLOCKDESC_UV,
512 {1, 1, 1}, 8, 8,
513 64, {{0}, {32}, {32}, {0}},
514 {{0}, {32}, {0}, {0}}},
515
516 {SVGA3D_R32G8X24_TYPELESS, SVGA3DBLOCKDESC_RG,
517 {1, 1, 1}, 8, 8,
518 64, {{0}, {8}, {32}, {0}},
519 {{0}, {32}, {0}, {0}}},
520
521 {SVGA3D_D32_FLOAT_S8X24_UINT, SVGA3DBLOCKDESC_DS,
522 {1, 1, 1}, 8, 8,
523 64, {{0}, {8}, {32}, {0}},
524 {{0}, {32}, {0}, {0}}},
525
526 {SVGA3D_R32_FLOAT_X8X24_TYPELESS, SVGA3DBLOCKDESC_R_FP,
527 {1, 1, 1}, 8, 8,
528 64, {{0}, {0}, {32}, {0}},
529 {{0}, {0}, {0}, {0}}},
530
531 {SVGA3D_X32_TYPELESS_G8X24_UINT, SVGA3DBLOCKDESC_GREEN,
532 {1, 1, 1}, 8, 8,
533 64, {{0}, {8}, {0}, {0}},
534 {{0}, {32}, {0}, {0}}},
535
536 {SVGA3D_R10G10B10A2_TYPELESS, SVGA3DBLOCKDESC_RGBA,
537 {1, 1, 1}, 4, 4,
538 32, {{10}, {10}, {10}, {2}},
539 {{0}, {10}, {20}, {30}}},
540
541 {SVGA3D_R10G10B10A2_UINT, SVGA3DBLOCKDESC_RGBA,
542 {1, 1, 1}, 4, 4,
543 32, {{10}, {10}, {10}, {2}},
544 {{0}, {10}, {20}, {30}}},
545
546 {SVGA3D_R11G11B10_FLOAT, SVGA3DBLOCKDESC_RGB_FP,
547 {1, 1, 1}, 4, 4,
548 32, {{10}, {11}, {11}, {0}},
549 {{0}, {10}, {21}, {0}}},
550
551 {SVGA3D_R8G8B8A8_TYPELESS, SVGA3DBLOCKDESC_RGBA,
552 {1, 1, 1}, 4, 4,
553 32, {{8}, {8}, {8}, {8}},
554 {{16}, {8}, {0}, {24}}},
555
556 {SVGA3D_R8G8B8A8_UNORM, SVGA3DBLOCKDESC_RGBA,
557 {1, 1, 1}, 4, 4,
558 32, {{8}, {8}, {8}, {8}},
559 {{16}, {8}, {0}, {24}}},
560
561 {SVGA3D_R8G8B8A8_UNORM_SRGB, SVGA3DBLOCKDESC_RGBA_SRGB,
562 {1, 1, 1}, 4, 4,
563 32, {{8}, {8}, {8}, {8}},
564 {{16}, {8}, {0}, {24}}},
565
566 {SVGA3D_R8G8B8A8_UINT, SVGA3DBLOCKDESC_RGBA,
567 {1, 1, 1}, 4, 4,
568 32, {{8}, {8}, {8}, {8}},
569 {{16}, {8}, {0}, {24}}},
570
571 {SVGA3D_R8G8B8A8_SINT, SVGA3DBLOCKDESC_RGBA,
572 {1, 1, 1}, 4, 4,
573 32, {{8}, {8}, {8}, {8}},
574 {{16}, {8}, {0}, {24}}},
575
576 {SVGA3D_R16G16_TYPELESS, SVGA3DBLOCKDESC_RG,
577 {1, 1, 1}, 4, 4,
578 32, {{0}, {16}, {16}, {0}},
579 {{0}, {16}, {0}, {0}}},
580
581 {SVGA3D_R16G16_UINT, SVGA3DBLOCKDESC_RG_FP,
582 {1, 1, 1}, 4, 4,
583 32, {{0}, {16}, {16}, {0}},
584 {{0}, {16}, {0}, {0}}},
585
586 {SVGA3D_R16G16_SINT, SVGA3DBLOCKDESC_UV,
587 {1, 1, 1}, 4, 4,
588 32, {{0}, {16}, {16}, {0}},
589 {{0}, {16}, {0}, {0}}},
590
591 {SVGA3D_R32_TYPELESS, SVGA3DBLOCKDESC_RED,
592 {1, 1, 1}, 4, 4,
593 32, {{0}, {0}, {32}, {0}},
594 {{0}, {0}, {0}, {0}}},
595
596 {SVGA3D_D32_FLOAT, SVGA3DBLOCKDESC_DEPTH,
597 {1, 1, 1}, 4, 4,
598 32, {{0}, {0}, {32}, {0}},
599 {{0}, {0}, {0}, {0}}},
600
601 {SVGA3D_R32_UINT, SVGA3DBLOCKDESC_RED,
602 {1, 1, 1}, 4, 4,
603 32, {{0}, {0}, {32}, {0}},
604 {{0}, {0}, {0}, {0}}},
605
606 {SVGA3D_R32_SINT, SVGA3DBLOCKDESC_RED,
607 {1, 1, 1}, 4, 4,
608 32, {{0}, {0}, {32}, {0}},
609 {{0}, {0}, {0}, {0}}},
610
611 {SVGA3D_R24G8_TYPELESS, SVGA3DBLOCKDESC_RG,
612 {1, 1, 1}, 4, 4,
613 32, {{0}, {8}, {24}, {0}},
614 {{0}, {24}, {0}, {0}}},
615
616 {SVGA3D_D24_UNORM_S8_UINT, SVGA3DBLOCKDESC_DS,
617 {1, 1, 1}, 4, 4,
618 32, {{0}, {8}, {24}, {0}},
619 {{0}, {24}, {0}, {0}}},
620
621 {SVGA3D_R24_UNORM_X8_TYPELESS, SVGA3DBLOCKDESC_RED,
622 {1, 1, 1}, 4, 4,
623 32, {{0}, {0}, {24}, {0}},
624 {{0}, {0}, {0}, {0}}},
625
626 {SVGA3D_X24_TYPELESS_G8_UINT, SVGA3DBLOCKDESC_GREEN,
627 {1, 1, 1}, 4, 4,
628 32, {{0}, {8}, {0}, {0}},
629 {{0}, {24}, {0}, {0}}},
630
631 {SVGA3D_R8G8_TYPELESS, SVGA3DBLOCKDESC_RG,
632 {1, 1, 1}, 2, 2,
633 16, {{0}, {8}, {8}, {0}},
634 {{0}, {8}, {0}, {0}}},
635
636 {SVGA3D_R8G8_UNORM, SVGA3DBLOCKDESC_RG,
637 {1, 1, 1}, 2, 2,
638 16, {{0}, {8}, {8}, {0}},
639 {{0}, {8}, {0}, {0}}},
640
641 {SVGA3D_R8G8_UINT, SVGA3DBLOCKDESC_RG,
642 {1, 1, 1}, 2, 2,
643 16, {{0}, {8}, {8}, {0}},
644 {{0}, {8}, {0}, {0}}},
645
646 {SVGA3D_R8G8_SINT, SVGA3DBLOCKDESC_UV,
647 {1, 1, 1}, 2, 2,
648 16, {{0}, {8}, {8}, {0}},
649 {{0}, {8}, {0}, {0}}},
650
651 {SVGA3D_R16_TYPELESS, SVGA3DBLOCKDESC_RED,
652 {1, 1, 1}, 2, 2,
653 16, {{0}, {0}, {16}, {0}},
654 {{0}, {0}, {0}, {0}}},
655
656 {SVGA3D_R16_UNORM, SVGA3DBLOCKDESC_RED,
657 {1, 1, 1}, 2, 2,
658 16, {{0}, {0}, {16}, {0}},
659 {{0}, {0}, {0}, {0}}},
660
661 {SVGA3D_R16_UINT, SVGA3DBLOCKDESC_RED,
662 {1, 1, 1}, 2, 2,
663 16, {{0}, {0}, {16}, {0}},
664 {{0}, {0}, {0}, {0}}},
665
666 {SVGA3D_R16_SNORM, SVGA3DBLOCKDESC_U,
667 {1, 1, 1}, 2, 2,
668 16, {{0}, {0}, {16}, {0}},
669 {{0}, {0}, {0}, {0}}},
670
671 {SVGA3D_R16_SINT, SVGA3DBLOCKDESC_U,
672 {1, 1, 1}, 2, 2,
673 16, {{0}, {0}, {16}, {0}},
674 {{0}, {0}, {0}, {0}}},
675
676 {SVGA3D_R8_TYPELESS, SVGA3DBLOCKDESC_RED,
677 {1, 1, 1}, 1, 1,
678 8, {{0}, {0}, {8}, {0}},
679 {{0}, {0}, {0}, {0}}},
680
681 {SVGA3D_R8_UNORM, SVGA3DBLOCKDESC_RED,
682 {1, 1, 1}, 1, 1,
683 8, {{0}, {0}, {8}, {0}},
684 {{0}, {0}, {0}, {0}}},
685
686 {SVGA3D_R8_UINT, SVGA3DBLOCKDESC_RED,
687 {1, 1, 1}, 1, 1,
688 8, {{0}, {0}, {8}, {0}},
689 {{0}, {0}, {0}, {0}}},
690
691 {SVGA3D_R8_SNORM, SVGA3DBLOCKDESC_U,
692 {1, 1, 1}, 1, 1,
693 8, {{0}, {0}, {8}, {0}},
694 {{0}, {0}, {0}, {0}}},
695
696 {SVGA3D_R8_SINT, SVGA3DBLOCKDESC_U,
697 {1, 1, 1}, 1, 1,
698 8, {{0}, {0}, {8}, {0}},
699 {{0}, {0}, {0}, {0}}},
700
701 {SVGA3D_P8, SVGA3DBLOCKDESC_RED,
702 {1, 1, 1}, 1, 1,
703 8, {{0}, {0}, {8}, {0}},
704 {{0}, {0}, {0}, {0}}},
705
706 {SVGA3D_R9G9B9E5_SHAREDEXP, SVGA3DBLOCKDESC_RGBE,
707 {1, 1, 1}, 4, 4,
708 32, {{9}, {9}, {9}, {5}},
709 {{18}, {9}, {0}, {27}}},
710
711 {SVGA3D_R8G8_B8G8_UNORM, SVGA3DBLOCKDESC_RG,
712 {1, 1, 1}, 2, 2,
713 16, {{0}, {8}, {8}, {0}},
714 {{0}, {8}, {0}, {0}}},
715
716 {SVGA3D_G8R8_G8B8_UNORM, SVGA3DBLOCKDESC_RG,
717 {1, 1, 1}, 2, 2,
718 16, {{0}, {8}, {8}, {0}},
719 {{0}, {8}, {0}, {0}}},
720
721 {SVGA3D_BC1_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
722 {4, 4, 1}, 8, 8,
723 64, {{0}, {0}, {64}, {0}},
724 {{0}, {0}, {0}, {0}}},
725
726 {SVGA3D_BC1_UNORM_SRGB, SVGA3DBLOCKDESC_COMPRESSED_SRGB,
727 {4, 4, 1}, 8, 8,
728 64, {{0}, {0}, {64}, {0}},
729 {{0}, {0}, {0}, {0}}},
730
731 {SVGA3D_BC2_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
732 {4, 4, 1}, 16, 16,
733 128, {{0}, {0}, {128}, {0}},
734 {{0}, {0}, {0}, {0}}},
735
736 {SVGA3D_BC2_UNORM_SRGB, SVGA3DBLOCKDESC_COMPRESSED_SRGB,
737 {4, 4, 1}, 16, 16,
738 128, {{0}, {0}, {128}, {0}},
739 {{0}, {0}, {0}, {0}}},
740
741 {SVGA3D_BC3_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
742 {4, 4, 1}, 16, 16,
743 128, {{0}, {0}, {128}, {0}},
744 {{0}, {0}, {0}, {0}}},
745
746 {SVGA3D_BC3_UNORM_SRGB, SVGA3DBLOCKDESC_COMPRESSED_SRGB,
747 {4, 4, 1}, 16, 16,
748 128, {{0}, {0}, {128}, {0}},
749 {{0}, {0}, {0}, {0}}},
750
751 {SVGA3D_BC4_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
752 {4, 4, 1}, 8, 8,
753 64, {{0}, {0}, {64}, {0}},
754 {{0}, {0}, {0}, {0}}},
755
756 {SVGA3D_ATI1, SVGA3DBLOCKDESC_COMPRESSED,
757 {4, 4, 1}, 8, 8,
758 64, {{0}, {0}, {64}, {0}},
759 {{0}, {0}, {0}, {0}}},
760
761 {SVGA3D_BC4_SNORM, SVGA3DBLOCKDESC_COMPRESSED,
762 {4, 4, 1}, 8, 8,
763 64, {{0}, {0}, {64}, {0}},
764 {{0}, {0}, {0}, {0}}},
765
766 {SVGA3D_BC5_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
767 {4, 4, 1}, 16, 16,
768 128, {{0}, {0}, {128}, {0}},
769 {{0}, {0}, {0}, {0}}},
770
771 {SVGA3D_ATI2, SVGA3DBLOCKDESC_COMPRESSED,
772 {4, 4, 1}, 16, 16,
773 128, {{0}, {0}, {128}, {0}},
774 {{0}, {0}, {0}, {0}}},
775
776 {SVGA3D_BC5_SNORM, SVGA3DBLOCKDESC_COMPRESSED,
777 {4, 4, 1}, 16, 16,
778 128, {{0}, {0}, {128}, {0}},
779 {{0}, {0}, {0}, {0}}},
780
781 {SVGA3D_R10G10B10_XR_BIAS_A2_UNORM, SVGA3DBLOCKDESC_RGBA,
782 {1, 1, 1}, 4, 4,
783 32, {{10}, {10}, {10}, {2}},
784 {{0}, {10}, {20}, {30}}},
785
786 {SVGA3D_B8G8R8A8_TYPELESS, SVGA3DBLOCKDESC_RGBA,
787 {1, 1, 1}, 4, 4,
788 32, {{8}, {8}, {8}, {8}},
789 {{0}, {8}, {16}, {24}}},
790
791 {SVGA3D_B8G8R8A8_UNORM_SRGB, SVGA3DBLOCKDESC_RGBA_SRGB,
792 {1, 1, 1}, 4, 4,
793 32, {{8}, {8}, {8}, {8}},
794 {{0}, {8}, {16}, {24}}},
795
796 {SVGA3D_B8G8R8X8_TYPELESS, SVGA3DBLOCKDESC_RGB,
797 {1, 1, 1}, 4, 4,
798 24, {{8}, {8}, {8}, {0}},
799 {{0}, {8}, {16}, {24}}},
800
801 {SVGA3D_B8G8R8X8_UNORM_SRGB, SVGA3DBLOCKDESC_RGB_SRGB,
802 {1, 1, 1}, 4, 4,
803 24, {{8}, {8}, {8}, {0}},
804 {{0}, {8}, {16}, {24}}},
805
806 {SVGA3D_Z_DF16, SVGA3DBLOCKDESC_DEPTH,
807 {1, 1, 1}, 2, 2,
808 16, {{0}, {0}, {16}, {0}},
809 {{0}, {0}, {0}, {0}}},
810
811 {SVGA3D_Z_DF24, SVGA3DBLOCKDESC_DEPTH,
812 {1, 1, 1}, 4, 4,
813 32, {{0}, {8}, {24}, {0}},
814 {{0}, {24}, {0}, {0}}},
815
816 {SVGA3D_Z_D24S8_INT, SVGA3DBLOCKDESC_DS,
817 {1, 1, 1}, 4, 4,
818 32, {{0}, {8}, {24}, {0}},
819 {{0}, {24}, {0}, {0}}},
820
821 {SVGA3D_YV12, SVGA3DBLOCKDESC_YV12,
822 {2, 2, 1}, 6, 2,
823 48, {{0}, {0}, {48}, {0}},
824 {{0}, {0}, {0}, {0}}},
825
826 {SVGA3D_R32G32B32A32_FLOAT, SVGA3DBLOCKDESC_RGBA_FP,
827 {1, 1, 1}, 16, 16,
828 128, {{32}, {32}, {32}, {32}},
829 {{64}, {32}, {0}, {96}}},
830
831 {SVGA3D_R16G16B16A16_FLOAT, SVGA3DBLOCKDESC_RGBA_FP,
832 {1, 1, 1}, 8, 8,
833 64, {{16}, {16}, {16}, {16}},
834 {{32}, {16}, {0}, {48}}},
835
836 {SVGA3D_R16G16B16A16_UNORM, SVGA3DBLOCKDESC_RGBA,
837 {1, 1, 1}, 8, 8,
838 64, {{16}, {16}, {16}, {16}},
839 {{32}, {16}, {0}, {48}}},
840
841 {SVGA3D_R32G32_FLOAT, SVGA3DBLOCKDESC_RG_FP,
842 {1, 1, 1}, 8, 8,
843 64, {{0}, {32}, {32}, {0}},
844 {{0}, {32}, {0}, {0}}},
845
846 {SVGA3D_R10G10B10A2_UNORM, SVGA3DBLOCKDESC_RGBA,
847 {1, 1, 1}, 4, 4,
848 32, {{10}, {10}, {10}, {2}},
849 {{0}, {10}, {20}, {30}}},
850
851 {SVGA3D_R8G8B8A8_SNORM, SVGA3DBLOCKDESC_RGBA,
852 {1, 1, 1}, 4, 4,
853 32, {{8}, {8}, {8}, {8}},
854 {{24}, {16}, {8}, {0}}},
855
856 {SVGA3D_R16G16_FLOAT, SVGA3DBLOCKDESC_RG_FP,
857 {1, 1, 1}, 4, 4,
858 32, {{0}, {16}, {16}, {0}},
859 {{0}, {16}, {0}, {0}}},
860
861 {SVGA3D_R16G16_UNORM, SVGA3DBLOCKDESC_RG,
862 {1, 1, 1}, 4, 4,
863 32, {{0}, {16}, {16}, {0}},
864 {{0}, {0}, {16}, {0}}},
865
866 {SVGA3D_R16G16_SNORM, SVGA3DBLOCKDESC_RG,
867 {1, 1, 1}, 4, 4,
868 32, {{16}, {16}, {0}, {0}},
869 {{16}, {0}, {0}, {0}}},
870
871 {SVGA3D_R32_FLOAT, SVGA3DBLOCKDESC_R_FP,
872 {1, 1, 1}, 4, 4,
873 32, {{0}, {0}, {32}, {0}},
874 {{0}, {0}, {0}, {0}}},
875
876 {SVGA3D_R8G8_SNORM, SVGA3DBLOCKDESC_RG,
877 {1, 1, 1}, 2, 2,
878 16, {{8}, {8}, {0}, {0}},
879 {{8}, {0}, {0}, {0}}},
880
881 {SVGA3D_R16_FLOAT, SVGA3DBLOCKDESC_R_FP,
882 {1, 1, 1}, 2, 2,
883 16, {{0}, {0}, {16}, {0}},
884 {{0}, {0}, {0}, {0}}},
885
886 {SVGA3D_D16_UNORM, SVGA3DBLOCKDESC_DEPTH,
887 {1, 1, 1}, 2, 2,
888 16, {{0}, {0}, {16}, {0}},
889 {{0}, {0}, {0}, {0}}},
890
891 {SVGA3D_A8_UNORM, SVGA3DBLOCKDESC_ALPHA,
892 {1, 1, 1}, 1, 1,
893 8, {{0}, {0}, {0}, {8}},
894 {{0}, {0}, {0}, {0}}},
895
896 {SVGA3D_BC1_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
897 {4, 4, 1}, 8, 8,
898 64, {{0}, {0}, {64}, {0}},
899 {{0}, {0}, {0}, {0}}},
900
901 {SVGA3D_BC2_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
902 {4, 4, 1}, 16, 16,
903 128, {{0}, {0}, {128}, {0}},
904 {{0}, {0}, {0}, {0}}},
905
906 {SVGA3D_BC3_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
907 {4, 4, 1}, 16, 16,
908 128, {{0}, {0}, {128}, {0}},
909 {{0}, {0}, {0}, {0}}},
910
911 {SVGA3D_B5G6R5_UNORM, SVGA3DBLOCKDESC_RGB,
912 {1, 1, 1}, 2, 2,
913 16, {{5}, {6}, {5}, {0}},
914 {{0}, {5}, {11}, {0}}},
915
916 {SVGA3D_B5G5R5A1_UNORM, SVGA3DBLOCKDESC_RGBA,
917 {1, 1, 1}, 2, 2,
918 16, {{5}, {5}, {5}, {1}},
919 {{0}, {5}, {10}, {15}}},
920
921 {SVGA3D_B8G8R8A8_UNORM, SVGA3DBLOCKDESC_RGBA,
922 {1, 1, 1}, 4, 4,
923 32, {{8}, {8}, {8}, {8}},
924 {{0}, {8}, {16}, {24}}},
925
926 {SVGA3D_B8G8R8X8_UNORM, SVGA3DBLOCKDESC_RGB,
927 {1, 1, 1}, 4, 4,
928 24, {{8}, {8}, {8}, {0}},
929 {{0}, {8}, {16}, {24}}},
930
931 {SVGA3D_BC4_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
932 {4, 4, 1}, 8, 8,
933 64, {{0}, {0}, {64}, {0}},
934 {{0}, {0}, {0}, {0}}},
935
936 {SVGA3D_BC5_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
937 {4, 4, 1}, 16, 16,
938 128, {{0}, {0}, {128}, {0}},
939 {{0}, {0}, {0}, {0}}},
940
941};
942
943static inline u32 clamped_umul32(u32 a, u32 b)
944{
945 uint64_t tmp = (uint64_t) a*b;
946 return (tmp > (uint64_t) ((u32) -1)) ? (u32) -1 : tmp;
947}
948
949static inline const struct svga3d_surface_desc *
950svga3dsurface_get_desc(SVGA3dSurfaceFormat format)
951{
952 if (format < ARRAY_SIZE(svga3d_surface_descs))
953 return &svga3d_surface_descs[format];
954
955 return &svga3d_surface_descs[SVGA3D_FORMAT_INVALID];
956}
957
958/*
959 *----------------------------------------------------------------------
960 *
961 * svga3dsurface_get_mip_size --
962 *
963 * Given a base level size and the mip level, compute the size of
964 * the mip level.
965 *
966 * Results:
967 * See above.
968 *
969 * Side effects:
970 * None.
971 *
972 *----------------------------------------------------------------------
973 */
974
975static inline surf_size_struct
976svga3dsurface_get_mip_size(surf_size_struct base_level, u32 mip_level)
977{
978 surf_size_struct size;
979
980 size.width = max_t(u32, base_level.width >> mip_level, 1);
981 size.height = max_t(u32, base_level.height >> mip_level, 1);
982 size.depth = max_t(u32, base_level.depth >> mip_level, 1);
983 return size;
984}
985
986static inline void
987svga3dsurface_get_size_in_blocks(const struct svga3d_surface_desc *desc,
988 const surf_size_struct *pixel_size,
989 surf_size_struct *block_size)
990{
991 block_size->width = __KERNEL_DIV_ROUND_UP(pixel_size->width,
992 desc->block_size.width);
993 block_size->height = __KERNEL_DIV_ROUND_UP(pixel_size->height,
994 desc->block_size.height);
995 block_size->depth = __KERNEL_DIV_ROUND_UP(pixel_size->depth,
996 desc->block_size.depth);
997}
998
999static inline bool
1000svga3dsurface_is_planar_surface(const struct svga3d_surface_desc *desc)
1001{
1002 return (desc->block_desc & SVGA3DBLOCKDESC_PLANAR_YUV) != 0;
1003}
1004
1005static inline u32
1006svga3dsurface_calculate_pitch(const struct svga3d_surface_desc *desc,
1007 const surf_size_struct *size)
1008{
1009 u32 pitch;
1010 surf_size_struct blocks;
1011
1012 svga3dsurface_get_size_in_blocks(desc, size, &blocks);
1013
1014 pitch = blocks.width * desc->pitch_bytes_per_block;
1015
1016 return pitch;
1017}
1018
1019/*
1020 *-----------------------------------------------------------------------------
1021 *
1022 * svga3dsurface_get_image_buffer_size --
1023 *
1024 * Return the number of bytes of buffer space required to store
1025 * one image of a surface, optionally using the specified pitch.
1026 *
1027 * If pitch is zero, it is assumed that rows are tightly packed.
1028 *
1029 * This function is overflow-safe. If the result would have
1030 * overflowed, instead we return MAX_UINT32.
1031 *
1032 * Results:
1033 * Byte count.
1034 *
1035 * Side effects:
1036 * None.
1037 *
1038 *-----------------------------------------------------------------------------
1039 */
1040
1041static inline u32
1042svga3dsurface_get_image_buffer_size(const struct svga3d_surface_desc *desc,
1043 const surf_size_struct *size,
1044 u32 pitch)
1045{
1046 surf_size_struct image_blocks;
1047 u32 slice_size, total_size;
1048
1049 svga3dsurface_get_size_in_blocks(desc, size, &image_blocks);
1050
1051 if (svga3dsurface_is_planar_surface(desc)) {
1052 total_size = clamped_umul32(image_blocks.width,
1053 image_blocks.height);
1054 total_size = clamped_umul32(total_size, image_blocks.depth);
1055 total_size = clamped_umul32(total_size, desc->bytes_per_block);
1056 return total_size;
1057 }
1058
1059 if (pitch == 0)
1060 pitch = svga3dsurface_calculate_pitch(desc, size);
1061
1062 slice_size = clamped_umul32(image_blocks.height, pitch);
1063 total_size = clamped_umul32(slice_size, image_blocks.depth);
1064
1065 return total_size;
1066}
1067
1068static inline u32
1069svga3dsurface_get_serialized_size(SVGA3dSurfaceFormat format,
1070 surf_size_struct base_level_size,
1071 u32 num_mip_levels,
1072 u32 num_layers)
1073{
1074 const struct svga3d_surface_desc *desc = svga3dsurface_get_desc(format);
1075 u32 total_size = 0;
1076 u32 mip;
1077
1078 for (mip = 0; mip < num_mip_levels; mip++) {
1079 surf_size_struct size =
1080 svga3dsurface_get_mip_size(base_level_size, mip);
1081 total_size += svga3dsurface_get_image_buffer_size(desc,
1082 &size, 0);
1083 }
1084
1085 return total_size * num_layers;
1086}
1087
1088
1089/**
1090 * svga3dsurface_get_pixel_offset - Compute the offset (in bytes) to a pixel
1091 * in an image (or volume).
1092 *
1093 * @width: The image width in pixels.
1094 * @height: The image height in pixels
1095 */
1096static inline u32
1097svga3dsurface_get_pixel_offset(SVGA3dSurfaceFormat format,
1098 u32 width, u32 height,
1099 u32 x, u32 y, u32 z)
1100{
1101 const struct svga3d_surface_desc *desc = svga3dsurface_get_desc(format);
1102 const u32 bw = desc->block_size.width, bh = desc->block_size.height;
1103 const u32 bd = desc->block_size.depth;
1104 const u32 rowstride = __KERNEL_DIV_ROUND_UP(width, bw) *
1105 desc->bytes_per_block;
1106 const u32 imgstride = __KERNEL_DIV_ROUND_UP(height, bh) * rowstride;
1107 const u32 offset = (z / bd * imgstride +
1108 y / bh * rowstride +
1109 x / bw * desc->bytes_per_block);
1110 return offset;
1111}
1112
1113
1114static inline u32
1115svga3dsurface_get_image_offset(SVGA3dSurfaceFormat format,
1116 surf_size_struct baseLevelSize,
1117 u32 numMipLevels,
1118 u32 face,
1119 u32 mip)
1120
1121{
1122 u32 offset;
1123 u32 mipChainBytes;
1124 u32 mipChainBytesToLevel;
1125 u32 i;
1126 const struct svga3d_surface_desc *desc;
1127 surf_size_struct mipSize;
1128 u32 bytes;
1129
1130 desc = svga3dsurface_get_desc(format);
1131
1132 mipChainBytes = 0;
1133 mipChainBytesToLevel = 0;
1134 for (i = 0; i < numMipLevels; i++) {
1135 mipSize = svga3dsurface_get_mip_size(baseLevelSize, i);
1136 bytes = svga3dsurface_get_image_buffer_size(desc, &mipSize, 0);
1137 mipChainBytes += bytes;
1138 if (i < mip)
1139 mipChainBytesToLevel += bytes;
1140 }
1141
1142 offset = mipChainBytes * face + mipChainBytesToLevel;
1143
1144 return offset;
1145}
1146
1147
1148/**
1149 * svga3dsurface_is_gb_screen_target_format - Is the specified format usable as
1150 * a ScreenTarget?
1151 * (with just the GBObjects cap-bit
1152 * set)
1153 * @format: format to queried
1154 *
1155 * RETURNS:
1156 * true if queried format is valid for screen targets
1157 */
1158static inline bool
1159svga3dsurface_is_gb_screen_target_format(SVGA3dSurfaceFormat format)
1160{
1161 return (format == SVGA3D_X8R8G8B8 ||
1162 format == SVGA3D_A8R8G8B8 ||
1163 format == SVGA3D_R5G6B5 ||
1164 format == SVGA3D_X1R5G5B5 ||
1165 format == SVGA3D_A1R5G5B5 ||
1166 format == SVGA3D_P8);
1167}
1168
1169
1170/**
1171 * svga3dsurface_is_dx_screen_target_format - Is the specified format usable as
1172 * a ScreenTarget?
1173 * (with DX10 enabled)
1174 *
1175 * @format: format to queried
1176 *
1177 * Results:
1178 * true if queried format is valid for screen targets
1179 */
1180static inline bool
1181svga3dsurface_is_dx_screen_target_format(SVGA3dSurfaceFormat format)
1182{
1183 return (format == SVGA3D_R8G8B8A8_UNORM ||
1184 format == SVGA3D_B8G8R8A8_UNORM ||
1185 format == SVGA3D_B8G8R8X8_UNORM);
1186}
1187
1188
1189/**
1190 * svga3dsurface_is_screen_target_format - Is the specified format usable as a
1191 * ScreenTarget?
1192 * (for some combination of caps)
1193 *
1194 * @format: format to queried
1195 *
1196 * Results:
1197 * true if queried format is valid for screen targets
1198 */
1199static inline bool
1200svga3dsurface_is_screen_target_format(SVGA3dSurfaceFormat format)
1201{
1202 if (svga3dsurface_is_gb_screen_target_format(format)) {
1203 return true;
1204 }
1205 return svga3dsurface_is_dx_screen_target_format(format);
1206}
1/**********************************************************
2 * Copyright 2008-2021 VMware, Inc.
3 * SPDX-License-Identifier: GPL-2.0 OR MIT
4 *
5 * Permission is hereby granted, free of charge, to any person
6 * obtaining a copy of this software and associated documentation
7 * files (the "Software"), to deal in the Software without
8 * restriction, including without limitation the rights to use, copy,
9 * modify, merge, publish, distribute, sublicense, and/or sell copies
10 * of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
20 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24 *
25 **********************************************************/
26
27/*
28 * svga3d_surfacedefs.h --
29 *
30 * Surface definitions for SVGA3d.
31 */
32
33
34
35#ifndef _SVGA3D_SURFACEDEFS_H_
36#define _SVGA3D_SURFACEDEFS_H_
37
38#include "svga3d_types.h"
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44struct SVGAUseCaps;
45
46#if defined(_WIN32) && !defined(__GNUC__)
47
48#define STATIC_CONST __declspec(selectany) extern const
49#else
50#define STATIC_CONST static const
51#endif
52
53typedef enum SVGA3dBlockDesc {
54
55 SVGA3DBLOCKDESC_NONE = 0,
56
57 SVGA3DBLOCKDESC_BLUE = 1 << 0,
58 SVGA3DBLOCKDESC_W = 1 << 0,
59 SVGA3DBLOCKDESC_BUMP_L = 1 << 0,
60
61 SVGA3DBLOCKDESC_GREEN = 1 << 1,
62 SVGA3DBLOCKDESC_V = 1 << 1,
63
64 SVGA3DBLOCKDESC_RED = 1 << 2,
65 SVGA3DBLOCKDESC_U = 1 << 2,
66 SVGA3DBLOCKDESC_LUMINANCE = 1 << 2,
67
68 SVGA3DBLOCKDESC_ALPHA = 1 << 3,
69 SVGA3DBLOCKDESC_Q = 1 << 3,
70
71 SVGA3DBLOCKDESC_BUFFER = 1 << 4,
72
73 SVGA3DBLOCKDESC_COMPRESSED = 1 << 5,
74
75 SVGA3DBLOCKDESC_FP = 1 << 6,
76
77 SVGA3DBLOCKDESC_PLANAR_YUV = 1 << 7,
78
79 SVGA3DBLOCKDESC_2PLANAR_YUV = 1 << 8,
80
81 SVGA3DBLOCKDESC_3PLANAR_YUV = 1 << 9,
82
83 SVGA3DBLOCKDESC_STENCIL = 1 << 11,
84
85 SVGA3DBLOCKDESC_TYPELESS = 1 << 12,
86
87 SVGA3DBLOCKDESC_SINT = 1 << 13,
88
89 SVGA3DBLOCKDESC_UINT = 1 << 14,
90
91 SVGA3DBLOCKDESC_NORM = 1 << 15,
92
93 SVGA3DBLOCKDESC_SRGB = 1 << 16,
94
95 SVGA3DBLOCKDESC_EXP = 1 << 17,
96
97 SVGA3DBLOCKDESC_COLOR = 1 << 18,
98
99 SVGA3DBLOCKDESC_DEPTH = 1 << 19,
100
101 SVGA3DBLOCKDESC_BUMP = 1 << 20,
102
103 SVGA3DBLOCKDESC_YUV_VIDEO = 1 << 21,
104
105 SVGA3DBLOCKDESC_MIXED = 1 << 22,
106
107 SVGA3DBLOCKDESC_CX = 1 << 23,
108
109 SVGA3DBLOCKDESC_BC1 = 1 << 24,
110 SVGA3DBLOCKDESC_BC2 = 1 << 25,
111 SVGA3DBLOCKDESC_BC3 = 1 << 26,
112 SVGA3DBLOCKDESC_BC4 = 1 << 27,
113 SVGA3DBLOCKDESC_BC5 = 1 << 28,
114 SVGA3DBLOCKDESC_BC6H = 1 << 29,
115 SVGA3DBLOCKDESC_BC7 = 1 << 30,
116 SVGA3DBLOCKDESC_COMPRESSED_MASK =
117 SVGA3DBLOCKDESC_BC1 | SVGA3DBLOCKDESC_BC2 |
118 SVGA3DBLOCKDESC_BC3 | SVGA3DBLOCKDESC_BC4 |
119 SVGA3DBLOCKDESC_BC5 | SVGA3DBLOCKDESC_BC6H |
120 SVGA3DBLOCKDESC_BC7,
121
122 SVGA3DBLOCKDESC_A_UINT = SVGA3DBLOCKDESC_ALPHA | SVGA3DBLOCKDESC_UINT |
123 SVGA3DBLOCKDESC_COLOR,
124 SVGA3DBLOCKDESC_A_UNORM = SVGA3DBLOCKDESC_A_UINT | SVGA3DBLOCKDESC_NORM,
125 SVGA3DBLOCKDESC_R_UINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_UINT |
126 SVGA3DBLOCKDESC_COLOR,
127 SVGA3DBLOCKDESC_R_UNORM = SVGA3DBLOCKDESC_R_UINT | SVGA3DBLOCKDESC_NORM,
128 SVGA3DBLOCKDESC_R_SINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_SINT |
129 SVGA3DBLOCKDESC_COLOR,
130 SVGA3DBLOCKDESC_R_SNORM = SVGA3DBLOCKDESC_R_SINT | SVGA3DBLOCKDESC_NORM,
131 SVGA3DBLOCKDESC_G_UINT = SVGA3DBLOCKDESC_GREEN | SVGA3DBLOCKDESC_UINT |
132 SVGA3DBLOCKDESC_COLOR,
133 SVGA3DBLOCKDESC_RG_UINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
134 SVGA3DBLOCKDESC_UINT | SVGA3DBLOCKDESC_COLOR,
135 SVGA3DBLOCKDESC_RG_UNORM =
136 SVGA3DBLOCKDESC_RG_UINT | SVGA3DBLOCKDESC_NORM,
137 SVGA3DBLOCKDESC_RG_SINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
138 SVGA3DBLOCKDESC_SINT | SVGA3DBLOCKDESC_COLOR,
139 SVGA3DBLOCKDESC_RG_SNORM =
140 SVGA3DBLOCKDESC_RG_SINT | SVGA3DBLOCKDESC_NORM,
141 SVGA3DBLOCKDESC_RGB_UINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
142 SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_UINT |
143 SVGA3DBLOCKDESC_COLOR,
144 SVGA3DBLOCKDESC_RGB_SINT = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
145 SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_SINT |
146 SVGA3DBLOCKDESC_COLOR,
147 SVGA3DBLOCKDESC_RGB_UNORM =
148 SVGA3DBLOCKDESC_RGB_UINT | SVGA3DBLOCKDESC_NORM,
149 SVGA3DBLOCKDESC_RGB_UNORM_SRGB =
150 SVGA3DBLOCKDESC_RGB_UNORM | SVGA3DBLOCKDESC_SRGB,
151 SVGA3DBLOCKDESC_RGBA_UINT =
152 SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
153 SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_ALPHA |
154 SVGA3DBLOCKDESC_UINT | SVGA3DBLOCKDESC_COLOR,
155 SVGA3DBLOCKDESC_RGBA_UNORM =
156 SVGA3DBLOCKDESC_RGBA_UINT | SVGA3DBLOCKDESC_NORM,
157 SVGA3DBLOCKDESC_RGBA_UNORM_SRGB =
158 SVGA3DBLOCKDESC_RGBA_UNORM | SVGA3DBLOCKDESC_SRGB,
159 SVGA3DBLOCKDESC_RGBA_SINT =
160 SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
161 SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_ALPHA |
162 SVGA3DBLOCKDESC_SINT | SVGA3DBLOCKDESC_COLOR,
163 SVGA3DBLOCKDESC_RGBA_SNORM =
164 SVGA3DBLOCKDESC_RGBA_SINT | SVGA3DBLOCKDESC_NORM,
165 SVGA3DBLOCKDESC_RGBA_FP = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
166 SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_ALPHA |
167 SVGA3DBLOCKDESC_FP | SVGA3DBLOCKDESC_COLOR,
168 SVGA3DBLOCKDESC_UV =
169 SVGA3DBLOCKDESC_U | SVGA3DBLOCKDESC_V | SVGA3DBLOCKDESC_BUMP,
170 SVGA3DBLOCKDESC_UVL = SVGA3DBLOCKDESC_UV | SVGA3DBLOCKDESC_BUMP_L |
171 SVGA3DBLOCKDESC_MIXED | SVGA3DBLOCKDESC_BUMP,
172 SVGA3DBLOCKDESC_UVW =
173 SVGA3DBLOCKDESC_UV | SVGA3DBLOCKDESC_W | SVGA3DBLOCKDESC_BUMP,
174 SVGA3DBLOCKDESC_UVWA = SVGA3DBLOCKDESC_UVW | SVGA3DBLOCKDESC_ALPHA |
175 SVGA3DBLOCKDESC_MIXED | SVGA3DBLOCKDESC_BUMP,
176 SVGA3DBLOCKDESC_UVWQ = SVGA3DBLOCKDESC_U | SVGA3DBLOCKDESC_V |
177 SVGA3DBLOCKDESC_W | SVGA3DBLOCKDESC_Q |
178 SVGA3DBLOCKDESC_BUMP,
179 SVGA3DBLOCKDESC_L_UNORM = SVGA3DBLOCKDESC_LUMINANCE |
180 SVGA3DBLOCKDESC_UINT | SVGA3DBLOCKDESC_NORM |
181 SVGA3DBLOCKDESC_COLOR,
182 SVGA3DBLOCKDESC_LA_UNORM = SVGA3DBLOCKDESC_LUMINANCE |
183 SVGA3DBLOCKDESC_ALPHA |
184 SVGA3DBLOCKDESC_UINT | SVGA3DBLOCKDESC_NORM |
185 SVGA3DBLOCKDESC_COLOR,
186 SVGA3DBLOCKDESC_R_FP = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_FP |
187 SVGA3DBLOCKDESC_COLOR,
188 SVGA3DBLOCKDESC_RG_FP = SVGA3DBLOCKDESC_R_FP | SVGA3DBLOCKDESC_GREEN |
189 SVGA3DBLOCKDESC_COLOR,
190 SVGA3DBLOCKDESC_RGB_FP = SVGA3DBLOCKDESC_RG_FP | SVGA3DBLOCKDESC_BLUE |
191 SVGA3DBLOCKDESC_COLOR,
192 SVGA3DBLOCKDESC_YUV = SVGA3DBLOCKDESC_YUV_VIDEO | SVGA3DBLOCKDESC_COLOR,
193 SVGA3DBLOCKDESC_AYUV = SVGA3DBLOCKDESC_ALPHA |
194 SVGA3DBLOCKDESC_YUV_VIDEO |
195 SVGA3DBLOCKDESC_COLOR,
196 SVGA3DBLOCKDESC_RGB_EXP = SVGA3DBLOCKDESC_RED | SVGA3DBLOCKDESC_GREEN |
197 SVGA3DBLOCKDESC_BLUE | SVGA3DBLOCKDESC_EXP |
198 SVGA3DBLOCKDESC_COLOR,
199
200 SVGA3DBLOCKDESC_COMP_TYPELESS =
201 SVGA3DBLOCKDESC_COMPRESSED | SVGA3DBLOCKDESC_TYPELESS,
202 SVGA3DBLOCKDESC_COMP_UNORM =
203 SVGA3DBLOCKDESC_COMPRESSED | SVGA3DBLOCKDESC_UINT |
204 SVGA3DBLOCKDESC_NORM | SVGA3DBLOCKDESC_COLOR,
205 SVGA3DBLOCKDESC_COMP_SNORM =
206 SVGA3DBLOCKDESC_COMPRESSED | SVGA3DBLOCKDESC_SINT |
207 SVGA3DBLOCKDESC_NORM | SVGA3DBLOCKDESC_COLOR,
208 SVGA3DBLOCKDESC_COMP_UNORM_SRGB =
209 SVGA3DBLOCKDESC_COMP_UNORM | SVGA3DBLOCKDESC_SRGB,
210 SVGA3DBLOCKDESC_BC1_COMP_TYPELESS =
211 SVGA3DBLOCKDESC_BC1 | SVGA3DBLOCKDESC_COMP_TYPELESS,
212 SVGA3DBLOCKDESC_BC1_COMP_UNORM =
213 SVGA3DBLOCKDESC_BC1 | SVGA3DBLOCKDESC_COMP_UNORM,
214 SVGA3DBLOCKDESC_BC1_COMP_UNORM_SRGB =
215 SVGA3DBLOCKDESC_BC1_COMP_UNORM | SVGA3DBLOCKDESC_SRGB,
216 SVGA3DBLOCKDESC_BC2_COMP_TYPELESS =
217 SVGA3DBLOCKDESC_BC2 | SVGA3DBLOCKDESC_COMP_TYPELESS,
218 SVGA3DBLOCKDESC_BC2_COMP_UNORM =
219 SVGA3DBLOCKDESC_BC2 | SVGA3DBLOCKDESC_COMP_UNORM,
220 SVGA3DBLOCKDESC_BC2_COMP_UNORM_SRGB =
221 SVGA3DBLOCKDESC_BC2_COMP_UNORM | SVGA3DBLOCKDESC_SRGB,
222 SVGA3DBLOCKDESC_BC3_COMP_TYPELESS =
223 SVGA3DBLOCKDESC_BC3 | SVGA3DBLOCKDESC_COMP_TYPELESS,
224 SVGA3DBLOCKDESC_BC3_COMP_UNORM =
225 SVGA3DBLOCKDESC_BC3 | SVGA3DBLOCKDESC_COMP_UNORM,
226 SVGA3DBLOCKDESC_BC3_COMP_UNORM_SRGB =
227 SVGA3DBLOCKDESC_BC3_COMP_UNORM | SVGA3DBLOCKDESC_SRGB,
228 SVGA3DBLOCKDESC_BC4_COMP_TYPELESS =
229 SVGA3DBLOCKDESC_BC4 | SVGA3DBLOCKDESC_COMP_TYPELESS,
230 SVGA3DBLOCKDESC_BC4_COMP_UNORM =
231 SVGA3DBLOCKDESC_BC4 | SVGA3DBLOCKDESC_COMP_UNORM,
232 SVGA3DBLOCKDESC_BC4_COMP_SNORM =
233 SVGA3DBLOCKDESC_BC4 | SVGA3DBLOCKDESC_COMP_SNORM,
234 SVGA3DBLOCKDESC_BC5_COMP_TYPELESS =
235 SVGA3DBLOCKDESC_BC5 | SVGA3DBLOCKDESC_COMP_TYPELESS,
236 SVGA3DBLOCKDESC_BC5_COMP_UNORM =
237 SVGA3DBLOCKDESC_BC5 | SVGA3DBLOCKDESC_COMP_UNORM,
238 SVGA3DBLOCKDESC_BC5_COMP_SNORM =
239 SVGA3DBLOCKDESC_BC5 | SVGA3DBLOCKDESC_COMP_SNORM,
240 SVGA3DBLOCKDESC_BC6H_COMP_TYPELESS =
241 SVGA3DBLOCKDESC_BC6H | SVGA3DBLOCKDESC_COMP_TYPELESS,
242 SVGA3DBLOCKDESC_BC6H_COMP_UF16 =
243 SVGA3DBLOCKDESC_BC6H | SVGA3DBLOCKDESC_COMPRESSED,
244 SVGA3DBLOCKDESC_BC6H_COMP_SF16 =
245 SVGA3DBLOCKDESC_BC6H | SVGA3DBLOCKDESC_COMPRESSED,
246 SVGA3DBLOCKDESC_BC7_COMP_TYPELESS =
247 SVGA3DBLOCKDESC_BC7 | SVGA3DBLOCKDESC_COMP_TYPELESS,
248 SVGA3DBLOCKDESC_BC7_COMP_UNORM =
249 SVGA3DBLOCKDESC_BC7 | SVGA3DBLOCKDESC_COMP_UNORM,
250 SVGA3DBLOCKDESC_BC7_COMP_UNORM_SRGB =
251 SVGA3DBLOCKDESC_BC7_COMP_UNORM | SVGA3DBLOCKDESC_SRGB,
252
253 SVGA3DBLOCKDESC_NV12 =
254 SVGA3DBLOCKDESC_YUV_VIDEO | SVGA3DBLOCKDESC_PLANAR_YUV |
255 SVGA3DBLOCKDESC_2PLANAR_YUV | SVGA3DBLOCKDESC_COLOR,
256 SVGA3DBLOCKDESC_YV12 =
257 SVGA3DBLOCKDESC_YUV_VIDEO | SVGA3DBLOCKDESC_PLANAR_YUV |
258 SVGA3DBLOCKDESC_3PLANAR_YUV | SVGA3DBLOCKDESC_COLOR,
259
260 SVGA3DBLOCKDESC_DEPTH_UINT =
261 SVGA3DBLOCKDESC_DEPTH | SVGA3DBLOCKDESC_UINT,
262 SVGA3DBLOCKDESC_DEPTH_UNORM =
263 SVGA3DBLOCKDESC_DEPTH_UINT | SVGA3DBLOCKDESC_NORM,
264 SVGA3DBLOCKDESC_DS = SVGA3DBLOCKDESC_DEPTH | SVGA3DBLOCKDESC_STENCIL,
265 SVGA3DBLOCKDESC_DS_UINT = SVGA3DBLOCKDESC_DEPTH |
266 SVGA3DBLOCKDESC_STENCIL |
267 SVGA3DBLOCKDESC_UINT,
268 SVGA3DBLOCKDESC_DS_UNORM =
269 SVGA3DBLOCKDESC_DS_UINT | SVGA3DBLOCKDESC_NORM,
270 SVGA3DBLOCKDESC_DEPTH_FP = SVGA3DBLOCKDESC_DEPTH | SVGA3DBLOCKDESC_FP,
271
272 SVGA3DBLOCKDESC_UV_UINT = SVGA3DBLOCKDESC_UV | SVGA3DBLOCKDESC_UINT,
273 SVGA3DBLOCKDESC_UV_SNORM = SVGA3DBLOCKDESC_UV | SVGA3DBLOCKDESC_SINT |
274 SVGA3DBLOCKDESC_NORM,
275 SVGA3DBLOCKDESC_UVCX_SNORM =
276 SVGA3DBLOCKDESC_UV_SNORM | SVGA3DBLOCKDESC_CX,
277 SVGA3DBLOCKDESC_UVWQ_SNORM = SVGA3DBLOCKDESC_UVWQ |
278 SVGA3DBLOCKDESC_SINT |
279 SVGA3DBLOCKDESC_NORM,
280} SVGA3dBlockDesc;
281
282typedef struct SVGA3dChannelDef {
283 union {
284 uint8 blue;
285 uint8 w_bump;
286 uint8 l_bump;
287 uint8 uv_video;
288 uint8 u_video;
289 };
290 union {
291 uint8 green;
292 uint8 stencil;
293 uint8 v_bump;
294 uint8 v_video;
295 };
296 union {
297 uint8 red;
298 uint8 u_bump;
299 uint8 luminance;
300 uint8 y_video;
301 uint8 depth;
302 uint8 data;
303 };
304 union {
305 uint8 alpha;
306 uint8 q_bump;
307 uint8 exp;
308 };
309} SVGA3dChannelDef;
310
311typedef struct SVGA3dSurfaceDesc {
312 SVGA3dSurfaceFormat format;
313 SVGA3dBlockDesc blockDesc;
314
315 SVGA3dSize blockSize;
316 uint32 bytesPerBlock;
317 uint32 pitchBytesPerBlock;
318
319 SVGA3dChannelDef bitDepth;
320 SVGA3dChannelDef bitOffset;
321} SVGA3dSurfaceDesc;
322
323STATIC_CONST SVGA3dSurfaceDesc g_SVGA3dSurfaceDescs[] = {
324 { SVGA3D_FORMAT_INVALID,
325 SVGA3DBLOCKDESC_NONE,
326 { 1, 1, 1 },
327 0,
328 0,
329 { { 0 }, { 0 }, { 0 }, { 0 } },
330 { { 0 }, { 0 }, { 0 }, { 0 } } },
331
332 { SVGA3D_X8R8G8B8,
333 SVGA3DBLOCKDESC_RGB_UNORM,
334 { 1, 1, 1 },
335 4,
336 4,
337 { { 8 }, { 8 }, { 8 }, { 0 } },
338 { { 0 }, { 8 }, { 16 }, { 24 } } },
339
340 { SVGA3D_A8R8G8B8,
341 SVGA3DBLOCKDESC_RGBA_UNORM,
342 { 1, 1, 1 },
343 4,
344 4,
345 { { 8 }, { 8 }, { 8 }, { 8 } },
346 { { 0 }, { 8 }, { 16 }, { 24 } } },
347
348 { SVGA3D_R5G6B5,
349 SVGA3DBLOCKDESC_RGB_UNORM,
350 { 1, 1, 1 },
351 2,
352 2,
353 { { 5 }, { 6 }, { 5 }, { 0 } },
354 { { 0 }, { 5 }, { 11 }, { 0 } } },
355
356 { SVGA3D_X1R5G5B5,
357 SVGA3DBLOCKDESC_RGB_UNORM,
358 { 1, 1, 1 },
359 2,
360 2,
361 { { 5 }, { 5 }, { 5 }, { 0 } },
362 { { 0 }, { 5 }, { 10 }, { 0 } } },
363
364 { SVGA3D_A1R5G5B5,
365 SVGA3DBLOCKDESC_RGBA_UNORM,
366 { 1, 1, 1 },
367 2,
368 2,
369 { { 5 }, { 5 }, { 5 }, { 1 } },
370 { { 0 }, { 5 }, { 10 }, { 15 } } },
371
372 { SVGA3D_A4R4G4B4,
373 SVGA3DBLOCKDESC_RGBA_UNORM,
374 { 1, 1, 1 },
375 2,
376 2,
377 { { 4 }, { 4 }, { 4 }, { 4 } },
378 { { 0 }, { 4 }, { 8 }, { 12 } } },
379
380 { SVGA3D_Z_D32,
381 SVGA3DBLOCKDESC_DEPTH_UNORM,
382 { 1, 1, 1 },
383 4,
384 4,
385 { { 0 }, { 0 }, { 32 }, { 0 } },
386 { { 0 }, { 0 }, { 0 }, { 0 } } },
387
388 { SVGA3D_Z_D16,
389 SVGA3DBLOCKDESC_DEPTH_UNORM,
390 { 1, 1, 1 },
391 2,
392 2,
393 { { 0 }, { 0 }, { 16 }, { 0 } },
394 { { 0 }, { 0 }, { 0 }, { 0 } } },
395
396 { SVGA3D_Z_D24S8,
397 SVGA3DBLOCKDESC_DS_UNORM,
398 { 1, 1, 1 },
399 4,
400 4,
401 { { 0 }, { 8 }, { 24 }, { 0 } },
402 { { 0 }, { 0 }, { 8 }, { 0 } } },
403
404 { SVGA3D_Z_D15S1,
405 SVGA3DBLOCKDESC_DS_UNORM,
406 { 1, 1, 1 },
407 2,
408 2,
409 { { 0 }, { 1 }, { 15 }, { 0 } },
410 { { 0 }, { 0 }, { 1 }, { 0 } } },
411
412 { SVGA3D_LUMINANCE8,
413 SVGA3DBLOCKDESC_L_UNORM,
414 { 1, 1, 1 },
415 1,
416 1,
417 { { 0 }, { 0 }, { 8 }, { 0 } },
418 { { 0 }, { 0 }, { 0 }, { 0 } } },
419
420 { SVGA3D_LUMINANCE4_ALPHA4,
421 SVGA3DBLOCKDESC_LA_UNORM,
422 { 1, 1, 1 },
423 1,
424 1,
425 { { 0 }, { 0 }, { 4 }, { 4 } },
426 { { 0 }, { 0 }, { 0 }, { 4 } } },
427
428 { SVGA3D_LUMINANCE16,
429 SVGA3DBLOCKDESC_L_UNORM,
430 { 1, 1, 1 },
431 2,
432 2,
433 { { 0 }, { 0 }, { 16 }, { 0 } },
434 { { 0 }, { 0 }, { 0 }, { 0 } } },
435
436 { SVGA3D_LUMINANCE8_ALPHA8,
437 SVGA3DBLOCKDESC_LA_UNORM,
438 { 1, 1, 1 },
439 2,
440 2,
441 { { 0 }, { 0 }, { 8 }, { 8 } },
442 { { 0 }, { 0 }, { 0 }, { 8 } } },
443
444 { SVGA3D_DXT1,
445 SVGA3DBLOCKDESC_BC1_COMP_UNORM,
446 { 4, 4, 1 },
447 8,
448 8,
449 { { 0 }, { 0 }, { 64 }, { 0 } },
450 { { 0 }, { 0 }, { 0 }, { 0 } } },
451
452 { SVGA3D_DXT2,
453 SVGA3DBLOCKDESC_BC2_COMP_UNORM,
454 { 4, 4, 1 },
455 16,
456 16,
457 { { 0 }, { 0 }, { 128 }, { 0 } },
458 { { 0 }, { 0 }, { 0 }, { 0 } } },
459
460 { SVGA3D_DXT3,
461 SVGA3DBLOCKDESC_BC2_COMP_UNORM,
462 { 4, 4, 1 },
463 16,
464 16,
465 { { 0 }, { 0 }, { 128 }, { 0 } },
466 { { 0 }, { 0 }, { 0 }, { 0 } } },
467
468 { SVGA3D_DXT4,
469 SVGA3DBLOCKDESC_BC3_COMP_UNORM,
470 { 4, 4, 1 },
471 16,
472 16,
473 { { 0 }, { 0 }, { 128 }, { 0 } },
474 { { 0 }, { 0 }, { 0 }, { 0 } } },
475
476 { SVGA3D_DXT5,
477 SVGA3DBLOCKDESC_BC3_COMP_UNORM,
478 { 4, 4, 1 },
479 16,
480 16,
481 { { 0 }, { 0 }, { 128 }, { 0 } },
482 { { 0 }, { 0 }, { 0 }, { 0 } } },
483
484 { SVGA3D_BUMPU8V8,
485 SVGA3DBLOCKDESC_UV_SNORM,
486 { 1, 1, 1 },
487 2,
488 2,
489 { { 0 }, { 8 }, { 8 }, { 0 } },
490 { { 0 }, { 8 }, { 0 }, { 0 } } },
491
492 { SVGA3D_BUMPL6V5U5,
493 SVGA3DBLOCKDESC_UVL,
494 { 1, 1, 1 },
495 2,
496 2,
497 { { 6 }, { 5 }, { 5 }, { 0 } },
498 { { 10 }, { 5 }, { 0 }, { 0 } } },
499
500 { SVGA3D_BUMPX8L8V8U8,
501 SVGA3DBLOCKDESC_UVL,
502 { 1, 1, 1 },
503 4,
504 4,
505 { { 8 }, { 8 }, { 8 }, { 0 } },
506 { { 16 }, { 8 }, { 0 }, { 0 } } },
507
508 { SVGA3D_FORMAT_DEAD1,
509 SVGA3DBLOCKDESC_NONE,
510 { 1, 1, 1 },
511 3,
512 3,
513 { { 8 }, { 8 }, { 8 }, { 0 } },
514 { { 16 }, { 8 }, { 0 }, { 0 } } },
515
516 { SVGA3D_ARGB_S10E5,
517 SVGA3DBLOCKDESC_RGBA_FP,
518 { 1, 1, 1 },
519 8,
520 8,
521 { { 16 }, { 16 }, { 16 }, { 16 } },
522 { { 32 }, { 16 }, { 0 }, { 48 } } },
523
524 { SVGA3D_ARGB_S23E8,
525 SVGA3DBLOCKDESC_RGBA_FP,
526 { 1, 1, 1 },
527 16,
528 16,
529 { { 32 }, { 32 }, { 32 }, { 32 } },
530 { { 64 }, { 32 }, { 0 }, { 96 } } },
531
532 { SVGA3D_A2R10G10B10,
533 SVGA3DBLOCKDESC_RGBA_UNORM,
534 { 1, 1, 1 },
535 4,
536 4,
537 { { 10 }, { 10 }, { 10 }, { 2 } },
538 { { 0 }, { 10 }, { 20 }, { 30 } } },
539
540 { SVGA3D_V8U8,
541 SVGA3DBLOCKDESC_UV_SNORM,
542 { 1, 1, 1 },
543 2,
544 2,
545 { { 0 }, { 8 }, { 8 }, { 0 } },
546 { { 0 }, { 8 }, { 0 }, { 0 } } },
547
548 { SVGA3D_Q8W8V8U8,
549 SVGA3DBLOCKDESC_UVWQ_SNORM,
550 { 1, 1, 1 },
551 4,
552 4,
553 { { 8 }, { 8 }, { 8 }, { 8 } },
554 { { 16 }, { 8 }, { 0 }, { 24 } } },
555
556 { SVGA3D_CxV8U8,
557 SVGA3DBLOCKDESC_UVCX_SNORM,
558 { 1, 1, 1 },
559 2,
560 2,
561 { { 0 }, { 8 }, { 8 }, { 0 } },
562 { { 0 }, { 8 }, { 0 }, { 0 } } },
563
564 { SVGA3D_X8L8V8U8,
565 SVGA3DBLOCKDESC_UVL,
566 { 1, 1, 1 },
567 4,
568 4,
569 { { 8 }, { 8 }, { 8 }, { 0 } },
570 { { 16 }, { 8 }, { 0 }, { 0 } } },
571
572 { SVGA3D_A2W10V10U10,
573 SVGA3DBLOCKDESC_UVWA,
574 { 1, 1, 1 },
575 4,
576 4,
577 { { 10 }, { 10 }, { 10 }, { 2 } },
578 { { 20 }, { 10 }, { 0 }, { 30 } } },
579
580 { SVGA3D_ALPHA8,
581 SVGA3DBLOCKDESC_A_UNORM,
582 { 1, 1, 1 },
583 1,
584 1,
585 { { 0 }, { 0 }, { 0 }, { 8 } },
586 { { 0 }, { 0 }, { 0 }, { 0 } } },
587
588 { SVGA3D_R_S10E5,
589 SVGA3DBLOCKDESC_R_FP,
590 { 1, 1, 1 },
591 2,
592 2,
593 { { 0 }, { 0 }, { 16 }, { 0 } },
594 { { 0 }, { 0 }, { 0 }, { 0 } } },
595
596 { SVGA3D_R_S23E8,
597 SVGA3DBLOCKDESC_R_FP,
598 { 1, 1, 1 },
599 4,
600 4,
601 { { 0 }, { 0 }, { 32 }, { 0 } },
602 { { 0 }, { 0 }, { 0 }, { 0 } } },
603
604 { SVGA3D_RG_S10E5,
605 SVGA3DBLOCKDESC_RG_FP,
606 { 1, 1, 1 },
607 4,
608 4,
609 { { 0 }, { 16 }, { 16 }, { 0 } },
610 { { 0 }, { 16 }, { 0 }, { 0 } } },
611
612 { SVGA3D_RG_S23E8,
613 SVGA3DBLOCKDESC_RG_FP,
614 { 1, 1, 1 },
615 8,
616 8,
617 { { 0 }, { 32 }, { 32 }, { 0 } },
618 { { 0 }, { 32 }, { 0 }, { 0 } } },
619
620 { SVGA3D_BUFFER,
621 SVGA3DBLOCKDESC_BUFFER,
622 { 1, 1, 1 },
623 1,
624 1,
625 { { 0 }, { 0 }, { 8 }, { 0 } },
626 { { 0 }, { 0 }, { 0 }, { 0 } } },
627
628 { SVGA3D_Z_D24X8,
629 SVGA3DBLOCKDESC_DEPTH_UNORM,
630 { 1, 1, 1 },
631 4,
632 4,
633 { { 0 }, { 0 }, { 24 }, { 0 } },
634 { { 0 }, { 0 }, { 8 }, { 0 } } },
635
636 { SVGA3D_V16U16,
637 SVGA3DBLOCKDESC_UV_SNORM,
638 { 1, 1, 1 },
639 4,
640 4,
641 { { 0 }, { 16 }, { 16 }, { 0 } },
642 { { 0 }, { 16 }, { 0 }, { 0 } } },
643
644 { SVGA3D_G16R16,
645 SVGA3DBLOCKDESC_RG_UNORM,
646 { 1, 1, 1 },
647 4,
648 4,
649 { { 0 }, { 16 }, { 16 }, { 0 } },
650 { { 0 }, { 16 }, { 0 }, { 0 } } },
651
652 { SVGA3D_A16B16G16R16,
653 SVGA3DBLOCKDESC_RGBA_UNORM,
654 { 1, 1, 1 },
655 8,
656 8,
657 { { 16 }, { 16 }, { 16 }, { 16 } },
658 { { 32 }, { 16 }, { 0 }, { 48 } } },
659
660 { SVGA3D_UYVY,
661 SVGA3DBLOCKDESC_YUV,
662 { 2, 1, 1 },
663 4,
664 4,
665 { { 8 }, { 0 }, { 8 }, { 0 } },
666 { { 0 }, { 0 }, { 8 }, { 0 } } },
667
668 { SVGA3D_YUY2,
669 SVGA3DBLOCKDESC_YUV,
670 { 2, 1, 1 },
671 4,
672 4,
673 { { 8 }, { 0 }, { 8 }, { 0 } },
674 { { 8 }, { 0 }, { 0 }, { 0 } } },
675
676 { SVGA3D_NV12,
677 SVGA3DBLOCKDESC_NV12,
678 { 2, 2, 1 },
679 6,
680 2,
681 { { 0 }, { 0 }, { 48 }, { 0 } },
682 { { 0 }, { 0 }, { 0 }, { 0 } } },
683
684 { SVGA3D_FORMAT_DEAD2,
685 SVGA3DBLOCKDESC_NONE,
686 { 1, 1, 1 },
687 4,
688 4,
689 { { 8 }, { 8 }, { 8 }, { 8 } },
690 { { 0 }, { 8 }, { 16 }, { 24 } } },
691
692 { SVGA3D_R32G32B32A32_TYPELESS,
693 SVGA3DBLOCKDESC_TYPELESS,
694 { 1, 1, 1 },
695 16,
696 16,
697 { { 32 }, { 32 }, { 32 }, { 32 } },
698 { { 64 }, { 32 }, { 0 }, { 96 } } },
699
700 { SVGA3D_R32G32B32A32_UINT,
701 SVGA3DBLOCKDESC_RGBA_UINT,
702 { 1, 1, 1 },
703 16,
704 16,
705 { { 32 }, { 32 }, { 32 }, { 32 } },
706 { { 64 }, { 32 }, { 0 }, { 96 } } },
707
708 { SVGA3D_R32G32B32A32_SINT,
709 SVGA3DBLOCKDESC_RGBA_SINT,
710 { 1, 1, 1 },
711 16,
712 16,
713 { { 32 }, { 32 }, { 32 }, { 32 } },
714 { { 64 }, { 32 }, { 0 }, { 96 } } },
715
716 { SVGA3D_R32G32B32_TYPELESS,
717 SVGA3DBLOCKDESC_TYPELESS,
718 { 1, 1, 1 },
719 12,
720 12,
721 { { 32 }, { 32 }, { 32 }, { 0 } },
722 { { 64 }, { 32 }, { 0 }, { 0 } } },
723
724 { SVGA3D_R32G32B32_FLOAT,
725 SVGA3DBLOCKDESC_RGB_FP,
726 { 1, 1, 1 },
727 12,
728 12,
729 { { 32 }, { 32 }, { 32 }, { 0 } },
730 { { 64 }, { 32 }, { 0 }, { 0 } } },
731
732 { SVGA3D_R32G32B32_UINT,
733 SVGA3DBLOCKDESC_RGB_UINT,
734 { 1, 1, 1 },
735 12,
736 12,
737 { { 32 }, { 32 }, { 32 }, { 0 } },
738 { { 64 }, { 32 }, { 0 }, { 0 } } },
739
740 { SVGA3D_R32G32B32_SINT,
741 SVGA3DBLOCKDESC_RGB_SINT,
742 { 1, 1, 1 },
743 12,
744 12,
745 { { 32 }, { 32 }, { 32 }, { 0 } },
746 { { 64 }, { 32 }, { 0 }, { 0 } } },
747
748 { SVGA3D_R16G16B16A16_TYPELESS,
749 SVGA3DBLOCKDESC_TYPELESS,
750 { 1, 1, 1 },
751 8,
752 8,
753 { { 16 }, { 16 }, { 16 }, { 16 } },
754 { { 32 }, { 16 }, { 0 }, { 48 } } },
755
756 { SVGA3D_R16G16B16A16_UINT,
757 SVGA3DBLOCKDESC_RGBA_UINT,
758 { 1, 1, 1 },
759 8,
760 8,
761 { { 16 }, { 16 }, { 16 }, { 16 } },
762 { { 32 }, { 16 }, { 0 }, { 48 } } },
763
764 { SVGA3D_R16G16B16A16_SNORM,
765 SVGA3DBLOCKDESC_RGBA_SNORM,
766 { 1, 1, 1 },
767 8,
768 8,
769 { { 16 }, { 16 }, { 16 }, { 16 } },
770 { { 32 }, { 16 }, { 0 }, { 48 } } },
771
772 { SVGA3D_R16G16B16A16_SINT,
773 SVGA3DBLOCKDESC_RGBA_SINT,
774 { 1, 1, 1 },
775 8,
776 8,
777 { { 16 }, { 16 }, { 16 }, { 16 } },
778 { { 32 }, { 16 }, { 0 }, { 48 } } },
779
780 { SVGA3D_R32G32_TYPELESS,
781 SVGA3DBLOCKDESC_TYPELESS,
782 { 1, 1, 1 },
783 8,
784 8,
785 { { 0 }, { 32 }, { 32 }, { 0 } },
786 { { 0 }, { 32 }, { 0 }, { 0 } } },
787
788 { SVGA3D_R32G32_UINT,
789 SVGA3DBLOCKDESC_RG_UINT,
790 { 1, 1, 1 },
791 8,
792 8,
793 { { 0 }, { 32 }, { 32 }, { 0 } },
794 { { 0 }, { 32 }, { 0 }, { 0 } } },
795
796 { SVGA3D_R32G32_SINT,
797 SVGA3DBLOCKDESC_RG_SINT,
798 { 1, 1, 1 },
799 8,
800 8,
801 { { 0 }, { 32 }, { 32 }, { 0 } },
802 { { 0 }, { 32 }, { 0 }, { 0 } } },
803
804 { SVGA3D_R32G8X24_TYPELESS,
805 SVGA3DBLOCKDESC_TYPELESS,
806 { 1, 1, 1 },
807 8,
808 8,
809 { { 0 }, { 8 }, { 32 }, { 0 } },
810 { { 0 }, { 32 }, { 0 }, { 0 } } },
811
812 { SVGA3D_D32_FLOAT_S8X24_UINT,
813 SVGA3DBLOCKDESC_DS,
814 { 1, 1, 1 },
815 8,
816 8,
817 { { 0 }, { 8 }, { 32 }, { 0 } },
818 { { 0 }, { 32 }, { 0 }, { 0 } } },
819
820 { SVGA3D_R32_FLOAT_X8X24,
821 SVGA3DBLOCKDESC_R_FP,
822 { 1, 1, 1 },
823 8,
824 8,
825 { { 0 }, { 0 }, { 32 }, { 0 } },
826 { { 0 }, { 0 }, { 0 }, { 0 } } },
827
828 { SVGA3D_X32_G8X24_UINT,
829 SVGA3DBLOCKDESC_G_UINT,
830 { 1, 1, 1 },
831 8,
832 8,
833 { { 0 }, { 8 }, { 0 }, { 0 } },
834 { { 0 }, { 32 }, { 0 }, { 0 } } },
835
836 { SVGA3D_R10G10B10A2_TYPELESS,
837 SVGA3DBLOCKDESC_TYPELESS,
838 { 1, 1, 1 },
839 4,
840 4,
841 { { 10 }, { 10 }, { 10 }, { 2 } },
842 { { 20 }, { 10 }, { 0 }, { 30 } } },
843
844 { SVGA3D_R10G10B10A2_UINT,
845 SVGA3DBLOCKDESC_RGBA_UINT,
846 { 1, 1, 1 },
847 4,
848 4,
849 { { 10 }, { 10 }, { 10 }, { 2 } },
850 { { 20 }, { 10 }, { 0 }, { 30 } } },
851
852 { SVGA3D_R11G11B10_FLOAT,
853 SVGA3DBLOCKDESC_RGB_FP,
854 { 1, 1, 1 },
855 4,
856 4,
857 { { 10 }, { 11 }, { 11 }, { 0 } },
858 { { 22 }, { 11 }, { 0 }, { 0 } } },
859
860 { SVGA3D_R8G8B8A8_TYPELESS,
861 SVGA3DBLOCKDESC_TYPELESS,
862 { 1, 1, 1 },
863 4,
864 4,
865 { { 8 }, { 8 }, { 8 }, { 8 } },
866 { { 16 }, { 8 }, { 0 }, { 24 } } },
867
868 { SVGA3D_R8G8B8A8_UNORM,
869 SVGA3DBLOCKDESC_RGBA_UNORM,
870 { 1, 1, 1 },
871 4,
872 4,
873 { { 8 }, { 8 }, { 8 }, { 8 } },
874 { { 16 }, { 8 }, { 0 }, { 24 } } },
875
876 { SVGA3D_R8G8B8A8_UNORM_SRGB,
877 SVGA3DBLOCKDESC_RGBA_UNORM_SRGB,
878 { 1, 1, 1 },
879 4,
880 4,
881 { { 8 }, { 8 }, { 8 }, { 8 } },
882 { { 16 }, { 8 }, { 0 }, { 24 } } },
883
884 { SVGA3D_R8G8B8A8_UINT,
885 SVGA3DBLOCKDESC_RGBA_UINT,
886 { 1, 1, 1 },
887 4,
888 4,
889 { { 8 }, { 8 }, { 8 }, { 8 } },
890 { { 16 }, { 8 }, { 0 }, { 24 } } },
891
892 { SVGA3D_R8G8B8A8_SINT,
893 SVGA3DBLOCKDESC_RGBA_SINT,
894 { 1, 1, 1 },
895 4,
896 4,
897 { { 8 }, { 8 }, { 8 }, { 8 } },
898 { { 16 }, { 8 }, { 0 }, { 24 } } },
899
900 { SVGA3D_R16G16_TYPELESS,
901 SVGA3DBLOCKDESC_TYPELESS,
902 { 1, 1, 1 },
903 4,
904 4,
905 { { 0 }, { 16 }, { 16 }, { 0 } },
906 { { 0 }, { 16 }, { 0 }, { 0 } } },
907
908 { SVGA3D_R16G16_UINT,
909 SVGA3DBLOCKDESC_RG_UINT,
910 { 1, 1, 1 },
911 4,
912 4,
913 { { 0 }, { 16 }, { 16 }, { 0 } },
914 { { 0 }, { 16 }, { 0 }, { 0 } } },
915
916 { SVGA3D_R16G16_SINT,
917 SVGA3DBLOCKDESC_RG_SINT,
918 { 1, 1, 1 },
919 4,
920 4,
921 { { 0 }, { 16 }, { 16 }, { 0 } },
922 { { 0 }, { 16 }, { 0 }, { 0 } } },
923
924 { SVGA3D_R32_TYPELESS,
925 SVGA3DBLOCKDESC_TYPELESS,
926 { 1, 1, 1 },
927 4,
928 4,
929 { { 0 }, { 0 }, { 32 }, { 0 } },
930 { { 0 }, { 0 }, { 0 }, { 0 } } },
931
932 { SVGA3D_D32_FLOAT,
933 SVGA3DBLOCKDESC_DEPTH_FP,
934 { 1, 1, 1 },
935 4,
936 4,
937 { { 0 }, { 0 }, { 32 }, { 0 } },
938 { { 0 }, { 0 }, { 0 }, { 0 } } },
939
940 { SVGA3D_R32_UINT,
941 SVGA3DBLOCKDESC_R_UINT,
942 { 1, 1, 1 },
943 4,
944 4,
945 { { 0 }, { 0 }, { 32 }, { 0 } },
946 { { 0 }, { 0 }, { 0 }, { 0 } } },
947
948 { SVGA3D_R32_SINT,
949 SVGA3DBLOCKDESC_R_SINT,
950 { 1, 1, 1 },
951 4,
952 4,
953 { { 0 }, { 0 }, { 32 }, { 0 } },
954 { { 0 }, { 0 }, { 0 }, { 0 } } },
955
956 { SVGA3D_R24G8_TYPELESS,
957 SVGA3DBLOCKDESC_TYPELESS,
958 { 1, 1, 1 },
959 4,
960 4,
961 { { 0 }, { 8 }, { 24 }, { 0 } },
962 { { 0 }, { 24 }, { 0 }, { 0 } } },
963
964 { SVGA3D_D24_UNORM_S8_UINT,
965 SVGA3DBLOCKDESC_DS_UNORM,
966 { 1, 1, 1 },
967 4,
968 4,
969 { { 0 }, { 8 }, { 24 }, { 0 } },
970 { { 0 }, { 24 }, { 0 }, { 0 } } },
971
972 { SVGA3D_R24_UNORM_X8,
973 SVGA3DBLOCKDESC_R_UNORM,
974 { 1, 1, 1 },
975 4,
976 4,
977 { { 0 }, { 0 }, { 24 }, { 0 } },
978 { { 0 }, { 0 }, { 0 }, { 0 } } },
979
980 { SVGA3D_X24_G8_UINT,
981 SVGA3DBLOCKDESC_G_UINT,
982 { 1, 1, 1 },
983 4,
984 4,
985 { { 0 }, { 8 }, { 0 }, { 0 } },
986 { { 0 }, { 24 }, { 0 }, { 0 } } },
987
988 { SVGA3D_R8G8_TYPELESS,
989 SVGA3DBLOCKDESC_TYPELESS,
990 { 1, 1, 1 },
991 2,
992 2,
993 { { 0 }, { 8 }, { 8 }, { 0 } },
994 { { 0 }, { 8 }, { 0 }, { 0 } } },
995
996 { SVGA3D_R8G8_UNORM,
997 SVGA3DBLOCKDESC_RG_UNORM,
998 { 1, 1, 1 },
999 2,
1000 2,
1001 { { 0 }, { 8 }, { 8 }, { 0 } },
1002 { { 0 }, { 8 }, { 0 }, { 0 } } },
1003
1004 { SVGA3D_R8G8_UINT,
1005 SVGA3DBLOCKDESC_RG_UINT,
1006 { 1, 1, 1 },
1007 2,
1008 2,
1009 { { 0 }, { 8 }, { 8 }, { 0 } },
1010 { { 0 }, { 8 }, { 0 }, { 0 } } },
1011
1012 { SVGA3D_R8G8_SINT,
1013 SVGA3DBLOCKDESC_RG_SINT,
1014 { 1, 1, 1 },
1015 2,
1016 2,
1017 { { 0 }, { 8 }, { 8 }, { 0 } },
1018 { { 0 }, { 8 }, { 0 }, { 0 } } },
1019
1020 { SVGA3D_R16_TYPELESS,
1021 SVGA3DBLOCKDESC_TYPELESS,
1022 { 1, 1, 1 },
1023 2,
1024 2,
1025 { { 0 }, { 0 }, { 16 }, { 0 } },
1026 { { 0 }, { 0 }, { 0 }, { 0 } } },
1027
1028 { SVGA3D_R16_UNORM,
1029 SVGA3DBLOCKDESC_R_UNORM,
1030 { 1, 1, 1 },
1031 2,
1032 2,
1033 { { 0 }, { 0 }, { 16 }, { 0 } },
1034 { { 0 }, { 0 }, { 0 }, { 0 } } },
1035
1036 { SVGA3D_R16_UINT,
1037 SVGA3DBLOCKDESC_R_UINT,
1038 { 1, 1, 1 },
1039 2,
1040 2,
1041 { { 0 }, { 0 }, { 16 }, { 0 } },
1042 { { 0 }, { 0 }, { 0 }, { 0 } } },
1043
1044 { SVGA3D_R16_SNORM,
1045 SVGA3DBLOCKDESC_R_SNORM,
1046 { 1, 1, 1 },
1047 2,
1048 2,
1049 { { 0 }, { 0 }, { 16 }, { 0 } },
1050 { { 0 }, { 0 }, { 0 }, { 0 } } },
1051
1052 { SVGA3D_R16_SINT,
1053 SVGA3DBLOCKDESC_R_SINT,
1054 { 1, 1, 1 },
1055 2,
1056 2,
1057 { { 0 }, { 0 }, { 16 }, { 0 } },
1058 { { 0 }, { 0 }, { 0 }, { 0 } } },
1059
1060 { SVGA3D_R8_TYPELESS,
1061 SVGA3DBLOCKDESC_TYPELESS,
1062 { 1, 1, 1 },
1063 1,
1064 1,
1065 { { 0 }, { 0 }, { 8 }, { 0 } },
1066 { { 0 }, { 0 }, { 0 }, { 0 } } },
1067
1068 { SVGA3D_R8_UNORM,
1069 SVGA3DBLOCKDESC_R_UNORM,
1070 { 1, 1, 1 },
1071 1,
1072 1,
1073 { { 0 }, { 0 }, { 8 }, { 0 } },
1074 { { 0 }, { 0 }, { 0 }, { 0 } } },
1075
1076 { SVGA3D_R8_UINT,
1077 SVGA3DBLOCKDESC_R_UINT,
1078 { 1, 1, 1 },
1079 1,
1080 1,
1081 { { 0 }, { 0 }, { 8 }, { 0 } },
1082 { { 0 }, { 0 }, { 0 }, { 0 } } },
1083
1084 { SVGA3D_R8_SNORM,
1085 SVGA3DBLOCKDESC_R_SNORM,
1086 { 1, 1, 1 },
1087 1,
1088 1,
1089 { { 0 }, { 0 }, { 8 }, { 0 } },
1090 { { 0 }, { 0 }, { 0 }, { 0 } } },
1091
1092 { SVGA3D_R8_SINT,
1093 SVGA3DBLOCKDESC_R_SINT,
1094 { 1, 1, 1 },
1095 1,
1096 1,
1097 { { 0 }, { 0 }, { 8 }, { 0 } },
1098 { { 0 }, { 0 }, { 0 }, { 0 } } },
1099
1100 { SVGA3D_P8,
1101 SVGA3DBLOCKDESC_NONE,
1102 { 1, 1, 1 },
1103 1,
1104 1,
1105 { { 0 }, { 0 }, { 8 }, { 0 } },
1106 { { 0 }, { 0 }, { 0 }, { 0 } } },
1107
1108 { SVGA3D_R9G9B9E5_SHAREDEXP,
1109 SVGA3DBLOCKDESC_RGB_EXP,
1110 { 1, 1, 1 },
1111 4,
1112 4,
1113 { { 9 }, { 9 }, { 9 }, { 5 } },
1114 { { 18 }, { 9 }, { 0 }, { 27 } } },
1115
1116 { SVGA3D_R8G8_B8G8_UNORM,
1117 SVGA3DBLOCKDESC_NONE,
1118 { 2, 1, 1 },
1119 4,
1120 4,
1121 { { 0 }, { 8 }, { 8 }, { 0 } },
1122 { { 0 }, { 0 }, { 8 }, { 0 } } },
1123
1124 { SVGA3D_G8R8_G8B8_UNORM,
1125 SVGA3DBLOCKDESC_NONE,
1126 { 2, 1, 1 },
1127 4,
1128 4,
1129 { { 0 }, { 8 }, { 8 }, { 0 } },
1130 { { 0 }, { 8 }, { 0 }, { 0 } } },
1131
1132 { SVGA3D_BC1_TYPELESS,
1133 SVGA3DBLOCKDESC_BC1_COMP_TYPELESS,
1134 { 4, 4, 1 },
1135 8,
1136 8,
1137 { { 0 }, { 0 }, { 64 }, { 0 } },
1138 { { 0 }, { 0 }, { 0 }, { 0 } } },
1139
1140 { SVGA3D_BC1_UNORM_SRGB,
1141 SVGA3DBLOCKDESC_BC1_COMP_UNORM_SRGB,
1142 { 4, 4, 1 },
1143 8,
1144 8,
1145 { { 0 }, { 0 }, { 64 }, { 0 } },
1146 { { 0 }, { 0 }, { 0 }, { 0 } } },
1147
1148 { SVGA3D_BC2_TYPELESS,
1149 SVGA3DBLOCKDESC_BC2_COMP_TYPELESS,
1150 { 4, 4, 1 },
1151 16,
1152 16,
1153 { { 0 }, { 0 }, { 128 }, { 0 } },
1154 { { 0 }, { 0 }, { 0 }, { 0 } } },
1155
1156 { SVGA3D_BC2_UNORM_SRGB,
1157 SVGA3DBLOCKDESC_BC2_COMP_UNORM_SRGB,
1158 { 4, 4, 1 },
1159 16,
1160 16,
1161 { { 0 }, { 0 }, { 128 }, { 0 } },
1162 { { 0 }, { 0 }, { 0 }, { 0 } } },
1163
1164 { SVGA3D_BC3_TYPELESS,
1165 SVGA3DBLOCKDESC_BC3_COMP_TYPELESS,
1166 { 4, 4, 1 },
1167 16,
1168 16,
1169 { { 0 }, { 0 }, { 128 }, { 0 } },
1170 { { 0 }, { 0 }, { 0 }, { 0 } } },
1171
1172 { SVGA3D_BC3_UNORM_SRGB,
1173 SVGA3DBLOCKDESC_BC3_COMP_UNORM_SRGB,
1174 { 4, 4, 1 },
1175 16,
1176 16,
1177 { { 0 }, { 0 }, { 128 }, { 0 } },
1178 { { 0 }, { 0 }, { 0 }, { 0 } } },
1179
1180 { SVGA3D_BC4_TYPELESS,
1181 SVGA3DBLOCKDESC_BC4_COMP_TYPELESS,
1182 { 4, 4, 1 },
1183 8,
1184 8,
1185 { { 0 }, { 0 }, { 64 }, { 0 } },
1186 { { 0 }, { 0 }, { 0 }, { 0 } } },
1187
1188 { SVGA3D_ATI1,
1189 SVGA3DBLOCKDESC_BC4_COMP_UNORM,
1190 { 4, 4, 1 },
1191 8,
1192 8,
1193 { { 0 }, { 0 }, { 64 }, { 0 } },
1194 { { 0 }, { 0 }, { 0 }, { 0 } } },
1195
1196 { SVGA3D_BC4_SNORM,
1197 SVGA3DBLOCKDESC_BC4_COMP_SNORM,
1198 { 4, 4, 1 },
1199 8,
1200 8,
1201 { { 0 }, { 0 }, { 64 }, { 0 } },
1202 { { 0 }, { 0 }, { 0 }, { 0 } } },
1203
1204 { SVGA3D_BC5_TYPELESS,
1205 SVGA3DBLOCKDESC_BC5_COMP_TYPELESS,
1206 { 4, 4, 1 },
1207 16,
1208 16,
1209 { { 0 }, { 0 }, { 128 }, { 0 } },
1210 { { 0 }, { 0 }, { 0 }, { 0 } } },
1211
1212 { SVGA3D_ATI2,
1213 SVGA3DBLOCKDESC_BC5_COMP_UNORM,
1214 { 4, 4, 1 },
1215 16,
1216 16,
1217 { { 0 }, { 0 }, { 128 }, { 0 } },
1218 { { 0 }, { 0 }, { 0 }, { 0 } } },
1219
1220 { SVGA3D_BC5_SNORM,
1221 SVGA3DBLOCKDESC_BC5_COMP_SNORM,
1222 { 4, 4, 1 },
1223 16,
1224 16,
1225 { { 0 }, { 0 }, { 128 }, { 0 } },
1226 { { 0 }, { 0 }, { 0 }, { 0 } } },
1227
1228 { SVGA3D_R10G10B10_XR_BIAS_A2_UNORM,
1229 SVGA3DBLOCKDESC_RGBA_UNORM,
1230 { 1, 1, 1 },
1231 4,
1232 4,
1233 { { 10 }, { 10 }, { 10 }, { 2 } },
1234 { { 20 }, { 10 }, { 0 }, { 30 } } },
1235
1236 { SVGA3D_B8G8R8A8_TYPELESS,
1237 SVGA3DBLOCKDESC_TYPELESS,
1238 { 1, 1, 1 },
1239 4,
1240 4,
1241 { { 8 }, { 8 }, { 8 }, { 8 } },
1242 { { 0 }, { 8 }, { 16 }, { 24 } } },
1243
1244 { SVGA3D_B8G8R8A8_UNORM_SRGB,
1245 SVGA3DBLOCKDESC_RGBA_UNORM_SRGB,
1246 { 1, 1, 1 },
1247 4,
1248 4,
1249 { { 8 }, { 8 }, { 8 }, { 8 } },
1250 { { 0 }, { 8 }, { 16 }, { 24 } } },
1251
1252 { SVGA3D_B8G8R8X8_TYPELESS,
1253 SVGA3DBLOCKDESC_TYPELESS,
1254 { 1, 1, 1 },
1255 4,
1256 4,
1257 { { 8 }, { 8 }, { 8 }, { 0 } },
1258 { { 0 }, { 8 }, { 16 }, { 24 } } },
1259
1260 { SVGA3D_B8G8R8X8_UNORM_SRGB,
1261 SVGA3DBLOCKDESC_RGB_UNORM_SRGB,
1262 { 1, 1, 1 },
1263 4,
1264 4,
1265 { { 8 }, { 8 }, { 8 }, { 0 } },
1266 { { 0 }, { 8 }, { 16 }, { 24 } } },
1267
1268 { SVGA3D_Z_DF16,
1269 SVGA3DBLOCKDESC_DEPTH_UNORM,
1270 { 1, 1, 1 },
1271 2,
1272 2,
1273 { { 0 }, { 0 }, { 16 }, { 0 } },
1274 { { 0 }, { 0 }, { 0 }, { 0 } } },
1275
1276 { SVGA3D_Z_DF24,
1277 SVGA3DBLOCKDESC_DEPTH_UNORM,
1278 { 1, 1, 1 },
1279 4,
1280 4,
1281 { { 0 }, { 0 }, { 24 }, { 0 } },
1282 { { 0 }, { 0 }, { 8 }, { 0 } } },
1283
1284 { SVGA3D_Z_D24S8_INT,
1285 SVGA3DBLOCKDESC_DS_UNORM,
1286 { 1, 1, 1 },
1287 4,
1288 4,
1289 { { 0 }, { 8 }, { 24 }, { 0 } },
1290 { { 0 }, { 0 }, { 8 }, { 0 } } },
1291
1292 { SVGA3D_YV12,
1293 SVGA3DBLOCKDESC_YV12,
1294 { 2, 2, 1 },
1295 6,
1296 2,
1297 { { 0 }, { 0 }, { 48 }, { 0 } },
1298 { { 0 }, { 0 }, { 0 }, { 0 } } },
1299
1300 { SVGA3D_R32G32B32A32_FLOAT,
1301 SVGA3DBLOCKDESC_RGBA_FP,
1302 { 1, 1, 1 },
1303 16,
1304 16,
1305 { { 32 }, { 32 }, { 32 }, { 32 } },
1306 { { 64 }, { 32 }, { 0 }, { 96 } } },
1307
1308 { SVGA3D_R16G16B16A16_FLOAT,
1309 SVGA3DBLOCKDESC_RGBA_FP,
1310 { 1, 1, 1 },
1311 8,
1312 8,
1313 { { 16 }, { 16 }, { 16 }, { 16 } },
1314 { { 32 }, { 16 }, { 0 }, { 48 } } },
1315
1316 { SVGA3D_R16G16B16A16_UNORM,
1317 SVGA3DBLOCKDESC_RGBA_UNORM,
1318 { 1, 1, 1 },
1319 8,
1320 8,
1321 { { 16 }, { 16 }, { 16 }, { 16 } },
1322 { { 32 }, { 16 }, { 0 }, { 48 } } },
1323
1324 { SVGA3D_R32G32_FLOAT,
1325 SVGA3DBLOCKDESC_RG_FP,
1326 { 1, 1, 1 },
1327 8,
1328 8,
1329 { { 0 }, { 32 }, { 32 }, { 0 } },
1330 { { 0 }, { 32 }, { 0 }, { 0 } } },
1331
1332 { SVGA3D_R10G10B10A2_UNORM,
1333 SVGA3DBLOCKDESC_RGBA_UNORM,
1334 { 1, 1, 1 },
1335 4,
1336 4,
1337 { { 10 }, { 10 }, { 10 }, { 2 } },
1338 { { 20 }, { 10 }, { 0 }, { 30 } } },
1339
1340 { SVGA3D_R8G8B8A8_SNORM,
1341 SVGA3DBLOCKDESC_RGBA_SNORM,
1342 { 1, 1, 1 },
1343 4,
1344 4,
1345 { { 8 }, { 8 }, { 8 }, { 8 } },
1346 { { 16 }, { 8 }, { 0 }, { 24 } } },
1347
1348 { SVGA3D_R16G16_FLOAT,
1349 SVGA3DBLOCKDESC_RG_FP,
1350 { 1, 1, 1 },
1351 4,
1352 4,
1353 { { 0 }, { 16 }, { 16 }, { 0 } },
1354 { { 0 }, { 16 }, { 0 }, { 0 } } },
1355
1356 { SVGA3D_R16G16_UNORM,
1357 SVGA3DBLOCKDESC_RG_UNORM,
1358 { 1, 1, 1 },
1359 4,
1360 4,
1361 { { 0 }, { 16 }, { 16 }, { 0 } },
1362 { { 0 }, { 16 }, { 0 }, { 0 } } },
1363
1364 { SVGA3D_R16G16_SNORM,
1365 SVGA3DBLOCKDESC_RG_SNORM,
1366 { 1, 1, 1 },
1367 4,
1368 4,
1369 { { 0 }, { 16 }, { 16 }, { 0 } },
1370 { { 0 }, { 16 }, { 0 }, { 0 } } },
1371
1372 { SVGA3D_R32_FLOAT,
1373 SVGA3DBLOCKDESC_R_FP,
1374 { 1, 1, 1 },
1375 4,
1376 4,
1377 { { 0 }, { 0 }, { 32 }, { 0 } },
1378 { { 0 }, { 0 }, { 0 }, { 0 } } },
1379
1380 { SVGA3D_R8G8_SNORM,
1381 SVGA3DBLOCKDESC_RG_SNORM,
1382 { 1, 1, 1 },
1383 2,
1384 2,
1385 { { 0 }, { 8 }, { 8 }, { 0 } },
1386 { { 0 }, { 8 }, { 0 }, { 0 } } },
1387
1388 { SVGA3D_R16_FLOAT,
1389 SVGA3DBLOCKDESC_R_FP,
1390 { 1, 1, 1 },
1391 2,
1392 2,
1393 { { 0 }, { 0 }, { 16 }, { 0 } },
1394 { { 0 }, { 0 }, { 0 }, { 0 } } },
1395
1396 { SVGA3D_D16_UNORM,
1397 SVGA3DBLOCKDESC_DEPTH_UNORM,
1398 { 1, 1, 1 },
1399 2,
1400 2,
1401 { { 0 }, { 0 }, { 16 }, { 0 } },
1402 { { 0 }, { 0 }, { 0 }, { 0 } } },
1403
1404 { SVGA3D_A8_UNORM,
1405 SVGA3DBLOCKDESC_A_UNORM,
1406 { 1, 1, 1 },
1407 1,
1408 1,
1409 { { 0 }, { 0 }, { 0 }, { 8 } },
1410 { { 0 }, { 0 }, { 0 }, { 0 } } },
1411
1412 { SVGA3D_BC1_UNORM,
1413 SVGA3DBLOCKDESC_BC1_COMP_UNORM,
1414 { 4, 4, 1 },
1415 8,
1416 8,
1417 { { 0 }, { 0 }, { 64 }, { 0 } },
1418 { { 0 }, { 0 }, { 0 }, { 0 } } },
1419
1420 { SVGA3D_BC2_UNORM,
1421 SVGA3DBLOCKDESC_BC2_COMP_UNORM,
1422 { 4, 4, 1 },
1423 16,
1424 16,
1425 { { 0 }, { 0 }, { 128 }, { 0 } },
1426 { { 0 }, { 0 }, { 0 }, { 0 } } },
1427
1428 { SVGA3D_BC3_UNORM,
1429 SVGA3DBLOCKDESC_BC3_COMP_UNORM,
1430 { 4, 4, 1 },
1431 16,
1432 16,
1433 { { 0 }, { 0 }, { 128 }, { 0 } },
1434 { { 0 }, { 0 }, { 0 }, { 0 } } },
1435
1436 { SVGA3D_B5G6R5_UNORM,
1437 SVGA3DBLOCKDESC_RGB_UNORM,
1438 { 1, 1, 1 },
1439 2,
1440 2,
1441 { { 5 }, { 6 }, { 5 }, { 0 } },
1442 { { 0 }, { 5 }, { 11 }, { 0 } } },
1443
1444 { SVGA3D_B5G5R5A1_UNORM,
1445 SVGA3DBLOCKDESC_RGBA_UNORM,
1446 { 1, 1, 1 },
1447 2,
1448 2,
1449 { { 5 }, { 5 }, { 5 }, { 1 } },
1450 { { 0 }, { 5 }, { 10 }, { 15 } } },
1451
1452 { SVGA3D_B8G8R8A8_UNORM,
1453 SVGA3DBLOCKDESC_RGBA_UNORM,
1454 { 1, 1, 1 },
1455 4,
1456 4,
1457 { { 8 }, { 8 }, { 8 }, { 8 } },
1458 { { 0 }, { 8 }, { 16 }, { 24 } } },
1459
1460 { SVGA3D_B8G8R8X8_UNORM,
1461 SVGA3DBLOCKDESC_RGB_UNORM,
1462 { 1, 1, 1 },
1463 4,
1464 4,
1465 { { 8 }, { 8 }, { 8 }, { 0 } },
1466 { { 0 }, { 8 }, { 16 }, { 24 } } },
1467
1468 { SVGA3D_BC4_UNORM,
1469 SVGA3DBLOCKDESC_BC4_COMP_UNORM,
1470 { 4, 4, 1 },
1471 8,
1472 8,
1473 { { 0 }, { 0 }, { 64 }, { 0 } },
1474 { { 0 }, { 0 }, { 0 }, { 0 } } },
1475
1476 { SVGA3D_BC5_UNORM,
1477 SVGA3DBLOCKDESC_BC5_COMP_UNORM,
1478 { 4, 4, 1 },
1479 16,
1480 16,
1481 { { 0 }, { 0 }, { 128 }, { 0 } },
1482 { { 0 }, { 0 }, { 0 }, { 0 } } },
1483
1484 { SVGA3D_B4G4R4A4_UNORM,
1485 SVGA3DBLOCKDESC_RGBA_UNORM,
1486 { 1, 1, 1 },
1487 2,
1488 2,
1489 { { 4 }, { 4 }, { 4 }, { 4 } },
1490 { { 0 }, { 4 }, { 8 }, { 12 } } },
1491
1492 { SVGA3D_BC6H_TYPELESS,
1493 SVGA3DBLOCKDESC_BC6H_COMP_TYPELESS,
1494 { 4, 4, 1 },
1495 16,
1496 16,
1497 { { 0 }, { 0 }, { 128 }, { 0 } },
1498 { { 0 }, { 0 }, { 0 }, { 0 } } },
1499
1500 { SVGA3D_BC6H_UF16,
1501 SVGA3DBLOCKDESC_BC6H_COMP_UF16,
1502 { 4, 4, 1 },
1503 16,
1504 16,
1505 { { 0 }, { 0 }, { 128 }, { 0 } },
1506 { { 0 }, { 0 }, { 0 }, { 0 } } },
1507
1508 { SVGA3D_BC6H_SF16,
1509 SVGA3DBLOCKDESC_BC6H_COMP_SF16,
1510 { 4, 4, 1 },
1511 16,
1512 16,
1513 { { 0 }, { 0 }, { 128 }, { 0 } },
1514 { { 0 }, { 0 }, { 0 }, { 0 } } },
1515
1516 { SVGA3D_BC7_TYPELESS,
1517 SVGA3DBLOCKDESC_BC7_COMP_TYPELESS,
1518 { 4, 4, 1 },
1519 16,
1520 16,
1521 { { 0 }, { 0 }, { 128 }, { 0 } },
1522 { { 0 }, { 0 }, { 0 }, { 0 } } },
1523
1524 { SVGA3D_BC7_UNORM,
1525 SVGA3DBLOCKDESC_BC7_COMP_UNORM,
1526 { 4, 4, 1 },
1527 16,
1528 16,
1529 { { 0 }, { 0 }, { 128 }, { 0 } },
1530 { { 0 }, { 0 }, { 0 }, { 0 } } },
1531
1532 { SVGA3D_BC7_UNORM_SRGB,
1533 SVGA3DBLOCKDESC_BC7_COMP_UNORM_SRGB,
1534 { 4, 4, 1 },
1535 16,
1536 16,
1537 { { 0 }, { 0 }, { 128 }, { 0 } },
1538 { { 0 }, { 0 }, { 0 }, { 0 } } },
1539
1540 { SVGA3D_AYUV,
1541 SVGA3DBLOCKDESC_AYUV,
1542 { 1, 1, 1 },
1543 4,
1544 4,
1545 { { 8 }, { 8 }, { 8 }, { 8 } },
1546 { { 0 }, { 8 }, { 16 }, { 24 } } },
1547
1548 { SVGA3D_R11G11B10_TYPELESS,
1549 SVGA3DBLOCKDESC_TYPELESS,
1550 { 1, 1, 1 },
1551 4,
1552 4,
1553 { { 10 }, { 11 }, { 11 }, { 0 } },
1554 { { 22 }, { 11 }, { 0 }, { 0 } } },
1555};
1556
1557#ifdef __cplusplus
1558}
1559#endif
1560
1561#endif