1 // GENERATED FILE - DO NOT EDIT.
2 // Generated by gen_load_functions_table.py using data from load_functions_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 // load_functions_table:
9 //   Contains the GetLoadFunctionsMap for texture_format_util.h
10 //
11 
12 #include "libANGLE/renderer/load_functions_table.h"
13 
14 #include "image_util/copyimage.h"
15 #include "image_util/generatemip.h"
16 #include "image_util/loadimage.h"
17 
18 using namespace rx;
19 
20 namespace angle
21 {
22 
23 namespace
24 {
25 
26 // ES3 image loading functions vary based on:
27 //    - the GL internal format (supplied to glTex*Image*D)
28 //    - the GL data type given (supplied to glTex*Image*D)
29 //    - the target DXGI_FORMAT that the image will be loaded into (which is chosen based on the D3D
30 //    device's capabilities)
31 // This map type determines which loading function to use, based on these three parameters.
32 // Source formats and types are taken from Tables 3.2 and 3.3 of the ES 3 spec.
UnimplementedLoadFunction(size_t width,size_t height,size_t depth,const uint8_t * input,size_t inputRowPitch,size_t inputDepthPitch,uint8_t * output,size_t outputRowPitch,size_t outputDepthPitch)33 void UnimplementedLoadFunction(size_t width,
34                                size_t height,
35                                size_t depth,
36                                const uint8_t *input,
37                                size_t inputRowPitch,
38                                size_t inputDepthPitch,
39                                uint8_t *output,
40                                size_t outputRowPitch,
41                                size_t outputDepthPitch)
42 {
43     UNIMPLEMENTED();
44 }
45 
UnreachableLoadFunction(size_t width,size_t height,size_t depth,const uint8_t * input,size_t inputRowPitch,size_t inputDepthPitch,uint8_t * output,size_t outputRowPitch,size_t outputDepthPitch)46 void UnreachableLoadFunction(size_t width,
47                              size_t height,
48                              size_t depth,
49                              const uint8_t *input,
50                              size_t inputRowPitch,
51                              size_t inputDepthPitch,
52                              uint8_t *output,
53                              size_t outputRowPitch,
54                              size_t outputDepthPitch)
55 {
56     UNREACHABLE();
57 }
58 
ALPHA_to_R16G16B16A16_FLOAT(GLenum type)59 LoadImageFunctionInfo ALPHA_to_R16G16B16A16_FLOAT(GLenum type)
60 {
61     switch (type)
62     {
63         case GL_HALF_FLOAT:
64             return LoadImageFunctionInfo(LoadA16FToRGBA16F, true);
65         case GL_HALF_FLOAT_OES:
66             return LoadImageFunctionInfo(LoadA16FToRGBA16F, true);
67         case GL_UNSIGNED_BYTE:
68             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
69         default:
70             UNREACHABLE();
71             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
72     }
73 }
74 
ALPHA_to_R32G32B32A32_FLOAT(GLenum type)75 LoadImageFunctionInfo ALPHA_to_R32G32B32A32_FLOAT(GLenum type)
76 {
77     switch (type)
78     {
79         case GL_FLOAT:
80             return LoadImageFunctionInfo(LoadA32FToRGBA32F, true);
81         case GL_UNSIGNED_BYTE:
82             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
83         default:
84             UNREACHABLE();
85             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
86     }
87 }
88 
ALPHA_to_default(GLenum type)89 LoadImageFunctionInfo ALPHA_to_default(GLenum type)
90 {
91     switch (type)
92     {
93         case GL_UNSIGNED_BYTE:
94             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
95         default:
96             UNREACHABLE();
97             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
98     }
99 }
100 
ALPHA16F_EXT_to_default(GLenum type)101 LoadImageFunctionInfo ALPHA16F_EXT_to_default(GLenum type)
102 {
103     switch (type)
104     {
105         case GL_HALF_FLOAT:
106             return LoadImageFunctionInfo(LoadA16FToRGBA16F, true);
107         case GL_HALF_FLOAT_OES:
108             return LoadImageFunctionInfo(LoadA16FToRGBA16F, true);
109         default:
110             UNREACHABLE();
111             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
112     }
113 }
114 
ALPHA32F_EXT_to_default(GLenum type)115 LoadImageFunctionInfo ALPHA32F_EXT_to_default(GLenum type)
116 {
117     switch (type)
118     {
119         case GL_FLOAT:
120             return LoadImageFunctionInfo(LoadA32FToRGBA32F, true);
121         default:
122             UNREACHABLE();
123             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
124     }
125 }
126 
ALPHA8_EXT_to_A8_UNORM(GLenum type)127 LoadImageFunctionInfo ALPHA8_EXT_to_A8_UNORM(GLenum type)
128 {
129     switch (type)
130     {
131         case GL_UNSIGNED_BYTE:
132             return LoadImageFunctionInfo(LoadToNative<GLubyte, 1>, false);
133         default:
134             UNREACHABLE();
135             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
136     }
137 }
138 
ALPHA8_EXT_to_R8G8B8A8_UNORM(GLenum type)139 LoadImageFunctionInfo ALPHA8_EXT_to_R8G8B8A8_UNORM(GLenum type)
140 {
141     switch (type)
142     {
143         case GL_UNSIGNED_BYTE:
144             return LoadImageFunctionInfo(LoadA8ToRGBA8, true);
145         default:
146             UNREACHABLE();
147             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
148     }
149 }
150 
BGR565_ANGLEX_to_B5G6R5_UNORM(GLenum type)151 LoadImageFunctionInfo BGR565_ANGLEX_to_B5G6R5_UNORM(GLenum type)
152 {
153     switch (type)
154     {
155         case GL_UNSIGNED_BYTE:
156             return LoadImageFunctionInfo(LoadToNative<GLushort, 1>, false);
157         case GL_UNSIGNED_SHORT_5_6_5:
158             return LoadImageFunctionInfo(LoadRGB565ToBGR565, true);
159         default:
160             UNREACHABLE();
161             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
162     }
163 }
164 
BGR5_A1_ANGLEX_to_default(GLenum type)165 LoadImageFunctionInfo BGR5_A1_ANGLEX_to_default(GLenum type)
166 {
167     switch (type)
168     {
169         case GL_UNSIGNED_BYTE:
170             return LoadImageFunctionInfo(LoadToNative<GLubyte, 4>, false);
171         case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
172             return LoadImageFunctionInfo(LoadRGB5A1ToRGBA8, true);
173         default:
174             UNREACHABLE();
175             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
176     }
177 }
178 
BGRA4_ANGLEX_to_default(GLenum type)179 LoadImageFunctionInfo BGRA4_ANGLEX_to_default(GLenum type)
180 {
181     switch (type)
182     {
183         case GL_UNSIGNED_BYTE:
184             return LoadImageFunctionInfo(LoadToNative<GLubyte, 4>, false);
185         case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
186             return LoadImageFunctionInfo(LoadRGBA4ToRGBA8, true);
187         default:
188             UNREACHABLE();
189             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
190     }
191 }
192 
BGRA8_EXT_to_default(GLenum type)193 LoadImageFunctionInfo BGRA8_EXT_to_default(GLenum type)
194 {
195     switch (type)
196     {
197         case GL_UNSIGNED_BYTE:
198             return LoadImageFunctionInfo(LoadToNative<GLubyte, 4>, false);
199         default:
200             UNREACHABLE();
201             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
202     }
203 }
204 
BGRA_EXT_to_default(GLenum type)205 LoadImageFunctionInfo BGRA_EXT_to_default(GLenum type)
206 {
207     switch (type)
208     {
209         case GL_UNSIGNED_BYTE:
210             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
211         default:
212             UNREACHABLE();
213             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
214     }
215 }
216 
COMPRESSED_R11_EAC_to_R8_UNORM(GLenum type)217 LoadImageFunctionInfo COMPRESSED_R11_EAC_to_R8_UNORM(GLenum type)
218 {
219     switch (type)
220     {
221         case GL_UNSIGNED_BYTE:
222             return LoadImageFunctionInfo(LoadEACR11ToR8, true);
223         default:
224             UNREACHABLE();
225             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
226     }
227 }
228 
COMPRESSED_RG11_EAC_to_R8G8_UNORM(GLenum type)229 LoadImageFunctionInfo COMPRESSED_RG11_EAC_to_R8G8_UNORM(GLenum type)
230 {
231     switch (type)
232     {
233         case GL_UNSIGNED_BYTE:
234             return LoadImageFunctionInfo(LoadEACRG11ToRG8, true);
235         default:
236             UNREACHABLE();
237             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
238     }
239 }
240 
COMPRESSED_RGB8_ETC2_to_R8G8B8A8_UNORM(GLenum type)241 LoadImageFunctionInfo COMPRESSED_RGB8_ETC2_to_R8G8B8A8_UNORM(GLenum type)
242 {
243     switch (type)
244     {
245         case GL_UNSIGNED_BYTE:
246             return LoadImageFunctionInfo(LoadETC2RGB8ToRGBA8, true);
247         default:
248             UNREACHABLE();
249             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
250     }
251 }
252 
COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGB_UNORM_BLOCK(GLenum type)253 LoadImageFunctionInfo COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGB_UNORM_BLOCK(GLenum type)
254 {
255     switch (type)
256     {
257         case GL_UNSIGNED_BYTE:
258             return LoadImageFunctionInfo(LoadETC2RGB8ToBC1, true);
259         default:
260             UNREACHABLE();
261             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
262     }
263 }
264 
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2_to_R8G8B8A8_UNORM(GLenum type)265 LoadImageFunctionInfo COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2_to_R8G8B8A8_UNORM(GLenum type)
266 {
267     switch (type)
268     {
269         case GL_UNSIGNED_BYTE:
270             return LoadImageFunctionInfo(LoadETC2RGB8A1ToRGBA8, true);
271         default:
272             UNREACHABLE();
273             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
274     }
275 }
276 
277 LoadImageFunctionInfo
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGBA_UNORM_BLOCK(GLenum type)278 COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGBA_UNORM_BLOCK(GLenum type)
279 {
280     switch (type)
281     {
282         case GL_UNSIGNED_BYTE:
283             return LoadImageFunctionInfo(LoadETC2RGB8A1ToBC1, true);
284         default:
285             UNREACHABLE();
286             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
287     }
288 }
289 
COMPRESSED_RGBA8_ETC2_EAC_to_R8G8B8A8_UNORM(GLenum type)290 LoadImageFunctionInfo COMPRESSED_RGBA8_ETC2_EAC_to_R8G8B8A8_UNORM(GLenum type)
291 {
292     switch (type)
293     {
294         case GL_UNSIGNED_BYTE:
295             return LoadImageFunctionInfo(LoadETC2RGBA8ToRGBA8, true);
296         default:
297             UNREACHABLE();
298             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
299     }
300 }
301 
COMPRESSED_RGBA_S3TC_DXT1_EXT_to_default(GLenum type)302 LoadImageFunctionInfo COMPRESSED_RGBA_S3TC_DXT1_EXT_to_default(GLenum type)
303 {
304     switch (type)
305     {
306         case GL_UNSIGNED_BYTE:
307             return LoadImageFunctionInfo(LoadCompressedToNative<4, 4, 8>, true);
308         default:
309             UNREACHABLE();
310             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
311     }
312 }
313 
COMPRESSED_RGBA_S3TC_DXT3_ANGLE_to_default(GLenum type)314 LoadImageFunctionInfo COMPRESSED_RGBA_S3TC_DXT3_ANGLE_to_default(GLenum type)
315 {
316     switch (type)
317     {
318         case GL_UNSIGNED_BYTE:
319             return LoadImageFunctionInfo(LoadCompressedToNative<4, 4, 16>, true);
320         default:
321             UNREACHABLE();
322             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
323     }
324 }
325 
COMPRESSED_RGBA_S3TC_DXT5_ANGLE_to_default(GLenum type)326 LoadImageFunctionInfo COMPRESSED_RGBA_S3TC_DXT5_ANGLE_to_default(GLenum type)
327 {
328     switch (type)
329     {
330         case GL_UNSIGNED_BYTE:
331             return LoadImageFunctionInfo(LoadCompressedToNative<4, 4, 16>, true);
332         default:
333             UNREACHABLE();
334             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
335     }
336 }
337 
COMPRESSED_RGB_S3TC_DXT1_EXT_to_default(GLenum type)338 LoadImageFunctionInfo COMPRESSED_RGB_S3TC_DXT1_EXT_to_default(GLenum type)
339 {
340     switch (type)
341     {
342         case GL_UNSIGNED_BYTE:
343             return LoadImageFunctionInfo(LoadCompressedToNative<4, 4, 8>, true);
344         default:
345             UNREACHABLE();
346             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
347     }
348 }
349 
COMPRESSED_SIGNED_R11_EAC_to_R8_SNORM(GLenum type)350 LoadImageFunctionInfo COMPRESSED_SIGNED_R11_EAC_to_R8_SNORM(GLenum type)
351 {
352     switch (type)
353     {
354         case GL_UNSIGNED_BYTE:
355             return LoadImageFunctionInfo(LoadEACR11SToR8, true);
356         default:
357             UNREACHABLE();
358             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
359     }
360 }
361 
COMPRESSED_SIGNED_RG11_EAC_to_R8G8_SNORM(GLenum type)362 LoadImageFunctionInfo COMPRESSED_SIGNED_RG11_EAC_to_R8G8_SNORM(GLenum type)
363 {
364     switch (type)
365     {
366         case GL_UNSIGNED_BYTE:
367             return LoadImageFunctionInfo(LoadEACRG11SToRG8, true);
368         default:
369             UNREACHABLE();
370             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
371     }
372 }
373 
COMPRESSED_SRGB8_ALPHA8_ETC2_EAC_to_R8G8B8A8_UNORM_SRGB(GLenum type)374 LoadImageFunctionInfo COMPRESSED_SRGB8_ALPHA8_ETC2_EAC_to_R8G8B8A8_UNORM_SRGB(GLenum type)
375 {
376     switch (type)
377     {
378         case GL_UNSIGNED_BYTE:
379             return LoadImageFunctionInfo(LoadETC2SRGBA8ToSRGBA8, true);
380         default:
381             UNREACHABLE();
382             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
383     }
384 }
385 
COMPRESSED_SRGB8_ETC2_to_R8G8B8A8_UNORM_SRGB(GLenum type)386 LoadImageFunctionInfo COMPRESSED_SRGB8_ETC2_to_R8G8B8A8_UNORM_SRGB(GLenum type)
387 {
388     switch (type)
389     {
390         case GL_UNSIGNED_BYTE:
391             return LoadImageFunctionInfo(LoadETC2SRGB8ToRGBA8, true);
392         default:
393             UNREACHABLE();
394             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
395     }
396 }
397 
COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGB_UNORM_SRGB_BLOCK(GLenum type)398 LoadImageFunctionInfo COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGB_UNORM_SRGB_BLOCK(
399     GLenum type)
400 {
401     switch (type)
402     {
403         case GL_UNSIGNED_BYTE:
404             return LoadImageFunctionInfo(LoadETC2SRGB8ToBC1, true);
405         default:
406             UNREACHABLE();
407             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
408     }
409 }
410 
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2_to_R8G8B8A8_UNORM_SRGB(GLenum type)411 LoadImageFunctionInfo COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2_to_R8G8B8A8_UNORM_SRGB(GLenum type)
412 {
413     switch (type)
414     {
415         case GL_UNSIGNED_BYTE:
416             return LoadImageFunctionInfo(LoadETC2SRGB8A1ToRGBA8, true);
417         default:
418             UNREACHABLE();
419             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
420     }
421 }
422 
423 LoadImageFunctionInfo
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGBA_UNORM_SRGB_BLOCK(GLenum type)424 COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGBA_UNORM_SRGB_BLOCK(
425     GLenum type)
426 {
427     switch (type)
428     {
429         case GL_UNSIGNED_BYTE:
430             return LoadImageFunctionInfo(LoadETC2SRGB8A1ToBC1, true);
431         default:
432             UNREACHABLE();
433             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
434     }
435 }
436 
COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT_to_default(GLenum type)437 LoadImageFunctionInfo COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT_to_default(GLenum type)
438 {
439     switch (type)
440     {
441         case GL_UNSIGNED_BYTE:
442             return LoadImageFunctionInfo(LoadCompressedToNative<4, 4, 8>, true);
443         default:
444             UNREACHABLE();
445             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
446     }
447 }
448 
COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT_to_default(GLenum type)449 LoadImageFunctionInfo COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT_to_default(GLenum type)
450 {
451     switch (type)
452     {
453         case GL_UNSIGNED_BYTE:
454             return LoadImageFunctionInfo(LoadCompressedToNative<4, 4, 16>, true);
455         default:
456             UNREACHABLE();
457             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
458     }
459 }
460 
COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT_to_default(GLenum type)461 LoadImageFunctionInfo COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT_to_default(GLenum type)
462 {
463     switch (type)
464     {
465         case GL_UNSIGNED_BYTE:
466             return LoadImageFunctionInfo(LoadCompressedToNative<4, 4, 16>, true);
467         default:
468             UNREACHABLE();
469             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
470     }
471 }
472 
COMPRESSED_SRGB_S3TC_DXT1_EXT_to_default(GLenum type)473 LoadImageFunctionInfo COMPRESSED_SRGB_S3TC_DXT1_EXT_to_default(GLenum type)
474 {
475     switch (type)
476     {
477         case GL_UNSIGNED_BYTE:
478             return LoadImageFunctionInfo(LoadCompressedToNative<4, 4, 8>, true);
479         default:
480             UNREACHABLE();
481             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
482     }
483 }
484 
DEPTH24_STENCIL8_to_D24_UNORM_S8_UINT(GLenum type)485 LoadImageFunctionInfo DEPTH24_STENCIL8_to_D24_UNORM_S8_UINT(GLenum type)
486 {
487     switch (type)
488     {
489         case GL_UNSIGNED_INT_24_8:
490             return LoadImageFunctionInfo(LoadR32ToR24G8, true);
491         default:
492             UNREACHABLE();
493             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
494     }
495 }
496 
DEPTH32F_STENCIL8_to_D32_FLOAT_S8X24_UINT(GLenum type)497 LoadImageFunctionInfo DEPTH32F_STENCIL8_to_D32_FLOAT_S8X24_UINT(GLenum type)
498 {
499     switch (type)
500     {
501         case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
502             return LoadImageFunctionInfo(LoadD32FS8X24ToD32FS8X24, true);
503         default:
504             UNREACHABLE();
505             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
506     }
507 }
508 
DEPTH_COMPONENT16_to_D16_UNORM(GLenum type)509 LoadImageFunctionInfo DEPTH_COMPONENT16_to_D16_UNORM(GLenum type)
510 {
511     switch (type)
512     {
513         case GL_UNSIGNED_INT:
514             return LoadImageFunctionInfo(LoadR32ToR16, true);
515         case GL_UNSIGNED_SHORT:
516             return LoadImageFunctionInfo(LoadToNative<GLushort, 1>, false);
517         default:
518             UNREACHABLE();
519             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
520     }
521 }
522 
DEPTH_COMPONENT24_to_D24_UNORM_S8_UINT(GLenum type)523 LoadImageFunctionInfo DEPTH_COMPONENT24_to_D24_UNORM_S8_UINT(GLenum type)
524 {
525     switch (type)
526     {
527         case GL_UNSIGNED_INT:
528             return LoadImageFunctionInfo(LoadR32ToR24G8, true);
529         default:
530             UNREACHABLE();
531             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
532     }
533 }
534 
DEPTH_COMPONENT32F_to_D32_FLOAT(GLenum type)535 LoadImageFunctionInfo DEPTH_COMPONENT32F_to_D32_FLOAT(GLenum type)
536 {
537     switch (type)
538     {
539         case GL_FLOAT:
540             return LoadImageFunctionInfo(LoadD32FToD32F, true);
541         default:
542             UNREACHABLE();
543             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
544     }
545 }
546 
DEPTH_COMPONENT32_OES_to_default(GLenum type)547 LoadImageFunctionInfo DEPTH_COMPONENT32_OES_to_default(GLenum type)
548 {
549     switch (type)
550     {
551         case GL_UNSIGNED_INT:
552             return LoadImageFunctionInfo(LoadR32ToR24G8, true);
553         default:
554             UNREACHABLE();
555             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
556     }
557 }
558 
ETC1_RGB8_LOSSY_DECODE_ANGLE_to_BC1_RGB_UNORM_BLOCK(GLenum type)559 LoadImageFunctionInfo ETC1_RGB8_LOSSY_DECODE_ANGLE_to_BC1_RGB_UNORM_BLOCK(GLenum type)
560 {
561     switch (type)
562     {
563         case GL_UNSIGNED_BYTE:
564             return LoadImageFunctionInfo(LoadETC1RGB8ToBC1, true);
565         default:
566             UNREACHABLE();
567             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
568     }
569 }
570 
ETC1_RGB8_OES_to_R8G8B8A8_UNORM(GLenum type)571 LoadImageFunctionInfo ETC1_RGB8_OES_to_R8G8B8A8_UNORM(GLenum type)
572 {
573     switch (type)
574     {
575         case GL_UNSIGNED_BYTE:
576             return LoadImageFunctionInfo(LoadETC1RGB8ToRGBA8, true);
577         default:
578             UNREACHABLE();
579             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
580     }
581 }
582 
LUMINANCE_to_R16G16B16A16_FLOAT(GLenum type)583 LoadImageFunctionInfo LUMINANCE_to_R16G16B16A16_FLOAT(GLenum type)
584 {
585     switch (type)
586     {
587         case GL_HALF_FLOAT:
588             return LoadImageFunctionInfo(LoadL16FToRGBA16F, true);
589         case GL_HALF_FLOAT_OES:
590             return LoadImageFunctionInfo(LoadL16FToRGBA16F, true);
591         case GL_UNSIGNED_BYTE:
592             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
593         default:
594             UNREACHABLE();
595             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
596     }
597 }
598 
LUMINANCE_to_R32G32B32A32_FLOAT(GLenum type)599 LoadImageFunctionInfo LUMINANCE_to_R32G32B32A32_FLOAT(GLenum type)
600 {
601     switch (type)
602     {
603         case GL_FLOAT:
604             return LoadImageFunctionInfo(LoadL32FToRGBA32F, true);
605         case GL_UNSIGNED_BYTE:
606             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
607         default:
608             UNREACHABLE();
609             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
610     }
611 }
612 
LUMINANCE_to_default(GLenum type)613 LoadImageFunctionInfo LUMINANCE_to_default(GLenum type)
614 {
615     switch (type)
616     {
617         case GL_UNSIGNED_BYTE:
618             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
619         default:
620             UNREACHABLE();
621             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
622     }
623 }
624 
LUMINANCE16F_EXT_to_default(GLenum type)625 LoadImageFunctionInfo LUMINANCE16F_EXT_to_default(GLenum type)
626 {
627     switch (type)
628     {
629         case GL_HALF_FLOAT:
630             return LoadImageFunctionInfo(LoadL16FToRGBA16F, true);
631         case GL_HALF_FLOAT_OES:
632             return LoadImageFunctionInfo(LoadL16FToRGBA16F, true);
633         default:
634             UNREACHABLE();
635             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
636     }
637 }
638 
LUMINANCE32F_EXT_to_default(GLenum type)639 LoadImageFunctionInfo LUMINANCE32F_EXT_to_default(GLenum type)
640 {
641     switch (type)
642     {
643         case GL_FLOAT:
644             return LoadImageFunctionInfo(LoadL32FToRGBA32F, true);
645         default:
646             UNREACHABLE();
647             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
648     }
649 }
650 
LUMINANCE8_ALPHA8_EXT_to_default(GLenum type)651 LoadImageFunctionInfo LUMINANCE8_ALPHA8_EXT_to_default(GLenum type)
652 {
653     switch (type)
654     {
655         case GL_UNSIGNED_BYTE:
656             return LoadImageFunctionInfo(LoadLA8ToRGBA8, true);
657         default:
658             UNREACHABLE();
659             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
660     }
661 }
662 
LUMINANCE8_EXT_to_default(GLenum type)663 LoadImageFunctionInfo LUMINANCE8_EXT_to_default(GLenum type)
664 {
665     switch (type)
666     {
667         case GL_UNSIGNED_BYTE:
668             return LoadImageFunctionInfo(LoadL8ToRGBA8, true);
669         default:
670             UNREACHABLE();
671             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
672     }
673 }
674 
LUMINANCE_ALPHA_to_R16G16B16A16_FLOAT(GLenum type)675 LoadImageFunctionInfo LUMINANCE_ALPHA_to_R16G16B16A16_FLOAT(GLenum type)
676 {
677     switch (type)
678     {
679         case GL_HALF_FLOAT:
680             return LoadImageFunctionInfo(LoadLA16FToRGBA16F, true);
681         case GL_HALF_FLOAT_OES:
682             return LoadImageFunctionInfo(LoadLA16FToRGBA16F, true);
683         case GL_UNSIGNED_BYTE:
684             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
685         default:
686             UNREACHABLE();
687             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
688     }
689 }
690 
LUMINANCE_ALPHA_to_R32G32B32A32_FLOAT(GLenum type)691 LoadImageFunctionInfo LUMINANCE_ALPHA_to_R32G32B32A32_FLOAT(GLenum type)
692 {
693     switch (type)
694     {
695         case GL_FLOAT:
696             return LoadImageFunctionInfo(LoadLA32FToRGBA32F, true);
697         case GL_UNSIGNED_BYTE:
698             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
699         default:
700             UNREACHABLE();
701             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
702     }
703 }
704 
LUMINANCE_ALPHA_to_default(GLenum type)705 LoadImageFunctionInfo LUMINANCE_ALPHA_to_default(GLenum type)
706 {
707     switch (type)
708     {
709         case GL_UNSIGNED_BYTE:
710             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
711         default:
712             UNREACHABLE();
713             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
714     }
715 }
716 
LUMINANCE_ALPHA16F_EXT_to_default(GLenum type)717 LoadImageFunctionInfo LUMINANCE_ALPHA16F_EXT_to_default(GLenum type)
718 {
719     switch (type)
720     {
721         case GL_HALF_FLOAT:
722             return LoadImageFunctionInfo(LoadLA16FToRGBA16F, true);
723         case GL_HALF_FLOAT_OES:
724             return LoadImageFunctionInfo(LoadLA16FToRGBA16F, true);
725         default:
726             UNREACHABLE();
727             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
728     }
729 }
730 
LUMINANCE_ALPHA32F_EXT_to_default(GLenum type)731 LoadImageFunctionInfo LUMINANCE_ALPHA32F_EXT_to_default(GLenum type)
732 {
733     switch (type)
734     {
735         case GL_FLOAT:
736             return LoadImageFunctionInfo(LoadLA32FToRGBA32F, true);
737         default:
738             UNREACHABLE();
739             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
740     }
741 }
742 
R11F_G11F_B10F_to_R11G11B10_FLOAT(GLenum type)743 LoadImageFunctionInfo R11F_G11F_B10F_to_R11G11B10_FLOAT(GLenum type)
744 {
745     switch (type)
746     {
747         case GL_FLOAT:
748             return LoadImageFunctionInfo(LoadRGB32FToRG11B10F, true);
749         case GL_HALF_FLOAT:
750             return LoadImageFunctionInfo(LoadRGB16FToRG11B10F, true);
751         case GL_HALF_FLOAT_OES:
752             return LoadImageFunctionInfo(LoadRGB16FToRG11B10F, true);
753         case GL_UNSIGNED_INT_10F_11F_11F_REV:
754             return LoadImageFunctionInfo(LoadToNative<GLuint, 1>, false);
755         default:
756             UNREACHABLE();
757             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
758     }
759 }
760 
R16F_to_R16_FLOAT(GLenum type)761 LoadImageFunctionInfo R16F_to_R16_FLOAT(GLenum type)
762 {
763     switch (type)
764     {
765         case GL_FLOAT:
766             return LoadImageFunctionInfo(Load32FTo16F<1>, true);
767         case GL_HALF_FLOAT:
768             return LoadImageFunctionInfo(LoadToNative<GLhalf, 1>, false);
769         case GL_HALF_FLOAT_OES:
770             return LoadImageFunctionInfo(LoadToNative<GLhalf, 1>, false);
771         default:
772             UNREACHABLE();
773             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
774     }
775 }
776 
R16I_to_R16_SINT(GLenum type)777 LoadImageFunctionInfo R16I_to_R16_SINT(GLenum type)
778 {
779     switch (type)
780     {
781         case GL_SHORT:
782             return LoadImageFunctionInfo(LoadToNative<GLshort, 1>, false);
783         default:
784             UNREACHABLE();
785             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
786     }
787 }
788 
R16UI_to_R16_UINT(GLenum type)789 LoadImageFunctionInfo R16UI_to_R16_UINT(GLenum type)
790 {
791     switch (type)
792     {
793         case GL_UNSIGNED_SHORT:
794             return LoadImageFunctionInfo(LoadToNative<GLushort, 1>, false);
795         default:
796             UNREACHABLE();
797             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
798     }
799 }
800 
R16_EXT_to_R16_UNORM(GLenum type)801 LoadImageFunctionInfo R16_EXT_to_R16_UNORM(GLenum type)
802 {
803     switch (type)
804     {
805         case GL_UNSIGNED_SHORT:
806             return LoadImageFunctionInfo(LoadToNative<GLushort, 1>, false);
807         default:
808             UNREACHABLE();
809             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
810     }
811 }
812 
R16_SNORM_EXT_to_R16_SNORM(GLenum type)813 LoadImageFunctionInfo R16_SNORM_EXT_to_R16_SNORM(GLenum type)
814 {
815     switch (type)
816     {
817         case GL_SHORT:
818             return LoadImageFunctionInfo(LoadToNative<GLushort, 1>, false);
819         default:
820             UNREACHABLE();
821             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
822     }
823 }
824 
R32F_to_R32_FLOAT(GLenum type)825 LoadImageFunctionInfo R32F_to_R32_FLOAT(GLenum type)
826 {
827     switch (type)
828     {
829         case GL_FLOAT:
830             return LoadImageFunctionInfo(LoadToNative<GLfloat, 1>, false);
831         default:
832             UNREACHABLE();
833             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
834     }
835 }
836 
R32I_to_R32_SINT(GLenum type)837 LoadImageFunctionInfo R32I_to_R32_SINT(GLenum type)
838 {
839     switch (type)
840     {
841         case GL_INT:
842             return LoadImageFunctionInfo(LoadToNative<GLint, 1>, false);
843         default:
844             UNREACHABLE();
845             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
846     }
847 }
848 
R32UI_to_R32_UINT(GLenum type)849 LoadImageFunctionInfo R32UI_to_R32_UINT(GLenum type)
850 {
851     switch (type)
852     {
853         case GL_UNSIGNED_INT:
854             return LoadImageFunctionInfo(LoadToNative<GLuint, 1>, false);
855         default:
856             UNREACHABLE();
857             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
858     }
859 }
860 
R8_to_R8_UNORM(GLenum type)861 LoadImageFunctionInfo R8_to_R8_UNORM(GLenum type)
862 {
863     switch (type)
864     {
865         case GL_UNSIGNED_BYTE:
866             return LoadImageFunctionInfo(LoadToNative<GLubyte, 1>, false);
867         default:
868             UNREACHABLE();
869             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
870     }
871 }
872 
R8I_to_R8_SINT(GLenum type)873 LoadImageFunctionInfo R8I_to_R8_SINT(GLenum type)
874 {
875     switch (type)
876     {
877         case GL_BYTE:
878             return LoadImageFunctionInfo(LoadToNative<GLbyte, 1>, false);
879         default:
880             UNREACHABLE();
881             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
882     }
883 }
884 
R8UI_to_R8_UINT(GLenum type)885 LoadImageFunctionInfo R8UI_to_R8_UINT(GLenum type)
886 {
887     switch (type)
888     {
889         case GL_UNSIGNED_BYTE:
890             return LoadImageFunctionInfo(LoadToNative<GLubyte, 1>, false);
891         default:
892             UNREACHABLE();
893             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
894     }
895 }
896 
R8_SNORM_to_R8_SNORM(GLenum type)897 LoadImageFunctionInfo R8_SNORM_to_R8_SNORM(GLenum type)
898 {
899     switch (type)
900     {
901         case GL_BYTE:
902             return LoadImageFunctionInfo(LoadToNative<GLbyte, 1>, false);
903         default:
904             UNREACHABLE();
905             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
906     }
907 }
908 
RG16F_to_R16G16_FLOAT(GLenum type)909 LoadImageFunctionInfo RG16F_to_R16G16_FLOAT(GLenum type)
910 {
911     switch (type)
912     {
913         case GL_FLOAT:
914             return LoadImageFunctionInfo(Load32FTo16F<2>, true);
915         case GL_HALF_FLOAT:
916             return LoadImageFunctionInfo(LoadToNative<GLhalf, 2>, false);
917         case GL_HALF_FLOAT_OES:
918             return LoadImageFunctionInfo(LoadToNative<GLhalf, 2>, false);
919         default:
920             UNREACHABLE();
921             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
922     }
923 }
924 
RG16I_to_R16G16_SINT(GLenum type)925 LoadImageFunctionInfo RG16I_to_R16G16_SINT(GLenum type)
926 {
927     switch (type)
928     {
929         case GL_SHORT:
930             return LoadImageFunctionInfo(LoadToNative<GLshort, 2>, false);
931         default:
932             UNREACHABLE();
933             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
934     }
935 }
936 
RG16UI_to_R16G16_UINT(GLenum type)937 LoadImageFunctionInfo RG16UI_to_R16G16_UINT(GLenum type)
938 {
939     switch (type)
940     {
941         case GL_UNSIGNED_SHORT:
942             return LoadImageFunctionInfo(LoadToNative<GLushort, 2>, false);
943         default:
944             UNREACHABLE();
945             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
946     }
947 }
948 
RG16_EXT_to_R16G16_UNORM(GLenum type)949 LoadImageFunctionInfo RG16_EXT_to_R16G16_UNORM(GLenum type)
950 {
951     switch (type)
952     {
953         case GL_UNSIGNED_SHORT:
954             return LoadImageFunctionInfo(LoadToNative<GLushort, 2>, false);
955         default:
956             UNREACHABLE();
957             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
958     }
959 }
960 
RG16_SNORM_EXT_to_R16G16_SNORM(GLenum type)961 LoadImageFunctionInfo RG16_SNORM_EXT_to_R16G16_SNORM(GLenum type)
962 {
963     switch (type)
964     {
965         case GL_SHORT:
966             return LoadImageFunctionInfo(LoadToNative<GLushort, 2>, false);
967         default:
968             UNREACHABLE();
969             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
970     }
971 }
972 
RG32F_to_R32G32_FLOAT(GLenum type)973 LoadImageFunctionInfo RG32F_to_R32G32_FLOAT(GLenum type)
974 {
975     switch (type)
976     {
977         case GL_FLOAT:
978             return LoadImageFunctionInfo(LoadToNative<GLfloat, 2>, false);
979         default:
980             UNREACHABLE();
981             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
982     }
983 }
984 
RG32I_to_R32G32_SINT(GLenum type)985 LoadImageFunctionInfo RG32I_to_R32G32_SINT(GLenum type)
986 {
987     switch (type)
988     {
989         case GL_INT:
990             return LoadImageFunctionInfo(LoadToNative<GLint, 2>, false);
991         default:
992             UNREACHABLE();
993             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
994     }
995 }
996 
RG32UI_to_R32G32_UINT(GLenum type)997 LoadImageFunctionInfo RG32UI_to_R32G32_UINT(GLenum type)
998 {
999     switch (type)
1000     {
1001         case GL_UNSIGNED_INT:
1002             return LoadImageFunctionInfo(LoadToNative<GLuint, 2>, false);
1003         default:
1004             UNREACHABLE();
1005             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1006     }
1007 }
1008 
RG8_to_R8G8_UNORM(GLenum type)1009 LoadImageFunctionInfo RG8_to_R8G8_UNORM(GLenum type)
1010 {
1011     switch (type)
1012     {
1013         case GL_UNSIGNED_BYTE:
1014             return LoadImageFunctionInfo(LoadToNative<GLubyte, 2>, false);
1015         default:
1016             UNREACHABLE();
1017             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1018     }
1019 }
1020 
RG8I_to_R8G8_SINT(GLenum type)1021 LoadImageFunctionInfo RG8I_to_R8G8_SINT(GLenum type)
1022 {
1023     switch (type)
1024     {
1025         case GL_BYTE:
1026             return LoadImageFunctionInfo(LoadToNative<GLbyte, 2>, false);
1027         default:
1028             UNREACHABLE();
1029             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1030     }
1031 }
1032 
RG8UI_to_R8G8_UINT(GLenum type)1033 LoadImageFunctionInfo RG8UI_to_R8G8_UINT(GLenum type)
1034 {
1035     switch (type)
1036     {
1037         case GL_UNSIGNED_BYTE:
1038             return LoadImageFunctionInfo(LoadToNative<GLubyte, 2>, false);
1039         default:
1040             UNREACHABLE();
1041             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1042     }
1043 }
1044 
RG8_SNORM_to_R8G8_SNORM(GLenum type)1045 LoadImageFunctionInfo RG8_SNORM_to_R8G8_SNORM(GLenum type)
1046 {
1047     switch (type)
1048     {
1049         case GL_BYTE:
1050             return LoadImageFunctionInfo(LoadToNative<GLbyte, 2>, false);
1051         default:
1052             UNREACHABLE();
1053             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1054     }
1055 }
1056 
RGB_to_default(GLenum type)1057 LoadImageFunctionInfo RGB_to_default(GLenum type)
1058 {
1059     switch (type)
1060     {
1061         case GL_UNSIGNED_BYTE:
1062             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1063         case GL_UNSIGNED_SHORT_5_6_5:
1064             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1065         default:
1066             UNREACHABLE();
1067             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1068     }
1069 }
1070 
RGB10_A2_to_R10G10B10A2_UNORM(GLenum type)1071 LoadImageFunctionInfo RGB10_A2_to_R10G10B10A2_UNORM(GLenum type)
1072 {
1073     switch (type)
1074     {
1075         case GL_UNSIGNED_INT_2_10_10_10_REV:
1076             return LoadImageFunctionInfo(LoadToNative<GLuint, 1>, false);
1077         default:
1078             UNREACHABLE();
1079             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1080     }
1081 }
1082 
RGB10_A2UI_to_R10G10B10A2_UINT(GLenum type)1083 LoadImageFunctionInfo RGB10_A2UI_to_R10G10B10A2_UINT(GLenum type)
1084 {
1085     switch (type)
1086     {
1087         case GL_UNSIGNED_INT_2_10_10_10_REV:
1088             return LoadImageFunctionInfo(LoadToNative<GLuint, 1>, false);
1089         default:
1090             UNREACHABLE();
1091             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1092     }
1093 }
1094 
RGB16F_to_R16G16B16A16_FLOAT(GLenum type)1095 LoadImageFunctionInfo RGB16F_to_R16G16B16A16_FLOAT(GLenum type)
1096 {
1097     switch (type)
1098     {
1099         case GL_FLOAT:
1100             return LoadImageFunctionInfo(LoadRGB32FToRGBA16F, true);
1101         case GL_HALF_FLOAT:
1102             return LoadImageFunctionInfo(LoadToNative3To4<GLhalf, gl::Float16One>, true);
1103         case GL_HALF_FLOAT_OES:
1104             return LoadImageFunctionInfo(LoadToNative3To4<GLhalf, gl::Float16One>, true);
1105         default:
1106             UNREACHABLE();
1107             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1108     }
1109 }
1110 
RGB16I_to_R16G16B16A16_SINT(GLenum type)1111 LoadImageFunctionInfo RGB16I_to_R16G16B16A16_SINT(GLenum type)
1112 {
1113     switch (type)
1114     {
1115         case GL_SHORT:
1116             return LoadImageFunctionInfo(LoadToNative3To4<GLshort, 0x0001>, true);
1117         default:
1118             UNREACHABLE();
1119             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1120     }
1121 }
1122 
RGB16UI_to_R16G16B16A16_UINT(GLenum type)1123 LoadImageFunctionInfo RGB16UI_to_R16G16B16A16_UINT(GLenum type)
1124 {
1125     switch (type)
1126     {
1127         case GL_UNSIGNED_SHORT:
1128             return LoadImageFunctionInfo(LoadToNative3To4<GLushort, 0x0001>, true);
1129         default:
1130             UNREACHABLE();
1131             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1132     }
1133 }
1134 
RGB16_EXT_to_R16G16B16A16_UNORM(GLenum type)1135 LoadImageFunctionInfo RGB16_EXT_to_R16G16B16A16_UNORM(GLenum type)
1136 {
1137     switch (type)
1138     {
1139         case GL_UNSIGNED_SHORT:
1140             return LoadImageFunctionInfo(LoadToNative3To4<GLushort, 0xFFFF>, true);
1141         default:
1142             UNREACHABLE();
1143             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1144     }
1145 }
1146 
RGB16_SNORM_EXT_to_R16G16B16A16_SNORM(GLenum type)1147 LoadImageFunctionInfo RGB16_SNORM_EXT_to_R16G16B16A16_SNORM(GLenum type)
1148 {
1149     switch (type)
1150     {
1151         case GL_SHORT:
1152             return LoadImageFunctionInfo(LoadToNative3To4<GLushort, 0x7FFF>, true);
1153         default:
1154             UNREACHABLE();
1155             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1156     }
1157 }
1158 
RGB32F_to_R32G32B32A32_FLOAT(GLenum type)1159 LoadImageFunctionInfo RGB32F_to_R32G32B32A32_FLOAT(GLenum type)
1160 {
1161     switch (type)
1162     {
1163         case GL_FLOAT:
1164             return LoadImageFunctionInfo(LoadToNative3To4<GLfloat, gl::Float32One>, true);
1165         default:
1166             UNREACHABLE();
1167             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1168     }
1169 }
1170 
RGB32I_to_R32G32B32A32_SINT(GLenum type)1171 LoadImageFunctionInfo RGB32I_to_R32G32B32A32_SINT(GLenum type)
1172 {
1173     switch (type)
1174     {
1175         case GL_INT:
1176             return LoadImageFunctionInfo(LoadToNative3To4<GLint, 0x00000001>, true);
1177         default:
1178             UNREACHABLE();
1179             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1180     }
1181 }
1182 
RGB32UI_to_R32G32B32A32_UINT(GLenum type)1183 LoadImageFunctionInfo RGB32UI_to_R32G32B32A32_UINT(GLenum type)
1184 {
1185     switch (type)
1186     {
1187         case GL_UNSIGNED_INT:
1188             return LoadImageFunctionInfo(LoadToNative3To4<GLuint, 0x00000001>, true);
1189         default:
1190             UNREACHABLE();
1191             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1192     }
1193 }
1194 
RGB565_to_B5G6R5_UNORM(GLenum type)1195 LoadImageFunctionInfo RGB565_to_B5G6R5_UNORM(GLenum type)
1196 {
1197     switch (type)
1198     {
1199         case GL_UNSIGNED_BYTE:
1200             return LoadImageFunctionInfo(LoadRGB8ToBGR565, true);
1201         case GL_UNSIGNED_SHORT_5_6_5:
1202             return LoadImageFunctionInfo(LoadToNative<GLushort, 1>, false);
1203         default:
1204             UNREACHABLE();
1205             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1206     }
1207 }
1208 
RGB565_to_R8G8B8A8_UNORM(GLenum type)1209 LoadImageFunctionInfo RGB565_to_R8G8B8A8_UNORM(GLenum type)
1210 {
1211     switch (type)
1212     {
1213         case GL_UNSIGNED_BYTE:
1214             return LoadImageFunctionInfo(LoadToNative3To4<GLubyte, 0xFF>, true);
1215         case GL_UNSIGNED_SHORT_5_6_5:
1216             return LoadImageFunctionInfo(LoadR5G6B5ToRGBA8, true);
1217         default:
1218             UNREACHABLE();
1219             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1220     }
1221 }
1222 
RGB5_A1_to_B5G5R5A1_UNORM(GLenum type)1223 LoadImageFunctionInfo RGB5_A1_to_B5G5R5A1_UNORM(GLenum type)
1224 {
1225     switch (type)
1226     {
1227         case GL_UNSIGNED_BYTE:
1228             return LoadImageFunctionInfo(LoadRGBA8ToBGR5A1, true);
1229         case GL_UNSIGNED_INT_2_10_10_10_REV:
1230             return LoadImageFunctionInfo(LoadRGB10A2ToBGR5A1, true);
1231         case GL_UNSIGNED_SHORT_5_5_5_1:
1232             return LoadImageFunctionInfo(LoadRGB5A1ToA1RGB5, true);
1233         default:
1234             UNREACHABLE();
1235             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1236     }
1237 }
1238 
RGB5_A1_to_R8G8B8A8_UNORM(GLenum type)1239 LoadImageFunctionInfo RGB5_A1_to_R8G8B8A8_UNORM(GLenum type)
1240 {
1241     switch (type)
1242     {
1243         case GL_UNSIGNED_BYTE:
1244             return LoadImageFunctionInfo(LoadToNative<GLubyte, 4>, false);
1245         case GL_UNSIGNED_INT_2_10_10_10_REV:
1246             return LoadImageFunctionInfo(LoadRGB10A2ToRGBA8, true);
1247         case GL_UNSIGNED_SHORT_5_5_5_1:
1248             return LoadImageFunctionInfo(LoadRGB5A1ToRGBA8, true);
1249         default:
1250             UNREACHABLE();
1251             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1252     }
1253 }
1254 
RGB8_to_R8G8B8A8_UNORM(GLenum type)1255 LoadImageFunctionInfo RGB8_to_R8G8B8A8_UNORM(GLenum type)
1256 {
1257     switch (type)
1258     {
1259         case GL_UNSIGNED_BYTE:
1260             return LoadImageFunctionInfo(LoadToNative3To4<GLubyte, 0xFF>, true);
1261         default:
1262             UNREACHABLE();
1263             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1264     }
1265 }
1266 
RGB8I_to_R8G8B8A8_SINT(GLenum type)1267 LoadImageFunctionInfo RGB8I_to_R8G8B8A8_SINT(GLenum type)
1268 {
1269     switch (type)
1270     {
1271         case GL_BYTE:
1272             return LoadImageFunctionInfo(LoadToNative3To4<GLbyte, 0x01>, true);
1273         default:
1274             UNREACHABLE();
1275             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1276     }
1277 }
1278 
RGB8UI_to_R8G8B8A8_UINT(GLenum type)1279 LoadImageFunctionInfo RGB8UI_to_R8G8B8A8_UINT(GLenum type)
1280 {
1281     switch (type)
1282     {
1283         case GL_UNSIGNED_BYTE:
1284             return LoadImageFunctionInfo(LoadToNative3To4<GLubyte, 0x01>, true);
1285         default:
1286             UNREACHABLE();
1287             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1288     }
1289 }
1290 
RGB8_SNORM_to_R8G8B8A8_SNORM(GLenum type)1291 LoadImageFunctionInfo RGB8_SNORM_to_R8G8B8A8_SNORM(GLenum type)
1292 {
1293     switch (type)
1294     {
1295         case GL_BYTE:
1296             return LoadImageFunctionInfo(LoadToNative3To4<GLbyte, 0x7F>, true);
1297         default:
1298             UNREACHABLE();
1299             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1300     }
1301 }
1302 
RGB9_E5_to_R9G9B9E5_SHAREDEXP(GLenum type)1303 LoadImageFunctionInfo RGB9_E5_to_R9G9B9E5_SHAREDEXP(GLenum type)
1304 {
1305     switch (type)
1306     {
1307         case GL_FLOAT:
1308             return LoadImageFunctionInfo(LoadRGB32FToRGB9E5, true);
1309         case GL_HALF_FLOAT:
1310             return LoadImageFunctionInfo(LoadRGB16FToRGB9E5, true);
1311         case GL_HALF_FLOAT_OES:
1312             return LoadImageFunctionInfo(LoadRGB16FToRGB9E5, true);
1313         case GL_UNSIGNED_INT_5_9_9_9_REV:
1314             return LoadImageFunctionInfo(LoadToNative<GLuint, 1>, false);
1315         default:
1316             UNREACHABLE();
1317             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1318     }
1319 }
1320 
RGBA_to_default(GLenum type)1321 LoadImageFunctionInfo RGBA_to_default(GLenum type)
1322 {
1323     switch (type)
1324     {
1325         case GL_UNSIGNED_BYTE:
1326             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1327         case GL_UNSIGNED_SHORT_4_4_4_4:
1328             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1329         case GL_UNSIGNED_SHORT_5_5_5_1:
1330             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1331         default:
1332             UNREACHABLE();
1333             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1334     }
1335 }
1336 
RGBA16F_to_R16G16B16A16_FLOAT(GLenum type)1337 LoadImageFunctionInfo RGBA16F_to_R16G16B16A16_FLOAT(GLenum type)
1338 {
1339     switch (type)
1340     {
1341         case GL_FLOAT:
1342             return LoadImageFunctionInfo(Load32FTo16F<4>, true);
1343         case GL_HALF_FLOAT:
1344             return LoadImageFunctionInfo(LoadToNative<GLhalf, 4>, false);
1345         case GL_HALF_FLOAT_OES:
1346             return LoadImageFunctionInfo(LoadToNative<GLhalf, 4>, false);
1347         default:
1348             UNREACHABLE();
1349             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1350     }
1351 }
1352 
RGBA16I_to_R16G16B16A16_SINT(GLenum type)1353 LoadImageFunctionInfo RGBA16I_to_R16G16B16A16_SINT(GLenum type)
1354 {
1355     switch (type)
1356     {
1357         case GL_SHORT:
1358             return LoadImageFunctionInfo(LoadToNative<GLshort, 4>, false);
1359         default:
1360             UNREACHABLE();
1361             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1362     }
1363 }
1364 
RGBA16UI_to_R16G16B16A16_UINT(GLenum type)1365 LoadImageFunctionInfo RGBA16UI_to_R16G16B16A16_UINT(GLenum type)
1366 {
1367     switch (type)
1368     {
1369         case GL_UNSIGNED_SHORT:
1370             return LoadImageFunctionInfo(LoadToNative<GLushort, 4>, false);
1371         default:
1372             UNREACHABLE();
1373             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1374     }
1375 }
1376 
RGBA16_EXT_to_R16G16B16A16_UNORM(GLenum type)1377 LoadImageFunctionInfo RGBA16_EXT_to_R16G16B16A16_UNORM(GLenum type)
1378 {
1379     switch (type)
1380     {
1381         case GL_UNSIGNED_SHORT:
1382             return LoadImageFunctionInfo(LoadToNative<GLushort, 4>, false);
1383         default:
1384             UNREACHABLE();
1385             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1386     }
1387 }
1388 
RGBA16_SNORM_EXT_to_R16G16B16A16_SNORM(GLenum type)1389 LoadImageFunctionInfo RGBA16_SNORM_EXT_to_R16G16B16A16_SNORM(GLenum type)
1390 {
1391     switch (type)
1392     {
1393         case GL_SHORT:
1394             return LoadImageFunctionInfo(LoadToNative<GLushort, 4>, false);
1395         default:
1396             UNREACHABLE();
1397             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1398     }
1399 }
1400 
RGBA32F_to_R32G32B32A32_FLOAT(GLenum type)1401 LoadImageFunctionInfo RGBA32F_to_R32G32B32A32_FLOAT(GLenum type)
1402 {
1403     switch (type)
1404     {
1405         case GL_FLOAT:
1406             return LoadImageFunctionInfo(LoadToNative<GLfloat, 4>, false);
1407         default:
1408             UNREACHABLE();
1409             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1410     }
1411 }
1412 
RGBA32I_to_R32G32B32A32_SINT(GLenum type)1413 LoadImageFunctionInfo RGBA32I_to_R32G32B32A32_SINT(GLenum type)
1414 {
1415     switch (type)
1416     {
1417         case GL_INT:
1418             return LoadImageFunctionInfo(LoadToNative<GLint, 4>, false);
1419         default:
1420             UNREACHABLE();
1421             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1422     }
1423 }
1424 
RGBA32UI_to_R32G32B32A32_UINT(GLenum type)1425 LoadImageFunctionInfo RGBA32UI_to_R32G32B32A32_UINT(GLenum type)
1426 {
1427     switch (type)
1428     {
1429         case GL_UNSIGNED_INT:
1430             return LoadImageFunctionInfo(LoadToNative<GLuint, 4>, false);
1431         default:
1432             UNREACHABLE();
1433             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1434     }
1435 }
1436 
RGBA4_to_B4G4R4A4_UNORM(GLenum type)1437 LoadImageFunctionInfo RGBA4_to_B4G4R4A4_UNORM(GLenum type)
1438 {
1439     switch (type)
1440     {
1441         case GL_UNSIGNED_BYTE:
1442             return LoadImageFunctionInfo(LoadRGBA8ToBGRA4, true);
1443         case GL_UNSIGNED_SHORT_4_4_4_4:
1444             return LoadImageFunctionInfo(LoadRGBA4ToARGB4, true);
1445         default:
1446             UNREACHABLE();
1447             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1448     }
1449 }
1450 
RGBA4_to_R8G8B8A8_UNORM(GLenum type)1451 LoadImageFunctionInfo RGBA4_to_R8G8B8A8_UNORM(GLenum type)
1452 {
1453     switch (type)
1454     {
1455         case GL_UNSIGNED_BYTE:
1456             return LoadImageFunctionInfo(LoadToNative<GLubyte, 4>, false);
1457         case GL_UNSIGNED_SHORT_4_4_4_4:
1458             return LoadImageFunctionInfo(LoadRGBA4ToRGBA8, true);
1459         default:
1460             UNREACHABLE();
1461             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1462     }
1463 }
1464 
RGBA8_to_R8G8B8A8_UNORM(GLenum type)1465 LoadImageFunctionInfo RGBA8_to_R8G8B8A8_UNORM(GLenum type)
1466 {
1467     switch (type)
1468     {
1469         case GL_UNSIGNED_BYTE:
1470             return LoadImageFunctionInfo(LoadToNative<GLubyte, 4>, false);
1471         default:
1472             UNREACHABLE();
1473             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1474     }
1475 }
1476 
RGBA8I_to_R8G8B8A8_SINT(GLenum type)1477 LoadImageFunctionInfo RGBA8I_to_R8G8B8A8_SINT(GLenum type)
1478 {
1479     switch (type)
1480     {
1481         case GL_BYTE:
1482             return LoadImageFunctionInfo(LoadToNative<GLbyte, 4>, false);
1483         default:
1484             UNREACHABLE();
1485             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1486     }
1487 }
1488 
RGBA8UI_to_R8G8B8A8_UINT(GLenum type)1489 LoadImageFunctionInfo RGBA8UI_to_R8G8B8A8_UINT(GLenum type)
1490 {
1491     switch (type)
1492     {
1493         case GL_UNSIGNED_BYTE:
1494             return LoadImageFunctionInfo(LoadToNative<GLubyte, 4>, false);
1495         default:
1496             UNREACHABLE();
1497             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1498     }
1499 }
1500 
RGBA8_SNORM_to_R8G8B8A8_SNORM(GLenum type)1501 LoadImageFunctionInfo RGBA8_SNORM_to_R8G8B8A8_SNORM(GLenum type)
1502 {
1503     switch (type)
1504     {
1505         case GL_BYTE:
1506             return LoadImageFunctionInfo(LoadToNative<GLbyte, 4>, false);
1507         default:
1508             UNREACHABLE();
1509             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1510     }
1511 }
1512 
SRGB8_to_R8G8B8A8_UNORM_SRGB(GLenum type)1513 LoadImageFunctionInfo SRGB8_to_R8G8B8A8_UNORM_SRGB(GLenum type)
1514 {
1515     switch (type)
1516     {
1517         case GL_UNSIGNED_BYTE:
1518             return LoadImageFunctionInfo(LoadToNative3To4<GLubyte, 0xFF>, true);
1519         default:
1520             UNREACHABLE();
1521             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1522     }
1523 }
1524 
SRGB8_ALPHA8_to_R8G8B8A8_UNORM_SRGB(GLenum type)1525 LoadImageFunctionInfo SRGB8_ALPHA8_to_R8G8B8A8_UNORM_SRGB(GLenum type)
1526 {
1527     switch (type)
1528     {
1529         case GL_UNSIGNED_BYTE:
1530             return LoadImageFunctionInfo(LoadToNative<GLubyte, 4>, false);
1531         default:
1532             UNREACHABLE();
1533             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1534     }
1535 }
1536 
STENCIL_INDEX8_to_default(GLenum type)1537 LoadImageFunctionInfo STENCIL_INDEX8_to_default(GLenum type)
1538 {
1539     switch (type)
1540     {
1541         case GL_UNSIGNED_BYTE:
1542             return LoadImageFunctionInfo(UnimplementedLoadFunction, true);
1543         default:
1544             UNREACHABLE();
1545             return LoadImageFunctionInfo(UnreachableLoadFunction, true);
1546     }
1547 }
1548 
1549 }  // namespace
1550 
GetLoadFunctionsMap(GLenum internalFormat,Format::ID angleFormat)1551 LoadFunctionMap GetLoadFunctionsMap(GLenum internalFormat, Format::ID angleFormat)
1552 {
1553     // clang-format off
1554     switch (internalFormat)
1555     {
1556         case GL_ALPHA:
1557         {
1558             switch (angleFormat)
1559             {
1560                 case Format::ID::R16G16B16A16_FLOAT:
1561                     return ALPHA_to_R16G16B16A16_FLOAT;
1562                 case Format::ID::R32G32B32A32_FLOAT:
1563                     return ALPHA_to_R32G32B32A32_FLOAT;
1564                 default:
1565                     return ALPHA_to_default;
1566             }
1567         }
1568         case GL_ALPHA16F_EXT:
1569             return ALPHA16F_EXT_to_default;
1570         case GL_ALPHA32F_EXT:
1571             return ALPHA32F_EXT_to_default;
1572         case GL_ALPHA8_EXT:
1573         {
1574             switch (angleFormat)
1575             {
1576                 case Format::ID::A8_UNORM:
1577                     return ALPHA8_EXT_to_A8_UNORM;
1578                 case Format::ID::R8G8B8A8_UNORM:
1579                     return ALPHA8_EXT_to_R8G8B8A8_UNORM;
1580                 default:
1581                     break;
1582             }
1583         }
1584         case GL_BGR565_ANGLEX:
1585         {
1586             switch (angleFormat)
1587             {
1588                 case Format::ID::B5G6R5_UNORM:
1589                     return BGR565_ANGLEX_to_B5G6R5_UNORM;
1590                 default:
1591                     break;
1592             }
1593         }
1594         case GL_BGR5_A1_ANGLEX:
1595             return BGR5_A1_ANGLEX_to_default;
1596         case GL_BGRA4_ANGLEX:
1597             return BGRA4_ANGLEX_to_default;
1598         case GL_BGRA8_EXT:
1599             return BGRA8_EXT_to_default;
1600         case GL_BGRA_EXT:
1601             return BGRA_EXT_to_default;
1602         case GL_COMPRESSED_R11_EAC:
1603         {
1604             switch (angleFormat)
1605             {
1606                 case Format::ID::R8_UNORM:
1607                     return COMPRESSED_R11_EAC_to_R8_UNORM;
1608                 default:
1609                     break;
1610             }
1611         }
1612         case GL_COMPRESSED_RG11_EAC:
1613         {
1614             switch (angleFormat)
1615             {
1616                 case Format::ID::R8G8_UNORM:
1617                     return COMPRESSED_RG11_EAC_to_R8G8_UNORM;
1618                 default:
1619                     break;
1620             }
1621         }
1622         case GL_COMPRESSED_RGB8_ETC2:
1623         {
1624             switch (angleFormat)
1625             {
1626                 case Format::ID::R8G8B8A8_UNORM:
1627                     return COMPRESSED_RGB8_ETC2_to_R8G8B8A8_UNORM;
1628                 default:
1629                     break;
1630             }
1631         }
1632         case GL_COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE:
1633         {
1634             switch (angleFormat)
1635             {
1636                 case Format::ID::BC1_RGB_UNORM_BLOCK:
1637                     return COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGB_UNORM_BLOCK;
1638                 default:
1639                     break;
1640             }
1641         }
1642         case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
1643         {
1644             switch (angleFormat)
1645             {
1646                 case Format::ID::R8G8B8A8_UNORM:
1647                     return COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2_to_R8G8B8A8_UNORM;
1648                 default:
1649                     break;
1650             }
1651         }
1652         case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
1653         {
1654             switch (angleFormat)
1655             {
1656                 case Format::ID::BC1_RGBA_UNORM_BLOCK:
1657                     return COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGBA_UNORM_BLOCK;
1658                 default:
1659                     break;
1660             }
1661         }
1662         case GL_COMPRESSED_RGBA8_ETC2_EAC:
1663         {
1664             switch (angleFormat)
1665             {
1666                 case Format::ID::R8G8B8A8_UNORM:
1667                     return COMPRESSED_RGBA8_ETC2_EAC_to_R8G8B8A8_UNORM;
1668                 default:
1669                     break;
1670             }
1671         }
1672         case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
1673             return COMPRESSED_RGBA_S3TC_DXT1_EXT_to_default;
1674         case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
1675             return COMPRESSED_RGBA_S3TC_DXT3_ANGLE_to_default;
1676         case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
1677             return COMPRESSED_RGBA_S3TC_DXT5_ANGLE_to_default;
1678         case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
1679             return COMPRESSED_RGB_S3TC_DXT1_EXT_to_default;
1680         case GL_COMPRESSED_SIGNED_R11_EAC:
1681         {
1682             switch (angleFormat)
1683             {
1684                 case Format::ID::R8_SNORM:
1685                     return COMPRESSED_SIGNED_R11_EAC_to_R8_SNORM;
1686                 default:
1687                     break;
1688             }
1689         }
1690         case GL_COMPRESSED_SIGNED_RG11_EAC:
1691         {
1692             switch (angleFormat)
1693             {
1694                 case Format::ID::R8G8_SNORM:
1695                     return COMPRESSED_SIGNED_RG11_EAC_to_R8G8_SNORM;
1696                 default:
1697                     break;
1698             }
1699         }
1700         case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
1701         {
1702             switch (angleFormat)
1703             {
1704                 case Format::ID::R8G8B8A8_UNORM_SRGB:
1705                     return COMPRESSED_SRGB8_ALPHA8_ETC2_EAC_to_R8G8B8A8_UNORM_SRGB;
1706                 default:
1707                     break;
1708             }
1709         }
1710         case GL_COMPRESSED_SRGB8_ETC2:
1711         {
1712             switch (angleFormat)
1713             {
1714                 case Format::ID::R8G8B8A8_UNORM_SRGB:
1715                     return COMPRESSED_SRGB8_ETC2_to_R8G8B8A8_UNORM_SRGB;
1716                 default:
1717                     break;
1718             }
1719         }
1720         case GL_COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE:
1721         {
1722             switch (angleFormat)
1723             {
1724                 case Format::ID::BC1_RGB_UNORM_SRGB_BLOCK:
1725                     return COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGB_UNORM_SRGB_BLOCK;
1726                 default:
1727                     break;
1728             }
1729         }
1730         case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
1731         {
1732             switch (angleFormat)
1733             {
1734                 case Format::ID::R8G8B8A8_UNORM_SRGB:
1735                     return COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2_to_R8G8B8A8_UNORM_SRGB;
1736                 default:
1737                     break;
1738             }
1739         }
1740         case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE:
1741         {
1742             switch (angleFormat)
1743             {
1744                 case Format::ID::BC1_RGBA_UNORM_SRGB_BLOCK:
1745                     return COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE_to_BC1_RGBA_UNORM_SRGB_BLOCK;
1746                 default:
1747                     break;
1748             }
1749         }
1750         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
1751             return COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT_to_default;
1752         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
1753             return COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT_to_default;
1754         case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
1755             return COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT_to_default;
1756         case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
1757             return COMPRESSED_SRGB_S3TC_DXT1_EXT_to_default;
1758         case GL_DEPTH24_STENCIL8:
1759         {
1760             switch (angleFormat)
1761             {
1762                 case Format::ID::D24_UNORM_S8_UINT:
1763                     return DEPTH24_STENCIL8_to_D24_UNORM_S8_UINT;
1764                 default:
1765                     break;
1766             }
1767         }
1768         case GL_DEPTH32F_STENCIL8:
1769         {
1770             switch (angleFormat)
1771             {
1772                 case Format::ID::D32_FLOAT_S8X24_UINT:
1773                     return DEPTH32F_STENCIL8_to_D32_FLOAT_S8X24_UINT;
1774                 default:
1775                     break;
1776             }
1777         }
1778         case GL_DEPTH_COMPONENT16:
1779         {
1780             switch (angleFormat)
1781             {
1782                 case Format::ID::D16_UNORM:
1783                     return DEPTH_COMPONENT16_to_D16_UNORM;
1784                 default:
1785                     break;
1786             }
1787         }
1788         case GL_DEPTH_COMPONENT24:
1789         {
1790             switch (angleFormat)
1791             {
1792                 case Format::ID::D24_UNORM_S8_UINT:
1793                     return DEPTH_COMPONENT24_to_D24_UNORM_S8_UINT;
1794                 default:
1795                     break;
1796             }
1797         }
1798         case GL_DEPTH_COMPONENT32F:
1799         {
1800             switch (angleFormat)
1801             {
1802                 case Format::ID::D32_FLOAT:
1803                     return DEPTH_COMPONENT32F_to_D32_FLOAT;
1804                 default:
1805                     break;
1806             }
1807         }
1808         case GL_DEPTH_COMPONENT32_OES:
1809             return DEPTH_COMPONENT32_OES_to_default;
1810         case GL_ETC1_RGB8_LOSSY_DECODE_ANGLE:
1811         {
1812             switch (angleFormat)
1813             {
1814                 case Format::ID::BC1_RGB_UNORM_BLOCK:
1815                     return ETC1_RGB8_LOSSY_DECODE_ANGLE_to_BC1_RGB_UNORM_BLOCK;
1816                 default:
1817                     break;
1818             }
1819         }
1820         case GL_ETC1_RGB8_OES:
1821         {
1822             switch (angleFormat)
1823             {
1824                 case Format::ID::R8G8B8A8_UNORM:
1825                     return ETC1_RGB8_OES_to_R8G8B8A8_UNORM;
1826                 default:
1827                     break;
1828             }
1829         }
1830         case GL_LUMINANCE:
1831         {
1832             switch (angleFormat)
1833             {
1834                 case Format::ID::R16G16B16A16_FLOAT:
1835                     return LUMINANCE_to_R16G16B16A16_FLOAT;
1836                 case Format::ID::R32G32B32A32_FLOAT:
1837                     return LUMINANCE_to_R32G32B32A32_FLOAT;
1838                 default:
1839                     return LUMINANCE_to_default;
1840             }
1841         }
1842         case GL_LUMINANCE16F_EXT:
1843             return LUMINANCE16F_EXT_to_default;
1844         case GL_LUMINANCE32F_EXT:
1845             return LUMINANCE32F_EXT_to_default;
1846         case GL_LUMINANCE8_ALPHA8_EXT:
1847             return LUMINANCE8_ALPHA8_EXT_to_default;
1848         case GL_LUMINANCE8_EXT:
1849             return LUMINANCE8_EXT_to_default;
1850         case GL_LUMINANCE_ALPHA:
1851         {
1852             switch (angleFormat)
1853             {
1854                 case Format::ID::R16G16B16A16_FLOAT:
1855                     return LUMINANCE_ALPHA_to_R16G16B16A16_FLOAT;
1856                 case Format::ID::R32G32B32A32_FLOAT:
1857                     return LUMINANCE_ALPHA_to_R32G32B32A32_FLOAT;
1858                 default:
1859                     return LUMINANCE_ALPHA_to_default;
1860             }
1861         }
1862         case GL_LUMINANCE_ALPHA16F_EXT:
1863             return LUMINANCE_ALPHA16F_EXT_to_default;
1864         case GL_LUMINANCE_ALPHA32F_EXT:
1865             return LUMINANCE_ALPHA32F_EXT_to_default;
1866         case GL_R11F_G11F_B10F:
1867         {
1868             switch (angleFormat)
1869             {
1870                 case Format::ID::R11G11B10_FLOAT:
1871                     return R11F_G11F_B10F_to_R11G11B10_FLOAT;
1872                 default:
1873                     break;
1874             }
1875         }
1876         case GL_R16F:
1877         {
1878             switch (angleFormat)
1879             {
1880                 case Format::ID::R16_FLOAT:
1881                     return R16F_to_R16_FLOAT;
1882                 default:
1883                     break;
1884             }
1885         }
1886         case GL_R16I:
1887         {
1888             switch (angleFormat)
1889             {
1890                 case Format::ID::R16_SINT:
1891                     return R16I_to_R16_SINT;
1892                 default:
1893                     break;
1894             }
1895         }
1896         case GL_R16UI:
1897         {
1898             switch (angleFormat)
1899             {
1900                 case Format::ID::R16_UINT:
1901                     return R16UI_to_R16_UINT;
1902                 default:
1903                     break;
1904             }
1905         }
1906         case GL_R16_EXT:
1907         {
1908             switch (angleFormat)
1909             {
1910                 case Format::ID::R16_UNORM:
1911                     return R16_EXT_to_R16_UNORM;
1912                 default:
1913                     break;
1914             }
1915         }
1916         case GL_R16_SNORM_EXT:
1917         {
1918             switch (angleFormat)
1919             {
1920                 case Format::ID::R16_SNORM:
1921                     return R16_SNORM_EXT_to_R16_SNORM;
1922                 default:
1923                     break;
1924             }
1925         }
1926         case GL_R32F:
1927         {
1928             switch (angleFormat)
1929             {
1930                 case Format::ID::R32_FLOAT:
1931                     return R32F_to_R32_FLOAT;
1932                 default:
1933                     break;
1934             }
1935         }
1936         case GL_R32I:
1937         {
1938             switch (angleFormat)
1939             {
1940                 case Format::ID::R32_SINT:
1941                     return R32I_to_R32_SINT;
1942                 default:
1943                     break;
1944             }
1945         }
1946         case GL_R32UI:
1947         {
1948             switch (angleFormat)
1949             {
1950                 case Format::ID::R32_UINT:
1951                     return R32UI_to_R32_UINT;
1952                 default:
1953                     break;
1954             }
1955         }
1956         case GL_R8:
1957         {
1958             switch (angleFormat)
1959             {
1960                 case Format::ID::R8_UNORM:
1961                     return R8_to_R8_UNORM;
1962                 default:
1963                     break;
1964             }
1965         }
1966         case GL_R8I:
1967         {
1968             switch (angleFormat)
1969             {
1970                 case Format::ID::R8_SINT:
1971                     return R8I_to_R8_SINT;
1972                 default:
1973                     break;
1974             }
1975         }
1976         case GL_R8UI:
1977         {
1978             switch (angleFormat)
1979             {
1980                 case Format::ID::R8_UINT:
1981                     return R8UI_to_R8_UINT;
1982                 default:
1983                     break;
1984             }
1985         }
1986         case GL_R8_SNORM:
1987         {
1988             switch (angleFormat)
1989             {
1990                 case Format::ID::R8_SNORM:
1991                     return R8_SNORM_to_R8_SNORM;
1992                 default:
1993                     break;
1994             }
1995         }
1996         case GL_RG16F:
1997         {
1998             switch (angleFormat)
1999             {
2000                 case Format::ID::R16G16_FLOAT:
2001                     return RG16F_to_R16G16_FLOAT;
2002                 default:
2003                     break;
2004             }
2005         }
2006         case GL_RG16I:
2007         {
2008             switch (angleFormat)
2009             {
2010                 case Format::ID::R16G16_SINT:
2011                     return RG16I_to_R16G16_SINT;
2012                 default:
2013                     break;
2014             }
2015         }
2016         case GL_RG16UI:
2017         {
2018             switch (angleFormat)
2019             {
2020                 case Format::ID::R16G16_UINT:
2021                     return RG16UI_to_R16G16_UINT;
2022                 default:
2023                     break;
2024             }
2025         }
2026         case GL_RG16_EXT:
2027         {
2028             switch (angleFormat)
2029             {
2030                 case Format::ID::R16G16_UNORM:
2031                     return RG16_EXT_to_R16G16_UNORM;
2032                 default:
2033                     break;
2034             }
2035         }
2036         case GL_RG16_SNORM_EXT:
2037         {
2038             switch (angleFormat)
2039             {
2040                 case Format::ID::R16G16_SNORM:
2041                     return RG16_SNORM_EXT_to_R16G16_SNORM;
2042                 default:
2043                     break;
2044             }
2045         }
2046         case GL_RG32F:
2047         {
2048             switch (angleFormat)
2049             {
2050                 case Format::ID::R32G32_FLOAT:
2051                     return RG32F_to_R32G32_FLOAT;
2052                 default:
2053                     break;
2054             }
2055         }
2056         case GL_RG32I:
2057         {
2058             switch (angleFormat)
2059             {
2060                 case Format::ID::R32G32_SINT:
2061                     return RG32I_to_R32G32_SINT;
2062                 default:
2063                     break;
2064             }
2065         }
2066         case GL_RG32UI:
2067         {
2068             switch (angleFormat)
2069             {
2070                 case Format::ID::R32G32_UINT:
2071                     return RG32UI_to_R32G32_UINT;
2072                 default:
2073                     break;
2074             }
2075         }
2076         case GL_RG8:
2077         {
2078             switch (angleFormat)
2079             {
2080                 case Format::ID::R8G8_UNORM:
2081                     return RG8_to_R8G8_UNORM;
2082                 default:
2083                     break;
2084             }
2085         }
2086         case GL_RG8I:
2087         {
2088             switch (angleFormat)
2089             {
2090                 case Format::ID::R8G8_SINT:
2091                     return RG8I_to_R8G8_SINT;
2092                 default:
2093                     break;
2094             }
2095         }
2096         case GL_RG8UI:
2097         {
2098             switch (angleFormat)
2099             {
2100                 case Format::ID::R8G8_UINT:
2101                     return RG8UI_to_R8G8_UINT;
2102                 default:
2103                     break;
2104             }
2105         }
2106         case GL_RG8_SNORM:
2107         {
2108             switch (angleFormat)
2109             {
2110                 case Format::ID::R8G8_SNORM:
2111                     return RG8_SNORM_to_R8G8_SNORM;
2112                 default:
2113                     break;
2114             }
2115         }
2116         case GL_RGB:
2117             return RGB_to_default;
2118         case GL_RGB10_A2:
2119         {
2120             switch (angleFormat)
2121             {
2122                 case Format::ID::R10G10B10A2_UNORM:
2123                     return RGB10_A2_to_R10G10B10A2_UNORM;
2124                 default:
2125                     break;
2126             }
2127         }
2128         case GL_RGB10_A2UI:
2129         {
2130             switch (angleFormat)
2131             {
2132                 case Format::ID::R10G10B10A2_UINT:
2133                     return RGB10_A2UI_to_R10G10B10A2_UINT;
2134                 default:
2135                     break;
2136             }
2137         }
2138         case GL_RGB16F:
2139         {
2140             switch (angleFormat)
2141             {
2142                 case Format::ID::R16G16B16A16_FLOAT:
2143                     return RGB16F_to_R16G16B16A16_FLOAT;
2144                 default:
2145                     break;
2146             }
2147         }
2148         case GL_RGB16I:
2149         {
2150             switch (angleFormat)
2151             {
2152                 case Format::ID::R16G16B16A16_SINT:
2153                     return RGB16I_to_R16G16B16A16_SINT;
2154                 default:
2155                     break;
2156             }
2157         }
2158         case GL_RGB16UI:
2159         {
2160             switch (angleFormat)
2161             {
2162                 case Format::ID::R16G16B16A16_UINT:
2163                     return RGB16UI_to_R16G16B16A16_UINT;
2164                 default:
2165                     break;
2166             }
2167         }
2168         case GL_RGB16_EXT:
2169         {
2170             switch (angleFormat)
2171             {
2172                 case Format::ID::R16G16B16A16_UNORM:
2173                     return RGB16_EXT_to_R16G16B16A16_UNORM;
2174                 default:
2175                     break;
2176             }
2177         }
2178         case GL_RGB16_SNORM_EXT:
2179         {
2180             switch (angleFormat)
2181             {
2182                 case Format::ID::R16G16B16A16_SNORM:
2183                     return RGB16_SNORM_EXT_to_R16G16B16A16_SNORM;
2184                 default:
2185                     break;
2186             }
2187         }
2188         case GL_RGB32F:
2189         {
2190             switch (angleFormat)
2191             {
2192                 case Format::ID::R32G32B32A32_FLOAT:
2193                     return RGB32F_to_R32G32B32A32_FLOAT;
2194                 default:
2195                     break;
2196             }
2197         }
2198         case GL_RGB32I:
2199         {
2200             switch (angleFormat)
2201             {
2202                 case Format::ID::R32G32B32A32_SINT:
2203                     return RGB32I_to_R32G32B32A32_SINT;
2204                 default:
2205                     break;
2206             }
2207         }
2208         case GL_RGB32UI:
2209         {
2210             switch (angleFormat)
2211             {
2212                 case Format::ID::R32G32B32A32_UINT:
2213                     return RGB32UI_to_R32G32B32A32_UINT;
2214                 default:
2215                     break;
2216             }
2217         }
2218         case GL_RGB565:
2219         {
2220             switch (angleFormat)
2221             {
2222                 case Format::ID::B5G6R5_UNORM:
2223                     return RGB565_to_B5G6R5_UNORM;
2224                 case Format::ID::R8G8B8A8_UNORM:
2225                     return RGB565_to_R8G8B8A8_UNORM;
2226                 default:
2227                     break;
2228             }
2229         }
2230         case GL_RGB5_A1:
2231         {
2232             switch (angleFormat)
2233             {
2234                 case Format::ID::B5G5R5A1_UNORM:
2235                     return RGB5_A1_to_B5G5R5A1_UNORM;
2236                 case Format::ID::R8G8B8A8_UNORM:
2237                     return RGB5_A1_to_R8G8B8A8_UNORM;
2238                 default:
2239                     break;
2240             }
2241         }
2242         case GL_RGB8:
2243         {
2244             switch (angleFormat)
2245             {
2246                 case Format::ID::R8G8B8A8_UNORM:
2247                     return RGB8_to_R8G8B8A8_UNORM;
2248                 default:
2249                     break;
2250             }
2251         }
2252         case GL_RGB8I:
2253         {
2254             switch (angleFormat)
2255             {
2256                 case Format::ID::R8G8B8A8_SINT:
2257                     return RGB8I_to_R8G8B8A8_SINT;
2258                 default:
2259                     break;
2260             }
2261         }
2262         case GL_RGB8UI:
2263         {
2264             switch (angleFormat)
2265             {
2266                 case Format::ID::R8G8B8A8_UINT:
2267                     return RGB8UI_to_R8G8B8A8_UINT;
2268                 default:
2269                     break;
2270             }
2271         }
2272         case GL_RGB8_SNORM:
2273         {
2274             switch (angleFormat)
2275             {
2276                 case Format::ID::R8G8B8A8_SNORM:
2277                     return RGB8_SNORM_to_R8G8B8A8_SNORM;
2278                 default:
2279                     break;
2280             }
2281         }
2282         case GL_RGB9_E5:
2283         {
2284             switch (angleFormat)
2285             {
2286                 case Format::ID::R9G9B9E5_SHAREDEXP:
2287                     return RGB9_E5_to_R9G9B9E5_SHAREDEXP;
2288                 default:
2289                     break;
2290             }
2291         }
2292         case GL_RGBA:
2293             return RGBA_to_default;
2294         case GL_RGBA16F:
2295         {
2296             switch (angleFormat)
2297             {
2298                 case Format::ID::R16G16B16A16_FLOAT:
2299                     return RGBA16F_to_R16G16B16A16_FLOAT;
2300                 default:
2301                     break;
2302             }
2303         }
2304         case GL_RGBA16I:
2305         {
2306             switch (angleFormat)
2307             {
2308                 case Format::ID::R16G16B16A16_SINT:
2309                     return RGBA16I_to_R16G16B16A16_SINT;
2310                 default:
2311                     break;
2312             }
2313         }
2314         case GL_RGBA16UI:
2315         {
2316             switch (angleFormat)
2317             {
2318                 case Format::ID::R16G16B16A16_UINT:
2319                     return RGBA16UI_to_R16G16B16A16_UINT;
2320                 default:
2321                     break;
2322             }
2323         }
2324         case GL_RGBA16_EXT:
2325         {
2326             switch (angleFormat)
2327             {
2328                 case Format::ID::R16G16B16A16_UNORM:
2329                     return RGBA16_EXT_to_R16G16B16A16_UNORM;
2330                 default:
2331                     break;
2332             }
2333         }
2334         case GL_RGBA16_SNORM_EXT:
2335         {
2336             switch (angleFormat)
2337             {
2338                 case Format::ID::R16G16B16A16_SNORM:
2339                     return RGBA16_SNORM_EXT_to_R16G16B16A16_SNORM;
2340                 default:
2341                     break;
2342             }
2343         }
2344         case GL_RGBA32F:
2345         {
2346             switch (angleFormat)
2347             {
2348                 case Format::ID::R32G32B32A32_FLOAT:
2349                     return RGBA32F_to_R32G32B32A32_FLOAT;
2350                 default:
2351                     break;
2352             }
2353         }
2354         case GL_RGBA32I:
2355         {
2356             switch (angleFormat)
2357             {
2358                 case Format::ID::R32G32B32A32_SINT:
2359                     return RGBA32I_to_R32G32B32A32_SINT;
2360                 default:
2361                     break;
2362             }
2363         }
2364         case GL_RGBA32UI:
2365         {
2366             switch (angleFormat)
2367             {
2368                 case Format::ID::R32G32B32A32_UINT:
2369                     return RGBA32UI_to_R32G32B32A32_UINT;
2370                 default:
2371                     break;
2372             }
2373         }
2374         case GL_RGBA4:
2375         {
2376             switch (angleFormat)
2377             {
2378                 case Format::ID::B4G4R4A4_UNORM:
2379                     return RGBA4_to_B4G4R4A4_UNORM;
2380                 case Format::ID::R8G8B8A8_UNORM:
2381                     return RGBA4_to_R8G8B8A8_UNORM;
2382                 default:
2383                     break;
2384             }
2385         }
2386         case GL_RGBA8:
2387         {
2388             switch (angleFormat)
2389             {
2390                 case Format::ID::R8G8B8A8_UNORM:
2391                     return RGBA8_to_R8G8B8A8_UNORM;
2392                 default:
2393                     break;
2394             }
2395         }
2396         case GL_RGBA8I:
2397         {
2398             switch (angleFormat)
2399             {
2400                 case Format::ID::R8G8B8A8_SINT:
2401                     return RGBA8I_to_R8G8B8A8_SINT;
2402                 default:
2403                     break;
2404             }
2405         }
2406         case GL_RGBA8UI:
2407         {
2408             switch (angleFormat)
2409             {
2410                 case Format::ID::R8G8B8A8_UINT:
2411                     return RGBA8UI_to_R8G8B8A8_UINT;
2412                 default:
2413                     break;
2414             }
2415         }
2416         case GL_RGBA8_SNORM:
2417         {
2418             switch (angleFormat)
2419             {
2420                 case Format::ID::R8G8B8A8_SNORM:
2421                     return RGBA8_SNORM_to_R8G8B8A8_SNORM;
2422                 default:
2423                     break;
2424             }
2425         }
2426         case GL_SRGB8:
2427         {
2428             switch (angleFormat)
2429             {
2430                 case Format::ID::R8G8B8A8_UNORM_SRGB:
2431                     return SRGB8_to_R8G8B8A8_UNORM_SRGB;
2432                 default:
2433                     break;
2434             }
2435         }
2436         case GL_SRGB8_ALPHA8:
2437         {
2438             switch (angleFormat)
2439             {
2440                 case Format::ID::R8G8B8A8_UNORM_SRGB:
2441                     return SRGB8_ALPHA8_to_R8G8B8A8_UNORM_SRGB;
2442                 default:
2443                     break;
2444             }
2445         }
2446         case GL_STENCIL_INDEX8:
2447             return STENCIL_INDEX8_to_default;
2448 
2449         default:
2450         {
2451             static LoadFunctionMap emptyLoadFunctionsMap;
2452             return emptyLoadFunctionsMap;
2453         }
2454     }
2455     // clang-format on
2456 
2457 }  // GetLoadFunctionsMap
2458 
2459 }  // namespace angle
2460