1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_texture_format_table.py using data from texture_format_data.json
3 //
4 // Copyright 2016 The ANGLE Project Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style license that can be
6 // found in the LICENSE file.
7 //
8 // texture_format_table:
9 //   Queries for full textureFormat information based in internalFormat
10 //
11 
12 #include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
13 
14 #include "image_util/copyimage.h"
15 #include "image_util/generatemip.h"
16 #include "image_util/loadimage.h"
17 
18 #include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
19 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
20 #include "libANGLE/renderer/d3d/d3d11/texture_format_table_utils.h"
21 
22 using namespace angle;
23 
24 namespace rx
25 {
26 
27 namespace d3d11
28 {
29 
30 // static
Get(GLenum internalFormat,const Renderer11DeviceCaps & deviceCaps)31 const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &deviceCaps)
32 {
33     // clang-format off
34     switch (internalFormat)
35     {
36         case GL_ALPHA16F_EXT:
37         {
38             static constexpr Format info(GL_ALPHA16F_EXT,
39                                          angle::Format::ID::R16G16B16A16_FLOAT,
40                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
41                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
42                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
43                                          DXGI_FORMAT_UNKNOWN,
44                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
45                                          GL_RGBA16F,
46                                          nullptr);
47             return info;
48         }
49         case GL_ALPHA32F_EXT:
50         {
51             static constexpr Format info(GL_ALPHA32F_EXT,
52                                          angle::Format::ID::R32G32B32A32_FLOAT,
53                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
54                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
55                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
56                                          DXGI_FORMAT_UNKNOWN,
57                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
58                                          GL_RGBA32F,
59                                          nullptr);
60             return info;
61         }
62         case GL_ALPHA8_EXT:
63         {
64             if (OnlyFL10Plus(deviceCaps))
65             {
66                 static constexpr Format info(GL_ALPHA8_EXT,
67                                              angle::Format::ID::A8_UNORM,
68                                              DXGI_FORMAT_A8_UNORM,
69                                              DXGI_FORMAT_A8_UNORM,
70                                              DXGI_FORMAT_A8_UNORM,
71                                              DXGI_FORMAT_UNKNOWN,
72                                              DXGI_FORMAT_A8_UNORM,
73                                              GL_RGBA8,
74                                              nullptr);
75                 return info;
76             }
77             else
78             {
79                 static constexpr Format info(GL_ALPHA8_EXT,
80                                              angle::Format::ID::R8G8B8A8_UNORM,
81                                              DXGI_FORMAT_R8G8B8A8_UNORM,
82                                              DXGI_FORMAT_R8G8B8A8_UNORM,
83                                              DXGI_FORMAT_R8G8B8A8_UNORM,
84                                              DXGI_FORMAT_UNKNOWN,
85                                              DXGI_FORMAT_R8G8B8A8_UNORM,
86                                              GL_RGBA8,
87                                              nullptr);
88                 return info;
89             }
90         }
91         case GL_BGR565_ANGLEX:
92         {
93             if (SupportsFormat(DXGI_FORMAT_B5G6R5_UNORM, deviceCaps))
94             {
95                 static constexpr Format info(GL_BGR565_ANGLEX,
96                                              angle::Format::ID::B5G6R5_UNORM,
97                                              DXGI_FORMAT_B5G6R5_UNORM,
98                                              DXGI_FORMAT_B5G6R5_UNORM,
99                                              DXGI_FORMAT_B5G6R5_UNORM,
100                                              DXGI_FORMAT_UNKNOWN,
101                                              DXGI_FORMAT_B5G6R5_UNORM,
102                                              GL_RGBA8,
103                                              nullptr);
104                 return info;
105             }
106             else
107             {
108                 static constexpr Format info(GL_BGR565_ANGLEX,
109                                              angle::Format::ID::R8G8B8A8_UNORM,
110                                              DXGI_FORMAT_R8G8B8A8_UNORM,
111                                              DXGI_FORMAT_R8G8B8A8_UNORM,
112                                              DXGI_FORMAT_R8G8B8A8_UNORM,
113                                              DXGI_FORMAT_UNKNOWN,
114                                              DXGI_FORMAT_R8G8B8A8_UNORM,
115                                              GL_RGBA8,
116                                              nullptr);
117                 return info;
118             }
119         }
120         case GL_BGR5_A1_ANGLEX:
121         {
122             static constexpr Format info(GL_BGR5_A1_ANGLEX,
123                                          angle::Format::ID::B8G8R8A8_UNORM,
124                                          DXGI_FORMAT_B8G8R8A8_UNORM,
125                                          DXGI_FORMAT_B8G8R8A8_UNORM,
126                                          DXGI_FORMAT_B8G8R8A8_UNORM,
127                                          DXGI_FORMAT_UNKNOWN,
128                                          DXGI_FORMAT_B8G8R8A8_UNORM,
129                                          GL_BGRA8_EXT,
130                                          nullptr);
131             return info;
132         }
133         case GL_BGRA4_ANGLEX:
134         {
135             static constexpr Format info(GL_BGRA4_ANGLEX,
136                                          angle::Format::ID::B8G8R8A8_UNORM,
137                                          DXGI_FORMAT_B8G8R8A8_UNORM,
138                                          DXGI_FORMAT_B8G8R8A8_UNORM,
139                                          DXGI_FORMAT_B8G8R8A8_UNORM,
140                                          DXGI_FORMAT_UNKNOWN,
141                                          DXGI_FORMAT_B8G8R8A8_UNORM,
142                                          GL_BGRA8_EXT,
143                                          nullptr);
144             return info;
145         }
146         case GL_BGRA8_EXT:
147         {
148             static constexpr Format info(GL_BGRA8_EXT,
149                                          angle::Format::ID::B8G8R8A8_UNORM,
150                                          DXGI_FORMAT_B8G8R8A8_UNORM,
151                                          DXGI_FORMAT_B8G8R8A8_UNORM,
152                                          DXGI_FORMAT_B8G8R8A8_UNORM,
153                                          DXGI_FORMAT_UNKNOWN,
154                                          DXGI_FORMAT_B8G8R8A8_UNORM,
155                                          GL_BGRA8_EXT,
156                                          nullptr);
157             return info;
158         }
159         case GL_COMPRESSED_R11_EAC:
160         {
161             static constexpr Format info(GL_COMPRESSED_R11_EAC,
162                                          angle::Format::ID::R8_UNORM,
163                                          DXGI_FORMAT_R8_UNORM,
164                                          DXGI_FORMAT_R8_UNORM,
165                                          DXGI_FORMAT_R8_UNORM,
166                                          DXGI_FORMAT_UNKNOWN,
167                                          DXGI_FORMAT_R8_UNORM,
168                                          GL_RGBA8,
169                                          nullptr);
170             return info;
171         }
172         case GL_COMPRESSED_RG11_EAC:
173         {
174             static constexpr Format info(GL_COMPRESSED_RG11_EAC,
175                                          angle::Format::ID::R8G8_UNORM,
176                                          DXGI_FORMAT_R8G8_UNORM,
177                                          DXGI_FORMAT_R8G8_UNORM,
178                                          DXGI_FORMAT_R8G8_UNORM,
179                                          DXGI_FORMAT_UNKNOWN,
180                                          DXGI_FORMAT_R8G8_UNORM,
181                                          GL_RGBA8,
182                                          nullptr);
183             return info;
184         }
185         case GL_COMPRESSED_RGB8_ETC2:
186         {
187             static constexpr Format info(GL_COMPRESSED_RGB8_ETC2,
188                                          angle::Format::ID::R8G8B8A8_UNORM,
189                                          DXGI_FORMAT_R8G8B8A8_UNORM,
190                                          DXGI_FORMAT_R8G8B8A8_UNORM,
191                                          DXGI_FORMAT_R8G8B8A8_UNORM,
192                                          DXGI_FORMAT_UNKNOWN,
193                                          DXGI_FORMAT_R8G8B8A8_UNORM,
194                                          GL_RGBA8,
195                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
196             return info;
197         }
198         case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
199         {
200             static constexpr Format info(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
201                                          angle::Format::ID::R8G8B8A8_UNORM,
202                                          DXGI_FORMAT_R8G8B8A8_UNORM,
203                                          DXGI_FORMAT_R8G8B8A8_UNORM,
204                                          DXGI_FORMAT_R8G8B8A8_UNORM,
205                                          DXGI_FORMAT_UNKNOWN,
206                                          DXGI_FORMAT_R8G8B8A8_UNORM,
207                                          GL_RGBA8,
208                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
209             return info;
210         }
211         case GL_COMPRESSED_RGBA8_ETC2_EAC:
212         {
213             static constexpr Format info(GL_COMPRESSED_RGBA8_ETC2_EAC,
214                                          angle::Format::ID::R8G8B8A8_UNORM,
215                                          DXGI_FORMAT_R8G8B8A8_UNORM,
216                                          DXGI_FORMAT_R8G8B8A8_UNORM,
217                                          DXGI_FORMAT_R8G8B8A8_UNORM,
218                                          DXGI_FORMAT_UNKNOWN,
219                                          DXGI_FORMAT_R8G8B8A8_UNORM,
220                                          GL_RGBA8,
221                                          nullptr);
222             return info;
223         }
224         case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:
225         {
226             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_10x10_KHR,
227                                          angle::Format::ID::NONE,
228                                          DXGI_FORMAT_UNKNOWN,
229                                          DXGI_FORMAT_UNKNOWN,
230                                          DXGI_FORMAT_UNKNOWN,
231                                          DXGI_FORMAT_UNKNOWN,
232                                          DXGI_FORMAT_UNKNOWN,
233                                          GL_NONE,
234                                          nullptr);
235             return info;
236         }
237         case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:
238         {
239             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_10x5_KHR,
240                                          angle::Format::ID::NONE,
241                                          DXGI_FORMAT_UNKNOWN,
242                                          DXGI_FORMAT_UNKNOWN,
243                                          DXGI_FORMAT_UNKNOWN,
244                                          DXGI_FORMAT_UNKNOWN,
245                                          DXGI_FORMAT_UNKNOWN,
246                                          GL_NONE,
247                                          nullptr);
248             return info;
249         }
250         case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:
251         {
252             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_10x6_KHR,
253                                          angle::Format::ID::NONE,
254                                          DXGI_FORMAT_UNKNOWN,
255                                          DXGI_FORMAT_UNKNOWN,
256                                          DXGI_FORMAT_UNKNOWN,
257                                          DXGI_FORMAT_UNKNOWN,
258                                          DXGI_FORMAT_UNKNOWN,
259                                          GL_NONE,
260                                          nullptr);
261             return info;
262         }
263         case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:
264         {
265             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_10x8_KHR,
266                                          angle::Format::ID::NONE,
267                                          DXGI_FORMAT_UNKNOWN,
268                                          DXGI_FORMAT_UNKNOWN,
269                                          DXGI_FORMAT_UNKNOWN,
270                                          DXGI_FORMAT_UNKNOWN,
271                                          DXGI_FORMAT_UNKNOWN,
272                                          GL_NONE,
273                                          nullptr);
274             return info;
275         }
276         case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:
277         {
278             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_12x10_KHR,
279                                          angle::Format::ID::NONE,
280                                          DXGI_FORMAT_UNKNOWN,
281                                          DXGI_FORMAT_UNKNOWN,
282                                          DXGI_FORMAT_UNKNOWN,
283                                          DXGI_FORMAT_UNKNOWN,
284                                          DXGI_FORMAT_UNKNOWN,
285                                          GL_NONE,
286                                          nullptr);
287             return info;
288         }
289         case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:
290         {
291             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_12x12_KHR,
292                                          angle::Format::ID::NONE,
293                                          DXGI_FORMAT_UNKNOWN,
294                                          DXGI_FORMAT_UNKNOWN,
295                                          DXGI_FORMAT_UNKNOWN,
296                                          DXGI_FORMAT_UNKNOWN,
297                                          DXGI_FORMAT_UNKNOWN,
298                                          GL_NONE,
299                                          nullptr);
300             return info;
301         }
302         case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:
303         {
304             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_4x4_KHR,
305                                          angle::Format::ID::NONE,
306                                          DXGI_FORMAT_UNKNOWN,
307                                          DXGI_FORMAT_UNKNOWN,
308                                          DXGI_FORMAT_UNKNOWN,
309                                          DXGI_FORMAT_UNKNOWN,
310                                          DXGI_FORMAT_UNKNOWN,
311                                          GL_NONE,
312                                          nullptr);
313             return info;
314         }
315         case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:
316         {
317             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_5x4_KHR,
318                                          angle::Format::ID::NONE,
319                                          DXGI_FORMAT_UNKNOWN,
320                                          DXGI_FORMAT_UNKNOWN,
321                                          DXGI_FORMAT_UNKNOWN,
322                                          DXGI_FORMAT_UNKNOWN,
323                                          DXGI_FORMAT_UNKNOWN,
324                                          GL_NONE,
325                                          nullptr);
326             return info;
327         }
328         case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:
329         {
330             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_5x5_KHR,
331                                          angle::Format::ID::NONE,
332                                          DXGI_FORMAT_UNKNOWN,
333                                          DXGI_FORMAT_UNKNOWN,
334                                          DXGI_FORMAT_UNKNOWN,
335                                          DXGI_FORMAT_UNKNOWN,
336                                          DXGI_FORMAT_UNKNOWN,
337                                          GL_NONE,
338                                          nullptr);
339             return info;
340         }
341         case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:
342         {
343             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_6x5_KHR,
344                                          angle::Format::ID::NONE,
345                                          DXGI_FORMAT_UNKNOWN,
346                                          DXGI_FORMAT_UNKNOWN,
347                                          DXGI_FORMAT_UNKNOWN,
348                                          DXGI_FORMAT_UNKNOWN,
349                                          DXGI_FORMAT_UNKNOWN,
350                                          GL_NONE,
351                                          nullptr);
352             return info;
353         }
354         case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:
355         {
356             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_6x6_KHR,
357                                          angle::Format::ID::NONE,
358                                          DXGI_FORMAT_UNKNOWN,
359                                          DXGI_FORMAT_UNKNOWN,
360                                          DXGI_FORMAT_UNKNOWN,
361                                          DXGI_FORMAT_UNKNOWN,
362                                          DXGI_FORMAT_UNKNOWN,
363                                          GL_NONE,
364                                          nullptr);
365             return info;
366         }
367         case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:
368         {
369             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_8x5_KHR,
370                                          angle::Format::ID::NONE,
371                                          DXGI_FORMAT_UNKNOWN,
372                                          DXGI_FORMAT_UNKNOWN,
373                                          DXGI_FORMAT_UNKNOWN,
374                                          DXGI_FORMAT_UNKNOWN,
375                                          DXGI_FORMAT_UNKNOWN,
376                                          GL_NONE,
377                                          nullptr);
378             return info;
379         }
380         case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:
381         {
382             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_8x6_KHR,
383                                          angle::Format::ID::NONE,
384                                          DXGI_FORMAT_UNKNOWN,
385                                          DXGI_FORMAT_UNKNOWN,
386                                          DXGI_FORMAT_UNKNOWN,
387                                          DXGI_FORMAT_UNKNOWN,
388                                          DXGI_FORMAT_UNKNOWN,
389                                          GL_NONE,
390                                          nullptr);
391             return info;
392         }
393         case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:
394         {
395             static constexpr Format info(GL_COMPRESSED_RGBA_ASTC_8x8_KHR,
396                                          angle::Format::ID::NONE,
397                                          DXGI_FORMAT_UNKNOWN,
398                                          DXGI_FORMAT_UNKNOWN,
399                                          DXGI_FORMAT_UNKNOWN,
400                                          DXGI_FORMAT_UNKNOWN,
401                                          DXGI_FORMAT_UNKNOWN,
402                                          GL_NONE,
403                                          nullptr);
404             return info;
405         }
406         case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
407         {
408             static constexpr Format info(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
409                                          angle::Format::ID::BC1_RGBA_UNORM_BLOCK,
410                                          DXGI_FORMAT_BC1_UNORM,
411                                          DXGI_FORMAT_BC1_UNORM,
412                                          DXGI_FORMAT_UNKNOWN,
413                                          DXGI_FORMAT_UNKNOWN,
414                                          DXGI_FORMAT_BC1_UNORM,
415                                          GL_RGBA8,
416                                          nullptr);
417             return info;
418         }
419         case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
420         {
421             static constexpr Format info(GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE,
422                                          angle::Format::ID::BC2_RGBA_UNORM_BLOCK,
423                                          DXGI_FORMAT_BC2_UNORM,
424                                          DXGI_FORMAT_BC2_UNORM,
425                                          DXGI_FORMAT_UNKNOWN,
426                                          DXGI_FORMAT_UNKNOWN,
427                                          DXGI_FORMAT_BC2_UNORM,
428                                          GL_RGBA8,
429                                          nullptr);
430             return info;
431         }
432         case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
433         {
434             static constexpr Format info(GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE,
435                                          angle::Format::ID::BC3_RGBA_UNORM_BLOCK,
436                                          DXGI_FORMAT_BC3_UNORM,
437                                          DXGI_FORMAT_BC3_UNORM,
438                                          DXGI_FORMAT_UNKNOWN,
439                                          DXGI_FORMAT_UNKNOWN,
440                                          DXGI_FORMAT_BC3_UNORM,
441                                          GL_RGBA8,
442                                          nullptr);
443             return info;
444         }
445         case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
446         {
447             static constexpr Format info(GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
448                                          angle::Format::ID::BC1_RGB_UNORM_BLOCK,
449                                          DXGI_FORMAT_BC1_UNORM,
450                                          DXGI_FORMAT_BC1_UNORM,
451                                          DXGI_FORMAT_UNKNOWN,
452                                          DXGI_FORMAT_UNKNOWN,
453                                          DXGI_FORMAT_BC1_UNORM,
454                                          GL_RGBA8,
455                                          nullptr);
456             return info;
457         }
458         case GL_COMPRESSED_SIGNED_R11_EAC:
459         {
460             static constexpr Format info(GL_COMPRESSED_SIGNED_R11_EAC,
461                                          angle::Format::ID::R8_SNORM,
462                                          DXGI_FORMAT_R8_SNORM,
463                                          DXGI_FORMAT_R8_SNORM,
464                                          DXGI_FORMAT_UNKNOWN,
465                                          DXGI_FORMAT_UNKNOWN,
466                                          DXGI_FORMAT_R8_SNORM,
467                                          GL_RGBA8_SNORM,
468                                          nullptr);
469             return info;
470         }
471         case GL_COMPRESSED_SIGNED_RG11_EAC:
472         {
473             static constexpr Format info(GL_COMPRESSED_SIGNED_RG11_EAC,
474                                          angle::Format::ID::R8G8_SNORM,
475                                          DXGI_FORMAT_R8G8_SNORM,
476                                          DXGI_FORMAT_R8G8_SNORM,
477                                          DXGI_FORMAT_UNKNOWN,
478                                          DXGI_FORMAT_UNKNOWN,
479                                          DXGI_FORMAT_R8G8_SNORM,
480                                          GL_RGBA8_SNORM,
481                                          nullptr);
482             return info;
483         }
484         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
485         {
486             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
487                                          angle::Format::ID::NONE,
488                                          DXGI_FORMAT_UNKNOWN,
489                                          DXGI_FORMAT_UNKNOWN,
490                                          DXGI_FORMAT_UNKNOWN,
491                                          DXGI_FORMAT_UNKNOWN,
492                                          DXGI_FORMAT_UNKNOWN,
493                                          GL_NONE,
494                                          nullptr);
495             return info;
496         }
497         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
498         {
499             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
500                                          angle::Format::ID::NONE,
501                                          DXGI_FORMAT_UNKNOWN,
502                                          DXGI_FORMAT_UNKNOWN,
503                                          DXGI_FORMAT_UNKNOWN,
504                                          DXGI_FORMAT_UNKNOWN,
505                                          DXGI_FORMAT_UNKNOWN,
506                                          GL_NONE,
507                                          nullptr);
508             return info;
509         }
510         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
511         {
512             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
513                                          angle::Format::ID::NONE,
514                                          DXGI_FORMAT_UNKNOWN,
515                                          DXGI_FORMAT_UNKNOWN,
516                                          DXGI_FORMAT_UNKNOWN,
517                                          DXGI_FORMAT_UNKNOWN,
518                                          DXGI_FORMAT_UNKNOWN,
519                                          GL_NONE,
520                                          nullptr);
521             return info;
522         }
523         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
524         {
525             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
526                                          angle::Format::ID::NONE,
527                                          DXGI_FORMAT_UNKNOWN,
528                                          DXGI_FORMAT_UNKNOWN,
529                                          DXGI_FORMAT_UNKNOWN,
530                                          DXGI_FORMAT_UNKNOWN,
531                                          DXGI_FORMAT_UNKNOWN,
532                                          GL_NONE,
533                                          nullptr);
534             return info;
535         }
536         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
537         {
538             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
539                                          angle::Format::ID::NONE,
540                                          DXGI_FORMAT_UNKNOWN,
541                                          DXGI_FORMAT_UNKNOWN,
542                                          DXGI_FORMAT_UNKNOWN,
543                                          DXGI_FORMAT_UNKNOWN,
544                                          DXGI_FORMAT_UNKNOWN,
545                                          GL_NONE,
546                                          nullptr);
547             return info;
548         }
549         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
550         {
551             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
552                                          angle::Format::ID::NONE,
553                                          DXGI_FORMAT_UNKNOWN,
554                                          DXGI_FORMAT_UNKNOWN,
555                                          DXGI_FORMAT_UNKNOWN,
556                                          DXGI_FORMAT_UNKNOWN,
557                                          DXGI_FORMAT_UNKNOWN,
558                                          GL_NONE,
559                                          nullptr);
560             return info;
561         }
562         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
563         {
564             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
565                                          angle::Format::ID::NONE,
566                                          DXGI_FORMAT_UNKNOWN,
567                                          DXGI_FORMAT_UNKNOWN,
568                                          DXGI_FORMAT_UNKNOWN,
569                                          DXGI_FORMAT_UNKNOWN,
570                                          DXGI_FORMAT_UNKNOWN,
571                                          GL_NONE,
572                                          nullptr);
573             return info;
574         }
575         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
576         {
577             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,
578                                          angle::Format::ID::NONE,
579                                          DXGI_FORMAT_UNKNOWN,
580                                          DXGI_FORMAT_UNKNOWN,
581                                          DXGI_FORMAT_UNKNOWN,
582                                          DXGI_FORMAT_UNKNOWN,
583                                          DXGI_FORMAT_UNKNOWN,
584                                          GL_NONE,
585                                          nullptr);
586             return info;
587         }
588         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
589         {
590             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
591                                          angle::Format::ID::NONE,
592                                          DXGI_FORMAT_UNKNOWN,
593                                          DXGI_FORMAT_UNKNOWN,
594                                          DXGI_FORMAT_UNKNOWN,
595                                          DXGI_FORMAT_UNKNOWN,
596                                          DXGI_FORMAT_UNKNOWN,
597                                          GL_NONE,
598                                          nullptr);
599             return info;
600         }
601         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
602         {
603             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
604                                          angle::Format::ID::NONE,
605                                          DXGI_FORMAT_UNKNOWN,
606                                          DXGI_FORMAT_UNKNOWN,
607                                          DXGI_FORMAT_UNKNOWN,
608                                          DXGI_FORMAT_UNKNOWN,
609                                          DXGI_FORMAT_UNKNOWN,
610                                          GL_NONE,
611                                          nullptr);
612             return info;
613         }
614         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
615         {
616             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
617                                          angle::Format::ID::NONE,
618                                          DXGI_FORMAT_UNKNOWN,
619                                          DXGI_FORMAT_UNKNOWN,
620                                          DXGI_FORMAT_UNKNOWN,
621                                          DXGI_FORMAT_UNKNOWN,
622                                          DXGI_FORMAT_UNKNOWN,
623                                          GL_NONE,
624                                          nullptr);
625             return info;
626         }
627         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
628         {
629             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
630                                          angle::Format::ID::NONE,
631                                          DXGI_FORMAT_UNKNOWN,
632                                          DXGI_FORMAT_UNKNOWN,
633                                          DXGI_FORMAT_UNKNOWN,
634                                          DXGI_FORMAT_UNKNOWN,
635                                          DXGI_FORMAT_UNKNOWN,
636                                          GL_NONE,
637                                          nullptr);
638             return info;
639         }
640         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
641         {
642             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
643                                          angle::Format::ID::NONE,
644                                          DXGI_FORMAT_UNKNOWN,
645                                          DXGI_FORMAT_UNKNOWN,
646                                          DXGI_FORMAT_UNKNOWN,
647                                          DXGI_FORMAT_UNKNOWN,
648                                          DXGI_FORMAT_UNKNOWN,
649                                          GL_NONE,
650                                          nullptr);
651             return info;
652         }
653         case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
654         {
655             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
656                                          angle::Format::ID::NONE,
657                                          DXGI_FORMAT_UNKNOWN,
658                                          DXGI_FORMAT_UNKNOWN,
659                                          DXGI_FORMAT_UNKNOWN,
660                                          DXGI_FORMAT_UNKNOWN,
661                                          DXGI_FORMAT_UNKNOWN,
662                                          GL_NONE,
663                                          nullptr);
664             return info;
665         }
666         case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
667         {
668             static constexpr Format info(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
669                                          angle::Format::ID::R8G8B8A8_UNORM_SRGB,
670                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
671                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
672                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
673                                          DXGI_FORMAT_UNKNOWN,
674                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
675                                          GL_SRGB8_ALPHA8,
676                                          nullptr);
677             return info;
678         }
679         case GL_COMPRESSED_SRGB8_ETC2:
680         {
681             static constexpr Format info(GL_COMPRESSED_SRGB8_ETC2,
682                                          angle::Format::ID::R8G8B8A8_UNORM_SRGB,
683                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
684                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
685                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
686                                          DXGI_FORMAT_UNKNOWN,
687                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
688                                          GL_SRGB8_ALPHA8,
689                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
690             return info;
691         }
692         case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
693         {
694             static constexpr Format info(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
695                                          angle::Format::ID::R8G8B8A8_UNORM_SRGB,
696                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
697                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
698                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
699                                          DXGI_FORMAT_UNKNOWN,
700                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
701                                          GL_SRGB8_ALPHA8,
702                                          nullptr);
703             return info;
704         }
705         case GL_DEPTH24_STENCIL8:
706         {
707             if (OnlyFL10Plus(deviceCaps))
708             {
709                 static constexpr Format info(GL_DEPTH24_STENCIL8,
710                                              angle::Format::ID::D24_UNORM_S8_UINT,
711                                              DXGI_FORMAT_R24G8_TYPELESS,
712                                              DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
713                                              DXGI_FORMAT_UNKNOWN,
714                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
715                                              DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
716                                              GL_RGBA32F,
717                                              nullptr);
718                 return info;
719             }
720             else
721             {
722                 static constexpr Format info(GL_DEPTH24_STENCIL8,
723                                              angle::Format::ID::D24_UNORM_S8_UINT,
724                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
725                                              DXGI_FORMAT_UNKNOWN,
726                                              DXGI_FORMAT_UNKNOWN,
727                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
728                                              DXGI_FORMAT_UNKNOWN,
729                                              GL_RGBA32F,
730                                              nullptr);
731                 return info;
732             }
733         }
734         case GL_DEPTH32F_STENCIL8:
735         {
736             static constexpr Format info(GL_DEPTH32F_STENCIL8,
737                                          angle::Format::ID::D32_FLOAT_S8X24_UINT,
738                                          DXGI_FORMAT_R32G8X24_TYPELESS,
739                                          DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
740                                          DXGI_FORMAT_UNKNOWN,
741                                          DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
742                                          DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
743                                          GL_RGBA32F,
744                                          nullptr);
745             return info;
746         }
747         case GL_DEPTH_COMPONENT16:
748         {
749             if (OnlyFL10Plus(deviceCaps))
750             {
751                 static constexpr Format info(GL_DEPTH_COMPONENT16,
752                                              angle::Format::ID::D16_UNORM,
753                                              DXGI_FORMAT_R16_TYPELESS,
754                                              DXGI_FORMAT_R16_UNORM,
755                                              DXGI_FORMAT_UNKNOWN,
756                                              DXGI_FORMAT_D16_UNORM,
757                                              DXGI_FORMAT_R16_UNORM,
758                                              GL_RGBA16_EXT,
759                                              nullptr);
760                 return info;
761             }
762             else
763             {
764                 static constexpr Format info(GL_DEPTH_COMPONENT16,
765                                              angle::Format::ID::D16_UNORM,
766                                              DXGI_FORMAT_D16_UNORM,
767                                              DXGI_FORMAT_UNKNOWN,
768                                              DXGI_FORMAT_UNKNOWN,
769                                              DXGI_FORMAT_D16_UNORM,
770                                              DXGI_FORMAT_UNKNOWN,
771                                              GL_RGBA16_EXT,
772                                              nullptr);
773                 return info;
774             }
775         }
776         case GL_DEPTH_COMPONENT24:
777         {
778             if (OnlyFL10Plus(deviceCaps))
779             {
780                 static constexpr Format info(GL_DEPTH_COMPONENT24,
781                                              angle::Format::ID::D24_UNORM_S8_UINT,
782                                              DXGI_FORMAT_R24G8_TYPELESS,
783                                              DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
784                                              DXGI_FORMAT_UNKNOWN,
785                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
786                                              DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
787                                              GL_RGBA32F,
788                                              nullptr);
789                 return info;
790             }
791             else
792             {
793                 static constexpr Format info(GL_DEPTH_COMPONENT24,
794                                              angle::Format::ID::D24_UNORM_S8_UINT,
795                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
796                                              DXGI_FORMAT_UNKNOWN,
797                                              DXGI_FORMAT_UNKNOWN,
798                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
799                                              DXGI_FORMAT_UNKNOWN,
800                                              GL_RGBA32F,
801                                              nullptr);
802                 return info;
803             }
804         }
805         case GL_DEPTH_COMPONENT32F:
806         {
807             static constexpr Format info(GL_DEPTH_COMPONENT32F,
808                                          angle::Format::ID::D32_FLOAT,
809                                          DXGI_FORMAT_R32_TYPELESS,
810                                          DXGI_FORMAT_R32_FLOAT,
811                                          DXGI_FORMAT_UNKNOWN,
812                                          DXGI_FORMAT_D32_FLOAT,
813                                          DXGI_FORMAT_R32_FLOAT,
814                                          GL_RGBA32F,
815                                          nullptr);
816             return info;
817         }
818         case GL_DEPTH_COMPONENT32_OES:
819         {
820             if (OnlyFL10Plus(deviceCaps))
821             {
822                 static constexpr Format info(GL_DEPTH_COMPONENT32_OES,
823                                              angle::Format::ID::D24_UNORM_S8_UINT,
824                                              DXGI_FORMAT_R24G8_TYPELESS,
825                                              DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
826                                              DXGI_FORMAT_UNKNOWN,
827                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
828                                              DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
829                                              GL_RGBA32F,
830                                              nullptr);
831                 return info;
832             }
833             else
834             {
835                 static constexpr Format info(GL_DEPTH_COMPONENT32_OES,
836                                              angle::Format::ID::D24_UNORM_S8_UINT,
837                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
838                                              DXGI_FORMAT_UNKNOWN,
839                                              DXGI_FORMAT_UNKNOWN,
840                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
841                                              DXGI_FORMAT_UNKNOWN,
842                                              GL_RGBA32F,
843                                              nullptr);
844                 return info;
845             }
846         }
847         case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
848         {
849             static constexpr Format info(GL_ETC1_RGB8_LOSSY_DECODE_ANGLE,
850                                          angle::Format::ID::BC1_RGB_UNORM_BLOCK,
851                                          DXGI_FORMAT_BC1_UNORM,
852                                          DXGI_FORMAT_BC1_UNORM,
853                                          DXGI_FORMAT_UNKNOWN,
854                                          DXGI_FORMAT_UNKNOWN,
855                                          DXGI_FORMAT_BC1_UNORM,
856                                          GL_RGBA8,
857                                          nullptr);
858             return info;
859         }
860         case GL_ETC1_RGB8_OES:
861         {
862             static constexpr Format info(GL_ETC1_RGB8_OES,
863                                          angle::Format::ID::R8G8B8A8_UNORM,
864                                          DXGI_FORMAT_R8G8B8A8_UNORM,
865                                          DXGI_FORMAT_R8G8B8A8_UNORM,
866                                          DXGI_FORMAT_R8G8B8A8_UNORM,
867                                          DXGI_FORMAT_UNKNOWN,
868                                          DXGI_FORMAT_R8G8B8A8_UNORM,
869                                          GL_RGBA8,
870                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
871             return info;
872         }
873         case GL_LUMINANCE16F_EXT:
874         {
875             static constexpr Format info(GL_LUMINANCE16F_EXT,
876                                          angle::Format::ID::R16G16B16A16_FLOAT,
877                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
878                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
879                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
880                                          DXGI_FORMAT_UNKNOWN,
881                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
882                                          GL_RGBA16F,
883                                          Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>);
884             return info;
885         }
886         case GL_LUMINANCE32F_EXT:
887         {
888             static constexpr Format info(GL_LUMINANCE32F_EXT,
889                                          angle::Format::ID::R32G32B32A32_FLOAT,
890                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
891                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
892                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
893                                          DXGI_FORMAT_UNKNOWN,
894                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
895                                          GL_RGBA32F,
896                                          Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>);
897             return info;
898         }
899         case GL_LUMINANCE8_ALPHA8_EXT:
900         {
901             static constexpr Format info(GL_LUMINANCE8_ALPHA8_EXT,
902                                          angle::Format::ID::R8G8B8A8_UNORM,
903                                          DXGI_FORMAT_R8G8B8A8_UNORM,
904                                          DXGI_FORMAT_R8G8B8A8_UNORM,
905                                          DXGI_FORMAT_R8G8B8A8_UNORM,
906                                          DXGI_FORMAT_UNKNOWN,
907                                          DXGI_FORMAT_R8G8B8A8_UNORM,
908                                          GL_RGBA8,
909                                          nullptr);
910             return info;
911         }
912         case GL_LUMINANCE8_EXT:
913         {
914             static constexpr Format info(GL_LUMINANCE8_EXT,
915                                          angle::Format::ID::R8G8B8A8_UNORM,
916                                          DXGI_FORMAT_R8G8B8A8_UNORM,
917                                          DXGI_FORMAT_R8G8B8A8_UNORM,
918                                          DXGI_FORMAT_R8G8B8A8_UNORM,
919                                          DXGI_FORMAT_UNKNOWN,
920                                          DXGI_FORMAT_R8G8B8A8_UNORM,
921                                          GL_RGBA8,
922                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
923             return info;
924         }
925         case GL_LUMINANCE_ALPHA16F_EXT:
926         {
927             static constexpr Format info(GL_LUMINANCE_ALPHA16F_EXT,
928                                          angle::Format::ID::R16G16B16A16_FLOAT,
929                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
930                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
931                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
932                                          DXGI_FORMAT_UNKNOWN,
933                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
934                                          GL_RGBA16F,
935                                          nullptr);
936             return info;
937         }
938         case GL_LUMINANCE_ALPHA32F_EXT:
939         {
940             static constexpr Format info(GL_LUMINANCE_ALPHA32F_EXT,
941                                          angle::Format::ID::R32G32B32A32_FLOAT,
942                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
943                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
944                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
945                                          DXGI_FORMAT_UNKNOWN,
946                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
947                                          GL_RGBA32F,
948                                          nullptr);
949             return info;
950         }
951         case GL_NONE:
952         {
953             static constexpr Format info(GL_NONE,
954                                          angle::Format::ID::NONE,
955                                          DXGI_FORMAT_UNKNOWN,
956                                          DXGI_FORMAT_UNKNOWN,
957                                          DXGI_FORMAT_UNKNOWN,
958                                          DXGI_FORMAT_UNKNOWN,
959                                          DXGI_FORMAT_UNKNOWN,
960                                          GL_NONE,
961                                          nullptr);
962             return info;
963         }
964         case GL_R11F_G11F_B10F:
965         {
966             static constexpr Format info(GL_R11F_G11F_B10F,
967                                          angle::Format::ID::R11G11B10_FLOAT,
968                                          DXGI_FORMAT_R11G11B10_FLOAT,
969                                          DXGI_FORMAT_R11G11B10_FLOAT,
970                                          DXGI_FORMAT_R11G11B10_FLOAT,
971                                          DXGI_FORMAT_UNKNOWN,
972                                          DXGI_FORMAT_R11G11B10_FLOAT,
973                                          GL_RGBA16F_EXT,
974                                          nullptr);
975             return info;
976         }
977         case GL_R16F:
978         {
979             static constexpr Format info(GL_R16F,
980                                          angle::Format::ID::R16_FLOAT,
981                                          DXGI_FORMAT_R16_FLOAT,
982                                          DXGI_FORMAT_R16_FLOAT,
983                                          DXGI_FORMAT_R16_FLOAT,
984                                          DXGI_FORMAT_UNKNOWN,
985                                          DXGI_FORMAT_R16_FLOAT,
986                                          GL_RGBA16F_EXT,
987                                          nullptr);
988             return info;
989         }
990         case GL_R16I:
991         {
992             static constexpr Format info(GL_R16I,
993                                          angle::Format::ID::R16_SINT,
994                                          DXGI_FORMAT_R16_SINT,
995                                          DXGI_FORMAT_R16_SINT,
996                                          DXGI_FORMAT_R16_SINT,
997                                          DXGI_FORMAT_UNKNOWN,
998                                          DXGI_FORMAT_R16_SINT,
999                                          GL_RGBA16I,
1000                                          nullptr);
1001             return info;
1002         }
1003         case GL_R16UI:
1004         {
1005             static constexpr Format info(GL_R16UI,
1006                                          angle::Format::ID::R16_UINT,
1007                                          DXGI_FORMAT_R16_UINT,
1008                                          DXGI_FORMAT_R16_UINT,
1009                                          DXGI_FORMAT_R16_UINT,
1010                                          DXGI_FORMAT_UNKNOWN,
1011                                          DXGI_FORMAT_R16_UINT,
1012                                          GL_RGBA16I,
1013                                          nullptr);
1014             return info;
1015         }
1016         case GL_R16_EXT:
1017         {
1018             static constexpr Format info(GL_R16_EXT,
1019                                          angle::Format::ID::R16_UNORM,
1020                                          DXGI_FORMAT_R16_UNORM,
1021                                          DXGI_FORMAT_R16_UNORM,
1022                                          DXGI_FORMAT_R16_UNORM,
1023                                          DXGI_FORMAT_UNKNOWN,
1024                                          DXGI_FORMAT_R16_UNORM,
1025                                          GL_RGBA16_EXT,
1026                                          nullptr);
1027             return info;
1028         }
1029         case GL_R16_SNORM_EXT:
1030         {
1031             static constexpr Format info(GL_R16_SNORM_EXT,
1032                                          angle::Format::ID::R16_SNORM,
1033                                          DXGI_FORMAT_R16_SNORM,
1034                                          DXGI_FORMAT_R16_SNORM,
1035                                          DXGI_FORMAT_UNKNOWN,
1036                                          DXGI_FORMAT_UNKNOWN,
1037                                          DXGI_FORMAT_R16_SNORM,
1038                                          GL_RGBA16_SNORM_EXT,
1039                                          nullptr);
1040             return info;
1041         }
1042         case GL_R32F:
1043         {
1044             static constexpr Format info(GL_R32F,
1045                                          angle::Format::ID::R32_FLOAT,
1046                                          DXGI_FORMAT_R32_FLOAT,
1047                                          DXGI_FORMAT_R32_FLOAT,
1048                                          DXGI_FORMAT_R32_FLOAT,
1049                                          DXGI_FORMAT_UNKNOWN,
1050                                          DXGI_FORMAT_R32_FLOAT,
1051                                          GL_RGBA32F,
1052                                          nullptr);
1053             return info;
1054         }
1055         case GL_R32I:
1056         {
1057             static constexpr Format info(GL_R32I,
1058                                          angle::Format::ID::R32_SINT,
1059                                          DXGI_FORMAT_R32_SINT,
1060                                          DXGI_FORMAT_R32_SINT,
1061                                          DXGI_FORMAT_R32_SINT,
1062                                          DXGI_FORMAT_UNKNOWN,
1063                                          DXGI_FORMAT_R32_SINT,
1064                                          GL_RGBA32I,
1065                                          nullptr);
1066             return info;
1067         }
1068         case GL_R32UI:
1069         {
1070             static constexpr Format info(GL_R32UI,
1071                                          angle::Format::ID::R32_UINT,
1072                                          DXGI_FORMAT_R32_UINT,
1073                                          DXGI_FORMAT_R32_UINT,
1074                                          DXGI_FORMAT_R32_UINT,
1075                                          DXGI_FORMAT_UNKNOWN,
1076                                          DXGI_FORMAT_R32_UINT,
1077                                          GL_RGBA32I,
1078                                          nullptr);
1079             return info;
1080         }
1081         case GL_R8:
1082         {
1083             static constexpr Format info(GL_R8,
1084                                          angle::Format::ID::R8_UNORM,
1085                                          DXGI_FORMAT_R8_UNORM,
1086                                          DXGI_FORMAT_R8_UNORM,
1087                                          DXGI_FORMAT_R8_UNORM,
1088                                          DXGI_FORMAT_UNKNOWN,
1089                                          DXGI_FORMAT_R8_UNORM,
1090                                          GL_RGBA8,
1091                                          nullptr);
1092             return info;
1093         }
1094         case GL_R8I:
1095         {
1096             static constexpr Format info(GL_R8I,
1097                                          angle::Format::ID::R8_SINT,
1098                                          DXGI_FORMAT_R8_SINT,
1099                                          DXGI_FORMAT_R8_SINT,
1100                                          DXGI_FORMAT_R8_SINT,
1101                                          DXGI_FORMAT_UNKNOWN,
1102                                          DXGI_FORMAT_R8_SINT,
1103                                          GL_RGBA8I,
1104                                          nullptr);
1105             return info;
1106         }
1107         case GL_R8UI:
1108         {
1109             static constexpr Format info(GL_R8UI,
1110                                          angle::Format::ID::R8_UINT,
1111                                          DXGI_FORMAT_R8_UINT,
1112                                          DXGI_FORMAT_R8_UINT,
1113                                          DXGI_FORMAT_R8_UINT,
1114                                          DXGI_FORMAT_UNKNOWN,
1115                                          DXGI_FORMAT_R8_UINT,
1116                                          GL_RGBA8I,
1117                                          nullptr);
1118             return info;
1119         }
1120         case GL_R8_SNORM:
1121         {
1122             static constexpr Format info(GL_R8_SNORM,
1123                                          angle::Format::ID::R8_SNORM,
1124                                          DXGI_FORMAT_R8_SNORM,
1125                                          DXGI_FORMAT_R8_SNORM,
1126                                          DXGI_FORMAT_UNKNOWN,
1127                                          DXGI_FORMAT_UNKNOWN,
1128                                          DXGI_FORMAT_R8_SNORM,
1129                                          GL_RGBA8_SNORM,
1130                                          nullptr);
1131             return info;
1132         }
1133         case GL_RG16F:
1134         {
1135             static constexpr Format info(GL_RG16F,
1136                                          angle::Format::ID::R16G16_FLOAT,
1137                                          DXGI_FORMAT_R16G16_FLOAT,
1138                                          DXGI_FORMAT_R16G16_FLOAT,
1139                                          DXGI_FORMAT_R16G16_FLOAT,
1140                                          DXGI_FORMAT_UNKNOWN,
1141                                          DXGI_FORMAT_R16G16_FLOAT,
1142                                          GL_RGBA16F_EXT,
1143                                          nullptr);
1144             return info;
1145         }
1146         case GL_RG16I:
1147         {
1148             static constexpr Format info(GL_RG16I,
1149                                          angle::Format::ID::R16G16_SINT,
1150                                          DXGI_FORMAT_R16G16_SINT,
1151                                          DXGI_FORMAT_R16G16_SINT,
1152                                          DXGI_FORMAT_R16G16_SINT,
1153                                          DXGI_FORMAT_UNKNOWN,
1154                                          DXGI_FORMAT_R16G16_SINT,
1155                                          GL_RGBA16I,
1156                                          nullptr);
1157             return info;
1158         }
1159         case GL_RG16UI:
1160         {
1161             static constexpr Format info(GL_RG16UI,
1162                                          angle::Format::ID::R16G16_UINT,
1163                                          DXGI_FORMAT_R16G16_UINT,
1164                                          DXGI_FORMAT_R16G16_UINT,
1165                                          DXGI_FORMAT_R16G16_UINT,
1166                                          DXGI_FORMAT_UNKNOWN,
1167                                          DXGI_FORMAT_R16G16_UINT,
1168                                          GL_RGBA16I,
1169                                          nullptr);
1170             return info;
1171         }
1172         case GL_RG16_EXT:
1173         {
1174             static constexpr Format info(GL_RG16_EXT,
1175                                          angle::Format::ID::R16G16_UNORM,
1176                                          DXGI_FORMAT_R16G16_UNORM,
1177                                          DXGI_FORMAT_R16G16_UNORM,
1178                                          DXGI_FORMAT_R16G16_UNORM,
1179                                          DXGI_FORMAT_UNKNOWN,
1180                                          DXGI_FORMAT_R16G16_UNORM,
1181                                          GL_RGBA16_EXT,
1182                                          nullptr);
1183             return info;
1184         }
1185         case GL_RG16_SNORM_EXT:
1186         {
1187             static constexpr Format info(GL_RG16_SNORM_EXT,
1188                                          angle::Format::ID::R16G16_SNORM,
1189                                          DXGI_FORMAT_R16G16_SNORM,
1190                                          DXGI_FORMAT_R16G16_SNORM,
1191                                          DXGI_FORMAT_UNKNOWN,
1192                                          DXGI_FORMAT_UNKNOWN,
1193                                          DXGI_FORMAT_R16G16_SNORM,
1194                                          GL_RGBA16_SNORM_EXT,
1195                                          nullptr);
1196             return info;
1197         }
1198         case GL_RG32F:
1199         {
1200             static constexpr Format info(GL_RG32F,
1201                                          angle::Format::ID::R32G32_FLOAT,
1202                                          DXGI_FORMAT_R32G32_FLOAT,
1203                                          DXGI_FORMAT_R32G32_FLOAT,
1204                                          DXGI_FORMAT_R32G32_FLOAT,
1205                                          DXGI_FORMAT_UNKNOWN,
1206                                          DXGI_FORMAT_R32G32_FLOAT,
1207                                          GL_RGBA32F,
1208                                          nullptr);
1209             return info;
1210         }
1211         case GL_RG32I:
1212         {
1213             static constexpr Format info(GL_RG32I,
1214                                          angle::Format::ID::R32G32_SINT,
1215                                          DXGI_FORMAT_R32G32_SINT,
1216                                          DXGI_FORMAT_R32G32_SINT,
1217                                          DXGI_FORMAT_R32G32_SINT,
1218                                          DXGI_FORMAT_UNKNOWN,
1219                                          DXGI_FORMAT_R32G32_SINT,
1220                                          GL_RGBA32I,
1221                                          nullptr);
1222             return info;
1223         }
1224         case GL_RG32UI:
1225         {
1226             static constexpr Format info(GL_RG32UI,
1227                                          angle::Format::ID::R32G32_UINT,
1228                                          DXGI_FORMAT_R32G32_UINT,
1229                                          DXGI_FORMAT_R32G32_UINT,
1230                                          DXGI_FORMAT_R32G32_UINT,
1231                                          DXGI_FORMAT_UNKNOWN,
1232                                          DXGI_FORMAT_R32G32_UINT,
1233                                          GL_RGBA32I,
1234                                          nullptr);
1235             return info;
1236         }
1237         case GL_RG8:
1238         {
1239             static constexpr Format info(GL_RG8,
1240                                          angle::Format::ID::R8G8_UNORM,
1241                                          DXGI_FORMAT_R8G8_UNORM,
1242                                          DXGI_FORMAT_R8G8_UNORM,
1243                                          DXGI_FORMAT_R8G8_UNORM,
1244                                          DXGI_FORMAT_UNKNOWN,
1245                                          DXGI_FORMAT_R8G8_UNORM,
1246                                          GL_RGBA8,
1247                                          nullptr);
1248             return info;
1249         }
1250         case GL_RG8I:
1251         {
1252             static constexpr Format info(GL_RG8I,
1253                                          angle::Format::ID::R8G8_SINT,
1254                                          DXGI_FORMAT_R8G8_SINT,
1255                                          DXGI_FORMAT_R8G8_SINT,
1256                                          DXGI_FORMAT_R8G8_SINT,
1257                                          DXGI_FORMAT_UNKNOWN,
1258                                          DXGI_FORMAT_R8G8_SINT,
1259                                          GL_RGBA8I,
1260                                          nullptr);
1261             return info;
1262         }
1263         case GL_RG8UI:
1264         {
1265             static constexpr Format info(GL_RG8UI,
1266                                          angle::Format::ID::R8G8_UINT,
1267                                          DXGI_FORMAT_R8G8_UINT,
1268                                          DXGI_FORMAT_R8G8_UINT,
1269                                          DXGI_FORMAT_R8G8_UINT,
1270                                          DXGI_FORMAT_UNKNOWN,
1271                                          DXGI_FORMAT_R8G8_UINT,
1272                                          GL_RGBA8I,
1273                                          nullptr);
1274             return info;
1275         }
1276         case GL_RG8_SNORM:
1277         {
1278             static constexpr Format info(GL_RG8_SNORM,
1279                                          angle::Format::ID::R8G8_SNORM,
1280                                          DXGI_FORMAT_R8G8_SNORM,
1281                                          DXGI_FORMAT_R8G8_SNORM,
1282                                          DXGI_FORMAT_UNKNOWN,
1283                                          DXGI_FORMAT_UNKNOWN,
1284                                          DXGI_FORMAT_R8G8_SNORM,
1285                                          GL_RGBA8_SNORM,
1286                                          nullptr);
1287             return info;
1288         }
1289         case GL_RGB:
1290         {
1291             static constexpr Format info(GL_RGB,
1292                                          angle::Format::ID::R8G8B8A8_UNORM,
1293                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1294                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1295                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1296                                          DXGI_FORMAT_UNKNOWN,
1297                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1298                                          GL_RGBA8,
1299                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
1300             return info;
1301         }
1302         case GL_RGB10_A2:
1303         {
1304             static constexpr Format info(GL_RGB10_A2,
1305                                          angle::Format::ID::R10G10B10A2_UNORM,
1306                                          DXGI_FORMAT_R10G10B10A2_UNORM,
1307                                          DXGI_FORMAT_R10G10B10A2_UNORM,
1308                                          DXGI_FORMAT_R10G10B10A2_UNORM,
1309                                          DXGI_FORMAT_UNKNOWN,
1310                                          DXGI_FORMAT_R10G10B10A2_UNORM,
1311                                          GL_RGBA16_EXT,
1312                                          nullptr);
1313             return info;
1314         }
1315         case GL_RGB10_A2UI:
1316         {
1317             static constexpr Format info(GL_RGB10_A2UI,
1318                                          angle::Format::ID::R10G10B10A2_UINT,
1319                                          DXGI_FORMAT_R10G10B10A2_UINT,
1320                                          DXGI_FORMAT_R10G10B10A2_UINT,
1321                                          DXGI_FORMAT_R10G10B10A2_UINT,
1322                                          DXGI_FORMAT_UNKNOWN,
1323                                          DXGI_FORMAT_R10G10B10A2_UINT,
1324                                          GL_RGBA16I,
1325                                          nullptr);
1326             return info;
1327         }
1328         case GL_RGB16F:
1329         {
1330             static constexpr Format info(GL_RGB16F,
1331                                          angle::Format::ID::R16G16B16A16_FLOAT,
1332                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
1333                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
1334                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
1335                                          DXGI_FORMAT_UNKNOWN,
1336                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
1337                                          GL_RGBA16F,
1338                                          Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>);
1339             return info;
1340         }
1341         case GL_RGB16I:
1342         {
1343             static constexpr Format info(GL_RGB16I,
1344                                          angle::Format::ID::R16G16B16A16_SINT,
1345                                          DXGI_FORMAT_R16G16B16A16_SINT,
1346                                          DXGI_FORMAT_R16G16B16A16_SINT,
1347                                          DXGI_FORMAT_R16G16B16A16_SINT,
1348                                          DXGI_FORMAT_UNKNOWN,
1349                                          DXGI_FORMAT_R16G16B16A16_SINT,
1350                                          GL_RGBA16I,
1351                                          Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>);
1352             return info;
1353         }
1354         case GL_RGB16UI:
1355         {
1356             static constexpr Format info(GL_RGB16UI,
1357                                          angle::Format::ID::R16G16B16A16_UINT,
1358                                          DXGI_FORMAT_R16G16B16A16_UINT,
1359                                          DXGI_FORMAT_R16G16B16A16_UINT,
1360                                          DXGI_FORMAT_R16G16B16A16_UINT,
1361                                          DXGI_FORMAT_UNKNOWN,
1362                                          DXGI_FORMAT_R16G16B16A16_UINT,
1363                                          GL_RGBA16UI,
1364                                          Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>);
1365             return info;
1366         }
1367         case GL_RGB16_EXT:
1368         {
1369             static constexpr Format info(GL_RGB16_EXT,
1370                                          angle::Format::ID::R16G16B16A16_UNORM,
1371                                          DXGI_FORMAT_R16G16B16A16_UNORM,
1372                                          DXGI_FORMAT_R16G16B16A16_UNORM,
1373                                          DXGI_FORMAT_R16G16B16A16_UNORM,
1374                                          DXGI_FORMAT_UNKNOWN,
1375                                          DXGI_FORMAT_R16G16B16A16_UNORM,
1376                                          GL_RGBA16_EXT,
1377                                          Initialize4ComponentData<GLubyte, 0x0000, 0x0000, 0x0000, 0xFFFF>);
1378             return info;
1379         }
1380         case GL_RGB16_SNORM_EXT:
1381         {
1382             static constexpr Format info(GL_RGB16_SNORM_EXT,
1383                                          angle::Format::ID::R16G16B16A16_SNORM,
1384                                          DXGI_FORMAT_R16G16B16A16_SNORM,
1385                                          DXGI_FORMAT_R16G16B16A16_SNORM,
1386                                          DXGI_FORMAT_UNKNOWN,
1387                                          DXGI_FORMAT_UNKNOWN,
1388                                          DXGI_FORMAT_R16G16B16A16_SNORM,
1389                                          GL_RGBA16_SNORM_EXT,
1390                                          Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x7FFF>);
1391             return info;
1392         }
1393         case GL_RGB32F:
1394         {
1395             static constexpr Format info(GL_RGB32F,
1396                                          angle::Format::ID::R32G32B32A32_FLOAT,
1397                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
1398                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
1399                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
1400                                          DXGI_FORMAT_UNKNOWN,
1401                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
1402                                          GL_RGBA32F,
1403                                          Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>);
1404             return info;
1405         }
1406         case GL_RGB32I:
1407         {
1408             static constexpr Format info(GL_RGB32I,
1409                                          angle::Format::ID::R32G32B32A32_SINT,
1410                                          DXGI_FORMAT_R32G32B32A32_SINT,
1411                                          DXGI_FORMAT_R32G32B32A32_SINT,
1412                                          DXGI_FORMAT_R32G32B32A32_SINT,
1413                                          DXGI_FORMAT_UNKNOWN,
1414                                          DXGI_FORMAT_R32G32B32A32_SINT,
1415                                          GL_RGBA32I,
1416                                          Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>);
1417             return info;
1418         }
1419         case GL_RGB32UI:
1420         {
1421             static constexpr Format info(GL_RGB32UI,
1422                                          angle::Format::ID::R32G32B32A32_UINT,
1423                                          DXGI_FORMAT_R32G32B32A32_UINT,
1424                                          DXGI_FORMAT_R32G32B32A32_UINT,
1425                                          DXGI_FORMAT_R32G32B32A32_UINT,
1426                                          DXGI_FORMAT_UNKNOWN,
1427                                          DXGI_FORMAT_R32G32B32A32_UINT,
1428                                          GL_RGBA32UI,
1429                                          Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>);
1430             return info;
1431         }
1432         case GL_RGB565:
1433         {
1434             if (SupportsFormat(DXGI_FORMAT_B5G6R5_UNORM, deviceCaps))
1435             {
1436                 static constexpr Format info(GL_RGB565,
1437                                              angle::Format::ID::B5G6R5_UNORM,
1438                                              DXGI_FORMAT_B5G6R5_UNORM,
1439                                              DXGI_FORMAT_B5G6R5_UNORM,
1440                                              DXGI_FORMAT_B5G6R5_UNORM,
1441                                              DXGI_FORMAT_UNKNOWN,
1442                                              DXGI_FORMAT_B5G6R5_UNORM,
1443                                              GL_RGBA8,
1444                                              nullptr);
1445                 return info;
1446             }
1447             else
1448             {
1449                 static constexpr Format info(GL_RGB565,
1450                                              angle::Format::ID::R8G8B8A8_UNORM,
1451                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1452                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1453                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1454                                              DXGI_FORMAT_UNKNOWN,
1455                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1456                                              GL_RGBA8,
1457                                              Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
1458                 return info;
1459             }
1460         }
1461         case GL_RGB5_A1:
1462         {
1463             if (SupportsFormat(DXGI_FORMAT_B5G5R5A1_UNORM, deviceCaps))
1464             {
1465                 static constexpr Format info(GL_RGB5_A1,
1466                                              angle::Format::ID::B5G5R5A1_UNORM,
1467                                              DXGI_FORMAT_B5G5R5A1_UNORM,
1468                                              DXGI_FORMAT_B5G5R5A1_UNORM,
1469                                              DXGI_FORMAT_B5G5R5A1_UNORM,
1470                                              DXGI_FORMAT_UNKNOWN,
1471                                              DXGI_FORMAT_B5G5R5A1_UNORM,
1472                                              GL_RGBA8,
1473                                              nullptr);
1474                 return info;
1475             }
1476             else
1477             {
1478                 static constexpr Format info(GL_RGB5_A1,
1479                                              angle::Format::ID::R8G8B8A8_UNORM,
1480                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1481                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1482                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1483                                              DXGI_FORMAT_UNKNOWN,
1484                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1485                                              GL_RGBA8,
1486                                              nullptr);
1487                 return info;
1488             }
1489         }
1490         case GL_RGB8:
1491         {
1492             static constexpr Format info(GL_RGB8,
1493                                          angle::Format::ID::R8G8B8A8_UNORM,
1494                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1495                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1496                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1497                                          DXGI_FORMAT_UNKNOWN,
1498                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1499                                          GL_RGBA8,
1500                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
1501             return info;
1502         }
1503         case GL_RGB8I:
1504         {
1505             static constexpr Format info(GL_RGB8I,
1506                                          angle::Format::ID::R8G8B8A8_SINT,
1507                                          DXGI_FORMAT_R8G8B8A8_SINT,
1508                                          DXGI_FORMAT_R8G8B8A8_SINT,
1509                                          DXGI_FORMAT_R8G8B8A8_SINT,
1510                                          DXGI_FORMAT_UNKNOWN,
1511                                          DXGI_FORMAT_R8G8B8A8_SINT,
1512                                          GL_RGBA8I,
1513                                          Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>);
1514             return info;
1515         }
1516         case GL_RGB8UI:
1517         {
1518             static constexpr Format info(GL_RGB8UI,
1519                                          angle::Format::ID::R8G8B8A8_UINT,
1520                                          DXGI_FORMAT_R8G8B8A8_UINT,
1521                                          DXGI_FORMAT_R8G8B8A8_UINT,
1522                                          DXGI_FORMAT_R8G8B8A8_UINT,
1523                                          DXGI_FORMAT_UNKNOWN,
1524                                          DXGI_FORMAT_R8G8B8A8_UINT,
1525                                          GL_RGBA8UI,
1526                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>);
1527             return info;
1528         }
1529         case GL_RGB8_SNORM:
1530         {
1531             static constexpr Format info(GL_RGB8_SNORM,
1532                                          angle::Format::ID::R8G8B8A8_SNORM,
1533                                          DXGI_FORMAT_R8G8B8A8_SNORM,
1534                                          DXGI_FORMAT_R8G8B8A8_SNORM,
1535                                          DXGI_FORMAT_UNKNOWN,
1536                                          DXGI_FORMAT_UNKNOWN,
1537                                          DXGI_FORMAT_R8G8B8A8_SNORM,
1538                                          GL_RGBA8_SNORM,
1539                                          Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x7F>);
1540             return info;
1541         }
1542         case GL_RGB9_E5:
1543         {
1544             static constexpr Format info(GL_RGB9_E5,
1545                                          angle::Format::ID::R9G9B9E5_SHAREDEXP,
1546                                          DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
1547                                          DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
1548                                          DXGI_FORMAT_UNKNOWN,
1549                                          DXGI_FORMAT_UNKNOWN,
1550                                          DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
1551                                          GL_RGBA16F_EXT,
1552                                          nullptr);
1553             return info;
1554         }
1555         case GL_RGBA:
1556         {
1557             static constexpr Format info(GL_RGBA,
1558                                          angle::Format::ID::R8G8B8A8_UNORM,
1559                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1560                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1561                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1562                                          DXGI_FORMAT_UNKNOWN,
1563                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1564                                          GL_RGBA8,
1565                                          nullptr);
1566             return info;
1567         }
1568         case GL_RGBA16F:
1569         {
1570             static constexpr Format info(GL_RGBA16F,
1571                                          angle::Format::ID::R16G16B16A16_FLOAT,
1572                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
1573                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
1574                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
1575                                          DXGI_FORMAT_UNKNOWN,
1576                                          DXGI_FORMAT_R16G16B16A16_FLOAT,
1577                                          GL_RGBA16F,
1578                                          nullptr);
1579             return info;
1580         }
1581         case GL_RGBA16I:
1582         {
1583             static constexpr Format info(GL_RGBA16I,
1584                                          angle::Format::ID::R16G16B16A16_SINT,
1585                                          DXGI_FORMAT_R16G16B16A16_SINT,
1586                                          DXGI_FORMAT_R16G16B16A16_SINT,
1587                                          DXGI_FORMAT_R16G16B16A16_SINT,
1588                                          DXGI_FORMAT_UNKNOWN,
1589                                          DXGI_FORMAT_R16G16B16A16_SINT,
1590                                          GL_RGBA16I,
1591                                          nullptr);
1592             return info;
1593         }
1594         case GL_RGBA16UI:
1595         {
1596             static constexpr Format info(GL_RGBA16UI,
1597                                          angle::Format::ID::R16G16B16A16_UINT,
1598                                          DXGI_FORMAT_R16G16B16A16_UINT,
1599                                          DXGI_FORMAT_R16G16B16A16_UINT,
1600                                          DXGI_FORMAT_R16G16B16A16_UINT,
1601                                          DXGI_FORMAT_UNKNOWN,
1602                                          DXGI_FORMAT_R16G16B16A16_UINT,
1603                                          GL_RGBA16UI,
1604                                          nullptr);
1605             return info;
1606         }
1607         case GL_RGBA16_EXT:
1608         {
1609             static constexpr Format info(GL_RGBA16_EXT,
1610                                          angle::Format::ID::R16G16B16A16_UNORM,
1611                                          DXGI_FORMAT_R16G16B16A16_UNORM,
1612                                          DXGI_FORMAT_R16G16B16A16_UNORM,
1613                                          DXGI_FORMAT_R16G16B16A16_UNORM,
1614                                          DXGI_FORMAT_UNKNOWN,
1615                                          DXGI_FORMAT_R16G16B16A16_UNORM,
1616                                          GL_RGBA16_EXT,
1617                                          nullptr);
1618             return info;
1619         }
1620         case GL_RGBA16_SNORM_EXT:
1621         {
1622             static constexpr Format info(GL_RGBA16_SNORM_EXT,
1623                                          angle::Format::ID::R16G16B16A16_SNORM,
1624                                          DXGI_FORMAT_R16G16B16A16_SNORM,
1625                                          DXGI_FORMAT_R16G16B16A16_SNORM,
1626                                          DXGI_FORMAT_UNKNOWN,
1627                                          DXGI_FORMAT_UNKNOWN,
1628                                          DXGI_FORMAT_R16G16B16A16_SNORM,
1629                                          GL_RGBA16_SNORM_EXT,
1630                                          nullptr);
1631             return info;
1632         }
1633         case GL_RGBA32F:
1634         {
1635             static constexpr Format info(GL_RGBA32F,
1636                                          angle::Format::ID::R32G32B32A32_FLOAT,
1637                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
1638                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
1639                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
1640                                          DXGI_FORMAT_UNKNOWN,
1641                                          DXGI_FORMAT_R32G32B32A32_FLOAT,
1642                                          GL_RGBA32F,
1643                                          nullptr);
1644             return info;
1645         }
1646         case GL_RGBA32I:
1647         {
1648             static constexpr Format info(GL_RGBA32I,
1649                                          angle::Format::ID::R32G32B32A32_SINT,
1650                                          DXGI_FORMAT_R32G32B32A32_SINT,
1651                                          DXGI_FORMAT_R32G32B32A32_SINT,
1652                                          DXGI_FORMAT_R32G32B32A32_SINT,
1653                                          DXGI_FORMAT_UNKNOWN,
1654                                          DXGI_FORMAT_R32G32B32A32_SINT,
1655                                          GL_RGBA32I,
1656                                          nullptr);
1657             return info;
1658         }
1659         case GL_RGBA32UI:
1660         {
1661             static constexpr Format info(GL_RGBA32UI,
1662                                          angle::Format::ID::R32G32B32A32_UINT,
1663                                          DXGI_FORMAT_R32G32B32A32_UINT,
1664                                          DXGI_FORMAT_R32G32B32A32_UINT,
1665                                          DXGI_FORMAT_R32G32B32A32_UINT,
1666                                          DXGI_FORMAT_UNKNOWN,
1667                                          DXGI_FORMAT_R32G32B32A32_UINT,
1668                                          GL_RGBA32UI,
1669                                          nullptr);
1670             return info;
1671         }
1672         case GL_RGBA4:
1673         {
1674             if (SupportsFormat(DXGI_FORMAT_B4G4R4A4_UNORM, deviceCaps))
1675             {
1676                 static constexpr Format info(GL_RGBA4,
1677                                              angle::Format::ID::B4G4R4A4_UNORM,
1678                                              DXGI_FORMAT_B4G4R4A4_UNORM,
1679                                              DXGI_FORMAT_B4G4R4A4_UNORM,
1680                                              DXGI_FORMAT_B4G4R4A4_UNORM,
1681                                              DXGI_FORMAT_UNKNOWN,
1682                                              DXGI_FORMAT_B4G4R4A4_UNORM,
1683                                              GL_RGBA4,
1684                                              nullptr);
1685                 return info;
1686             }
1687             else
1688             {
1689                 static constexpr Format info(GL_RGBA4,
1690                                              angle::Format::ID::R8G8B8A8_UNORM,
1691                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1692                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1693                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1694                                              DXGI_FORMAT_UNKNOWN,
1695                                              DXGI_FORMAT_R8G8B8A8_UNORM,
1696                                              GL_RGBA8,
1697                                              nullptr);
1698                 return info;
1699             }
1700         }
1701         case GL_RGBA8:
1702         {
1703             static constexpr Format info(GL_RGBA8,
1704                                          angle::Format::ID::R8G8B8A8_UNORM,
1705                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1706                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1707                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1708                                          DXGI_FORMAT_UNKNOWN,
1709                                          DXGI_FORMAT_R8G8B8A8_UNORM,
1710                                          GL_RGBA8,
1711                                          nullptr);
1712             return info;
1713         }
1714         case GL_RGBA8I:
1715         {
1716             static constexpr Format info(GL_RGBA8I,
1717                                          angle::Format::ID::R8G8B8A8_SINT,
1718                                          DXGI_FORMAT_R8G8B8A8_SINT,
1719                                          DXGI_FORMAT_R8G8B8A8_SINT,
1720                                          DXGI_FORMAT_R8G8B8A8_SINT,
1721                                          DXGI_FORMAT_UNKNOWN,
1722                                          DXGI_FORMAT_R8G8B8A8_SINT,
1723                                          GL_RGBA8I,
1724                                          nullptr);
1725             return info;
1726         }
1727         case GL_RGBA8UI:
1728         {
1729             static constexpr Format info(GL_RGBA8UI,
1730                                          angle::Format::ID::R8G8B8A8_UINT,
1731                                          DXGI_FORMAT_R8G8B8A8_UINT,
1732                                          DXGI_FORMAT_R8G8B8A8_UINT,
1733                                          DXGI_FORMAT_R8G8B8A8_UINT,
1734                                          DXGI_FORMAT_UNKNOWN,
1735                                          DXGI_FORMAT_R8G8B8A8_UINT,
1736                                          GL_RGBA8UI,
1737                                          nullptr);
1738             return info;
1739         }
1740         case GL_RGBA8_SNORM:
1741         {
1742             static constexpr Format info(GL_RGBA8_SNORM,
1743                                          angle::Format::ID::R8G8B8A8_SNORM,
1744                                          DXGI_FORMAT_R8G8B8A8_SNORM,
1745                                          DXGI_FORMAT_R8G8B8A8_SNORM,
1746                                          DXGI_FORMAT_UNKNOWN,
1747                                          DXGI_FORMAT_UNKNOWN,
1748                                          DXGI_FORMAT_R8G8B8A8_SNORM,
1749                                          GL_RGBA8_SNORM,
1750                                          nullptr);
1751             return info;
1752         }
1753         case GL_SRGB8:
1754         {
1755             static constexpr Format info(GL_SRGB8,
1756                                          angle::Format::ID::R8G8B8A8_UNORM_SRGB,
1757                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
1758                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
1759                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
1760                                          DXGI_FORMAT_UNKNOWN,
1761                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
1762                                          GL_SRGB8_ALPHA8,
1763                                          Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
1764             return info;
1765         }
1766         case GL_SRGB8_ALPHA8:
1767         {
1768             static constexpr Format info(GL_SRGB8_ALPHA8,
1769                                          angle::Format::ID::R8G8B8A8_UNORM_SRGB,
1770                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
1771                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
1772                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
1773                                          DXGI_FORMAT_UNKNOWN,
1774                                          DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
1775                                          GL_SRGB8_ALPHA8,
1776                                          nullptr);
1777             return info;
1778         }
1779         case GL_STENCIL_INDEX8:
1780         {
1781             if (OnlyFL10Plus(deviceCaps))
1782             {
1783                 static constexpr Format info(GL_STENCIL_INDEX8,
1784                                              angle::Format::ID::D24_UNORM_S8_UINT,
1785                                              DXGI_FORMAT_R24G8_TYPELESS,
1786                                              DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
1787                                              DXGI_FORMAT_UNKNOWN,
1788                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
1789                                              DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
1790                                              GL_RGBA32F,
1791                                              nullptr);
1792                 return info;
1793             }
1794             else
1795             {
1796                 static constexpr Format info(GL_STENCIL_INDEX8,
1797                                              angle::Format::ID::D24_UNORM_S8_UINT,
1798                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
1799                                              DXGI_FORMAT_UNKNOWN,
1800                                              DXGI_FORMAT_UNKNOWN,
1801                                              DXGI_FORMAT_D24_UNORM_S8_UINT,
1802                                              DXGI_FORMAT_UNKNOWN,
1803                                              GL_RGBA32F,
1804                                              nullptr);
1805                 return info;
1806             }
1807         }
1808 
1809         default:
1810             break;
1811     }
1812     // clang-format on
1813 
1814     UNREACHABLE();
1815     static constexpr Format defaultInfo;
1816     return defaultInfo;
1817 }
1818 
1819 }  // namespace d3d11
1820 
1821 }  // namespace rx
1822