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