xref: /aosp_15_r20/external/angle/src/image_util/loadimage.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2013 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // loadimage.h: Defines image loading functions
8 
9 #ifndef IMAGEUTIL_LOADIMAGE_H_
10 #define IMAGEUTIL_LOADIMAGE_H_
11 
12 #include <stddef.h>
13 #include <stdint.h>
14 #include <memory>
15 
16 namespace angle
17 {
18 class WorkerThreadPool;
19 struct ImageLoadContext
20 {
21     // Satisfy chromium-style
22     ImageLoadContext();
23     ~ImageLoadContext();
24     ImageLoadContext(const ImageLoadContext &other);
25 
26     // Passed to Load* functions as the context
27     std::shared_ptr<WorkerThreadPool> singleThreadPool;
28     std::shared_ptr<WorkerThreadPool> multiThreadPool;
29 };
30 
31 void LoadA8ToRGBA8(const ImageLoadContext &context,
32                    size_t width,
33                    size_t height,
34                    size_t depth,
35                    const uint8_t *input,
36                    size_t inputRowPitch,
37                    size_t inputDepthPitch,
38                    uint8_t *output,
39                    size_t outputRowPitch,
40                    size_t outputDepthPitch);
41 
42 void LoadA8ToBGRA8(const ImageLoadContext &context,
43                    size_t width,
44                    size_t height,
45                    size_t depth,
46                    const uint8_t *input,
47                    size_t inputRowPitch,
48                    size_t inputDepthPitch,
49                    uint8_t *output,
50                    size_t outputRowPitch,
51                    size_t outputDepthPitch);
52 
53 void LoadA32FToRGBA32F(const ImageLoadContext &context,
54                        size_t width,
55                        size_t height,
56                        size_t depth,
57                        const uint8_t *input,
58                        size_t inputRowPitch,
59                        size_t inputDepthPitch,
60                        uint8_t *output,
61                        size_t outputRowPitch,
62                        size_t outputDepthPitch);
63 
64 void LoadA16FToRGBA16F(const ImageLoadContext &context,
65                        size_t width,
66                        size_t height,
67                        size_t depth,
68                        const uint8_t *input,
69                        size_t inputRowPitch,
70                        size_t inputDepthPitch,
71                        uint8_t *output,
72                        size_t outputRowPitch,
73                        size_t outputDepthPitch);
74 
75 void LoadL8ToRGBA8(const ImageLoadContext &context,
76                    size_t width,
77                    size_t height,
78                    size_t depth,
79                    const uint8_t *input,
80                    size_t inputRowPitch,
81                    size_t inputDepthPitch,
82                    uint8_t *output,
83                    size_t outputRowPitch,
84                    size_t outputDepthPitch);
85 
86 void LoadL8ToBGRA8(const ImageLoadContext &context,
87                    size_t width,
88                    size_t height,
89                    size_t depth,
90                    const uint8_t *input,
91                    size_t inputRowPitch,
92                    size_t inputDepthPitch,
93                    uint8_t *output,
94                    size_t outputRowPitch,
95                    size_t outputDepthPitch);
96 
97 void LoadL32FToRGBA32F(const ImageLoadContext &context,
98                        size_t width,
99                        size_t height,
100                        size_t depth,
101                        const uint8_t *input,
102                        size_t inputRowPitch,
103                        size_t inputDepthPitch,
104                        uint8_t *output,
105                        size_t outputRowPitch,
106                        size_t outputDepthPitch);
107 
108 void LoadL16FToRGBA16F(const ImageLoadContext &context,
109                        size_t width,
110                        size_t height,
111                        size_t depth,
112                        const uint8_t *input,
113                        size_t inputRowPitch,
114                        size_t inputDepthPitch,
115                        uint8_t *output,
116                        size_t outputRowPitch,
117                        size_t outputDepthPitch);
118 
119 void LoadLA8ToRGBA4(const ImageLoadContext &context,
120                     size_t width,
121                     size_t height,
122                     size_t depth,
123                     const uint8_t *input,
124                     size_t inputRowPitch,
125                     size_t inputDepthPitch,
126                     uint8_t *output,
127                     size_t outputRowPitch,
128                     size_t outputDepthPitch);
129 
130 void LoadLA8ToRGBA8(const ImageLoadContext &context,
131                     size_t width,
132                     size_t height,
133                     size_t depth,
134                     const uint8_t *input,
135                     size_t inputRowPitch,
136                     size_t inputDepthPitch,
137                     uint8_t *output,
138                     size_t outputRowPitch,
139                     size_t outputDepthPitch);
140 
141 void LoadLA8ToBGRA8(const ImageLoadContext &context,
142                     size_t width,
143                     size_t height,
144                     size_t depth,
145                     const uint8_t *input,
146                     size_t inputRowPitch,
147                     size_t inputDepthPitch,
148                     uint8_t *output,
149                     size_t outputRowPitch,
150                     size_t outputDepthPitch);
151 
152 void LoadLA32FToRGBA32F(const ImageLoadContext &context,
153                         size_t width,
154                         size_t height,
155                         size_t depth,
156                         const uint8_t *input,
157                         size_t inputRowPitch,
158                         size_t inputDepthPitch,
159                         uint8_t *output,
160                         size_t outputRowPitch,
161                         size_t outputDepthPitch);
162 
163 void LoadLA16FToRGBA16F(const ImageLoadContext &context,
164                         size_t width,
165                         size_t height,
166                         size_t depth,
167                         const uint8_t *input,
168                         size_t inputRowPitch,
169                         size_t inputDepthPitch,
170                         uint8_t *output,
171                         size_t outputRowPitch,
172                         size_t outputDepthPitch);
173 
174 void LoadRGB8ToBGR565(const ImageLoadContext &context,
175                       size_t width,
176                       size_t height,
177                       size_t depth,
178                       const uint8_t *input,
179                       size_t inputRowPitch,
180                       size_t inputDepthPitch,
181                       uint8_t *output,
182                       size_t outputRowPitch,
183                       size_t outputDepthPitch);
184 
185 void LoadRGB565ToBGR565(const ImageLoadContext &context,
186                         size_t width,
187                         size_t height,
188                         size_t depth,
189                         const uint8_t *input,
190                         size_t inputRowPitch,
191                         size_t inputDepthPitch,
192                         uint8_t *output,
193                         size_t outputRowPitch,
194                         size_t outputDepthPitch);
195 
196 void LoadRGB8ToBGRX8(const ImageLoadContext &context,
197                      size_t width,
198                      size_t height,
199                      size_t depth,
200                      const uint8_t *input,
201                      size_t inputRowPitch,
202                      size_t inputDepthPitch,
203                      uint8_t *output,
204                      size_t outputRowPitch,
205                      size_t outputDepthPitch);
206 
207 void LoadRG8ToBGRX8(const ImageLoadContext &context,
208                     size_t width,
209                     size_t height,
210                     size_t depth,
211                     const uint8_t *input,
212                     size_t inputRowPitch,
213                     size_t inputDepthPitch,
214                     uint8_t *output,
215                     size_t outputRowPitch,
216                     size_t outputDepthPitch);
217 
218 void LoadR8ToBGRX8(const ImageLoadContext &context,
219                    size_t width,
220                    size_t height,
221                    size_t depth,
222                    const uint8_t *input,
223                    size_t inputRowPitch,
224                    size_t inputDepthPitch,
225                    uint8_t *output,
226                    size_t outputRowPitch,
227                    size_t outputDepthPitch);
228 
229 void LoadR5G6B5ToBGRA8(const ImageLoadContext &context,
230                        size_t width,
231                        size_t height,
232                        size_t depth,
233                        const uint8_t *input,
234                        size_t inputRowPitch,
235                        size_t inputDepthPitch,
236                        uint8_t *output,
237                        size_t outputRowPitch,
238                        size_t outputDepthPitch);
239 
240 void LoadR5G6B5ToRGBA8(const ImageLoadContext &context,
241                        size_t width,
242                        size_t height,
243                        size_t depth,
244                        const uint8_t *input,
245                        size_t inputRowPitch,
246                        size_t inputDepthPitch,
247                        uint8_t *output,
248                        size_t outputRowPitch,
249                        size_t outputDepthPitch);
250 
251 void LoadRGBA8ToBGRA8(const ImageLoadContext &context,
252                       size_t width,
253                       size_t height,
254                       size_t depth,
255                       const uint8_t *input,
256                       size_t inputRowPitch,
257                       size_t inputDepthPitch,
258                       uint8_t *output,
259                       size_t outputRowPitch,
260                       size_t outputDepthPitch);
261 
262 void LoadRGBA8ToBGRA4(const ImageLoadContext &context,
263                       size_t width,
264                       size_t height,
265                       size_t depth,
266                       const uint8_t *input,
267                       size_t inputRowPitch,
268                       size_t inputDepthPitch,
269                       uint8_t *output,
270                       size_t outputRowPitch,
271                       size_t outputDepthPitch);
272 
273 void LoadRGBA8ToRGBA4(const ImageLoadContext &context,
274                       size_t width,
275                       size_t height,
276                       size_t depth,
277                       const uint8_t *input,
278                       size_t inputRowPitch,
279                       size_t inputDepthPitch,
280                       uint8_t *output,
281                       size_t outputRowPitch,
282                       size_t outputDepthPitch);
283 
284 void LoadRGBA4ToARGB4(const ImageLoadContext &context,
285                       size_t width,
286                       size_t height,
287                       size_t depth,
288                       const uint8_t *input,
289                       size_t inputRowPitch,
290                       size_t inputDepthPitch,
291                       uint8_t *output,
292                       size_t outputRowPitch,
293                       size_t outputDepthPitch);
294 
295 void LoadRGBA4ToRGBA4(const ImageLoadContext &context,
296                       size_t width,
297                       size_t height,
298                       size_t depth,
299                       const uint8_t *input,
300                       size_t inputRowPitch,
301                       size_t inputDepthPitch,
302                       uint8_t *output,
303                       size_t outputRowPitch,
304                       size_t outputDepthPitch);
305 
306 void LoadRGBA4ToBGRA8(const ImageLoadContext &context,
307                       size_t width,
308                       size_t height,
309                       size_t depth,
310                       const uint8_t *input,
311                       size_t inputRowPitch,
312                       size_t inputDepthPitch,
313                       uint8_t *output,
314                       size_t outputRowPitch,
315                       size_t outputDepthPitch);
316 
317 void LoadRGBA4ToRGBA8(const ImageLoadContext &context,
318                       size_t width,
319                       size_t height,
320                       size_t depth,
321                       const uint8_t *input,
322                       size_t inputRowPitch,
323                       size_t inputDepthPitch,
324                       uint8_t *output,
325                       size_t outputRowPitch,
326                       size_t outputDepthPitch);
327 
328 void LoadBGRA4ToBGRA8(const ImageLoadContext &context,
329                       size_t width,
330                       size_t height,
331                       size_t depth,
332                       const uint8_t *input,
333                       size_t inputRowPitch,
334                       size_t inputDepthPitch,
335                       uint8_t *output,
336                       size_t outputRowPitch,
337                       size_t outputDepthPitch);
338 
339 void LoadRGBA8ToBGR5A1(const ImageLoadContext &context,
340                        size_t width,
341                        size_t height,
342                        size_t depth,
343                        const uint8_t *input,
344                        size_t inputRowPitch,
345                        size_t inputDepthPitch,
346                        uint8_t *output,
347                        size_t outputRowPitch,
348                        size_t outputDepthPitch);
349 
350 void LoadRGBA8ToRGB5A1(const ImageLoadContext &context,
351                        size_t width,
352                        size_t height,
353                        size_t depth,
354                        const uint8_t *input,
355                        size_t inputRowPitch,
356                        size_t inputDepthPitch,
357                        uint8_t *output,
358                        size_t outputRowPitch,
359                        size_t outputDepthPitch);
360 
361 void LoadRGB10A2ToBGR5A1(const ImageLoadContext &context,
362                          size_t width,
363                          size_t height,
364                          size_t depth,
365                          const uint8_t *input,
366                          size_t inputRowPitch,
367                          size_t inputDepthPitch,
368                          uint8_t *output,
369                          size_t outputRowPitch,
370                          size_t outputDepthPitch);
371 
372 void LoadRGB10A2ToRGB5A1(const ImageLoadContext &context,
373                          size_t width,
374                          size_t height,
375                          size_t depth,
376                          const uint8_t *input,
377                          size_t inputRowPitch,
378                          size_t inputDepthPitch,
379                          uint8_t *output,
380                          size_t outputRowPitch,
381                          size_t outputDepthPitch);
382 
383 void LoadRGB10A2ToRGB565(const ImageLoadContext &context,
384                          size_t width,
385                          size_t height,
386                          size_t depth,
387                          const uint8_t *input,
388                          size_t inputRowPitch,
389                          size_t inputDepthPitch,
390                          uint8_t *output,
391                          size_t outputRowPitch,
392                          size_t outputDepthPitch);
393 
394 void LoadRGB5A1ToRGB5A1(const ImageLoadContext &context,
395                         size_t width,
396                         size_t height,
397                         size_t depth,
398                         const uint8_t *input,
399                         size_t inputRowPitch,
400                         size_t inputDepthPitch,
401                         uint8_t *output,
402                         size_t outputRowPitch,
403                         size_t outputDepthPitch);
404 
405 void LoadRGB5A1ToBGR5A1(const ImageLoadContext &context,
406                         size_t width,
407                         size_t height,
408                         size_t depth,
409                         const uint8_t *input,
410                         size_t inputRowPitch,
411                         size_t inputDepthPitch,
412                         uint8_t *output,
413                         size_t outputRowPitch,
414                         size_t outputDepthPitch);
415 
416 void LoadRGB5A1ToA1RGB5(const ImageLoadContext &context,
417                         size_t width,
418                         size_t height,
419                         size_t depth,
420                         const uint8_t *input,
421                         size_t inputRowPitch,
422                         size_t inputDepthPitch,
423                         uint8_t *output,
424                         size_t outputRowPitch,
425                         size_t outputDepthPitch);
426 
427 void LoadRGB5A1ToBGRA8(const ImageLoadContext &context,
428                        size_t width,
429                        size_t height,
430                        size_t depth,
431                        const uint8_t *input,
432                        size_t inputRowPitch,
433                        size_t inputDepthPitch,
434                        uint8_t *output,
435                        size_t outputRowPitch,
436                        size_t outputDepthPitch);
437 
438 void LoadRGB5A1ToRGBA8(const ImageLoadContext &context,
439                        size_t width,
440                        size_t height,
441                        size_t depth,
442                        const uint8_t *input,
443                        size_t inputRowPitch,
444                        size_t inputDepthPitch,
445                        uint8_t *output,
446                        size_t outputRowPitch,
447                        size_t outputDepthPitch);
448 
449 void LoadBGR5A1ToBGRA8(const ImageLoadContext &context,
450                        size_t width,
451                        size_t height,
452                        size_t depth,
453                        const uint8_t *input,
454                        size_t inputRowPitch,
455                        size_t inputDepthPitch,
456                        uint8_t *output,
457                        size_t outputRowPitch,
458                        size_t outputDepthPitch);
459 void LoadRGB10A2ToRGB8(const ImageLoadContext &context,
460                        size_t width,
461                        size_t height,
462                        size_t depth,
463                        const uint8_t *input,
464                        size_t inputRowPitch,
465                        size_t inputDepthPitch,
466                        uint8_t *output,
467                        size_t outputRowPitch,
468                        size_t outputDepthPitch);
469 
470 void LoadRGB10A2ToRGBA8(const ImageLoadContext &context,
471                         size_t width,
472                         size_t height,
473                         size_t depth,
474                         const uint8_t *input,
475                         size_t inputRowPitch,
476                         size_t inputDepthPitch,
477                         uint8_t *output,
478                         size_t outputRowPitch,
479                         size_t outputDepthPitch);
480 
481 void LoadRGB10A2ToRGB10X2(const ImageLoadContext &context,
482                           size_t width,
483                           size_t height,
484                           size_t depth,
485                           const uint8_t *input,
486                           size_t inputRowPitch,
487                           size_t inputDepthPitch,
488                           uint8_t *output,
489                           size_t outputRowPitch,
490                           size_t outputDepthPitch);
491 
492 void LoadBGR10A2ToRGB10A2(const ImageLoadContext &context,
493                           size_t width,
494                           size_t height,
495                           size_t depth,
496                           const uint8_t *input,
497                           size_t inputRowPitch,
498                           size_t inputDepthPitch,
499                           uint8_t *output,
500                           size_t outputRowPitch,
501                           size_t outputDepthPitch);
502 
503 void LoadRGB16FToRGB9E5(const ImageLoadContext &context,
504                         size_t width,
505                         size_t height,
506                         size_t depth,
507                         const uint8_t *input,
508                         size_t inputRowPitch,
509                         size_t inputDepthPitch,
510                         uint8_t *output,
511                         size_t outputRowPitch,
512                         size_t outputDepthPitch);
513 
514 void LoadRGB32FToRGB9E5(const ImageLoadContext &context,
515                         size_t width,
516                         size_t height,
517                         size_t depth,
518                         const uint8_t *input,
519                         size_t inputRowPitch,
520                         size_t inputDepthPitch,
521                         uint8_t *output,
522                         size_t outputRowPitch,
523                         size_t outputDepthPitch);
524 
525 void LoadRGB16FToRG11B10F(const ImageLoadContext &context,
526                           size_t width,
527                           size_t height,
528                           size_t depth,
529                           const uint8_t *input,
530                           size_t inputRowPitch,
531                           size_t inputDepthPitch,
532                           uint8_t *output,
533                           size_t outputRowPitch,
534                           size_t outputDepthPitch);
535 
536 void LoadRGB32FToRG11B10F(const ImageLoadContext &context,
537                           size_t width,
538                           size_t height,
539                           size_t depth,
540                           const uint8_t *input,
541                           size_t inputRowPitch,
542                           size_t inputDepthPitch,
543                           uint8_t *output,
544                           size_t outputRowPitch,
545                           size_t outputDepthPitch);
546 
547 void LoadD24S8ToS8D24(const ImageLoadContext &context,
548                       size_t width,
549                       size_t height,
550                       size_t depth,
551                       const uint8_t *input,
552                       size_t inputRowPitch,
553                       size_t inputDepthPitch,
554                       uint8_t *output,
555                       size_t outputRowPitch,
556                       size_t outputDepthPitch);
557 
558 void LoadD24S8ToD32FS8X24(const ImageLoadContext &context,
559                           size_t width,
560                           size_t height,
561                           size_t depth,
562                           const uint8_t *input,
563                           size_t inputRowPitch,
564                           size_t inputDepthPitch,
565                           uint8_t *output,
566                           size_t outputRowPitch,
567                           size_t outputDepthPitch);
568 
569 void LoadD24S8ToD32F(const ImageLoadContext &context,
570                      size_t width,
571                      size_t height,
572                      size_t depth,
573                      const uint8_t *input,
574                      size_t inputRowPitch,
575                      size_t inputDepthPitch,
576                      uint8_t *output,
577                      size_t outputRowPitch,
578                      size_t outputDepthPitch);
579 
580 void LoadD32ToD32FX32(const ImageLoadContext &context,
581                       size_t width,
582                       size_t height,
583                       size_t depth,
584                       const uint8_t *input,
585                       size_t inputRowPitch,
586                       size_t inputDepthPitch,
587                       uint8_t *output,
588                       size_t outputRowPitch,
589                       size_t outputDepthPitch);
590 
591 void LoadD32ToD32F(const ImageLoadContext &context,
592                    size_t width,
593                    size_t height,
594                    size_t depth,
595                    const uint8_t *input,
596                    size_t inputRowPitch,
597                    size_t inputDepthPitch,
598                    uint8_t *output,
599                    size_t outputRowPitch,
600                    size_t outputDepthPitch);
601 
602 void LoadD32FToD32F(const ImageLoadContext &context,
603                     size_t width,
604                     size_t height,
605                     size_t depth,
606                     const uint8_t *input,
607                     size_t inputRowPitch,
608                     size_t inputDepthPitch,
609                     uint8_t *output,
610                     size_t outputRowPitch,
611                     size_t outputDepthPitch);
612 
613 void LoadD32FS8X24ToS8D24(const ImageLoadContext &context,
614                           size_t width,
615                           size_t height,
616                           size_t depth,
617                           const uint8_t *input,
618                           size_t inputRowPitch,
619                           size_t inputDepthPitch,
620                           uint8_t *output,
621                           size_t outputRowPitch,
622                           size_t outputDepthPitch);
623 
624 void LoadX24S8ToS8(const ImageLoadContext &context,
625                    size_t width,
626                    size_t height,
627                    size_t depth,
628                    const uint8_t *input,
629                    size_t inputRowPitch,
630                    size_t inputDepthPitch,
631                    uint8_t *output,
632                    size_t outputRowPitch,
633                    size_t outputDepthPitch);
634 
635 void LoadX32S8ToS8(const ImageLoadContext &context,
636                    size_t width,
637                    size_t height,
638                    size_t depth,
639                    const uint8_t *input,
640                    size_t inputRowPitch,
641                    size_t inputDepthPitch,
642                    uint8_t *output,
643                    size_t outputRowPitch,
644                    size_t outputDepthPitch);
645 
646 void LoadD32FS8X24ToD32F(const ImageLoadContext &context,
647                          size_t width,
648                          size_t height,
649                          size_t depth,
650                          const uint8_t *input,
651                          size_t inputRowPitch,
652                          size_t inputDepthPitch,
653                          uint8_t *output,
654                          size_t outputRowPitch,
655                          size_t outputDepthPitch);
656 
657 void LoadD32FS8X24ToD32FS8X24(const ImageLoadContext &context,
658                               size_t width,
659                               size_t height,
660                               size_t depth,
661                               const uint8_t *input,
662                               size_t inputRowPitch,
663                               size_t inputDepthPitch,
664                               uint8_t *output,
665                               size_t outputRowPitch,
666                               size_t outputDepthPitch);
667 
668 template <typename type, size_t componentCount>
669 inline void LoadToNative(const ImageLoadContext &context,
670                          size_t width,
671                          size_t height,
672                          size_t depth,
673                          const uint8_t *input,
674                          size_t inputRowPitch,
675                          size_t inputDepthPitch,
676                          uint8_t *output,
677                          size_t outputRowPitch,
678                          size_t outputDepthPitch);
679 
680 template <typename type, uint32_t fourthComponentBits>
681 inline void LoadToNative3To4(const ImageLoadContext &context,
682                              size_t width,
683                              size_t height,
684                              size_t depth,
685                              const uint8_t *input,
686                              size_t inputRowPitch,
687                              size_t inputDepthPitch,
688                              uint8_t *output,
689                              size_t outputRowPitch,
690                              size_t outputDepthPitch);
691 
692 template <size_t componentCount>
693 inline void Load32FTo16F(const ImageLoadContext &context,
694                          size_t width,
695                          size_t height,
696                          size_t depth,
697                          const uint8_t *input,
698                          size_t inputRowPitch,
699                          size_t inputDepthPitch,
700                          uint8_t *output,
701                          size_t outputRowPitch,
702                          size_t outputDepthPitch);
703 
704 void LoadD16ToD32F(const ImageLoadContext &context,
705                    size_t width,
706                    size_t height,
707                    size_t depth,
708                    const uint8_t *input,
709                    size_t inputRowPitch,
710                    size_t inputDepthPitch,
711                    uint8_t *output,
712                    size_t outputRowPitch,
713                    size_t outputDepthPitch);
714 
715 void LoadS8ToS8X24(const ImageLoadContext &context,
716                    size_t width,
717                    size_t height,
718                    size_t depth,
719                    const uint8_t *input,
720                    size_t inputRowPitch,
721                    size_t inputDepthPitch,
722                    uint8_t *output,
723                    size_t outputRowPitch,
724                    size_t outputDepthPitch);
725 
726 void LoadRGB32FToRGBA16F(const ImageLoadContext &context,
727                          size_t width,
728                          size_t height,
729                          size_t depth,
730                          const uint8_t *input,
731                          size_t inputRowPitch,
732                          size_t inputDepthPitch,
733                          uint8_t *output,
734                          size_t outputRowPitch,
735                          size_t outputDepthPitch);
736 
737 void LoadRGB32FToRGB16F(const ImageLoadContext &context,
738                         size_t width,
739                         size_t height,
740                         size_t depth,
741                         const uint8_t *input,
742                         size_t inputRowPitch,
743                         size_t inputDepthPitch,
744                         uint8_t *output,
745                         size_t outputRowPitch,
746                         size_t outputDepthPitch);
747 
748 template <size_t blockWidth, size_t blockHeight, size_t blockDepth, size_t blockSize>
749 inline void LoadCompressedToNative(const ImageLoadContext &context,
750                                    size_t width,
751                                    size_t height,
752                                    size_t depth,
753                                    const uint8_t *input,
754                                    size_t inputRowPitch,
755                                    size_t inputDepthPitch,
756                                    uint8_t *output,
757                                    size_t outputRowPitch,
758                                    size_t outputDepthPitch);
759 
760 void LoadR32ToR16(const ImageLoadContext &context,
761                   size_t width,
762                   size_t height,
763                   size_t depth,
764                   const uint8_t *input,
765                   size_t inputRowPitch,
766                   size_t inputDepthPitch,
767                   uint8_t *output,
768                   size_t outputRowPitch,
769                   size_t outputDepthPitch);
770 
771 template <typename type,
772           uint32_t firstBits,
773           uint32_t secondBits,
774           uint32_t thirdBits,
775           uint32_t fourthBits>
776 inline void Initialize4ComponentData(const ImageLoadContext &context,
777                                      size_t width,
778                                      size_t height,
779                                      size_t depth,
780                                      uint8_t *output,
781                                      size_t outputRowPitch,
782                                      size_t outputDepthPitch);
783 
784 void LoadD32ToX8D24(const ImageLoadContext &context,
785                     size_t width,
786                     size_t height,
787                     size_t depth,
788                     const uint8_t *input,
789                     size_t inputRowPitch,
790                     size_t inputDepthPitch,
791                     uint8_t *output,
792                     size_t outputRowPitch,
793                     size_t outputDepthPitch);
794 
795 void LoadETC1RGB8ToRGBA8(const ImageLoadContext &context,
796                          size_t width,
797                          size_t height,
798                          size_t depth,
799                          const uint8_t *input,
800                          size_t inputRowPitch,
801                          size_t inputDepthPitch,
802                          uint8_t *output,
803                          size_t outputRowPitch,
804                          size_t outputDepthPitch);
805 
806 void LoadASTCToRGBA8Inner(const ImageLoadContext &context,
807                           size_t width,
808                           size_t height,
809                           size_t depth,
810                           uint32_t blockWidth,
811                           uint32_t blockHeight,
812                           const uint8_t *input,
813                           size_t inputRowPitch,
814                           size_t inputDepthPitch,
815                           uint8_t *output,
816                           size_t outputRowPitch,
817                           size_t outputDepthPitch);
818 
819 template <size_t blockWidth, size_t blockHeight>
820 inline void LoadASTCToRGBA8(const ImageLoadContext &context,
821                             size_t width,
822                             size_t height,
823                             size_t depth,
824                             const uint8_t *input,
825                             size_t inputRowPitch,
826                             size_t inputDepthPitch,
827                             uint8_t *output,
828                             size_t outputRowPitch,
829                             size_t outputDepthPitch);
830 
831 void LoadETC1RGB8ToBC1(const ImageLoadContext &context,
832                        size_t width,
833                        size_t height,
834                        size_t depth,
835                        const uint8_t *input,
836                        size_t inputRowPitch,
837                        size_t inputDepthPitch,
838                        uint8_t *output,
839                        size_t outputRowPitch,
840                        size_t outputDepthPitch);
841 
842 void LoadEACR11ToR8(const ImageLoadContext &context,
843                     size_t width,
844                     size_t height,
845                     size_t depth,
846                     const uint8_t *input,
847                     size_t inputRowPitch,
848                     size_t inputDepthPitch,
849                     uint8_t *output,
850                     size_t outputRowPitch,
851                     size_t outputDepthPitch);
852 
853 void LoadEACR11SToR8(const ImageLoadContext &context,
854                      size_t width,
855                      size_t height,
856                      size_t depth,
857                      const uint8_t *input,
858                      size_t inputRowPitch,
859                      size_t inputDepthPitch,
860                      uint8_t *output,
861                      size_t outputRowPitch,
862                      size_t outputDepthPitch);
863 
864 void LoadEACRG11ToRG8(const ImageLoadContext &context,
865                       size_t width,
866                       size_t height,
867                       size_t depth,
868                       const uint8_t *input,
869                       size_t inputRowPitch,
870                       size_t inputDepthPitch,
871                       uint8_t *output,
872                       size_t outputRowPitch,
873                       size_t outputDepthPitch);
874 
875 void LoadEACRG11SToRG8(const ImageLoadContext &context,
876                        size_t width,
877                        size_t height,
878                        size_t depth,
879                        const uint8_t *input,
880                        size_t inputRowPitch,
881                        size_t inputDepthPitch,
882                        uint8_t *output,
883                        size_t outputRowPitch,
884                        size_t outputDepthPitch);
885 
886 void LoadEACR11ToR16(const ImageLoadContext &context,
887                      size_t width,
888                      size_t height,
889                      size_t depth,
890                      const uint8_t *input,
891                      size_t inputRowPitch,
892                      size_t inputDepthPitch,
893                      uint8_t *output,
894                      size_t outputRowPitch,
895                      size_t outputDepthPitch);
896 
897 void LoadEACR11SToR16(const ImageLoadContext &context,
898                       size_t width,
899                       size_t height,
900                       size_t depth,
901                       const uint8_t *input,
902                       size_t inputRowPitch,
903                       size_t inputDepthPitch,
904                       uint8_t *output,
905                       size_t outputRowPitch,
906                       size_t outputDepthPitch);
907 
908 void LoadEACRG11ToRG16(const ImageLoadContext &context,
909                        size_t width,
910                        size_t height,
911                        size_t depth,
912                        const uint8_t *input,
913                        size_t inputRowPitch,
914                        size_t inputDepthPitch,
915                        uint8_t *output,
916                        size_t outputRowPitch,
917                        size_t outputDepthPitch);
918 
919 void LoadEACRG11SToRG16(const ImageLoadContext &context,
920                         size_t width,
921                         size_t height,
922                         size_t depth,
923                         const uint8_t *input,
924                         size_t inputRowPitch,
925                         size_t inputDepthPitch,
926                         uint8_t *output,
927                         size_t outputRowPitch,
928                         size_t outputDepthPitch);
929 
930 void LoadEACR11ToR16F(const ImageLoadContext &context,
931                       size_t width,
932                       size_t height,
933                       size_t depth,
934                       const uint8_t *input,
935                       size_t inputRowPitch,
936                       size_t inputDepthPitch,
937                       uint8_t *output,
938                       size_t outputRowPitch,
939                       size_t outputDepthPitch);
940 
941 void LoadEACR11SToR16F(const ImageLoadContext &context,
942                        size_t width,
943                        size_t height,
944                        size_t depth,
945                        const uint8_t *input,
946                        size_t inputRowPitch,
947                        size_t inputDepthPitch,
948                        uint8_t *output,
949                        size_t outputRowPitch,
950                        size_t outputDepthPitch);
951 
952 void LoadEACRG11ToRG16F(const ImageLoadContext &context,
953                         size_t width,
954                         size_t height,
955                         size_t depth,
956                         const uint8_t *input,
957                         size_t inputRowPitch,
958                         size_t inputDepthPitch,
959                         uint8_t *output,
960                         size_t outputRowPitch,
961                         size_t outputDepthPitch);
962 
963 void LoadEACRG11SToRG16F(const ImageLoadContext &context,
964                          size_t width,
965                          size_t height,
966                          size_t depth,
967                          const uint8_t *input,
968                          size_t inputRowPitch,
969                          size_t inputDepthPitch,
970                          uint8_t *output,
971                          size_t outputRowPitch,
972                          size_t outputDepthPitch);
973 
974 void LoadETC2RGB8ToRGBA8(const ImageLoadContext &context,
975                          size_t width,
976                          size_t height,
977                          size_t depth,
978                          const uint8_t *input,
979                          size_t inputRowPitch,
980                          size_t inputDepthPitch,
981                          uint8_t *output,
982                          size_t outputRowPitch,
983                          size_t outputDepthPitch);
984 
985 void LoadETC2RGB8ToBC1(const ImageLoadContext &context,
986                        size_t width,
987                        size_t height,
988                        size_t depth,
989                        const uint8_t *input,
990                        size_t inputRowPitch,
991                        size_t inputDepthPitch,
992                        uint8_t *output,
993                        size_t outputRowPitch,
994                        size_t outputDepthPitch);
995 
996 void LoadETC2SRGB8ToRGBA8(const ImageLoadContext &context,
997                           size_t width,
998                           size_t height,
999                           size_t depth,
1000                           const uint8_t *input,
1001                           size_t inputRowPitch,
1002                           size_t inputDepthPitch,
1003                           uint8_t *output,
1004                           size_t outputRowPitch,
1005                           size_t outputDepthPitch);
1006 
1007 void LoadETC2SRGB8ToBC1(const ImageLoadContext &context,
1008                         size_t width,
1009                         size_t height,
1010                         size_t depth,
1011                         const uint8_t *input,
1012                         size_t inputRowPitch,
1013                         size_t inputDepthPitch,
1014                         uint8_t *output,
1015                         size_t outputRowPitch,
1016                         size_t outputDepthPitch);
1017 
1018 void LoadETC2RGB8A1ToRGBA8(const ImageLoadContext &context,
1019                            size_t width,
1020                            size_t height,
1021                            size_t depth,
1022                            const uint8_t *input,
1023                            size_t inputRowPitch,
1024                            size_t inputDepthPitch,
1025                            uint8_t *output,
1026                            size_t outputRowPitch,
1027                            size_t outputDepthPitch);
1028 
1029 void LoadETC2RGB8A1ToBC1(const ImageLoadContext &context,
1030                          size_t width,
1031                          size_t height,
1032                          size_t depth,
1033                          const uint8_t *input,
1034                          size_t inputRowPitch,
1035                          size_t inputDepthPitch,
1036                          uint8_t *output,
1037                          size_t outputRowPitch,
1038                          size_t outputDepthPitch);
1039 
1040 void LoadETC2SRGB8A1ToRGBA8(const ImageLoadContext &context,
1041                             size_t width,
1042                             size_t height,
1043                             size_t depth,
1044                             const uint8_t *input,
1045                             size_t inputRowPitch,
1046                             size_t inputDepthPitch,
1047                             uint8_t *output,
1048                             size_t outputRowPitch,
1049                             size_t outputDepthPitch);
1050 
1051 void LoadETC2SRGB8A1ToBC1(const ImageLoadContext &context,
1052                           size_t width,
1053                           size_t height,
1054                           size_t depth,
1055                           const uint8_t *input,
1056                           size_t inputRowPitch,
1057                           size_t inputDepthPitch,
1058                           uint8_t *output,
1059                           size_t outputRowPitch,
1060                           size_t outputDepthPitch);
1061 
1062 void LoadETC2RGBA8ToBC3(const ImageLoadContext &context,
1063                         size_t width,
1064                         size_t height,
1065                         size_t depth,
1066                         const uint8_t *input,
1067                         size_t inputRowPitch,
1068                         size_t inputDepthPitch,
1069                         uint8_t *output,
1070                         size_t outputRowPitch,
1071                         size_t outputDepthPitch);
1072 
1073 void LoadETC2SRGBA8ToBC3(const ImageLoadContext &context,
1074                          size_t width,
1075                          size_t height,
1076                          size_t depth,
1077                          const uint8_t *input,
1078                          size_t inputRowPitch,
1079                          size_t inputDepthPitch,
1080                          uint8_t *output,
1081                          size_t outputRowPitch,
1082                          size_t outputDepthPitch);
1083 
1084 void LoadEACR11ToBC4(const ImageLoadContext &context,
1085                      size_t width,
1086                      size_t height,
1087                      size_t depth,
1088                      const uint8_t *input,
1089                      size_t inputRowPitch,
1090                      size_t inputDepthPitch,
1091                      uint8_t *output,
1092                      size_t outputRowPitch,
1093                      size_t outputDepthPitch);
1094 
1095 void LoadEACR11SToBC4(const ImageLoadContext &context,
1096                       size_t width,
1097                       size_t height,
1098                       size_t depth,
1099                       const uint8_t *input,
1100                       size_t inputRowPitch,
1101                       size_t inputDepthPitch,
1102                       uint8_t *output,
1103                       size_t outputRowPitch,
1104                       size_t outputDepthPitch);
1105 
1106 void LoadEACRG11ToBC5(const ImageLoadContext &context,
1107                       size_t width,
1108                       size_t height,
1109                       size_t depth,
1110                       const uint8_t *input,
1111                       size_t inputRowPitch,
1112                       size_t inputDepthPitch,
1113                       uint8_t *output,
1114                       size_t outputRowPitch,
1115                       size_t outputDepthPitch);
1116 
1117 void LoadEACRG11SToBC5(const ImageLoadContext &context,
1118                        size_t width,
1119                        size_t height,
1120                        size_t depth,
1121                        const uint8_t *input,
1122                        size_t inputRowPitch,
1123                        size_t inputDepthPitch,
1124                        uint8_t *output,
1125                        size_t outputRowPitch,
1126                        size_t outputDepthPitch);
1127 
1128 void LoadETC2RGBA8ToRGBA8(const ImageLoadContext &context,
1129                           size_t width,
1130                           size_t height,
1131                           size_t depth,
1132                           const uint8_t *input,
1133                           size_t inputRowPitch,
1134                           size_t inputDepthPitch,
1135                           uint8_t *output,
1136                           size_t outputRowPitch,
1137                           size_t outputDepthPitch);
1138 
1139 void LoadETC2SRGBA8ToSRGBA8(const ImageLoadContext &context,
1140                             size_t width,
1141                             size_t height,
1142                             size_t depth,
1143                             const uint8_t *input,
1144                             size_t inputRowPitch,
1145                             size_t inputDepthPitch,
1146                             uint8_t *output,
1147                             size_t outputRowPitch,
1148                             size_t outputDepthPitch);
1149 
1150 void LoadYuvToNative(const ImageLoadContext &context,
1151                      size_t width,
1152                      size_t height,
1153                      size_t depth,
1154                      const uint8_t *input,
1155                      size_t inputRowPitch,
1156                      size_t inputDepthPitch,
1157                      uint8_t *output,
1158                      size_t outputRowPitch,
1159                      size_t outputDepthPitch);
1160 
1161 void LoadPalettedToRGBA8Impl(const ImageLoadContext &context,
1162                              size_t width,
1163                              size_t height,
1164                              size_t depth,
1165                              uint32_t indexBits,
1166                              uint32_t redBlueBits,
1167                              uint32_t greenBits,
1168                              uint32_t alphaBits,
1169                              const uint8_t *input,
1170                              size_t inputRowPitch,
1171                              size_t inputDepthPitch,
1172                              uint8_t *output,
1173                              size_t outputRowPitch,
1174                              size_t outputDepthPitch);
1175 
1176 template <uint32_t indexBits, uint32_t redBlueBits, uint32_t greenBits, uint32_t alphaBits>
1177 inline void LoadPalettedToRGBA8(const ImageLoadContext &context,
1178                                 size_t width,
1179                                 size_t height,
1180                                 size_t depth,
1181                                 const uint8_t *input,
1182                                 size_t inputRowPitch,
1183                                 size_t inputDepthPitch,
1184                                 uint8_t *output,
1185                                 size_t outputRowPitch,
1186                                 size_t outputDepthPitch);
1187 
1188 }  // namespace angle
1189 
1190 #include "loadimage.inc"
1191 
1192 #endif  // IMAGEUTIL_LOADIMAGE_H_
1193