1c191b507cbbc4572c9a58cf019db08def651b265Brian Paul/**************************************************************************
22e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
3c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * Copyright � 1998-2015 VMware, Inc., Palo Alto, CA., USA
4c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * All Rights Reserved.
52e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
6c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a
7c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * copy of this software and associated documentation files (the
8c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * "Software"), to deal in the Software without restriction, including
9c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * without limitation the rights to use, copy, modify, merge, publish,
10c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * distribute, sub license, and/or sell copies of the Software, and to
11c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * permit persons to whom the Software is furnished to do so, subject to
12c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * the following conditions:
132e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
14c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * The above copyright notice and this permission notice (including the
15c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * next paragraph) shall be included in all copies or substantial portions
16c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * of the Software.
172e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
18c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
22c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24c191b507cbbc4572c9a58cf019db08def651b265Brian Paul * USE OR OTHER DEALINGS IN THE SOFTWARE.
25c191b507cbbc4572c9a58cf019db08def651b265Brian Paul *
26c191b507cbbc4572c9a58cf019db08def651b265Brian Paul **************************************************************************/
272e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
282e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul/*
292e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * svga3d_surfacedefs.h --
302e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
312e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *       Surface/format/image helper code.
322e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul */
332e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
342e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul#include "svga3d_reg.h"
352e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
362e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul#define max_t(type, x, y)  ((x) > (y) ? (x) : (y))
372e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
382e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul/*
392e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * enum svga3d_block_desc describes the active data channels in a block.
402e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
412e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * There can be at-most four active channels in a block:
422e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *    1. Red, bump W, luminance and depth are stored in the first channel.
432e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *    2. Green, bump V and stencil are stored in the second channel.
442e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *    3. Blue and bump U are stored in the third channel.
452e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *    4. Alpha and bump Q are stored in the fourth channel.
462e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
472e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * Block channels can be used to store compressed and buffer data:
482e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *    1. For compressed formats, only the data channel is used and its size
492e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *       is equal to that of a singular block in the compression scheme.
502e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *    2. For buffer formats, only the data channel is used and its size is
512e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *       exactly one byte in length.
522e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *    3. In each case the bit depth represent the size of a singular block.
532e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
542e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * Note: Compressed and IEEE formats do not use the bitMask structure.
552e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul */
562e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
572e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulenum svga3d_block_desc {
582e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
59c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_NONE        = 0,         /* No channels are active */
60c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_BLUE        = 1 << 0,    /* Block with red channel data */
61c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_U           = 1 << 0,    /* Block with bump U channel data */
62c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_GREEN       = 1 << 1,    /* Block with green channel data */
63c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_V           = 1 << 1,    /* Block with bump V channel data */
64c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RED         = 1 << 2,    /* Block with blue channel data */
65c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_W           = 1 << 2,    /* Block with bump W channel data */
66c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_LUMINANCE   = 1 << 2,    /* Block with luminance channel data */
67c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_Y           = 1 << 2,    /* Block with video luminance data */
68c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_ALPHA       = 1 << 3,    /* Block with an alpha channel */
69c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_Q           = 1 << 3,    /* Block with bump Q channel data */
70c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_BUFFER      = 1 << 4,    /* Block stores 1 byte of data */
71c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_COMPRESSED  = 1 << 5,    /* Block stores n bytes of data depending
72c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                               on the compression method used */
73c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_IEEE_FP     = 1 << 6,    /* Block stores data in an IEEE floating point
74c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                               representation in all channels */
75c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_UV_VIDEO    = 1 << 7,    /* Block with alternating video U and V */
76c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_PLANAR_YUV  = 1 << 8,    /* Three separate blocks store data. */
77c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_U_VIDEO     = 1 << 9,    /* Block with U video data */
78c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_V_VIDEO     = 1 << 10,   /* Block with V video data */
79c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_EXP         = 1 << 11,   /* Shared exponent */
80c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_SRGB        = 1 << 12,   /* Data is in sRGB format */
81c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_2PLANAR_YUV = 1 << 13,   /* 2 planes of Y, UV, e.g., NV12. */
82c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_3PLANAR_YUV = 1 << 14,   /* 3 planes of separate Y, U, V, e.g., YV12. */
83c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_DEPTH       = 1 << 15,   /* Block with depth channel */
84c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_STENCIL     = 1 << 16,   /* Block with a stencil channel */
85c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
86c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RG         = SVGA3DBLOCKDESC_RED |
87c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_GREEN,
88c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RGB        = SVGA3DBLOCKDESC_RG |
89c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_BLUE,
90c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RGB_SRGB   = SVGA3DBLOCKDESC_RGB |
91c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_SRGB,
92c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RGBA       = SVGA3DBLOCKDESC_RGB |
93c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_ALPHA,
94c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RGBA_SRGB  = SVGA3DBLOCKDESC_RGBA |
95c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_SRGB,
96c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_UV         = SVGA3DBLOCKDESC_U |
97c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_V,
98c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_UVL        = SVGA3DBLOCKDESC_UV |
99c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_LUMINANCE,
100c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_UVW        = SVGA3DBLOCKDESC_UV |
101c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_W,
102c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_UVWA       = SVGA3DBLOCKDESC_UVW |
103c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_ALPHA,
104c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_UVWQ       = SVGA3DBLOCKDESC_U |
105c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_V |
106c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_W |
107c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_Q,
108c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_LA         = SVGA3DBLOCKDESC_LUMINANCE |
109c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_ALPHA,
110c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_R_FP       = SVGA3DBLOCKDESC_RED |
111c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_IEEE_FP,
112c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RG_FP      = SVGA3DBLOCKDESC_R_FP |
113c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_GREEN,
114c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RGB_FP     = SVGA3DBLOCKDESC_RG_FP |
115c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_BLUE,
116c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RGBA_FP    = SVGA3DBLOCKDESC_RGB_FP |
117c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_ALPHA,
118c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_DS         = SVGA3DBLOCKDESC_DEPTH |
119c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_STENCIL,
120c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_YUV        = SVGA3DBLOCKDESC_UV_VIDEO |
121c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_Y,
122c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_AYUV       = SVGA3DBLOCKDESC_ALPHA |
123c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_Y |
124c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_U_VIDEO |
125c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_V_VIDEO,
126c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_RGBE       = SVGA3DBLOCKDESC_RGB |
127c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_EXP,
128c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_COMPRESSED_SRGB = SVGA3DBLOCKDESC_COMPRESSED |
129c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                     SVGA3DBLOCKDESC_SRGB,
130c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_NV12       = SVGA3DBLOCKDESC_PLANAR_YUV |
131c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_2PLANAR_YUV,
132c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3DBLOCKDESC_YV12       = SVGA3DBLOCKDESC_PLANAR_YUV |
133c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                SVGA3DBLOCKDESC_3PLANAR_YUV,
1342e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul};
1352e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
1362e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
137c191b507cbbc4572c9a58cf019db08def651b265Brian Paultypedef struct SVGA3dChannelDef {
138c191b507cbbc4572c9a58cf019db08def651b265Brian Paul  union {
139c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 blue;
140c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 u;
141c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 uv_video;
142c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 u_video;
143c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   };
144c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   union {
145c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 green;
146c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 v;
147c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 stencil;
148c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 v_video;
149c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   };
150c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   union {
151c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 red;
152c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 w;
153c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 luminance;
154c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 y;
155c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 depth;
156c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 data;
157c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   };
158c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   union {
159c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 alpha;
160c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 q;
161c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      uint8 exp;
162c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   };
163c191b507cbbc4572c9a58cf019db08def651b265Brian Paul} SVGA3dChannelDef;
1642e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
165c191b507cbbc4572c9a58cf019db08def651b265Brian Paulstruct svga3d_surface_desc {
166c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3dSurfaceFormat format;
167c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   enum svga3d_block_desc block_desc;
1682e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
169c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3dSize block_size;
170c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   uint32 bytes_per_block;
171c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   uint32 pitch_bytes_per_block;
1722e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
173c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   uint32 totalBitDepth;
174c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3dChannelDef bitDepth;
175c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   SVGA3dChannelDef bitOffset;
176c191b507cbbc4572c9a58cf019db08def651b265Brian Paul};
1772e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
178c191b507cbbc4572c9a58cf019db08def651b265Brian Paulstatic const struct svga3d_surface_desc svga3d_surface_descs[] = {
179c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_FORMAT_INVALID, SVGA3DBLOCKDESC_NONE,
180c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  0, 0,
181c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      0, {{0}, {0}, {0}, {0}},
182c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
183c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
184c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_X8R8G8B8, SVGA3DBLOCKDESC_RGB,
185c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
186c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      24, {{8}, {8}, {8}, {0}},
187c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
188c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
189c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_A8R8G8B8, SVGA3DBLOCKDESC_RGBA,
190c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
191c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
192c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
193c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
194c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R5G6B5, SVGA3DBLOCKDESC_RGB,
195c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
196c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{5}, {6}, {5}, {0}},
197c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {5}, {11}, {0}}},
198c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
199c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_X1R5G5B5, SVGA3DBLOCKDESC_RGB,
200c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
201c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      15, {{5}, {5}, {5}, {0}},
202c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {5}, {10}, {0}}},
203c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
204c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_A1R5G5B5, SVGA3DBLOCKDESC_RGBA,
205c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
206c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{5}, {5}, {5}, {1}},
207c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {5}, {10}, {15}}},
208c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
209c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_A4R4G4B4, SVGA3DBLOCKDESC_RGBA,
210c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
211c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{4}, {4}, {4}, {4}},
212c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {4}, {8}, {12}}},
213c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
214c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Z_D32, SVGA3DBLOCKDESC_DEPTH,
215c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
216c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {32}, {0}},
217c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
218c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
219c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Z_D16, SVGA3DBLOCKDESC_DEPTH,
220c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
221c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
222c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
223c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
224c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Z_D24S8, SVGA3DBLOCKDESC_DS,
225c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
226c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {8}, {24}, {0}},
227c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {24}, {0}, {0}}},
228c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
229c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Z_D15S1, SVGA3DBLOCKDESC_DS,
230c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
231c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {1}, {15}, {0}},
232c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {15}, {0}, {0}}},
233c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
234c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_LUMINANCE8, SVGA3DBLOCKDESC_LUMINANCE,
235c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
236c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {8}, {0}},
237c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
238c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
239c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_LUMINANCE4_ALPHA4, SVGA3DBLOCKDESC_LA,
240c191b507cbbc4572c9a58cf019db08def651b265Brian Paul    {1  , 1, 1},  1, 1,
241c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {4}, {4}},
242c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {4}}},
243c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
244c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_LUMINANCE16, SVGA3DBLOCKDESC_LUMINANCE,
245c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
246c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
247c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
248c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
249c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_LUMINANCE8_ALPHA8, SVGA3DBLOCKDESC_LA,
250c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
251c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {8}, {8}},
252c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {8}}},
253c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
254c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_DXT1, SVGA3DBLOCKDESC_COMPRESSED,
255c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  8, 8,
256c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {64}, {0}},
257c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
258c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
259c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_DXT2, SVGA3DBLOCKDESC_COMPRESSED,
260c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
261c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
262c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
263c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
264c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_DXT3, SVGA3DBLOCKDESC_COMPRESSED,
265c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
266c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
267c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
268c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
269c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_DXT4, SVGA3DBLOCKDESC_COMPRESSED,
270c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
271c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
272c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
273c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
274c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_DXT5, SVGA3DBLOCKDESC_COMPRESSED,
275c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
276c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
277c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
278c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
279c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BUMPU8V8, SVGA3DBLOCKDESC_UV,
280c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
281c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {8}, {8}},
282c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {8}}},
283c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
284c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BUMPL6V5U5, SVGA3DBLOCKDESC_UVL,
285c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
286c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{5}, {5}, {6}, {0}},
287c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{11}, {6}, {0}, {0}}},
288c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
289c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BUMPX8L8V8U8, SVGA3DBLOCKDESC_UVL,
290c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
291c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {0}},
292c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {8}, {0}, {0}}},
293c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
294c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_FORMAT_DEAD1, SVGA3DBLOCKDESC_UVL,
295c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {0, 0, 0},  0, 0,
296c191b507cbbc4572c9a58cf019db08def651b265Brian Paul       0, {{0}, {0}, {0}, {0}},
297c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
298c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
299c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_ARGB_S10E5, SVGA3DBLOCKDESC_RGBA_FP,
300c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
301c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{16}, {16}, {16}, {16}},
302c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{32}, {16}, {0}, {48}}},
303c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
304c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_ARGB_S23E8, SVGA3DBLOCKDESC_RGBA_FP,
305c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  16, 16,
306c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{32}, {32}, {32}, {32}},
307c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {96}}},
308c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
309c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_A2R10G10B10, SVGA3DBLOCKDESC_RGBA,
310c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
311c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{10}, {10}, {10}, {2}},
312c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {10}, {20}, {30}}},
313c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
314c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_V8U8, SVGA3DBLOCKDESC_UV,
315c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
316c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{8}, {8}, {0}, {0}},
317c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{8}, {0}, {0}, {0}}},
318c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
319c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Q8W8V8U8, SVGA3DBLOCKDESC_UVWQ,
320c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
321c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
322c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{24}, {16}, {8}, {0}}},
323c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
324c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_CxV8U8, SVGA3DBLOCKDESC_UV,
325c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
326c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{8}, {8}, {0}, {0}},
327c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{8}, {0}, {0}, {0}}},
328c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
329c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_X8L8V8U8, SVGA3DBLOCKDESC_UVL,
330c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
331c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      24, {{8}, {8}, {8}, {0}},
332c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {8}, {0}, {0}}},
333c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
334c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_A2W10V10U10, SVGA3DBLOCKDESC_UVWA,
335c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
336c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{10}, {10}, {10}, {2}},
337c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {10}, {20}, {30}}},
338c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
339c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_ALPHA8, SVGA3DBLOCKDESC_ALPHA,
340c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
341c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {0}, {8}},
342c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
343c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
344c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R_S10E5, SVGA3DBLOCKDESC_R_FP,
345c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
346c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
347c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
348c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
349c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R_S23E8, SVGA3DBLOCKDESC_R_FP,
350c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
351c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {32}, {0}},
352c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
353c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
354c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_RG_S10E5, SVGA3DBLOCKDESC_RG_FP,
355c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
356c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {16}, {16}, {0}},
357c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {16}, {0}, {0}}},
358c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
359c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_RG_S23E8, SVGA3DBLOCKDESC_RG_FP,
360c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
361c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {32}, {32}, {0}},
362c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {32}, {0}, {0}}},
363c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
364c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BUFFER, SVGA3DBLOCKDESC_BUFFER,
365c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
366c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {8}, {0}},
367c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
368c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
369c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Z_D24X8, SVGA3DBLOCKDESC_DEPTH,
370c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
371c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {24}, {0}},
372c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {24}, {0}, {0}}},
373c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
374c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_V16U16, SVGA3DBLOCKDESC_UV,
375c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
376c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{16}, {16}, {0}, {0}},
377c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {0}, {0}, {0}}},
378c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
379c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_G16R16, SVGA3DBLOCKDESC_RG,
380c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
381c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {16}, {16}, {0}},
382c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {16}, {0}}},
383c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
384c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_A16B16G16R16, SVGA3DBLOCKDESC_RGBA,
385c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
386c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{16}, {16}, {16}, {16}},
387c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{32}, {16}, {0}, {48}}},
388c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
389c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_UYVY, SVGA3DBLOCKDESC_YUV,
390c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
391c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{8}, {0}, {8}, {0}},
392c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {8}, {0}}},
393c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
394c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_YUY2, SVGA3DBLOCKDESC_YUV,
395c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
396c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{8}, {0}, {8}, {0}},
397c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{8}, {0}, {0}, {0}}},
398c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
399c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_NV12, SVGA3DBLOCKDESC_NV12,
400c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {2, 2, 1},  6, 2,
401c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      48, {{0}, {0}, {48}, {0}},
402c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
403c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
404c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_AYUV, SVGA3DBLOCKDESC_AYUV,
405c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
406c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
407c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
408c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
409c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32B32A32_TYPELESS, SVGA3DBLOCKDESC_RGBA,
410c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  16, 16,
411c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{32}, {32}, {32}, {32}},
412c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {96}}},
413c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
414c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32B32A32_UINT, SVGA3DBLOCKDESC_RGBA,
415c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  16, 16,
416c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{32}, {32}, {32}, {32}},
417c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {96}}},
418c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
419c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32B32A32_SINT, SVGA3DBLOCKDESC_UVWQ,
420c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  16, 16,
421c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{32}, {32}, {32}, {32}},
422c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {96}}},
423c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
424c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32B32_TYPELESS, SVGA3DBLOCKDESC_RGB,
425c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  12, 12,
426c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      96, {{32}, {32}, {32}, {0}},
427c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {0}}},
428c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
429c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32B32_FLOAT, SVGA3DBLOCKDESC_RGB_FP,
430c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  12, 12,
431c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      96, {{32}, {32}, {32}, {0}},
432c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {0}}},
433c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
434c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32B32_UINT, SVGA3DBLOCKDESC_RGB,
435c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  12, 12,
436c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      96, {{32}, {32}, {32}, {0}},
437c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {0}}},
438c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
439c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32B32_SINT, SVGA3DBLOCKDESC_UVW,
440c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  12, 12,
441c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      96, {{32}, {32}, {32}, {0}},
442c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {0}}},
443c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
444c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16B16A16_TYPELESS, SVGA3DBLOCKDESC_RGBA,
445c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
446c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{16}, {16}, {16}, {16}},
447c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{32}, {16}, {0}, {48}}},
448c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
449c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16B16A16_UINT, SVGA3DBLOCKDESC_RGBA,
450c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
451c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{16}, {16}, {16}, {16}},
452c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{32}, {16}, {0}, {48}}},
453c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
454c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16B16A16_SNORM, SVGA3DBLOCKDESC_UVWQ,
455c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
456c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{16}, {16}, {16}, {16}},
457c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{32}, {16}, {0}, {48}}},
458c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
459c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16B16A16_SINT, SVGA3DBLOCKDESC_UVWQ,
460c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
461c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{16}, {16}, {16}, {16}},
462c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{32}, {16}, {0}, {48}}},
463c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
464c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32_TYPELESS, SVGA3DBLOCKDESC_RG,
465c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
466c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {32}, {32}, {0}},
467c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {32}, {0}, {0}}},
468c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
469c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32_UINT, SVGA3DBLOCKDESC_RG,
470c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
471c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {32}, {32}, {0}},
472c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {32}, {0}, {0}}},
473c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
474c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32_SINT, SVGA3DBLOCKDESC_UV,
475c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
476c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {32}, {32}, {0}},
477c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {32}, {0}, {0}}},
478c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
479c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G8X24_TYPELESS, SVGA3DBLOCKDESC_RG,
480c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
481c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {8}, {32}, {0}},
482c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {32}, {0}, {0}}},
483c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
484c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_D32_FLOAT_S8X24_UINT, SVGA3DBLOCKDESC_DS,
485c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
486c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {8}, {32}, {0}},
487c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {32}, {0}, {0}}},
488c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
489c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32_FLOAT_X8X24_TYPELESS, SVGA3DBLOCKDESC_R_FP,
490c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
491c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {32}, {0}},
492c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
493c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
494c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_X32_TYPELESS_G8X24_UINT, SVGA3DBLOCKDESC_GREEN,
495c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
496c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {8}, {0}, {0}},
497c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {32}, {0}, {0}}},
498c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
499c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R10G10B10A2_TYPELESS, SVGA3DBLOCKDESC_RGBA,
500c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
501c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{10}, {10}, {10}, {2}},
502c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {10}, {20}, {30}}},
503c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
504c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R10G10B10A2_UINT, SVGA3DBLOCKDESC_RGBA,
505c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
506c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{10}, {10}, {10}, {2}},
507c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {10}, {20}, {30}}},
508c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
509c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R11G11B10_FLOAT, SVGA3DBLOCKDESC_RGB_FP,
510c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
511c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{10}, {11}, {11}, {0}},
512c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {10}, {21}, {0}}},
513c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
514c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8B8A8_TYPELESS, SVGA3DBLOCKDESC_RGBA,
515c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
516c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
517c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {8}, {0}, {24}}},
518c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
519c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8B8A8_UNORM, SVGA3DBLOCKDESC_RGBA,
520c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
521c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
522c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {8}, {0}, {24}}},
523c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
524c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8B8A8_UNORM_SRGB, SVGA3DBLOCKDESC_RGBA_SRGB,
525c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
526c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
527c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {8}, {0}, {24}}},
528c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
529c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8B8A8_UINT, SVGA3DBLOCKDESC_RGBA,
530c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
531c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
532c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {8}, {0}, {24}}},
533c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
534c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8B8A8_SINT, SVGA3DBLOCKDESC_RGBA,
535c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
536c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
537c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {8}, {0}, {24}}},
538c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
539c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16_TYPELESS, SVGA3DBLOCKDESC_RG,
540c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
541c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {16}, {16}, {0}},
542c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {16}, {0}, {0}}},
543c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
544c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16_UINT, SVGA3DBLOCKDESC_RG_FP,
545c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
546c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {16}, {16}, {0}},
547c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {16}, {0}, {0}}},
548c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
549c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16_SINT, SVGA3DBLOCKDESC_UV,
550c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
551c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {16}, {16}, {0}},
552c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {16}, {0}, {0}}},
553c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
554c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32_TYPELESS, SVGA3DBLOCKDESC_RED,
555c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
556c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {32}, {0}},
557c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
558c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
559c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_D32_FLOAT, SVGA3DBLOCKDESC_DEPTH,
560c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
561c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {32}, {0}},
562c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
563c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
564c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32_UINT, SVGA3DBLOCKDESC_RED,
565c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
566c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {32}, {0}},
567c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
568c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
569c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32_SINT, SVGA3DBLOCKDESC_RED,
570c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
571c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {32}, {0}},
572c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
573c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
574c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R24G8_TYPELESS, SVGA3DBLOCKDESC_RG,
575c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
576c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {8}, {24}, {0}},
577c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {24}, {0}, {0}}},
578c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
579c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_D24_UNORM_S8_UINT, SVGA3DBLOCKDESC_DS,
580c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
581c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {8}, {24}, {0}},
582c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {24}, {0}, {0}}},
583c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
584c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R24_UNORM_X8_TYPELESS, SVGA3DBLOCKDESC_RED,
585c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
586c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {24}, {0}},
587c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
588c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
589c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_X24_TYPELESS_G8_UINT, SVGA3DBLOCKDESC_GREEN,
590c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
591c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {8}, {0}, {0}},
592c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {24}, {0}, {0}}},
593c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
594c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8_TYPELESS, SVGA3DBLOCKDESC_RG,
595c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
596c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {8}, {8}, {0}},
597c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {0}, {0}}},
598c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
599c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8_UNORM, SVGA3DBLOCKDESC_RG,
600c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
601c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {8}, {8}, {0}},
602c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {0}, {0}}},
603c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
604c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8_UINT, SVGA3DBLOCKDESC_RG,
605c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
606c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {8}, {8}, {0}},
607c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {0}, {0}}},
608c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
609c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8_SINT, SVGA3DBLOCKDESC_UV,
610c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
611c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {8}, {8}, {0}},
612c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {0}, {0}}},
613c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
614c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16_TYPELESS, SVGA3DBLOCKDESC_RED,
615c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
616c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
617c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
618c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
619c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16_UNORM, SVGA3DBLOCKDESC_RED,
620c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
621c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
622c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
623c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
624c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16_UINT, SVGA3DBLOCKDESC_RED,
625c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
626c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
627c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
628c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
629c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16_SNORM, SVGA3DBLOCKDESC_U,
630c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
631c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
632c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
633c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
634c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16_SINT, SVGA3DBLOCKDESC_U,
635c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
636c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
637c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
638c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
639c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8_TYPELESS, SVGA3DBLOCKDESC_RED,
640c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
641c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {8}, {0}},
642c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
643c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
644c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8_UNORM, SVGA3DBLOCKDESC_RED,
645c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
646c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {8}, {0}},
647c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
648c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
649c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8_UINT, SVGA3DBLOCKDESC_RED,
650c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
651c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {8}, {0}},
652c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
653c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
654c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8_SNORM, SVGA3DBLOCKDESC_U,
655c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
656c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {8}, {0}},
657c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
658c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
659c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8_SINT, SVGA3DBLOCKDESC_U,
660c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
661c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {8}, {0}},
662c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
663c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
664c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_P8, SVGA3DBLOCKDESC_RED,
665c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
666c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {8}, {0}},
667c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
668c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
669c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R9G9B9E5_SHAREDEXP, SVGA3DBLOCKDESC_RGBE,
670c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
671c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{9}, {9}, {9}, {5}},
672c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{18}, {9}, {0}, {27}}},
673c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
674c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8_B8G8_UNORM, SVGA3DBLOCKDESC_RG,
675c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
676c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {8}, {8}, {0}},
677c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {0}, {0}}},
678c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
679c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_G8R8_G8B8_UNORM, SVGA3DBLOCKDESC_RG,
680c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
681c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {8}, {8}, {0}},
682c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {0}, {0}}},
683c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
684c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC1_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
685c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  8, 8,
686c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {64}, {0}},
687c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
688c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
689c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC1_UNORM_SRGB, SVGA3DBLOCKDESC_COMPRESSED_SRGB,
690c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  8, 8,
691c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {64}, {0}},
692c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
693c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
694c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC2_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
695c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
696c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
697c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
698c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
699c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC2_UNORM_SRGB, SVGA3DBLOCKDESC_COMPRESSED_SRGB,
700c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
701c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
702c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
703c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
704c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC3_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
705c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
706c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
707c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
708c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
709c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC3_UNORM_SRGB, SVGA3DBLOCKDESC_COMPRESSED_SRGB,
710c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
711c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
712c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
713c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
714c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC4_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
715c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  8, 8,
716c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {64}, {0}},
717c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
718c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
719c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_ATI1, SVGA3DBLOCKDESC_COMPRESSED,
720c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  8, 8,
721c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {64}, {0}},
722c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
723c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
724c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC4_SNORM, SVGA3DBLOCKDESC_COMPRESSED,
725c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  8, 8,
726c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {64}, {0}},
727c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
728c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
729c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC5_TYPELESS, SVGA3DBLOCKDESC_COMPRESSED,
730c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
731c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
732c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
733c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
734c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_ATI2, SVGA3DBLOCKDESC_COMPRESSED,
735c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
736c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
737c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
738c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
739c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC5_SNORM, SVGA3DBLOCKDESC_COMPRESSED,
740c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
741c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
742c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
743c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
744c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R10G10B10_XR_BIAS_A2_UNORM, SVGA3DBLOCKDESC_RGBA,
745c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
746c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{10}, {10}, {10}, {2}},
747c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {10}, {20}, {30}}},
748c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
749c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_B8G8R8A8_TYPELESS, SVGA3DBLOCKDESC_RGBA,
750c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
751c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
752c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
753c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
754c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_B8G8R8A8_UNORM_SRGB, SVGA3DBLOCKDESC_RGBA_SRGB,
755c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
756c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
757c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
758c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
759c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_B8G8R8X8_TYPELESS, SVGA3DBLOCKDESC_RGB,
760c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
761c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      24, {{8}, {8}, {8}, {0}},
762c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
763c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
764c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_B8G8R8X8_UNORM_SRGB, SVGA3DBLOCKDESC_RGB_SRGB,
765c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
766c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      24, {{8}, {8}, {8}, {0}},
767c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
768c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
769c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Z_DF16, SVGA3DBLOCKDESC_DEPTH,
770c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
771c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
772c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
773c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
774c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Z_DF24, SVGA3DBLOCKDESC_DEPTH,
775c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
776c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {8}, {24}, {0}},
777c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {24}, {0}, {0}}},
778c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
779c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_Z_D24S8_INT, SVGA3DBLOCKDESC_DS,
780c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
781c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {8}, {24}, {0}},
782c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {24}, {0}, {0}}},
783c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
784c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_YV12, SVGA3DBLOCKDESC_YV12,
785c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {2, 2, 1},  6, 2,
786c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      48, {{0}, {0}, {48}, {0}},
787c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
788c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
789c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32B32A32_FLOAT, SVGA3DBLOCKDESC_RGBA_FP,
790c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  16, 16,
791c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{32}, {32}, {32}, {32}},
792c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{64}, {32}, {0}, {96}}},
793c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
794c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16B16A16_FLOAT, SVGA3DBLOCKDESC_RGBA_FP,
795c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
796c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{16}, {16}, {16}, {16}},
797c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{32}, {16}, {0}, {48}}},
798c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
799c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16B16A16_UNORM, SVGA3DBLOCKDESC_RGBA,
800c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
801c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{16}, {16}, {16}, {16}},
802c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{32}, {16}, {0}, {48}}},
803c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
804c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32G32_FLOAT, SVGA3DBLOCKDESC_RG_FP,
805c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  8, 8,
806c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {32}, {32}, {0}},
807c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {32}, {0}, {0}}},
808c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
809c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R10G10B10A2_UNORM, SVGA3DBLOCKDESC_RGBA,
810c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
811c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{10}, {10}, {10}, {2}},
812c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {10}, {20}, {30}}},
813c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
814c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8B8A8_SNORM, SVGA3DBLOCKDESC_RGBA,
815c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
816c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
817c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{24}, {16}, {8}, {0}}},
818c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
819c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16_FLOAT, SVGA3DBLOCKDESC_RG_FP,
820c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
821c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {16}, {16}, {0}},
822c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {16}, {0}, {0}}},
823c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
824c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16_UNORM, SVGA3DBLOCKDESC_RG,
825c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
826c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {16}, {16}, {0}},
827c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {16}, {0}}},
828c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
829c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16G16_SNORM, SVGA3DBLOCKDESC_RG,
830c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
831c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{16}, {16}, {0}, {0}},
832c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{16}, {0}, {0}, {0}}},
833c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
834c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R32_FLOAT, SVGA3DBLOCKDESC_R_FP,
835c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
836c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{0}, {0}, {32}, {0}},
837c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
838c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
839c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R8G8_SNORM, SVGA3DBLOCKDESC_RG,
840c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
841c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{8}, {8}, {0}, {0}},
842c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{8}, {0}, {0}, {0}}},
843c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
844c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_R16_FLOAT, SVGA3DBLOCKDESC_R_FP,
845c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
846c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
847c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
848c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
849c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_D16_UNORM, SVGA3DBLOCKDESC_DEPTH,
850c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
851c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{0}, {0}, {16}, {0}},
852c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
853c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
854c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_A8_UNORM, SVGA3DBLOCKDESC_ALPHA,
855c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  1, 1,
856c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      8, {{0}, {0}, {0}, {8}},
857c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
858c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
859c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC1_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
860c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  8, 8,
861c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {64}, {0}},
862c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
863c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
864c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC2_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
865c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
866c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
867c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
868c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
869c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC3_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
870c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
871c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
872c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
873c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
874c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_B5G6R5_UNORM, SVGA3DBLOCKDESC_RGB,
875c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
876c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{5}, {6}, {5}, {0}},
877c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {5}, {11}, {0}}},
878c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
879c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_B5G5R5A1_UNORM, SVGA3DBLOCKDESC_RGBA,
880c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  2, 2,
881c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      16, {{5}, {5}, {5}, {1}},
882c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {5}, {10}, {15}}},
883c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
884c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_B8G8R8A8_UNORM, SVGA3DBLOCKDESC_RGBA,
885c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
886c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      32, {{8}, {8}, {8}, {8}},
887c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
888c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
889c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_B8G8R8X8_UNORM, SVGA3DBLOCKDESC_RGB,
890c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {1, 1, 1},  4, 4,
891c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      24, {{8}, {8}, {8}, {0}},
892c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {8}, {16}, {24}}},
893c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
894c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC4_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
895c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  8, 8,
896c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      64, {{0}, {0}, {64}, {0}},
897c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
898c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
899c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   {SVGA3D_BC5_UNORM, SVGA3DBLOCKDESC_COMPRESSED,
900c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {4, 4, 1},  16, 16,
901c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      128, {{0}, {0}, {128}, {0}},
902c191b507cbbc4572c9a58cf019db08def651b265Brian Paul      {{0}, {0}, {0}, {0}}},
9032e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul};
9042e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9052e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9062e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulextern const struct svga3d_surface_desc g_SVGA3dSurfaceDescs[];
9072e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulextern int g_SVGA3dSurfaceDescs_size;
9082e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9092e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline uint32 clamped_umul32(uint32 a, uint32 b)
9102e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
9112e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	uint64_t tmp = (uint64_t) a*b;
9122e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	return (tmp > (uint64_t) ((uint32) -1)) ? (uint32) -1 : tmp;
9132e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
9142e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
915c191b507cbbc4572c9a58cf019db08def651b265Brian Paulstatic inline uint32 clamped_uadd32(uint32 a, uint32 b)
916c191b507cbbc4572c9a58cf019db08def651b265Brian Paul{
917c191b507cbbc4572c9a58cf019db08def651b265Brian Paul	uint32 c = a + b;
918c191b507cbbc4572c9a58cf019db08def651b265Brian Paul	if (c < a || c < b) {
919c191b507cbbc4572c9a58cf019db08def651b265Brian Paul		return MAX_UINT32;
920c191b507cbbc4572c9a58cf019db08def651b265Brian Paul	}
921c191b507cbbc4572c9a58cf019db08def651b265Brian Paul	return c;
922c191b507cbbc4572c9a58cf019db08def651b265Brian Paul}
923c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
924c191b507cbbc4572c9a58cf019db08def651b265Brian Paul
9252e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline const struct svga3d_surface_desc *
9262e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_get_desc(SVGA3dSurfaceFormat format)
9272e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
9282e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	if (format < ARRAY_SIZE(svga3d_surface_descs))
9292e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul		return &svga3d_surface_descs[format];
9302e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9312e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	return &svga3d_surface_descs[SVGA3D_FORMAT_INVALID];
9322e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
9332e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9342e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul/*
9352e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *----------------------------------------------------------------------
9362e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
9372e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * svga3dsurface_get_mip_size --
9382e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
9392e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      Given a base level size and the mip level, compute the size of
9402e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      the mip level.
9412e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
9422e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * Results:
9432e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      See above.
9442e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
9452e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * Side effects:
9462e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      None.
9472e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
9482e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *----------------------------------------------------------------------
9492e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul */
9502e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9512e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline SVGA3dSize
9522e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_get_mip_size(SVGA3dSize base_level, uint32 mip_level)
9532e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
9542e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	SVGA3dSize size;
9552e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9562e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	size.width = max_t(uint32, base_level.width >> mip_level, 1);
9572e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	size.height = max_t(uint32, base_level.height >> mip_level, 1);
9582e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	size.depth = max_t(uint32, base_level.depth >> mip_level, 1);
9592e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	return size;
9602e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
9612e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9622e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline void
9632e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_get_size_in_blocks(const struct svga3d_surface_desc *desc,
9642e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul				 const SVGA3dSize *pixel_size,
9652e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul				 SVGA3dSize *block_size)
9662e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
9672e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	block_size->width = DIV_ROUND_UP(pixel_size->width,
9682e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul					 desc->block_size.width);
9692e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	block_size->height = DIV_ROUND_UP(pixel_size->height,
9702e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul					  desc->block_size.height);
9712e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	block_size->depth = DIV_ROUND_UP(pixel_size->depth,
9722e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul					 desc->block_size.depth);
9732e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
9742e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9752e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline bool
9762e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_is_planar_surface(const struct svga3d_surface_desc *desc)
9772e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
9782e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	return (desc->block_desc & SVGA3DBLOCKDESC_PLANAR_YUV) != 0;
9792e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
9802e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9812e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline uint32
9822e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_calculate_pitch(const struct svga3d_surface_desc *desc,
9832e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul			      const SVGA3dSize *size)
9842e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
9852e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	uint32 pitch;
9862e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	SVGA3dSize blocks;
9872e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9882e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	svga3dsurface_get_size_in_blocks(desc, size, &blocks);
9892e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9902e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	pitch = blocks.width * desc->pitch_bytes_per_block;
9912e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9922e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	return pitch;
9932e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
9942e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
9952e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul/*
9962e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *-----------------------------------------------------------------------------
9972e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
9982e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * svga3dsurface_get_image_buffer_size --
9992e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
10002e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      Return the number of bytes of buffer space required to store
10012e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      one image of a surface, optionally using the specified pitch.
10022e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
10032e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      If pitch is zero, it is assumed that rows are tightly packed.
10042e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
10052e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      This function is overflow-safe. If the result would have
10062e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      overflowed, instead we return MAX_UINT32.
10072e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
10082e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * Results:
10092e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      Byte count.
10102e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
10112e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * Side effects:
10122e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *      None.
10132e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *
10142e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul *-----------------------------------------------------------------------------
10152e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul */
10162e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10172e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline uint32
10182e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_get_image_buffer_size(const struct svga3d_surface_desc *desc,
10192e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul				    const SVGA3dSize *size,
10202e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul				    uint32 pitch)
10212e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
10222e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	SVGA3dSize image_blocks;
10232e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	uint32 slice_size, total_size;
10242e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10252e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	svga3dsurface_get_size_in_blocks(desc, size, &image_blocks);
10262e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10272e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	if (svga3dsurface_is_planar_surface(desc)) {
10282e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul		total_size = clamped_umul32(image_blocks.width,
10292e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul					    image_blocks.height);
10302e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul		total_size = clamped_umul32(total_size, image_blocks.depth);
10312e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul		total_size = clamped_umul32(total_size, desc->bytes_per_block);
10322e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul		return total_size;
10332e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	}
10342e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10352e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	if (pitch == 0)
10362e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul		pitch = svga3dsurface_calculate_pitch(desc, size);
10372e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10382e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	slice_size = clamped_umul32(image_blocks.height, pitch);
10392e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	total_size = clamped_umul32(slice_size, image_blocks.depth);
10402e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10412e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	return total_size;
10422e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
10432e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10442e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10452e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline uint32
10462e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_get_image_offset(SVGA3dSurfaceFormat format,
10472e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul                               SVGA3dSize baseLevelSize,
10482e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul                               uint32 numMipLevels,
1049c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                               uint32 layer,
10502e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul                               uint32 mip)
10512e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10522e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
10532e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   uint32 offset;
10542e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   uint32 mipChainBytes;
10552e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   uint32 mipChainBytesToLevel;
10562e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   uint32 i;
10572e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   const struct svga3d_surface_desc *desc;
10582e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   SVGA3dSize mipSize;
10592e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   uint32 bytes;
10602e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10612e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   desc = svga3dsurface_get_desc(format);
10622e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10632e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   mipChainBytes = 0;
10642e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   mipChainBytesToLevel = 0;
10652e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   for (i = 0; i < numMipLevels; i++) {
10662e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul      mipSize = svga3dsurface_get_mip_size(baseLevelSize, i);
10672e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul      bytes = svga3dsurface_get_image_buffer_size(desc, &mipSize, 0);
10682e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul      mipChainBytes += bytes;
10692e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul      if (i < mip) {
10702e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul         mipChainBytesToLevel += bytes;
10712e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul      }
10722e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   }
10732e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
1074c191b507cbbc4572c9a58cf019db08def651b265Brian Paul   offset = mipChainBytes * layer + mipChainBytesToLevel;
10752e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10762e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   return offset;
10772e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
10782e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10792e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10802e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline uint32
10812e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_get_serialized_size(SVGA3dSurfaceFormat format,
10822e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul				  SVGA3dSize base_level_size,
10832e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul				  uint32 num_mip_levels,
1084c191b507cbbc4572c9a58cf019db08def651b265Brian Paul                                  uint32 num_layers)
10852e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
10862e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	const struct svga3d_surface_desc *desc = svga3dsurface_get_desc(format);
10870c065270c0ff063edba03516b22d734023cac912Charmaine Lee	uint64_t total_size = 0;
10882e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	uint32 mip;
10892e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10902e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	for (mip = 0; mip < num_mip_levels; mip++) {
10912e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul		SVGA3dSize size =
10922e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul			svga3dsurface_get_mip_size(base_level_size, mip);
10932e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul		total_size += svga3dsurface_get_image_buffer_size(desc,
10942e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul								  &size, 0);
10952e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul	}
10962e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
1097c191b507cbbc4572c9a58cf019db08def651b265Brian Paul	total_size *= num_layers;
10982e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
10990c065270c0ff063edba03516b22d734023cac912Charmaine Lee	return (total_size > (uint64_t) MAX_UINT32) ? MAX_UINT32 :
11000c065270c0ff063edba03516b22d734023cac912Charmaine Lee                                                      (uint32) total_size;
11012e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
11022e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
11032e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul
11042e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul/**
11052e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * Compute the offset (in bytes) to a pixel in an image (or volume).
11062e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * 'width' is the image width in pixels
11072e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul * 'height' is the image height in pixels
11082e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul */
11092e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulstatic inline uint32
11102e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paulsvga3dsurface_get_pixel_offset(SVGA3dSurfaceFormat format,
11112e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul                               uint32 width, uint32 height,
11122e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul                               uint32 x, uint32 y, uint32 z)
11132e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul{
11142e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   const struct svga3d_surface_desc *desc = svga3dsurface_get_desc(format);
11152e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   const uint32 bw = desc->block_size.width, bh = desc->block_size.height;
11162e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   const uint32 bd = desc->block_size.depth;
11172e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   const uint32 rowstride = DIV_ROUND_UP(width, bw) * desc->bytes_per_block;
11182e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   const uint32 imgstride = DIV_ROUND_UP(height, bh) * rowstride;
11192e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   const uint32 offset = (z / bd * imgstride +
11202e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul                          y / bh * rowstride +
11212e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul                          x / bw * desc->bytes_per_block);
11222e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul   return offset;
11232e0c90847f16a9cf2a40436beacb65c65535fa4aBrian Paul}
1124