1 /// Format description module
2 module gfx.graal.format;
3 
4 // module generated by formatgen.py
5 
6 /// numeric format of texel channels
7 enum NumFormat
8 {
9     uNorm,
10     sNorm,
11     uScaled,
12     sScaled,
13     uInt,
14     sInt,
15     uFloat,
16     sFloat,
17     sRgb,
18 }
19 
20 /// description of a format
21 struct FormatDesc
22 {
23     SurfaceType surfaceType;
24     NumFormat numFormat;
25     bool packed;
26 }
27 
28 /// get the description of a format
29 FormatDesc formatDesc(in Format fmt) pure {
30     return fmtDescs[cast(uint)fmt];
31 }
32 
33 /// Format properties
34 struct FormatProperties {
35     FormatFeatures linearTiling;
36     FormatFeatures optimalTiling;
37     FormatFeatures buffer;
38 }
39 
40 /// Format features
41 enum FormatFeatures {
42     sampledImage                = 0x0001,
43     storageImage                = 0x0002,
44     storageImageAtomic          = 0x0004,
45     uniformTexelBuffer          = 0x0008,
46     storageTexelBuffer          = 0x0010,
47     storageTexelBufferAtomic    = 0x0020,
48     vertexBuffer                = 0x0040,
49     colorAttachment             = 0x0080,
50     colorAttachmentBlend        = 0x0100,
51     depthStencilAttachment      = 0x0200,
52     blitSrc                     = 0x0400,
53     blitDst                     = 0x0800,
54     sampledImageFilterLinear    = 0x1000,
55 
56     framebuffer                 = 0x0380,
57     blit                        = 0x0c00,
58 }
59 
60 
61 /// Describes the components of a surface
62 enum SurfaceType {
63     R4_G4,
64     R4_G4_B4_A4,
65     B4_G4_R4_A4,
66     R5_G6_B5,
67     B5_G6_R5,
68     R5_G5_B5_A1,
69     B5_G5_R5_A1,
70     A1_R5_G5_B5,
71     R8,
72     R8_G8,
73     R8_G8_B8,
74     B8_G8_R8,
75     R8_G8_B8_A8,
76     B8_G8_R8_A8,
77     A8_B8_G8_R8,
78     A2_R10_G10_B10,
79     A2_B10_G10_R10,
80     R16,
81     R16_G16,
82     R16_G16_B16,
83     R16_G16_B16_A16,
84     R32,
85     R32_G32,
86     R32_G32_B32,
87     R32_G32_B32_A32,
88     R64,
89     R64_G64,
90     R64_G64_B64,
91     R64_G64_B64_A64,
92     B10_G11_R11,
93     E5_B9_G9_R9,
94     D16,
95     X8_D24,
96     D32,
97     S8,
98     D16_S8,
99     D24_S8,
100     D32_S8,
101 }
102 
103 /// The format of an Image.
104 enum Format
105 {
106     undefined = 0,
107     rg4_uNorm = 1,
108     rgba4_uNorm = 2,
109     bgra4_uNorm = 3,
110     r5g6b5_uNorm = 4,
111     b5g6r5_uNorm = 5,
112     r5g5b5a1_uNorm = 6,
113     b5g5r5a1_uNorm = 7,
114     a1r5g5b5_uNorm = 8,
115     r8_uNorm = 9,
116     r8_sNorm = 10,
117     r8_uScaled = 11,
118     r8_sScaled = 12,
119     r8_uInt = 13,
120     r8_sInt = 14,
121     r8_sRgb = 15,
122     rg8_uNorm = 16,
123     rg8_sNorm = 17,
124     rg8_uScaled = 18,
125     rg8_sScaled = 19,
126     rg8_uInt = 20,
127     rg8_sInt = 21,
128     rg8_sRgb = 22,
129     rgb8_uNorm = 23,
130     rgb8_sNorm = 24,
131     rgb8_uScaled = 25,
132     rgb8_sScaled = 26,
133     rgb8_uInt = 27,
134     rgb8_sInt = 28,
135     rgb8_sRgb = 29,
136     bgr8_uNorm = 30,
137     bgr8_sNorm = 31,
138     bgr8_uScaled = 32,
139     bgr8_sScaled = 33,
140     bgr8_uInt = 34,
141     bgr8_sInt = 35,
142     bgr8_sRgb = 36,
143     rgba8_uNorm = 37,
144     rgba8_sNorm = 38,
145     rgba8_uScaled = 39,
146     rgba8_sScaled = 40,
147     rgba8_uInt = 41,
148     rgba8_sInt = 42,
149     rgba8_sRgb = 43,
150     bgra8_uNorm = 44,
151     bgra8_sNorm = 45,
152     bgra8_uScaled = 46,
153     bgra8_sScaled = 47,
154     bgra8_uInt = 48,
155     bgra8_sInt = 49,
156     bgra8_sRgb = 50,
157     abgr8_uNorm = 51,
158     abgr8_sNorm = 52,
159     abgr8_uScaled = 53,
160     abgr8_sScaled = 54,
161     abgr8_uInt = 55,
162     abgr8_sInt = 56,
163     abgr8_sRgb = 57,
164     a2r10g10b10_uNorm = 58,
165     a2r10g10b10_sNorm = 59,
166     a2r10g10b10_uScaled = 60,
167     a2r10g10b10_sScaled = 61,
168     a2r10g10b10_uInt = 62,
169     a2r10g10b10_sInt = 63,
170     a2b10g10r10_uNorm = 64,
171     a2b10g10r10_sNorm = 65,
172     a2b10g10r10_uScaled = 66,
173     a2b10g10r10_sScaled = 67,
174     a2b10g10r10_uInt = 68,
175     a2b10g10r10_sInt = 69,
176     r16_uNorm = 70,
177     r16_sNorm = 71,
178     r16_uScaled = 72,
179     r16_sScaled = 73,
180     r16_uInt = 74,
181     r16_sInt = 75,
182     r16_sFloat = 76,
183     rg16_uNorm = 77,
184     rg16_sNorm = 78,
185     rg16_uScaled = 79,
186     rg16_sScaled = 80,
187     rg16_uInt = 81,
188     rg16_sInt = 82,
189     rg16_sFloat = 83,
190     rgb16_uNorm = 84,
191     rgb16_sNorm = 85,
192     rgb16_uScaled = 86,
193     rgb16_sScaled = 87,
194     rgb16_uInt = 88,
195     rgb16_sInt = 89,
196     rgb16_sFloat = 90,
197     rgba16_uNorm = 91,
198     rgba16_sNorm = 92,
199     rgba16_uScaled = 93,
200     rgba16_sScaled = 94,
201     rgba16_uInt = 95,
202     rgba16_sInt = 96,
203     rgba16_sFloat = 97,
204     r32_uInt = 98,
205     r32_sInt = 99,
206     r32_sFloat = 100,
207     rg32_uInt = 101,
208     rg32_sInt = 102,
209     rg32_sFloat = 103,
210     rgb32_uInt = 104,
211     rgb32_sInt = 105,
212     rgb32_sFloat = 106,
213     rgba32_uInt = 107,
214     rgba32_sInt = 108,
215     rgba32_sFloat = 109,
216     r64_uInt = 110,
217     r64_sInt = 111,
218     r64_sFloat = 112,
219     rg64_uInt = 113,
220     rg64_sInt = 114,
221     rg64_sFloat = 115,
222     rgb64_uInt = 116,
223     rgb64_sInt = 117,
224     rgb64_sFloat = 118,
225     rgba64_uInt = 119,
226     rgba64_sInt = 120,
227     rgba64_sFloat = 121,
228     b10g11r11_uFloat = 122,
229     ebgr9_uFloat = 123,
230     d16_uNorm = 124,
231     x8d24_uNorm = 125,
232     d32_sFloat = 126,
233     s8_uInt = 127,
234     d16s8_uNorm = 128,
235     d24s8_uNorm = 129,
236     d32s8_sFloat = 130,
237 }
238 
239 /// Get the totalBits of an image surface
240 @property uint totalBits (in SurfaceType st) pure
241 {
242     switch(st) {
243     case SurfaceType.R4_G4: return 8;
244     case SurfaceType.R4_G4_B4_A4: return 16;
245     case SurfaceType.B4_G4_R4_A4: return 16;
246     case SurfaceType.R5_G6_B5: return 16;
247     case SurfaceType.B5_G6_R5: return 16;
248     case SurfaceType.R5_G5_B5_A1: return 16;
249     case SurfaceType.B5_G5_R5_A1: return 16;
250     case SurfaceType.A1_R5_G5_B5: return 16;
251     case SurfaceType.R8: return 8;
252     case SurfaceType.R8_G8: return 16;
253     case SurfaceType.R8_G8_B8: return 24;
254     case SurfaceType.B8_G8_R8: return 24;
255     case SurfaceType.R8_G8_B8_A8: return 32;
256     case SurfaceType.B8_G8_R8_A8: return 32;
257     case SurfaceType.A8_B8_G8_R8: return 32;
258     case SurfaceType.A2_R10_G10_B10: return 32;
259     case SurfaceType.A2_B10_G10_R10: return 32;
260     case SurfaceType.R16: return 16;
261     case SurfaceType.R16_G16: return 32;
262     case SurfaceType.R16_G16_B16: return 48;
263     case SurfaceType.R16_G16_B16_A16: return 64;
264     case SurfaceType.R32: return 32;
265     case SurfaceType.R32_G32: return 64;
266     case SurfaceType.R32_G32_B32: return 96;
267     case SurfaceType.R32_G32_B32_A32: return 128;
268     case SurfaceType.R64: return 64;
269     case SurfaceType.R64_G64: return 128;
270     case SurfaceType.R64_G64_B64: return 192;
271     case SurfaceType.R64_G64_B64_A64: return 256;
272     case SurfaceType.B10_G11_R11: return 32;
273     case SurfaceType.E5_B9_G9_R9: return 32;
274     case SurfaceType.D16: return 16;
275     case SurfaceType.X8_D24: return 32;
276     case SurfaceType.D32: return 32;
277     case SurfaceType.S8: return 8;
278     case SurfaceType.D16_S8: return 24;
279     case SurfaceType.D24_S8: return 32;
280     case SurfaceType.D32_S8: return 40;
281     default: return 0;
282     }
283 }
284 
285 /// Get the totalBits of a format
286 @property uint totalBits (in Format format) pure
287 {
288     return formatDesc(format).surfaceType.totalBits;
289 }
290 
291 /// Get the numComponents of an image surface
292 @property uint numComponents (in SurfaceType st) pure
293 {
294     switch(st) {
295     case SurfaceType.R4_G4: return 2;
296     case SurfaceType.R4_G4_B4_A4: return 4;
297     case SurfaceType.B4_G4_R4_A4: return 4;
298     case SurfaceType.R5_G6_B5: return 3;
299     case SurfaceType.B5_G6_R5: return 3;
300     case SurfaceType.R5_G5_B5_A1: return 4;
301     case SurfaceType.B5_G5_R5_A1: return 4;
302     case SurfaceType.A1_R5_G5_B5: return 4;
303     case SurfaceType.R8: return 1;
304     case SurfaceType.R8_G8: return 2;
305     case SurfaceType.R8_G8_B8: return 3;
306     case SurfaceType.B8_G8_R8: return 3;
307     case SurfaceType.R8_G8_B8_A8: return 4;
308     case SurfaceType.B8_G8_R8_A8: return 4;
309     case SurfaceType.A8_B8_G8_R8: return 4;
310     case SurfaceType.A2_R10_G10_B10: return 4;
311     case SurfaceType.A2_B10_G10_R10: return 4;
312     case SurfaceType.R16: return 1;
313     case SurfaceType.R16_G16: return 2;
314     case SurfaceType.R16_G16_B16: return 3;
315     case SurfaceType.R16_G16_B16_A16: return 4;
316     case SurfaceType.R32: return 1;
317     case SurfaceType.R32_G32: return 2;
318     case SurfaceType.R32_G32_B32: return 3;
319     case SurfaceType.R32_G32_B32_A32: return 4;
320     case SurfaceType.R64: return 1;
321     case SurfaceType.R64_G64: return 2;
322     case SurfaceType.R64_G64_B64: return 3;
323     case SurfaceType.R64_G64_B64_A64: return 4;
324     case SurfaceType.B10_G11_R11: return 3;
325     case SurfaceType.E5_B9_G9_R9: return 4;
326     case SurfaceType.D16: return 1;
327     case SurfaceType.X8_D24: return 2;
328     case SurfaceType.D32: return 1;
329     case SurfaceType.S8: return 1;
330     case SurfaceType.D16_S8: return 2;
331     case SurfaceType.D24_S8: return 2;
332     case SurfaceType.D32_S8: return 2;
333     default: return 0;
334     }
335 }
336 
337 /// Get the numComponents of a format
338 @property uint numComponents (in Format format) pure
339 {
340     return formatDesc(format).surfaceType.numComponents;
341 }
342 
343 /// Get the colorBits of an image surface
344 @property uint colorBits (in SurfaceType st) pure
345 {
346     switch(st) {
347     case SurfaceType.R4_G4: return 8;
348     case SurfaceType.R4_G4_B4_A4: return 16;
349     case SurfaceType.B4_G4_R4_A4: return 16;
350     case SurfaceType.R5_G6_B5: return 16;
351     case SurfaceType.B5_G6_R5: return 16;
352     case SurfaceType.R5_G5_B5_A1: return 16;
353     case SurfaceType.B5_G5_R5_A1: return 16;
354     case SurfaceType.A1_R5_G5_B5: return 16;
355     case SurfaceType.R8: return 8;
356     case SurfaceType.R8_G8: return 16;
357     case SurfaceType.R8_G8_B8: return 24;
358     case SurfaceType.B8_G8_R8: return 24;
359     case SurfaceType.R8_G8_B8_A8: return 32;
360     case SurfaceType.B8_G8_R8_A8: return 32;
361     case SurfaceType.A8_B8_G8_R8: return 32;
362     case SurfaceType.A2_R10_G10_B10: return 32;
363     case SurfaceType.A2_B10_G10_R10: return 32;
364     case SurfaceType.R16: return 16;
365     case SurfaceType.R16_G16: return 32;
366     case SurfaceType.R16_G16_B16: return 48;
367     case SurfaceType.R16_G16_B16_A16: return 64;
368     case SurfaceType.R32: return 32;
369     case SurfaceType.R32_G32: return 64;
370     case SurfaceType.R32_G32_B32: return 96;
371     case SurfaceType.R32_G32_B32_A32: return 128;
372     case SurfaceType.R64: return 64;
373     case SurfaceType.R64_G64: return 128;
374     case SurfaceType.R64_G64_B64: return 192;
375     case SurfaceType.R64_G64_B64_A64: return 256;
376     case SurfaceType.B10_G11_R11: return 32;
377     case SurfaceType.E5_B9_G9_R9: return 32;
378     default: return 0;
379     }
380 }
381 
382 /// Get the colorBits of a format
383 @property uint colorBits (in Format format) pure
384 {
385     return formatDesc(format).surfaceType.colorBits;
386 }
387 
388 /// Get the redBits of an image surface
389 @property uint redBits (in SurfaceType st) pure
390 {
391     switch(st) {
392     case SurfaceType.R4_G4: return 4;
393     case SurfaceType.R4_G4_B4_A4: return 4;
394     case SurfaceType.B4_G4_R4_A4: return 4;
395     case SurfaceType.R5_G6_B5: return 5;
396     case SurfaceType.B5_G6_R5: return 5;
397     case SurfaceType.R5_G5_B5_A1: return 5;
398     case SurfaceType.B5_G5_R5_A1: return 5;
399     case SurfaceType.A1_R5_G5_B5: return 5;
400     case SurfaceType.R8: return 8;
401     case SurfaceType.R8_G8: return 8;
402     case SurfaceType.R8_G8_B8: return 8;
403     case SurfaceType.B8_G8_R8: return 8;
404     case SurfaceType.R8_G8_B8_A8: return 8;
405     case SurfaceType.B8_G8_R8_A8: return 8;
406     case SurfaceType.A8_B8_G8_R8: return 8;
407     case SurfaceType.A2_R10_G10_B10: return 10;
408     case SurfaceType.A2_B10_G10_R10: return 10;
409     case SurfaceType.R16: return 16;
410     case SurfaceType.R16_G16: return 16;
411     case SurfaceType.R16_G16_B16: return 16;
412     case SurfaceType.R16_G16_B16_A16: return 16;
413     case SurfaceType.R32: return 32;
414     case SurfaceType.R32_G32: return 32;
415     case SurfaceType.R32_G32_B32: return 32;
416     case SurfaceType.R32_G32_B32_A32: return 32;
417     case SurfaceType.R64: return 64;
418     case SurfaceType.R64_G64: return 64;
419     case SurfaceType.R64_G64_B64: return 64;
420     case SurfaceType.R64_G64_B64_A64: return 64;
421     case SurfaceType.B10_G11_R11: return 11;
422     case SurfaceType.E5_B9_G9_R9: return 9;
423     default: return 0;
424     }
425 }
426 
427 /// Get the redBits of a format
428 @property uint redBits (in Format format) pure
429 {
430     return formatDesc(format).surfaceType.redBits;
431 }
432 
433 /// Get the greenBits of an image surface
434 @property uint greenBits (in SurfaceType st) pure
435 {
436     switch(st) {
437     case SurfaceType.R4_G4: return 4;
438     case SurfaceType.R4_G4_B4_A4: return 4;
439     case SurfaceType.B4_G4_R4_A4: return 4;
440     case SurfaceType.R5_G6_B5: return 6;
441     case SurfaceType.B5_G6_R5: return 6;
442     case SurfaceType.R5_G5_B5_A1: return 5;
443     case SurfaceType.B5_G5_R5_A1: return 5;
444     case SurfaceType.A1_R5_G5_B5: return 5;
445     case SurfaceType.R8_G8: return 8;
446     case SurfaceType.R8_G8_B8: return 8;
447     case SurfaceType.B8_G8_R8: return 8;
448     case SurfaceType.R8_G8_B8_A8: return 8;
449     case SurfaceType.B8_G8_R8_A8: return 8;
450     case SurfaceType.A8_B8_G8_R8: return 8;
451     case SurfaceType.A2_R10_G10_B10: return 10;
452     case SurfaceType.A2_B10_G10_R10: return 10;
453     case SurfaceType.R16_G16: return 16;
454     case SurfaceType.R16_G16_B16: return 16;
455     case SurfaceType.R16_G16_B16_A16: return 16;
456     case SurfaceType.R32_G32: return 32;
457     case SurfaceType.R32_G32_B32: return 32;
458     case SurfaceType.R32_G32_B32_A32: return 32;
459     case SurfaceType.R64_G64: return 64;
460     case SurfaceType.R64_G64_B64: return 64;
461     case SurfaceType.R64_G64_B64_A64: return 64;
462     case SurfaceType.B10_G11_R11: return 11;
463     case SurfaceType.E5_B9_G9_R9: return 9;
464     default: return 0;
465     }
466 }
467 
468 /// Get the greenBits of a format
469 @property uint greenBits (in Format format) pure
470 {
471     return formatDesc(format).surfaceType.greenBits;
472 }
473 
474 /// Get the blueBits of an image surface
475 @property uint blueBits (in SurfaceType st) pure
476 {
477     switch(st) {
478     case SurfaceType.R4_G4_B4_A4: return 4;
479     case SurfaceType.B4_G4_R4_A4: return 4;
480     case SurfaceType.R5_G6_B5: return 5;
481     case SurfaceType.B5_G6_R5: return 5;
482     case SurfaceType.R5_G5_B5_A1: return 5;
483     case SurfaceType.B5_G5_R5_A1: return 5;
484     case SurfaceType.A1_R5_G5_B5: return 5;
485     case SurfaceType.R8_G8_B8: return 8;
486     case SurfaceType.B8_G8_R8: return 8;
487     case SurfaceType.R8_G8_B8_A8: return 8;
488     case SurfaceType.B8_G8_R8_A8: return 8;
489     case SurfaceType.A8_B8_G8_R8: return 8;
490     case SurfaceType.A2_R10_G10_B10: return 10;
491     case SurfaceType.A2_B10_G10_R10: return 10;
492     case SurfaceType.R16_G16_B16: return 16;
493     case SurfaceType.R16_G16_B16_A16: return 16;
494     case SurfaceType.R32_G32_B32: return 32;
495     case SurfaceType.R32_G32_B32_A32: return 32;
496     case SurfaceType.R64_G64_B64: return 64;
497     case SurfaceType.R64_G64_B64_A64: return 64;
498     case SurfaceType.B10_G11_R11: return 10;
499     case SurfaceType.E5_B9_G9_R9: return 9;
500     default: return 0;
501     }
502 }
503 
504 /// Get the blueBits of a format
505 @property uint blueBits (in Format format) pure
506 {
507     return formatDesc(format).surfaceType.blueBits;
508 }
509 
510 /// Get the alphaBits of an image surface
511 @property uint alphaBits (in SurfaceType st) pure
512 {
513     switch(st) {
514     case SurfaceType.R4_G4_B4_A4: return 4;
515     case SurfaceType.B4_G4_R4_A4: return 4;
516     case SurfaceType.R5_G5_B5_A1: return 1;
517     case SurfaceType.B5_G5_R5_A1: return 1;
518     case SurfaceType.A1_R5_G5_B5: return 1;
519     case SurfaceType.R8_G8_B8_A8: return 8;
520     case SurfaceType.B8_G8_R8_A8: return 8;
521     case SurfaceType.A8_B8_G8_R8: return 8;
522     case SurfaceType.A2_R10_G10_B10: return 2;
523     case SurfaceType.A2_B10_G10_R10: return 2;
524     case SurfaceType.R16_G16_B16_A16: return 16;
525     case SurfaceType.R32_G32_B32_A32: return 32;
526     case SurfaceType.R64_G64_B64_A64: return 64;
527     default: return 0;
528     }
529 }
530 
531 /// Get the alphaBits of a format
532 @property uint alphaBits (in Format format) pure
533 {
534     return formatDesc(format).surfaceType.alphaBits;
535 }
536 
537 /// Get the redShift of an image surface
538 @property uint redShift (in SurfaceType st) pure
539 {
540     switch(st) {
541     case SurfaceType.R4_G4: return 4;
542     case SurfaceType.R4_G4_B4_A4: return 12;
543     case SurfaceType.B4_G4_R4_A4: return 4;
544     case SurfaceType.R5_G6_B5: return 11;
545     case SurfaceType.R5_G5_B5_A1: return 11;
546     case SurfaceType.B5_G5_R5_A1: return 1;
547     case SurfaceType.A1_R5_G5_B5: return 10;
548     case SurfaceType.R8_G8: return 8;
549     case SurfaceType.R8_G8_B8: return 16;
550     case SurfaceType.R8_G8_B8_A8: return 24;
551     case SurfaceType.B8_G8_R8_A8: return 8;
552     case SurfaceType.A2_R10_G10_B10: return 20;
553     case SurfaceType.R16_G16: return 16;
554     case SurfaceType.R16_G16_B16: return 32;
555     case SurfaceType.R16_G16_B16_A16: return 48;
556     case SurfaceType.R32_G32: return 32;
557     case SurfaceType.R32_G32_B32: return 64;
558     case SurfaceType.R32_G32_B32_A32: return 96;
559     case SurfaceType.R64_G64: return 64;
560     case SurfaceType.R64_G64_B64: return 128;
561     case SurfaceType.R64_G64_B64_A64: return 192;
562     default: return 0;
563     }
564 }
565 
566 /// Get the redShift of a format
567 @property uint redShift (in Format format) pure
568 {
569     return formatDesc(format).surfaceType.redShift;
570 }
571 
572 /// Get the greenShift of an image surface
573 @property uint greenShift (in SurfaceType st) pure
574 {
575     switch(st) {
576     case SurfaceType.R4_G4_B4_A4: return 8;
577     case SurfaceType.B4_G4_R4_A4: return 8;
578     case SurfaceType.R5_G6_B5: return 5;
579     case SurfaceType.B5_G6_R5: return 5;
580     case SurfaceType.R5_G5_B5_A1: return 6;
581     case SurfaceType.B5_G5_R5_A1: return 6;
582     case SurfaceType.A1_R5_G5_B5: return 5;
583     case SurfaceType.R8_G8_B8: return 8;
584     case SurfaceType.B8_G8_R8: return 8;
585     case SurfaceType.R8_G8_B8_A8: return 16;
586     case SurfaceType.B8_G8_R8_A8: return 16;
587     case SurfaceType.A8_B8_G8_R8: return 8;
588     case SurfaceType.A2_R10_G10_B10: return 10;
589     case SurfaceType.A2_B10_G10_R10: return 10;
590     case SurfaceType.R16_G16_B16: return 16;
591     case SurfaceType.R16_G16_B16_A16: return 32;
592     case SurfaceType.R32_G32_B32: return 32;
593     case SurfaceType.R32_G32_B32_A32: return 64;
594     case SurfaceType.R64_G64_B64: return 64;
595     case SurfaceType.R64_G64_B64_A64: return 128;
596     case SurfaceType.B10_G11_R11: return 11;
597     case SurfaceType.E5_B9_G9_R9: return 9;
598     default: return 0;
599     }
600 }
601 
602 /// Get the greenShift of a format
603 @property uint greenShift (in Format format) pure
604 {
605     return formatDesc(format).surfaceType.greenShift;
606 }
607 
608 /// Get the blueShift of an image surface
609 @property uint blueShift (in SurfaceType st) pure
610 {
611     switch(st) {
612     case SurfaceType.R4_G4_B4_A4: return 4;
613     case SurfaceType.B4_G4_R4_A4: return 12;
614     case SurfaceType.B5_G6_R5: return 11;
615     case SurfaceType.R5_G5_B5_A1: return 1;
616     case SurfaceType.B5_G5_R5_A1: return 11;
617     case SurfaceType.B8_G8_R8: return 16;
618     case SurfaceType.R8_G8_B8_A8: return 8;
619     case SurfaceType.B8_G8_R8_A8: return 24;
620     case SurfaceType.A8_B8_G8_R8: return 16;
621     case SurfaceType.A2_B10_G10_R10: return 20;
622     case SurfaceType.R16_G16_B16_A16: return 16;
623     case SurfaceType.R32_G32_B32_A32: return 32;
624     case SurfaceType.R64_G64_B64_A64: return 64;
625     case SurfaceType.B10_G11_R11: return 22;
626     case SurfaceType.E5_B9_G9_R9: return 18;
627     default: return 0;
628     }
629 }
630 
631 /// Get the blueShift of a format
632 @property uint blueShift (in Format format) pure
633 {
634     return formatDesc(format).surfaceType.blueShift;
635 }
636 
637 /// Get the alphaShift of an image surface
638 @property uint alphaShift (in SurfaceType st) pure
639 {
640     switch(st) {
641     case SurfaceType.A1_R5_G5_B5: return 15;
642     case SurfaceType.A8_B8_G8_R8: return 24;
643     case SurfaceType.A2_R10_G10_B10: return 30;
644     case SurfaceType.A2_B10_G10_R10: return 30;
645     default: return 0;
646     }
647 }
648 
649 /// Get the alphaShift of a format
650 @property uint alphaShift (in Format format) pure
651 {
652     return formatDesc(format).surfaceType.alphaShift;
653 }
654 
655 /// Get the sharedExpBits of an image surface
656 @property uint sharedExpBits (in SurfaceType st) pure
657 {
658     switch(st) {
659     case SurfaceType.E5_B9_G9_R9: return 5;
660     default: return 0;
661     }
662 }
663 
664 /// Get the sharedExpBits of a format
665 @property uint sharedExpBits (in Format format) pure
666 {
667     return formatDesc(format).surfaceType.sharedExpBits;
668 }
669 
670 /// Get the depthBits of an image surface
671 @property uint depthBits (in SurfaceType st) pure
672 {
673     switch(st) {
674     case SurfaceType.D16: return 16;
675     case SurfaceType.X8_D24: return 24;
676     case SurfaceType.D32: return 32;
677     case SurfaceType.D16_S8: return 16;
678     case SurfaceType.D24_S8: return 24;
679     case SurfaceType.D32_S8: return 32;
680     default: return 0;
681     }
682 }
683 
684 /// Get the depthBits of a format
685 @property uint depthBits (in Format format) pure
686 {
687     return formatDesc(format).surfaceType.depthBits;
688 }
689 
690 /// Get the stencilBits of an image surface
691 @property uint stencilBits (in SurfaceType st) pure
692 {
693     switch(st) {
694     case SurfaceType.S8: return 8;
695     case SurfaceType.D16_S8: return 8;
696     case SurfaceType.D24_S8: return 8;
697     case SurfaceType.D32_S8: return 8;
698     default: return 0;
699     }
700 }
701 
702 /// Get the stencilBits of a format
703 @property uint stencilBits (in Format format) pure
704 {
705     return formatDesc(format).surfaceType.stencilBits;
706 }
707 
708 /// Static descriptor of SurfaceType.R4_G4.
709 struct R4_G4
710 {
711     enum totalBits = 8;
712     enum numComponents = 2;
713     enum redBits = 4;
714     enum greenBits = 4;
715     enum blueBits = 0;
716     enum alphaBits = 0;
717     enum sharedExpBits = 0;
718     enum depthBits = 0;
719     enum stencilBits = 0;
720 
721     import std.meta : AliasSeq;
722     alias numFormats = AliasSeq!(
723         NumFormat.uNorm
724     );
725 }
726 
727 /// Static descriptor of SurfaceType.R4_G4_B4_A4.
728 struct R4_G4_B4_A4
729 {
730     enum totalBits = 16;
731     enum numComponents = 4;
732     enum redBits = 4;
733     enum greenBits = 4;
734     enum blueBits = 4;
735     enum alphaBits = 4;
736     enum sharedExpBits = 0;
737     enum depthBits = 0;
738     enum stencilBits = 0;
739 
740     import std.meta : AliasSeq;
741     alias numFormats = AliasSeq!(
742         NumFormat.uNorm
743     );
744 }
745 
746 /// Static descriptor of SurfaceType.B4_G4_R4_A4.
747 struct B4_G4_R4_A4
748 {
749     enum totalBits = 16;
750     enum numComponents = 4;
751     enum redBits = 4;
752     enum greenBits = 4;
753     enum blueBits = 4;
754     enum alphaBits = 4;
755     enum sharedExpBits = 0;
756     enum depthBits = 0;
757     enum stencilBits = 0;
758 
759     import std.meta : AliasSeq;
760     alias numFormats = AliasSeq!(
761         NumFormat.uNorm
762     );
763 }
764 
765 /// Static descriptor of SurfaceType.R5_G6_B5.
766 struct R5_G6_B5
767 {
768     enum totalBits = 16;
769     enum numComponents = 3;
770     enum redBits = 5;
771     enum greenBits = 6;
772     enum blueBits = 5;
773     enum alphaBits = 0;
774     enum sharedExpBits = 0;
775     enum depthBits = 0;
776     enum stencilBits = 0;
777 
778     import std.meta : AliasSeq;
779     alias numFormats = AliasSeq!(
780         NumFormat.uNorm
781     );
782 }
783 
784 /// Static descriptor of SurfaceType.B5_G6_R5.
785 struct B5_G6_R5
786 {
787     enum totalBits = 16;
788     enum numComponents = 3;
789     enum redBits = 5;
790     enum greenBits = 6;
791     enum blueBits = 5;
792     enum alphaBits = 0;
793     enum sharedExpBits = 0;
794     enum depthBits = 0;
795     enum stencilBits = 0;
796 
797     import std.meta : AliasSeq;
798     alias numFormats = AliasSeq!(
799         NumFormat.uNorm
800     );
801 }
802 
803 /// Static descriptor of SurfaceType.R5_G5_B5_A1.
804 struct R5_G5_B5_A1
805 {
806     enum totalBits = 16;
807     enum numComponents = 4;
808     enum redBits = 5;
809     enum greenBits = 5;
810     enum blueBits = 5;
811     enum alphaBits = 1;
812     enum sharedExpBits = 0;
813     enum depthBits = 0;
814     enum stencilBits = 0;
815 
816     import std.meta : AliasSeq;
817     alias numFormats = AliasSeq!(
818         NumFormat.uNorm
819     );
820 }
821 
822 /// Static descriptor of SurfaceType.B5_G5_R5_A1.
823 struct B5_G5_R5_A1
824 {
825     enum totalBits = 16;
826     enum numComponents = 4;
827     enum redBits = 5;
828     enum greenBits = 5;
829     enum blueBits = 5;
830     enum alphaBits = 1;
831     enum sharedExpBits = 0;
832     enum depthBits = 0;
833     enum stencilBits = 0;
834 
835     import std.meta : AliasSeq;
836     alias numFormats = AliasSeq!(
837         NumFormat.uNorm
838     );
839 }
840 
841 /// Static descriptor of SurfaceType.A1_R5_G5_B5.
842 struct A1_R5_G5_B5
843 {
844     enum totalBits = 16;
845     enum numComponents = 4;
846     enum redBits = 5;
847     enum greenBits = 5;
848     enum blueBits = 5;
849     enum alphaBits = 1;
850     enum sharedExpBits = 0;
851     enum depthBits = 0;
852     enum stencilBits = 0;
853 
854     import std.meta : AliasSeq;
855     alias numFormats = AliasSeq!(
856         NumFormat.uNorm
857     );
858 }
859 
860 /// Static descriptor of SurfaceType.R8.
861 struct R8
862 {
863     enum totalBits = 8;
864     enum numComponents = 1;
865     enum redBits = 8;
866     enum greenBits = 0;
867     enum blueBits = 0;
868     enum alphaBits = 0;
869     enum sharedExpBits = 0;
870     enum depthBits = 0;
871     enum stencilBits = 0;
872 
873     import std.meta : AliasSeq;
874     alias numFormats = AliasSeq!(
875         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sRgb
876     );
877 }
878 
879 /// Static descriptor of SurfaceType.R8_G8.
880 struct R8_G8
881 {
882     enum totalBits = 16;
883     enum numComponents = 2;
884     enum redBits = 8;
885     enum greenBits = 8;
886     enum blueBits = 0;
887     enum alphaBits = 0;
888     enum sharedExpBits = 0;
889     enum depthBits = 0;
890     enum stencilBits = 0;
891 
892     import std.meta : AliasSeq;
893     alias numFormats = AliasSeq!(
894         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sRgb
895     );
896 }
897 
898 /// Static descriptor of SurfaceType.R8_G8_B8.
899 struct R8_G8_B8
900 {
901     enum totalBits = 24;
902     enum numComponents = 3;
903     enum redBits = 8;
904     enum greenBits = 8;
905     enum blueBits = 8;
906     enum alphaBits = 0;
907     enum sharedExpBits = 0;
908     enum depthBits = 0;
909     enum stencilBits = 0;
910 
911     import std.meta : AliasSeq;
912     alias numFormats = AliasSeq!(
913         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sRgb
914     );
915 }
916 
917 /// Static descriptor of SurfaceType.B8_G8_R8.
918 struct B8_G8_R8
919 {
920     enum totalBits = 24;
921     enum numComponents = 3;
922     enum redBits = 8;
923     enum greenBits = 8;
924     enum blueBits = 8;
925     enum alphaBits = 0;
926     enum sharedExpBits = 0;
927     enum depthBits = 0;
928     enum stencilBits = 0;
929 
930     import std.meta : AliasSeq;
931     alias numFormats = AliasSeq!(
932         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sRgb
933     );
934 }
935 
936 /// Static descriptor of SurfaceType.R8_G8_B8_A8.
937 struct R8_G8_B8_A8
938 {
939     enum totalBits = 32;
940     enum numComponents = 4;
941     enum redBits = 8;
942     enum greenBits = 8;
943     enum blueBits = 8;
944     enum alphaBits = 8;
945     enum sharedExpBits = 0;
946     enum depthBits = 0;
947     enum stencilBits = 0;
948 
949     import std.meta : AliasSeq;
950     alias numFormats = AliasSeq!(
951         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sRgb
952     );
953 }
954 
955 /// Static descriptor of SurfaceType.B8_G8_R8_A8.
956 struct B8_G8_R8_A8
957 {
958     enum totalBits = 32;
959     enum numComponents = 4;
960     enum redBits = 8;
961     enum greenBits = 8;
962     enum blueBits = 8;
963     enum alphaBits = 8;
964     enum sharedExpBits = 0;
965     enum depthBits = 0;
966     enum stencilBits = 0;
967 
968     import std.meta : AliasSeq;
969     alias numFormats = AliasSeq!(
970         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sRgb
971     );
972 }
973 
974 /// Static descriptor of SurfaceType.A8_B8_G8_R8.
975 struct A8_B8_G8_R8
976 {
977     enum totalBits = 32;
978     enum numComponents = 4;
979     enum redBits = 8;
980     enum greenBits = 8;
981     enum blueBits = 8;
982     enum alphaBits = 8;
983     enum sharedExpBits = 0;
984     enum depthBits = 0;
985     enum stencilBits = 0;
986 
987     import std.meta : AliasSeq;
988     alias numFormats = AliasSeq!(
989         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sRgb
990     );
991 }
992 
993 /// Static descriptor of SurfaceType.A2_R10_G10_B10.
994 struct A2_R10_G10_B10
995 {
996     enum totalBits = 32;
997     enum numComponents = 4;
998     enum redBits = 10;
999     enum greenBits = 10;
1000     enum blueBits = 10;
1001     enum alphaBits = 2;
1002     enum sharedExpBits = 0;
1003     enum depthBits = 0;
1004     enum stencilBits = 0;
1005 
1006     import std.meta : AliasSeq;
1007     alias numFormats = AliasSeq!(
1008         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt
1009     );
1010 }
1011 
1012 /// Static descriptor of SurfaceType.A2_B10_G10_R10.
1013 struct A2_B10_G10_R10
1014 {
1015     enum totalBits = 32;
1016     enum numComponents = 4;
1017     enum redBits = 10;
1018     enum greenBits = 10;
1019     enum blueBits = 10;
1020     enum alphaBits = 2;
1021     enum sharedExpBits = 0;
1022     enum depthBits = 0;
1023     enum stencilBits = 0;
1024 
1025     import std.meta : AliasSeq;
1026     alias numFormats = AliasSeq!(
1027         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt
1028     );
1029 }
1030 
1031 /// Static descriptor of SurfaceType.R16.
1032 struct R16
1033 {
1034     enum totalBits = 16;
1035     enum numComponents = 1;
1036     enum redBits = 16;
1037     enum greenBits = 0;
1038     enum blueBits = 0;
1039     enum alphaBits = 0;
1040     enum sharedExpBits = 0;
1041     enum depthBits = 0;
1042     enum stencilBits = 0;
1043 
1044     import std.meta : AliasSeq;
1045     alias numFormats = AliasSeq!(
1046         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1047     );
1048 }
1049 
1050 /// Static descriptor of SurfaceType.R16_G16.
1051 struct R16_G16
1052 {
1053     enum totalBits = 32;
1054     enum numComponents = 2;
1055     enum redBits = 16;
1056     enum greenBits = 16;
1057     enum blueBits = 0;
1058     enum alphaBits = 0;
1059     enum sharedExpBits = 0;
1060     enum depthBits = 0;
1061     enum stencilBits = 0;
1062 
1063     import std.meta : AliasSeq;
1064     alias numFormats = AliasSeq!(
1065         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1066     );
1067 }
1068 
1069 /// Static descriptor of SurfaceType.R16_G16_B16.
1070 struct R16_G16_B16
1071 {
1072     enum totalBits = 48;
1073     enum numComponents = 3;
1074     enum redBits = 16;
1075     enum greenBits = 16;
1076     enum blueBits = 16;
1077     enum alphaBits = 0;
1078     enum sharedExpBits = 0;
1079     enum depthBits = 0;
1080     enum stencilBits = 0;
1081 
1082     import std.meta : AliasSeq;
1083     alias numFormats = AliasSeq!(
1084         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1085     );
1086 }
1087 
1088 /// Static descriptor of SurfaceType.R16_G16_B16_A16.
1089 struct R16_G16_B16_A16
1090 {
1091     enum totalBits = 64;
1092     enum numComponents = 4;
1093     enum redBits = 16;
1094     enum greenBits = 16;
1095     enum blueBits = 16;
1096     enum alphaBits = 16;
1097     enum sharedExpBits = 0;
1098     enum depthBits = 0;
1099     enum stencilBits = 0;
1100 
1101     import std.meta : AliasSeq;
1102     alias numFormats = AliasSeq!(
1103         NumFormat.uNorm, NumFormat.sNorm, NumFormat.uScaled, NumFormat.sScaled, NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1104     );
1105 }
1106 
1107 /// Static descriptor of SurfaceType.R32.
1108 struct R32
1109 {
1110     enum totalBits = 32;
1111     enum numComponents = 1;
1112     enum redBits = 32;
1113     enum greenBits = 0;
1114     enum blueBits = 0;
1115     enum alphaBits = 0;
1116     enum sharedExpBits = 0;
1117     enum depthBits = 0;
1118     enum stencilBits = 0;
1119 
1120     import std.meta : AliasSeq;
1121     alias numFormats = AliasSeq!(
1122         NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1123     );
1124 }
1125 
1126 /// Static descriptor of SurfaceType.R32_G32.
1127 struct R32_G32
1128 {
1129     enum totalBits = 64;
1130     enum numComponents = 2;
1131     enum redBits = 32;
1132     enum greenBits = 32;
1133     enum blueBits = 0;
1134     enum alphaBits = 0;
1135     enum sharedExpBits = 0;
1136     enum depthBits = 0;
1137     enum stencilBits = 0;
1138 
1139     import std.meta : AliasSeq;
1140     alias numFormats = AliasSeq!(
1141         NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1142     );
1143 }
1144 
1145 /// Static descriptor of SurfaceType.R32_G32_B32.
1146 struct R32_G32_B32
1147 {
1148     enum totalBits = 96;
1149     enum numComponents = 3;
1150     enum redBits = 32;
1151     enum greenBits = 32;
1152     enum blueBits = 32;
1153     enum alphaBits = 0;
1154     enum sharedExpBits = 0;
1155     enum depthBits = 0;
1156     enum stencilBits = 0;
1157 
1158     import std.meta : AliasSeq;
1159     alias numFormats = AliasSeq!(
1160         NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1161     );
1162 }
1163 
1164 /// Static descriptor of SurfaceType.R32_G32_B32_A32.
1165 struct R32_G32_B32_A32
1166 {
1167     enum totalBits = 128;
1168     enum numComponents = 4;
1169     enum redBits = 32;
1170     enum greenBits = 32;
1171     enum blueBits = 32;
1172     enum alphaBits = 32;
1173     enum sharedExpBits = 0;
1174     enum depthBits = 0;
1175     enum stencilBits = 0;
1176 
1177     import std.meta : AliasSeq;
1178     alias numFormats = AliasSeq!(
1179         NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1180     );
1181 }
1182 
1183 /// Static descriptor of SurfaceType.R64.
1184 struct R64
1185 {
1186     enum totalBits = 64;
1187     enum numComponents = 1;
1188     enum redBits = 64;
1189     enum greenBits = 0;
1190     enum blueBits = 0;
1191     enum alphaBits = 0;
1192     enum sharedExpBits = 0;
1193     enum depthBits = 0;
1194     enum stencilBits = 0;
1195 
1196     import std.meta : AliasSeq;
1197     alias numFormats = AliasSeq!(
1198         NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1199     );
1200 }
1201 
1202 /// Static descriptor of SurfaceType.R64_G64.
1203 struct R64_G64
1204 {
1205     enum totalBits = 128;
1206     enum numComponents = 2;
1207     enum redBits = 64;
1208     enum greenBits = 64;
1209     enum blueBits = 0;
1210     enum alphaBits = 0;
1211     enum sharedExpBits = 0;
1212     enum depthBits = 0;
1213     enum stencilBits = 0;
1214 
1215     import std.meta : AliasSeq;
1216     alias numFormats = AliasSeq!(
1217         NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1218     );
1219 }
1220 
1221 /// Static descriptor of SurfaceType.R64_G64_B64.
1222 struct R64_G64_B64
1223 {
1224     enum totalBits = 192;
1225     enum numComponents = 3;
1226     enum redBits = 64;
1227     enum greenBits = 64;
1228     enum blueBits = 64;
1229     enum alphaBits = 0;
1230     enum sharedExpBits = 0;
1231     enum depthBits = 0;
1232     enum stencilBits = 0;
1233 
1234     import std.meta : AliasSeq;
1235     alias numFormats = AliasSeq!(
1236         NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1237     );
1238 }
1239 
1240 /// Static descriptor of SurfaceType.R64_G64_B64_A64.
1241 struct R64_G64_B64_A64
1242 {
1243     enum totalBits = 256;
1244     enum numComponents = 4;
1245     enum redBits = 64;
1246     enum greenBits = 64;
1247     enum blueBits = 64;
1248     enum alphaBits = 64;
1249     enum sharedExpBits = 0;
1250     enum depthBits = 0;
1251     enum stencilBits = 0;
1252 
1253     import std.meta : AliasSeq;
1254     alias numFormats = AliasSeq!(
1255         NumFormat.uInt, NumFormat.sInt, NumFormat.sFloat
1256     );
1257 }
1258 
1259 /// Static descriptor of SurfaceType.B10_G11_R11.
1260 struct B10_G11_R11
1261 {
1262     enum totalBits = 32;
1263     enum numComponents = 3;
1264     enum redBits = 11;
1265     enum greenBits = 11;
1266     enum blueBits = 10;
1267     enum alphaBits = 0;
1268     enum sharedExpBits = 0;
1269     enum depthBits = 0;
1270     enum stencilBits = 0;
1271 
1272     import std.meta : AliasSeq;
1273     alias numFormats = AliasSeq!(
1274         NumFormat.uFloat
1275     );
1276 }
1277 
1278 /// Static descriptor of SurfaceType.E5_B9_G9_R9.
1279 struct E5_B9_G9_R9
1280 {
1281     enum totalBits = 32;
1282     enum numComponents = 4;
1283     enum redBits = 9;
1284     enum greenBits = 9;
1285     enum blueBits = 9;
1286     enum alphaBits = 0;
1287     enum sharedExpBits = 5;
1288     enum depthBits = 0;
1289     enum stencilBits = 0;
1290 
1291     import std.meta : AliasSeq;
1292     alias numFormats = AliasSeq!(
1293         NumFormat.uFloat
1294     );
1295 }
1296 
1297 /// Static descriptor of SurfaceType.D16.
1298 struct D16
1299 {
1300     enum totalBits = 16;
1301     enum numComponents = 1;
1302     enum redBits = 0;
1303     enum greenBits = 0;
1304     enum blueBits = 0;
1305     enum alphaBits = 0;
1306     enum sharedExpBits = 0;
1307     enum depthBits = 16;
1308     enum stencilBits = 0;
1309 
1310     import std.meta : AliasSeq;
1311     alias numFormats = AliasSeq!(
1312         NumFormat.uNorm
1313     );
1314 }
1315 
1316 /// Static descriptor of SurfaceType.X8_D24.
1317 struct X8_D24
1318 {
1319     enum totalBits = 32;
1320     enum numComponents = 2;
1321     enum redBits = 0;
1322     enum greenBits = 0;
1323     enum blueBits = 0;
1324     enum alphaBits = 0;
1325     enum sharedExpBits = 0;
1326     enum depthBits = 24;
1327     enum stencilBits = 0;
1328 
1329     import std.meta : AliasSeq;
1330     alias numFormats = AliasSeq!(
1331         NumFormat.uNorm
1332     );
1333 }
1334 
1335 /// Static descriptor of SurfaceType.D32.
1336 struct D32
1337 {
1338     enum totalBits = 32;
1339     enum numComponents = 1;
1340     enum redBits = 0;
1341     enum greenBits = 0;
1342     enum blueBits = 0;
1343     enum alphaBits = 0;
1344     enum sharedExpBits = 0;
1345     enum depthBits = 32;
1346     enum stencilBits = 0;
1347 
1348     import std.meta : AliasSeq;
1349     alias numFormats = AliasSeq!(
1350         NumFormat.sFloat
1351     );
1352 }
1353 
1354 /// Static descriptor of SurfaceType.S8.
1355 struct S8
1356 {
1357     enum totalBits = 8;
1358     enum numComponents = 1;
1359     enum redBits = 0;
1360     enum greenBits = 0;
1361     enum blueBits = 0;
1362     enum alphaBits = 0;
1363     enum sharedExpBits = 0;
1364     enum depthBits = 0;
1365     enum stencilBits = 8;
1366 
1367     import std.meta : AliasSeq;
1368     alias numFormats = AliasSeq!(
1369         NumFormat.uInt
1370     );
1371 }
1372 
1373 /// Static descriptor of SurfaceType.D16_S8.
1374 struct D16_S8
1375 {
1376     enum totalBits = 24;
1377     enum numComponents = 2;
1378     enum redBits = 0;
1379     enum greenBits = 0;
1380     enum blueBits = 0;
1381     enum alphaBits = 0;
1382     enum sharedExpBits = 0;
1383     enum depthBits = 16;
1384     enum stencilBits = 8;
1385 
1386     import std.meta : AliasSeq;
1387     alias numFormats = AliasSeq!(
1388         NumFormat.uNorm
1389     );
1390 }
1391 
1392 /// Static descriptor of SurfaceType.D24_S8.
1393 struct D24_S8
1394 {
1395     enum totalBits = 32;
1396     enum numComponents = 2;
1397     enum redBits = 0;
1398     enum greenBits = 0;
1399     enum blueBits = 0;
1400     enum alphaBits = 0;
1401     enum sharedExpBits = 0;
1402     enum depthBits = 24;
1403     enum stencilBits = 8;
1404 
1405     import std.meta : AliasSeq;
1406     alias numFormats = AliasSeq!(
1407         NumFormat.uNorm
1408     );
1409 }
1410 
1411 /// Static descriptor of SurfaceType.D32_S8.
1412 struct D32_S8
1413 {
1414     enum totalBits = 40;
1415     enum numComponents = 2;
1416     enum redBits = 0;
1417     enum greenBits = 0;
1418     enum blueBits = 0;
1419     enum alphaBits = 0;
1420     enum sharedExpBits = 0;
1421     enum depthBits = 32;
1422     enum stencilBits = 8;
1423 
1424     import std.meta : AliasSeq;
1425     alias numFormats = AliasSeq!(
1426         NumFormat.sFloat
1427     );
1428 }
1429 
1430 /// Static descriptor of Format.rg4_uNorm
1431 struct Rg4_uNorm
1432 {
1433     alias SurfType = R4_G4;
1434     enum surfType = SurfaceType.R4_G4;
1435     enum numFormat = NumFormat.uNorm;
1436     enum packed = true;
1437 }
1438 
1439 /// Static descriptor of Format.rgba4_uNorm
1440 struct Rgba4_uNorm
1441 {
1442     alias SurfType = R4_G4_B4_A4;
1443     enum surfType = SurfaceType.R4_G4_B4_A4;
1444     enum numFormat = NumFormat.uNorm;
1445     enum packed = true;
1446 }
1447 
1448 /// Static descriptor of Format.bgra4_uNorm
1449 struct Bgra4_uNorm
1450 {
1451     alias SurfType = B4_G4_R4_A4;
1452     enum surfType = SurfaceType.B4_G4_R4_A4;
1453     enum numFormat = NumFormat.uNorm;
1454     enum packed = true;
1455 }
1456 
1457 /// Static descriptor of Format.r5g6b5_uNorm
1458 struct R5g6b5_uNorm
1459 {
1460     alias SurfType = R5_G6_B5;
1461     enum surfType = SurfaceType.R5_G6_B5;
1462     enum numFormat = NumFormat.uNorm;
1463     enum packed = true;
1464 }
1465 
1466 /// Static descriptor of Format.b5g6r5_uNorm
1467 struct B5g6r5_uNorm
1468 {
1469     alias SurfType = B5_G6_R5;
1470     enum surfType = SurfaceType.B5_G6_R5;
1471     enum numFormat = NumFormat.uNorm;
1472     enum packed = true;
1473 }
1474 
1475 /// Static descriptor of Format.r5g5b5a1_uNorm
1476 struct R5g5b5a1_uNorm
1477 {
1478     alias SurfType = R5_G5_B5_A1;
1479     enum surfType = SurfaceType.R5_G5_B5_A1;
1480     enum numFormat = NumFormat.uNorm;
1481     enum packed = true;
1482 }
1483 
1484 /// Static descriptor of Format.b5g5r5a1_uNorm
1485 struct B5g5r5a1_uNorm
1486 {
1487     alias SurfType = B5_G5_R5_A1;
1488     enum surfType = SurfaceType.B5_G5_R5_A1;
1489     enum numFormat = NumFormat.uNorm;
1490     enum packed = true;
1491 }
1492 
1493 /// Static descriptor of Format.a1r5g5b5_uNorm
1494 struct A1r5g5b5_uNorm
1495 {
1496     alias SurfType = A1_R5_G5_B5;
1497     enum surfType = SurfaceType.A1_R5_G5_B5;
1498     enum numFormat = NumFormat.uNorm;
1499     enum packed = true;
1500 }
1501 
1502 /// Static descriptor of Format.r8_uNorm
1503 struct R8_uNorm
1504 {
1505     alias SurfType = R8;
1506     enum surfType = SurfaceType.R8;
1507     enum numFormat = NumFormat.uNorm;
1508     enum packed = false;
1509 }
1510 
1511 /// Static descriptor of Format.r8_sNorm
1512 struct R8_sNorm
1513 {
1514     alias SurfType = R8;
1515     enum surfType = SurfaceType.R8;
1516     enum numFormat = NumFormat.sNorm;
1517     enum packed = false;
1518 }
1519 
1520 /// Static descriptor of Format.r8_uScaled
1521 struct R8_uScaled
1522 {
1523     alias SurfType = R8;
1524     enum surfType = SurfaceType.R8;
1525     enum numFormat = NumFormat.uScaled;
1526     enum packed = false;
1527 }
1528 
1529 /// Static descriptor of Format.r8_sScaled
1530 struct R8_sScaled
1531 {
1532     alias SurfType = R8;
1533     enum surfType = SurfaceType.R8;
1534     enum numFormat = NumFormat.sScaled;
1535     enum packed = false;
1536 }
1537 
1538 /// Static descriptor of Format.r8_uInt
1539 struct R8_uInt
1540 {
1541     alias SurfType = R8;
1542     enum surfType = SurfaceType.R8;
1543     enum numFormat = NumFormat.uInt;
1544     enum packed = false;
1545 }
1546 
1547 /// Static descriptor of Format.r8_sInt
1548 struct R8_sInt
1549 {
1550     alias SurfType = R8;
1551     enum surfType = SurfaceType.R8;
1552     enum numFormat = NumFormat.sInt;
1553     enum packed = false;
1554 }
1555 
1556 /// Static descriptor of Format.r8_sRgb
1557 struct R8_sRgb
1558 {
1559     alias SurfType = R8;
1560     enum surfType = SurfaceType.R8;
1561     enum numFormat = NumFormat.sRgb;
1562     enum packed = false;
1563 }
1564 
1565 /// Static descriptor of Format.rg8_uNorm
1566 struct Rg8_uNorm
1567 {
1568     alias SurfType = R8_G8;
1569     enum surfType = SurfaceType.R8_G8;
1570     enum numFormat = NumFormat.uNorm;
1571     enum packed = false;
1572 }
1573 
1574 /// Static descriptor of Format.rg8_sNorm
1575 struct Rg8_sNorm
1576 {
1577     alias SurfType = R8_G8;
1578     enum surfType = SurfaceType.R8_G8;
1579     enum numFormat = NumFormat.sNorm;
1580     enum packed = false;
1581 }
1582 
1583 /// Static descriptor of Format.rg8_uScaled
1584 struct Rg8_uScaled
1585 {
1586     alias SurfType = R8_G8;
1587     enum surfType = SurfaceType.R8_G8;
1588     enum numFormat = NumFormat.uScaled;
1589     enum packed = false;
1590 }
1591 
1592 /// Static descriptor of Format.rg8_sScaled
1593 struct Rg8_sScaled
1594 {
1595     alias SurfType = R8_G8;
1596     enum surfType = SurfaceType.R8_G8;
1597     enum numFormat = NumFormat.sScaled;
1598     enum packed = false;
1599 }
1600 
1601 /// Static descriptor of Format.rg8_uInt
1602 struct Rg8_uInt
1603 {
1604     alias SurfType = R8_G8;
1605     enum surfType = SurfaceType.R8_G8;
1606     enum numFormat = NumFormat.uInt;
1607     enum packed = false;
1608 }
1609 
1610 /// Static descriptor of Format.rg8_sInt
1611 struct Rg8_sInt
1612 {
1613     alias SurfType = R8_G8;
1614     enum surfType = SurfaceType.R8_G8;
1615     enum numFormat = NumFormat.sInt;
1616     enum packed = false;
1617 }
1618 
1619 /// Static descriptor of Format.rg8_sRgb
1620 struct Rg8_sRgb
1621 {
1622     alias SurfType = R8_G8;
1623     enum surfType = SurfaceType.R8_G8;
1624     enum numFormat = NumFormat.sRgb;
1625     enum packed = false;
1626 }
1627 
1628 /// Static descriptor of Format.rgb8_uNorm
1629 struct Rgb8_uNorm
1630 {
1631     alias SurfType = R8_G8_B8;
1632     enum surfType = SurfaceType.R8_G8_B8;
1633     enum numFormat = NumFormat.uNorm;
1634     enum packed = false;
1635 }
1636 
1637 /// Static descriptor of Format.rgb8_sNorm
1638 struct Rgb8_sNorm
1639 {
1640     alias SurfType = R8_G8_B8;
1641     enum surfType = SurfaceType.R8_G8_B8;
1642     enum numFormat = NumFormat.sNorm;
1643     enum packed = false;
1644 }
1645 
1646 /// Static descriptor of Format.rgb8_uScaled
1647 struct Rgb8_uScaled
1648 {
1649     alias SurfType = R8_G8_B8;
1650     enum surfType = SurfaceType.R8_G8_B8;
1651     enum numFormat = NumFormat.uScaled;
1652     enum packed = false;
1653 }
1654 
1655 /// Static descriptor of Format.rgb8_sScaled
1656 struct Rgb8_sScaled
1657 {
1658     alias SurfType = R8_G8_B8;
1659     enum surfType = SurfaceType.R8_G8_B8;
1660     enum numFormat = NumFormat.sScaled;
1661     enum packed = false;
1662 }
1663 
1664 /// Static descriptor of Format.rgb8_uInt
1665 struct Rgb8_uInt
1666 {
1667     alias SurfType = R8_G8_B8;
1668     enum surfType = SurfaceType.R8_G8_B8;
1669     enum numFormat = NumFormat.uInt;
1670     enum packed = false;
1671 }
1672 
1673 /// Static descriptor of Format.rgb8_sInt
1674 struct Rgb8_sInt
1675 {
1676     alias SurfType = R8_G8_B8;
1677     enum surfType = SurfaceType.R8_G8_B8;
1678     enum numFormat = NumFormat.sInt;
1679     enum packed = false;
1680 }
1681 
1682 /// Static descriptor of Format.rgb8_sRgb
1683 struct Rgb8_sRgb
1684 {
1685     alias SurfType = R8_G8_B8;
1686     enum surfType = SurfaceType.R8_G8_B8;
1687     enum numFormat = NumFormat.sRgb;
1688     enum packed = false;
1689 }
1690 
1691 /// Static descriptor of Format.bgr8_uNorm
1692 struct Bgr8_uNorm
1693 {
1694     alias SurfType = B8_G8_R8;
1695     enum surfType = SurfaceType.B8_G8_R8;
1696     enum numFormat = NumFormat.uNorm;
1697     enum packed = false;
1698 }
1699 
1700 /// Static descriptor of Format.bgr8_sNorm
1701 struct Bgr8_sNorm
1702 {
1703     alias SurfType = B8_G8_R8;
1704     enum surfType = SurfaceType.B8_G8_R8;
1705     enum numFormat = NumFormat.sNorm;
1706     enum packed = false;
1707 }
1708 
1709 /// Static descriptor of Format.bgr8_uScaled
1710 struct Bgr8_uScaled
1711 {
1712     alias SurfType = B8_G8_R8;
1713     enum surfType = SurfaceType.B8_G8_R8;
1714     enum numFormat = NumFormat.uScaled;
1715     enum packed = false;
1716 }
1717 
1718 /// Static descriptor of Format.bgr8_sScaled
1719 struct Bgr8_sScaled
1720 {
1721     alias SurfType = B8_G8_R8;
1722     enum surfType = SurfaceType.B8_G8_R8;
1723     enum numFormat = NumFormat.sScaled;
1724     enum packed = false;
1725 }
1726 
1727 /// Static descriptor of Format.bgr8_uInt
1728 struct Bgr8_uInt
1729 {
1730     alias SurfType = B8_G8_R8;
1731     enum surfType = SurfaceType.B8_G8_R8;
1732     enum numFormat = NumFormat.uInt;
1733     enum packed = false;
1734 }
1735 
1736 /// Static descriptor of Format.bgr8_sInt
1737 struct Bgr8_sInt
1738 {
1739     alias SurfType = B8_G8_R8;
1740     enum surfType = SurfaceType.B8_G8_R8;
1741     enum numFormat = NumFormat.sInt;
1742     enum packed = false;
1743 }
1744 
1745 /// Static descriptor of Format.bgr8_sRgb
1746 struct Bgr8_sRgb
1747 {
1748     alias SurfType = B8_G8_R8;
1749     enum surfType = SurfaceType.B8_G8_R8;
1750     enum numFormat = NumFormat.sRgb;
1751     enum packed = false;
1752 }
1753 
1754 /// Static descriptor of Format.rgba8_uNorm
1755 struct Rgba8_uNorm
1756 {
1757     alias SurfType = R8_G8_B8_A8;
1758     enum surfType = SurfaceType.R8_G8_B8_A8;
1759     enum numFormat = NumFormat.uNorm;
1760     enum packed = false;
1761 }
1762 
1763 /// Static descriptor of Format.rgba8_sNorm
1764 struct Rgba8_sNorm
1765 {
1766     alias SurfType = R8_G8_B8_A8;
1767     enum surfType = SurfaceType.R8_G8_B8_A8;
1768     enum numFormat = NumFormat.sNorm;
1769     enum packed = false;
1770 }
1771 
1772 /// Static descriptor of Format.rgba8_uScaled
1773 struct Rgba8_uScaled
1774 {
1775     alias SurfType = R8_G8_B8_A8;
1776     enum surfType = SurfaceType.R8_G8_B8_A8;
1777     enum numFormat = NumFormat.uScaled;
1778     enum packed = false;
1779 }
1780 
1781 /// Static descriptor of Format.rgba8_sScaled
1782 struct Rgba8_sScaled
1783 {
1784     alias SurfType = R8_G8_B8_A8;
1785     enum surfType = SurfaceType.R8_G8_B8_A8;
1786     enum numFormat = NumFormat.sScaled;
1787     enum packed = false;
1788 }
1789 
1790 /// Static descriptor of Format.rgba8_uInt
1791 struct Rgba8_uInt
1792 {
1793     alias SurfType = R8_G8_B8_A8;
1794     enum surfType = SurfaceType.R8_G8_B8_A8;
1795     enum numFormat = NumFormat.uInt;
1796     enum packed = false;
1797 }
1798 
1799 /// Static descriptor of Format.rgba8_sInt
1800 struct Rgba8_sInt
1801 {
1802     alias SurfType = R8_G8_B8_A8;
1803     enum surfType = SurfaceType.R8_G8_B8_A8;
1804     enum numFormat = NumFormat.sInt;
1805     enum packed = false;
1806 }
1807 
1808 /// Static descriptor of Format.rgba8_sRgb
1809 struct Rgba8_sRgb
1810 {
1811     alias SurfType = R8_G8_B8_A8;
1812     enum surfType = SurfaceType.R8_G8_B8_A8;
1813     enum numFormat = NumFormat.sRgb;
1814     enum packed = false;
1815 }
1816 
1817 /// Static descriptor of Format.bgra8_uNorm
1818 struct Bgra8_uNorm
1819 {
1820     alias SurfType = B8_G8_R8_A8;
1821     enum surfType = SurfaceType.B8_G8_R8_A8;
1822     enum numFormat = NumFormat.uNorm;
1823     enum packed = false;
1824 }
1825 
1826 /// Static descriptor of Format.bgra8_sNorm
1827 struct Bgra8_sNorm
1828 {
1829     alias SurfType = B8_G8_R8_A8;
1830     enum surfType = SurfaceType.B8_G8_R8_A8;
1831     enum numFormat = NumFormat.sNorm;
1832     enum packed = false;
1833 }
1834 
1835 /// Static descriptor of Format.bgra8_uScaled
1836 struct Bgra8_uScaled
1837 {
1838     alias SurfType = B8_G8_R8_A8;
1839     enum surfType = SurfaceType.B8_G8_R8_A8;
1840     enum numFormat = NumFormat.uScaled;
1841     enum packed = false;
1842 }
1843 
1844 /// Static descriptor of Format.bgra8_sScaled
1845 struct Bgra8_sScaled
1846 {
1847     alias SurfType = B8_G8_R8_A8;
1848     enum surfType = SurfaceType.B8_G8_R8_A8;
1849     enum numFormat = NumFormat.sScaled;
1850     enum packed = false;
1851 }
1852 
1853 /// Static descriptor of Format.bgra8_uInt
1854 struct Bgra8_uInt
1855 {
1856     alias SurfType = B8_G8_R8_A8;
1857     enum surfType = SurfaceType.B8_G8_R8_A8;
1858     enum numFormat = NumFormat.uInt;
1859     enum packed = false;
1860 }
1861 
1862 /// Static descriptor of Format.bgra8_sInt
1863 struct Bgra8_sInt
1864 {
1865     alias SurfType = B8_G8_R8_A8;
1866     enum surfType = SurfaceType.B8_G8_R8_A8;
1867     enum numFormat = NumFormat.sInt;
1868     enum packed = false;
1869 }
1870 
1871 /// Static descriptor of Format.bgra8_sRgb
1872 struct Bgra8_sRgb
1873 {
1874     alias SurfType = B8_G8_R8_A8;
1875     enum surfType = SurfaceType.B8_G8_R8_A8;
1876     enum numFormat = NumFormat.sRgb;
1877     enum packed = false;
1878 }
1879 
1880 /// Static descriptor of Format.abgr8_uNorm
1881 struct Abgr8_uNorm
1882 {
1883     alias SurfType = A8_B8_G8_R8;
1884     enum surfType = SurfaceType.A8_B8_G8_R8;
1885     enum numFormat = NumFormat.uNorm;
1886     enum packed = true;
1887 }
1888 
1889 /// Static descriptor of Format.abgr8_sNorm
1890 struct Abgr8_sNorm
1891 {
1892     alias SurfType = A8_B8_G8_R8;
1893     enum surfType = SurfaceType.A8_B8_G8_R8;
1894     enum numFormat = NumFormat.sNorm;
1895     enum packed = true;
1896 }
1897 
1898 /// Static descriptor of Format.abgr8_uScaled
1899 struct Abgr8_uScaled
1900 {
1901     alias SurfType = A8_B8_G8_R8;
1902     enum surfType = SurfaceType.A8_B8_G8_R8;
1903     enum numFormat = NumFormat.uScaled;
1904     enum packed = true;
1905 }
1906 
1907 /// Static descriptor of Format.abgr8_sScaled
1908 struct Abgr8_sScaled
1909 {
1910     alias SurfType = A8_B8_G8_R8;
1911     enum surfType = SurfaceType.A8_B8_G8_R8;
1912     enum numFormat = NumFormat.sScaled;
1913     enum packed = true;
1914 }
1915 
1916 /// Static descriptor of Format.abgr8_uInt
1917 struct Abgr8_uInt
1918 {
1919     alias SurfType = A8_B8_G8_R8;
1920     enum surfType = SurfaceType.A8_B8_G8_R8;
1921     enum numFormat = NumFormat.uInt;
1922     enum packed = true;
1923 }
1924 
1925 /// Static descriptor of Format.abgr8_sInt
1926 struct Abgr8_sInt
1927 {
1928     alias SurfType = A8_B8_G8_R8;
1929     enum surfType = SurfaceType.A8_B8_G8_R8;
1930     enum numFormat = NumFormat.sInt;
1931     enum packed = true;
1932 }
1933 
1934 /// Static descriptor of Format.abgr8_sRgb
1935 struct Abgr8_sRgb
1936 {
1937     alias SurfType = A8_B8_G8_R8;
1938     enum surfType = SurfaceType.A8_B8_G8_R8;
1939     enum numFormat = NumFormat.sRgb;
1940     enum packed = true;
1941 }
1942 
1943 /// Static descriptor of Format.a2r10g10b10_uNorm
1944 struct A2r10g10b10_uNorm
1945 {
1946     alias SurfType = A2_R10_G10_B10;
1947     enum surfType = SurfaceType.A2_R10_G10_B10;
1948     enum numFormat = NumFormat.uNorm;
1949     enum packed = true;
1950 }
1951 
1952 /// Static descriptor of Format.a2r10g10b10_sNorm
1953 struct A2r10g10b10_sNorm
1954 {
1955     alias SurfType = A2_R10_G10_B10;
1956     enum surfType = SurfaceType.A2_R10_G10_B10;
1957     enum numFormat = NumFormat.sNorm;
1958     enum packed = true;
1959 }
1960 
1961 /// Static descriptor of Format.a2r10g10b10_uScaled
1962 struct A2r10g10b10_uScaled
1963 {
1964     alias SurfType = A2_R10_G10_B10;
1965     enum surfType = SurfaceType.A2_R10_G10_B10;
1966     enum numFormat = NumFormat.uScaled;
1967     enum packed = true;
1968 }
1969 
1970 /// Static descriptor of Format.a2r10g10b10_sScaled
1971 struct A2r10g10b10_sScaled
1972 {
1973     alias SurfType = A2_R10_G10_B10;
1974     enum surfType = SurfaceType.A2_R10_G10_B10;
1975     enum numFormat = NumFormat.sScaled;
1976     enum packed = true;
1977 }
1978 
1979 /// Static descriptor of Format.a2r10g10b10_uInt
1980 struct A2r10g10b10_uInt
1981 {
1982     alias SurfType = A2_R10_G10_B10;
1983     enum surfType = SurfaceType.A2_R10_G10_B10;
1984     enum numFormat = NumFormat.uInt;
1985     enum packed = true;
1986 }
1987 
1988 /// Static descriptor of Format.a2r10g10b10_sInt
1989 struct A2r10g10b10_sInt
1990 {
1991     alias SurfType = A2_R10_G10_B10;
1992     enum surfType = SurfaceType.A2_R10_G10_B10;
1993     enum numFormat = NumFormat.sInt;
1994     enum packed = true;
1995 }
1996 
1997 /// Static descriptor of Format.a2b10g10r10_uNorm
1998 struct A2b10g10r10_uNorm
1999 {
2000     alias SurfType = A2_B10_G10_R10;
2001     enum surfType = SurfaceType.A2_B10_G10_R10;
2002     enum numFormat = NumFormat.uNorm;
2003     enum packed = true;
2004 }
2005 
2006 /// Static descriptor of Format.a2b10g10r10_sNorm
2007 struct A2b10g10r10_sNorm
2008 {
2009     alias SurfType = A2_B10_G10_R10;
2010     enum surfType = SurfaceType.A2_B10_G10_R10;
2011     enum numFormat = NumFormat.sNorm;
2012     enum packed = true;
2013 }
2014 
2015 /// Static descriptor of Format.a2b10g10r10_uScaled
2016 struct A2b10g10r10_uScaled
2017 {
2018     alias SurfType = A2_B10_G10_R10;
2019     enum surfType = SurfaceType.A2_B10_G10_R10;
2020     enum numFormat = NumFormat.uScaled;
2021     enum packed = true;
2022 }
2023 
2024 /// Static descriptor of Format.a2b10g10r10_sScaled
2025 struct A2b10g10r10_sScaled
2026 {
2027     alias SurfType = A2_B10_G10_R10;
2028     enum surfType = SurfaceType.A2_B10_G10_R10;
2029     enum numFormat = NumFormat.sScaled;
2030     enum packed = true;
2031 }
2032 
2033 /// Static descriptor of Format.a2b10g10r10_uInt
2034 struct A2b10g10r10_uInt
2035 {
2036     alias SurfType = A2_B10_G10_R10;
2037     enum surfType = SurfaceType.A2_B10_G10_R10;
2038     enum numFormat = NumFormat.uInt;
2039     enum packed = true;
2040 }
2041 
2042 /// Static descriptor of Format.a2b10g10r10_sInt
2043 struct A2b10g10r10_sInt
2044 {
2045     alias SurfType = A2_B10_G10_R10;
2046     enum surfType = SurfaceType.A2_B10_G10_R10;
2047     enum numFormat = NumFormat.sInt;
2048     enum packed = true;
2049 }
2050 
2051 /// Static descriptor of Format.r16_uNorm
2052 struct R16_uNorm
2053 {
2054     alias SurfType = R16;
2055     enum surfType = SurfaceType.R16;
2056     enum numFormat = NumFormat.uNorm;
2057     enum packed = false;
2058 }
2059 
2060 /// Static descriptor of Format.r16_sNorm
2061 struct R16_sNorm
2062 {
2063     alias SurfType = R16;
2064     enum surfType = SurfaceType.R16;
2065     enum numFormat = NumFormat.sNorm;
2066     enum packed = false;
2067 }
2068 
2069 /// Static descriptor of Format.r16_uScaled
2070 struct R16_uScaled
2071 {
2072     alias SurfType = R16;
2073     enum surfType = SurfaceType.R16;
2074     enum numFormat = NumFormat.uScaled;
2075     enum packed = false;
2076 }
2077 
2078 /// Static descriptor of Format.r16_sScaled
2079 struct R16_sScaled
2080 {
2081     alias SurfType = R16;
2082     enum surfType = SurfaceType.R16;
2083     enum numFormat = NumFormat.sScaled;
2084     enum packed = false;
2085 }
2086 
2087 /// Static descriptor of Format.r16_uInt
2088 struct R16_uInt
2089 {
2090     alias SurfType = R16;
2091     enum surfType = SurfaceType.R16;
2092     enum numFormat = NumFormat.uInt;
2093     enum packed = false;
2094 }
2095 
2096 /// Static descriptor of Format.r16_sInt
2097 struct R16_sInt
2098 {
2099     alias SurfType = R16;
2100     enum surfType = SurfaceType.R16;
2101     enum numFormat = NumFormat.sInt;
2102     enum packed = false;
2103 }
2104 
2105 /// Static descriptor of Format.r16_sFloat
2106 struct R16_sFloat
2107 {
2108     alias SurfType = R16;
2109     enum surfType = SurfaceType.R16;
2110     enum numFormat = NumFormat.sFloat;
2111     enum packed = false;
2112 }
2113 
2114 /// Static descriptor of Format.rg16_uNorm
2115 struct Rg16_uNorm
2116 {
2117     alias SurfType = R16_G16;
2118     enum surfType = SurfaceType.R16_G16;
2119     enum numFormat = NumFormat.uNorm;
2120     enum packed = false;
2121 }
2122 
2123 /// Static descriptor of Format.rg16_sNorm
2124 struct Rg16_sNorm
2125 {
2126     alias SurfType = R16_G16;
2127     enum surfType = SurfaceType.R16_G16;
2128     enum numFormat = NumFormat.sNorm;
2129     enum packed = false;
2130 }
2131 
2132 /// Static descriptor of Format.rg16_uScaled
2133 struct Rg16_uScaled
2134 {
2135     alias SurfType = R16_G16;
2136     enum surfType = SurfaceType.R16_G16;
2137     enum numFormat = NumFormat.uScaled;
2138     enum packed = false;
2139 }
2140 
2141 /// Static descriptor of Format.rg16_sScaled
2142 struct Rg16_sScaled
2143 {
2144     alias SurfType = R16_G16;
2145     enum surfType = SurfaceType.R16_G16;
2146     enum numFormat = NumFormat.sScaled;
2147     enum packed = false;
2148 }
2149 
2150 /// Static descriptor of Format.rg16_uInt
2151 struct Rg16_uInt
2152 {
2153     alias SurfType = R16_G16;
2154     enum surfType = SurfaceType.R16_G16;
2155     enum numFormat = NumFormat.uInt;
2156     enum packed = false;
2157 }
2158 
2159 /// Static descriptor of Format.rg16_sInt
2160 struct Rg16_sInt
2161 {
2162     alias SurfType = R16_G16;
2163     enum surfType = SurfaceType.R16_G16;
2164     enum numFormat = NumFormat.sInt;
2165     enum packed = false;
2166 }
2167 
2168 /// Static descriptor of Format.rg16_sFloat
2169 struct Rg16_sFloat
2170 {
2171     alias SurfType = R16_G16;
2172     enum surfType = SurfaceType.R16_G16;
2173     enum numFormat = NumFormat.sFloat;
2174     enum packed = false;
2175 }
2176 
2177 /// Static descriptor of Format.rgb16_uNorm
2178 struct Rgb16_uNorm
2179 {
2180     alias SurfType = R16_G16_B16;
2181     enum surfType = SurfaceType.R16_G16_B16;
2182     enum numFormat = NumFormat.uNorm;
2183     enum packed = false;
2184 }
2185 
2186 /// Static descriptor of Format.rgb16_sNorm
2187 struct Rgb16_sNorm
2188 {
2189     alias SurfType = R16_G16_B16;
2190     enum surfType = SurfaceType.R16_G16_B16;
2191     enum numFormat = NumFormat.sNorm;
2192     enum packed = false;
2193 }
2194 
2195 /// Static descriptor of Format.rgb16_uScaled
2196 struct Rgb16_uScaled
2197 {
2198     alias SurfType = R16_G16_B16;
2199     enum surfType = SurfaceType.R16_G16_B16;
2200     enum numFormat = NumFormat.uScaled;
2201     enum packed = false;
2202 }
2203 
2204 /// Static descriptor of Format.rgb16_sScaled
2205 struct Rgb16_sScaled
2206 {
2207     alias SurfType = R16_G16_B16;
2208     enum surfType = SurfaceType.R16_G16_B16;
2209     enum numFormat = NumFormat.sScaled;
2210     enum packed = false;
2211 }
2212 
2213 /// Static descriptor of Format.rgb16_uInt
2214 struct Rgb16_uInt
2215 {
2216     alias SurfType = R16_G16_B16;
2217     enum surfType = SurfaceType.R16_G16_B16;
2218     enum numFormat = NumFormat.uInt;
2219     enum packed = false;
2220 }
2221 
2222 /// Static descriptor of Format.rgb16_sInt
2223 struct Rgb16_sInt
2224 {
2225     alias SurfType = R16_G16_B16;
2226     enum surfType = SurfaceType.R16_G16_B16;
2227     enum numFormat = NumFormat.sInt;
2228     enum packed = false;
2229 }
2230 
2231 /// Static descriptor of Format.rgb16_sFloat
2232 struct Rgb16_sFloat
2233 {
2234     alias SurfType = R16_G16_B16;
2235     enum surfType = SurfaceType.R16_G16_B16;
2236     enum numFormat = NumFormat.sFloat;
2237     enum packed = false;
2238 }
2239 
2240 /// Static descriptor of Format.rgba16_uNorm
2241 struct Rgba16_uNorm
2242 {
2243     alias SurfType = R16_G16_B16_A16;
2244     enum surfType = SurfaceType.R16_G16_B16_A16;
2245     enum numFormat = NumFormat.uNorm;
2246     enum packed = false;
2247 }
2248 
2249 /// Static descriptor of Format.rgba16_sNorm
2250 struct Rgba16_sNorm
2251 {
2252     alias SurfType = R16_G16_B16_A16;
2253     enum surfType = SurfaceType.R16_G16_B16_A16;
2254     enum numFormat = NumFormat.sNorm;
2255     enum packed = false;
2256 }
2257 
2258 /// Static descriptor of Format.rgba16_uScaled
2259 struct Rgba16_uScaled
2260 {
2261     alias SurfType = R16_G16_B16_A16;
2262     enum surfType = SurfaceType.R16_G16_B16_A16;
2263     enum numFormat = NumFormat.uScaled;
2264     enum packed = false;
2265 }
2266 
2267 /// Static descriptor of Format.rgba16_sScaled
2268 struct Rgba16_sScaled
2269 {
2270     alias SurfType = R16_G16_B16_A16;
2271     enum surfType = SurfaceType.R16_G16_B16_A16;
2272     enum numFormat = NumFormat.sScaled;
2273     enum packed = false;
2274 }
2275 
2276 /// Static descriptor of Format.rgba16_uInt
2277 struct Rgba16_uInt
2278 {
2279     alias SurfType = R16_G16_B16_A16;
2280     enum surfType = SurfaceType.R16_G16_B16_A16;
2281     enum numFormat = NumFormat.uInt;
2282     enum packed = false;
2283 }
2284 
2285 /// Static descriptor of Format.rgba16_sInt
2286 struct Rgba16_sInt
2287 {
2288     alias SurfType = R16_G16_B16_A16;
2289     enum surfType = SurfaceType.R16_G16_B16_A16;
2290     enum numFormat = NumFormat.sInt;
2291     enum packed = false;
2292 }
2293 
2294 /// Static descriptor of Format.rgba16_sFloat
2295 struct Rgba16_sFloat
2296 {
2297     alias SurfType = R16_G16_B16_A16;
2298     enum surfType = SurfaceType.R16_G16_B16_A16;
2299     enum numFormat = NumFormat.sFloat;
2300     enum packed = false;
2301 }
2302 
2303 /// Static descriptor of Format.r32_uInt
2304 struct R32_uInt
2305 {
2306     alias SurfType = R32;
2307     enum surfType = SurfaceType.R32;
2308     enum numFormat = NumFormat.uInt;
2309     enum packed = false;
2310 }
2311 
2312 /// Static descriptor of Format.r32_sInt
2313 struct R32_sInt
2314 {
2315     alias SurfType = R32;
2316     enum surfType = SurfaceType.R32;
2317     enum numFormat = NumFormat.sInt;
2318     enum packed = false;
2319 }
2320 
2321 /// Static descriptor of Format.r32_sFloat
2322 struct R32_sFloat
2323 {
2324     alias SurfType = R32;
2325     enum surfType = SurfaceType.R32;
2326     enum numFormat = NumFormat.sFloat;
2327     enum packed = false;
2328 }
2329 
2330 /// Static descriptor of Format.rg32_uInt
2331 struct Rg32_uInt
2332 {
2333     alias SurfType = R32_G32;
2334     enum surfType = SurfaceType.R32_G32;
2335     enum numFormat = NumFormat.uInt;
2336     enum packed = false;
2337 }
2338 
2339 /// Static descriptor of Format.rg32_sInt
2340 struct Rg32_sInt
2341 {
2342     alias SurfType = R32_G32;
2343     enum surfType = SurfaceType.R32_G32;
2344     enum numFormat = NumFormat.sInt;
2345     enum packed = false;
2346 }
2347 
2348 /// Static descriptor of Format.rg32_sFloat
2349 struct Rg32_sFloat
2350 {
2351     alias SurfType = R32_G32;
2352     enum surfType = SurfaceType.R32_G32;
2353     enum numFormat = NumFormat.sFloat;
2354     enum packed = false;
2355 }
2356 
2357 /// Static descriptor of Format.rgb32_uInt
2358 struct Rgb32_uInt
2359 {
2360     alias SurfType = R32_G32_B32;
2361     enum surfType = SurfaceType.R32_G32_B32;
2362     enum numFormat = NumFormat.uInt;
2363     enum packed = false;
2364 }
2365 
2366 /// Static descriptor of Format.rgb32_sInt
2367 struct Rgb32_sInt
2368 {
2369     alias SurfType = R32_G32_B32;
2370     enum surfType = SurfaceType.R32_G32_B32;
2371     enum numFormat = NumFormat.sInt;
2372     enum packed = false;
2373 }
2374 
2375 /// Static descriptor of Format.rgb32_sFloat
2376 struct Rgb32_sFloat
2377 {
2378     alias SurfType = R32_G32_B32;
2379     enum surfType = SurfaceType.R32_G32_B32;
2380     enum numFormat = NumFormat.sFloat;
2381     enum packed = false;
2382 }
2383 
2384 /// Static descriptor of Format.rgba32_uInt
2385 struct Rgba32_uInt
2386 {
2387     alias SurfType = R32_G32_B32_A32;
2388     enum surfType = SurfaceType.R32_G32_B32_A32;
2389     enum numFormat = NumFormat.uInt;
2390     enum packed = false;
2391 }
2392 
2393 /// Static descriptor of Format.rgba32_sInt
2394 struct Rgba32_sInt
2395 {
2396     alias SurfType = R32_G32_B32_A32;
2397     enum surfType = SurfaceType.R32_G32_B32_A32;
2398     enum numFormat = NumFormat.sInt;
2399     enum packed = false;
2400 }
2401 
2402 /// Static descriptor of Format.rgba32_sFloat
2403 struct Rgba32_sFloat
2404 {
2405     alias SurfType = R32_G32_B32_A32;
2406     enum surfType = SurfaceType.R32_G32_B32_A32;
2407     enum numFormat = NumFormat.sFloat;
2408     enum packed = false;
2409 }
2410 
2411 /// Static descriptor of Format.r64_uInt
2412 struct R64_uInt
2413 {
2414     alias SurfType = R64;
2415     enum surfType = SurfaceType.R64;
2416     enum numFormat = NumFormat.uInt;
2417     enum packed = false;
2418 }
2419 
2420 /// Static descriptor of Format.r64_sInt
2421 struct R64_sInt
2422 {
2423     alias SurfType = R64;
2424     enum surfType = SurfaceType.R64;
2425     enum numFormat = NumFormat.sInt;
2426     enum packed = false;
2427 }
2428 
2429 /// Static descriptor of Format.r64_sFloat
2430 struct R64_sFloat
2431 {
2432     alias SurfType = R64;
2433     enum surfType = SurfaceType.R64;
2434     enum numFormat = NumFormat.sFloat;
2435     enum packed = false;
2436 }
2437 
2438 /// Static descriptor of Format.rg64_uInt
2439 struct Rg64_uInt
2440 {
2441     alias SurfType = R64_G64;
2442     enum surfType = SurfaceType.R64_G64;
2443     enum numFormat = NumFormat.uInt;
2444     enum packed = false;
2445 }
2446 
2447 /// Static descriptor of Format.rg64_sInt
2448 struct Rg64_sInt
2449 {
2450     alias SurfType = R64_G64;
2451     enum surfType = SurfaceType.R64_G64;
2452     enum numFormat = NumFormat.sInt;
2453     enum packed = false;
2454 }
2455 
2456 /// Static descriptor of Format.rg64_sFloat
2457 struct Rg64_sFloat
2458 {
2459     alias SurfType = R64_G64;
2460     enum surfType = SurfaceType.R64_G64;
2461     enum numFormat = NumFormat.sFloat;
2462     enum packed = false;
2463 }
2464 
2465 /// Static descriptor of Format.rgb64_uInt
2466 struct Rgb64_uInt
2467 {
2468     alias SurfType = R64_G64_B64;
2469     enum surfType = SurfaceType.R64_G64_B64;
2470     enum numFormat = NumFormat.uInt;
2471     enum packed = false;
2472 }
2473 
2474 /// Static descriptor of Format.rgb64_sInt
2475 struct Rgb64_sInt
2476 {
2477     alias SurfType = R64_G64_B64;
2478     enum surfType = SurfaceType.R64_G64_B64;
2479     enum numFormat = NumFormat.sInt;
2480     enum packed = false;
2481 }
2482 
2483 /// Static descriptor of Format.rgb64_sFloat
2484 struct Rgb64_sFloat
2485 {
2486     alias SurfType = R64_G64_B64;
2487     enum surfType = SurfaceType.R64_G64_B64;
2488     enum numFormat = NumFormat.sFloat;
2489     enum packed = false;
2490 }
2491 
2492 /// Static descriptor of Format.rgba64_uInt
2493 struct Rgba64_uInt
2494 {
2495     alias SurfType = R64_G64_B64_A64;
2496     enum surfType = SurfaceType.R64_G64_B64_A64;
2497     enum numFormat = NumFormat.uInt;
2498     enum packed = false;
2499 }
2500 
2501 /// Static descriptor of Format.rgba64_sInt
2502 struct Rgba64_sInt
2503 {
2504     alias SurfType = R64_G64_B64_A64;
2505     enum surfType = SurfaceType.R64_G64_B64_A64;
2506     enum numFormat = NumFormat.sInt;
2507     enum packed = false;
2508 }
2509 
2510 /// Static descriptor of Format.rgba64_sFloat
2511 struct Rgba64_sFloat
2512 {
2513     alias SurfType = R64_G64_B64_A64;
2514     enum surfType = SurfaceType.R64_G64_B64_A64;
2515     enum numFormat = NumFormat.sFloat;
2516     enum packed = false;
2517 }
2518 
2519 /// Static descriptor of Format.b10g11r11_uFloat
2520 struct B10g11r11_uFloat
2521 {
2522     alias SurfType = B10_G11_R11;
2523     enum surfType = SurfaceType.B10_G11_R11;
2524     enum numFormat = NumFormat.uFloat;
2525     enum packed = true;
2526 }
2527 
2528 /// Static descriptor of Format.ebgr9_uFloat
2529 struct Ebgr9_uFloat
2530 {
2531     alias SurfType = E5_B9_G9_R9;
2532     enum surfType = SurfaceType.E5_B9_G9_R9;
2533     enum numFormat = NumFormat.uFloat;
2534     enum packed = true;
2535 }
2536 
2537 /// Static descriptor of Format.d16_uNorm
2538 struct D16_uNorm
2539 {
2540     alias SurfType = D16;
2541     enum surfType = SurfaceType.D16;
2542     enum numFormat = NumFormat.uNorm;
2543     enum packed = false;
2544 }
2545 
2546 /// Static descriptor of Format.x8d24_uNorm
2547 struct X8d24_uNorm
2548 {
2549     alias SurfType = X8_D24;
2550     enum surfType = SurfaceType.X8_D24;
2551     enum numFormat = NumFormat.uNorm;
2552     enum packed = true;
2553 }
2554 
2555 /// Static descriptor of Format.d32_sFloat
2556 struct D32_sFloat
2557 {
2558     alias SurfType = D32;
2559     enum surfType = SurfaceType.D32;
2560     enum numFormat = NumFormat.sFloat;
2561     enum packed = false;
2562 }
2563 
2564 /// Static descriptor of Format.s8_uInt
2565 struct S8_uInt
2566 {
2567     alias SurfType = S8;
2568     enum surfType = SurfaceType.S8;
2569     enum numFormat = NumFormat.uInt;
2570     enum packed = false;
2571 }
2572 
2573 /// Static descriptor of Format.d16s8_uNorm
2574 struct D16s8_uNorm
2575 {
2576     alias SurfType = D16_S8;
2577     enum surfType = SurfaceType.D16_S8;
2578     enum numFormat = NumFormat.uNorm;
2579     enum packed = false;
2580 }
2581 
2582 /// Static descriptor of Format.d24s8_uNorm
2583 struct D24s8_uNorm
2584 {
2585     alias SurfType = D24_S8;
2586     enum surfType = SurfaceType.D24_S8;
2587     enum numFormat = NumFormat.uNorm;
2588     enum packed = false;
2589 }
2590 
2591 /// Static descriptor of Format.d32s8_sFloat
2592 struct D32s8_sFloat
2593 {
2594     alias SurfType = D32_S8;
2595     enum surfType = SurfaceType.D32_S8;
2596     enum numFormat = NumFormat.sFloat;
2597     enum packed = false;
2598 }
2599 
2600 private immutable(FormatDesc[]) fmtDescs;
2601 
2602 shared static this()
2603 {
2604     import std.exception : assumeUnique;
2605     fmtDescs = assumeUnique( [
2606         FormatDesc.init,
2607         FormatDesc(SurfaceType.R4_G4, NumFormat.uNorm, true),
2608         FormatDesc(SurfaceType.R4_G4_B4_A4, NumFormat.uNorm, true),
2609         FormatDesc(SurfaceType.B4_G4_R4_A4, NumFormat.uNorm, true),
2610         FormatDesc(SurfaceType.R5_G6_B5, NumFormat.uNorm, true),
2611         FormatDesc(SurfaceType.B5_G6_R5, NumFormat.uNorm, true),
2612         FormatDesc(SurfaceType.R5_G5_B5_A1, NumFormat.uNorm, true),
2613         FormatDesc(SurfaceType.B5_G5_R5_A1, NumFormat.uNorm, true),
2614         FormatDesc(SurfaceType.A1_R5_G5_B5, NumFormat.uNorm, true),
2615         FormatDesc(SurfaceType.R8, NumFormat.uNorm, false),
2616         FormatDesc(SurfaceType.R8, NumFormat.sNorm, false),
2617         FormatDesc(SurfaceType.R8, NumFormat.uScaled, false),
2618         FormatDesc(SurfaceType.R8, NumFormat.sScaled, false),
2619         FormatDesc(SurfaceType.R8, NumFormat.uInt, false),
2620         FormatDesc(SurfaceType.R8, NumFormat.sInt, false),
2621         FormatDesc(SurfaceType.R8, NumFormat.sRgb, false),
2622         FormatDesc(SurfaceType.R8_G8, NumFormat.uNorm, false),
2623         FormatDesc(SurfaceType.R8_G8, NumFormat.sNorm, false),
2624         FormatDesc(SurfaceType.R8_G8, NumFormat.uScaled, false),
2625         FormatDesc(SurfaceType.R8_G8, NumFormat.sScaled, false),
2626         FormatDesc(SurfaceType.R8_G8, NumFormat.uInt, false),
2627         FormatDesc(SurfaceType.R8_G8, NumFormat.sInt, false),
2628         FormatDesc(SurfaceType.R8_G8, NumFormat.sRgb, false),
2629         FormatDesc(SurfaceType.R8_G8_B8, NumFormat.uNorm, false),
2630         FormatDesc(SurfaceType.R8_G8_B8, NumFormat.sNorm, false),
2631         FormatDesc(SurfaceType.R8_G8_B8, NumFormat.uScaled, false),
2632         FormatDesc(SurfaceType.R8_G8_B8, NumFormat.sScaled, false),
2633         FormatDesc(SurfaceType.R8_G8_B8, NumFormat.uInt, false),
2634         FormatDesc(SurfaceType.R8_G8_B8, NumFormat.sInt, false),
2635         FormatDesc(SurfaceType.R8_G8_B8, NumFormat.sRgb, false),
2636         FormatDesc(SurfaceType.B8_G8_R8, NumFormat.uNorm, false),
2637         FormatDesc(SurfaceType.B8_G8_R8, NumFormat.sNorm, false),
2638         FormatDesc(SurfaceType.B8_G8_R8, NumFormat.uScaled, false),
2639         FormatDesc(SurfaceType.B8_G8_R8, NumFormat.sScaled, false),
2640         FormatDesc(SurfaceType.B8_G8_R8, NumFormat.uInt, false),
2641         FormatDesc(SurfaceType.B8_G8_R8, NumFormat.sInt, false),
2642         FormatDesc(SurfaceType.B8_G8_R8, NumFormat.sRgb, false),
2643         FormatDesc(SurfaceType.R8_G8_B8_A8, NumFormat.uNorm, false),
2644         FormatDesc(SurfaceType.R8_G8_B8_A8, NumFormat.sNorm, false),
2645         FormatDesc(SurfaceType.R8_G8_B8_A8, NumFormat.uScaled, false),
2646         FormatDesc(SurfaceType.R8_G8_B8_A8, NumFormat.sScaled, false),
2647         FormatDesc(SurfaceType.R8_G8_B8_A8, NumFormat.uInt, false),
2648         FormatDesc(SurfaceType.R8_G8_B8_A8, NumFormat.sInt, false),
2649         FormatDesc(SurfaceType.R8_G8_B8_A8, NumFormat.sRgb, false),
2650         FormatDesc(SurfaceType.B8_G8_R8_A8, NumFormat.uNorm, false),
2651         FormatDesc(SurfaceType.B8_G8_R8_A8, NumFormat.sNorm, false),
2652         FormatDesc(SurfaceType.B8_G8_R8_A8, NumFormat.uScaled, false),
2653         FormatDesc(SurfaceType.B8_G8_R8_A8, NumFormat.sScaled, false),
2654         FormatDesc(SurfaceType.B8_G8_R8_A8, NumFormat.uInt, false),
2655         FormatDesc(SurfaceType.B8_G8_R8_A8, NumFormat.sInt, false),
2656         FormatDesc(SurfaceType.B8_G8_R8_A8, NumFormat.sRgb, false),
2657         FormatDesc(SurfaceType.A8_B8_G8_R8, NumFormat.uNorm, true),
2658         FormatDesc(SurfaceType.A8_B8_G8_R8, NumFormat.sNorm, true),
2659         FormatDesc(SurfaceType.A8_B8_G8_R8, NumFormat.uScaled, true),
2660         FormatDesc(SurfaceType.A8_B8_G8_R8, NumFormat.sScaled, true),
2661         FormatDesc(SurfaceType.A8_B8_G8_R8, NumFormat.uInt, true),
2662         FormatDesc(SurfaceType.A8_B8_G8_R8, NumFormat.sInt, true),
2663         FormatDesc(SurfaceType.A8_B8_G8_R8, NumFormat.sRgb, true),
2664         FormatDesc(SurfaceType.A2_R10_G10_B10, NumFormat.uNorm, true),
2665         FormatDesc(SurfaceType.A2_R10_G10_B10, NumFormat.sNorm, true),
2666         FormatDesc(SurfaceType.A2_R10_G10_B10, NumFormat.uScaled, true),
2667         FormatDesc(SurfaceType.A2_R10_G10_B10, NumFormat.sScaled, true),
2668         FormatDesc(SurfaceType.A2_R10_G10_B10, NumFormat.uInt, true),
2669         FormatDesc(SurfaceType.A2_R10_G10_B10, NumFormat.sInt, true),
2670         FormatDesc(SurfaceType.A2_B10_G10_R10, NumFormat.uNorm, true),
2671         FormatDesc(SurfaceType.A2_B10_G10_R10, NumFormat.sNorm, true),
2672         FormatDesc(SurfaceType.A2_B10_G10_R10, NumFormat.uScaled, true),
2673         FormatDesc(SurfaceType.A2_B10_G10_R10, NumFormat.sScaled, true),
2674         FormatDesc(SurfaceType.A2_B10_G10_R10, NumFormat.uInt, true),
2675         FormatDesc(SurfaceType.A2_B10_G10_R10, NumFormat.sInt, true),
2676         FormatDesc(SurfaceType.R16, NumFormat.uNorm, false),
2677         FormatDesc(SurfaceType.R16, NumFormat.sNorm, false),
2678         FormatDesc(SurfaceType.R16, NumFormat.uScaled, false),
2679         FormatDesc(SurfaceType.R16, NumFormat.sScaled, false),
2680         FormatDesc(SurfaceType.R16, NumFormat.uInt, false),
2681         FormatDesc(SurfaceType.R16, NumFormat.sInt, false),
2682         FormatDesc(SurfaceType.R16, NumFormat.sFloat, false),
2683         FormatDesc(SurfaceType.R16_G16, NumFormat.uNorm, false),
2684         FormatDesc(SurfaceType.R16_G16, NumFormat.sNorm, false),
2685         FormatDesc(SurfaceType.R16_G16, NumFormat.uScaled, false),
2686         FormatDesc(SurfaceType.R16_G16, NumFormat.sScaled, false),
2687         FormatDesc(SurfaceType.R16_G16, NumFormat.uInt, false),
2688         FormatDesc(SurfaceType.R16_G16, NumFormat.sInt, false),
2689         FormatDesc(SurfaceType.R16_G16, NumFormat.sFloat, false),
2690         FormatDesc(SurfaceType.R16_G16_B16, NumFormat.uNorm, false),
2691         FormatDesc(SurfaceType.R16_G16_B16, NumFormat.sNorm, false),
2692         FormatDesc(SurfaceType.R16_G16_B16, NumFormat.uScaled, false),
2693         FormatDesc(SurfaceType.R16_G16_B16, NumFormat.sScaled, false),
2694         FormatDesc(SurfaceType.R16_G16_B16, NumFormat.uInt, false),
2695         FormatDesc(SurfaceType.R16_G16_B16, NumFormat.sInt, false),
2696         FormatDesc(SurfaceType.R16_G16_B16, NumFormat.sFloat, false),
2697         FormatDesc(SurfaceType.R16_G16_B16_A16, NumFormat.uNorm, false),
2698         FormatDesc(SurfaceType.R16_G16_B16_A16, NumFormat.sNorm, false),
2699         FormatDesc(SurfaceType.R16_G16_B16_A16, NumFormat.uScaled, false),
2700         FormatDesc(SurfaceType.R16_G16_B16_A16, NumFormat.sScaled, false),
2701         FormatDesc(SurfaceType.R16_G16_B16_A16, NumFormat.uInt, false),
2702         FormatDesc(SurfaceType.R16_G16_B16_A16, NumFormat.sInt, false),
2703         FormatDesc(SurfaceType.R16_G16_B16_A16, NumFormat.sFloat, false),
2704         FormatDesc(SurfaceType.R32, NumFormat.uInt, false),
2705         FormatDesc(SurfaceType.R32, NumFormat.sInt, false),
2706         FormatDesc(SurfaceType.R32, NumFormat.sFloat, false),
2707         FormatDesc(SurfaceType.R32_G32, NumFormat.uInt, false),
2708         FormatDesc(SurfaceType.R32_G32, NumFormat.sInt, false),
2709         FormatDesc(SurfaceType.R32_G32, NumFormat.sFloat, false),
2710         FormatDesc(SurfaceType.R32_G32_B32, NumFormat.uInt, false),
2711         FormatDesc(SurfaceType.R32_G32_B32, NumFormat.sInt, false),
2712         FormatDesc(SurfaceType.R32_G32_B32, NumFormat.sFloat, false),
2713         FormatDesc(SurfaceType.R32_G32_B32_A32, NumFormat.uInt, false),
2714         FormatDesc(SurfaceType.R32_G32_B32_A32, NumFormat.sInt, false),
2715         FormatDesc(SurfaceType.R32_G32_B32_A32, NumFormat.sFloat, false),
2716         FormatDesc(SurfaceType.R64, NumFormat.uInt, false),
2717         FormatDesc(SurfaceType.R64, NumFormat.sInt, false),
2718         FormatDesc(SurfaceType.R64, NumFormat.sFloat, false),
2719         FormatDesc(SurfaceType.R64_G64, NumFormat.uInt, false),
2720         FormatDesc(SurfaceType.R64_G64, NumFormat.sInt, false),
2721         FormatDesc(SurfaceType.R64_G64, NumFormat.sFloat, false),
2722         FormatDesc(SurfaceType.R64_G64_B64, NumFormat.uInt, false),
2723         FormatDesc(SurfaceType.R64_G64_B64, NumFormat.sInt, false),
2724         FormatDesc(SurfaceType.R64_G64_B64, NumFormat.sFloat, false),
2725         FormatDesc(SurfaceType.R64_G64_B64_A64, NumFormat.uInt, false),
2726         FormatDesc(SurfaceType.R64_G64_B64_A64, NumFormat.sInt, false),
2727         FormatDesc(SurfaceType.R64_G64_B64_A64, NumFormat.sFloat, false),
2728         FormatDesc(SurfaceType.B10_G11_R11, NumFormat.uFloat, true),
2729         FormatDesc(SurfaceType.E5_B9_G9_R9, NumFormat.uFloat, true),
2730         FormatDesc(SurfaceType.D16, NumFormat.uNorm, false),
2731         FormatDesc(SurfaceType.X8_D24, NumFormat.uNorm, true),
2732         FormatDesc(SurfaceType.D32, NumFormat.sFloat, false),
2733         FormatDesc(SurfaceType.S8, NumFormat.uInt, false),
2734         FormatDesc(SurfaceType.D16_S8, NumFormat.uNorm, false),
2735         FormatDesc(SurfaceType.D24_S8, NumFormat.uNorm, false),
2736         FormatDesc(SurfaceType.D32_S8, NumFormat.sFloat, false),
2737     ] );
2738 }