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