GLES Pipeline and draw call support
[platform/core/uifw/dali-adaptor.git] / dali / internal / graphics / gles-impl / gles-graphics-types.h
1 #ifndef DALI_GRAPHICS_GLES_TYPES_H
2 #define DALI_GRAPHICS_GLES_TYPES_H
3
4 // EXTERNAL INCLUDES
5 #include <dali/graphics-api/graphics-types.h>
6 #include <dali/integration-api/gl-abstraction.h>
7 #include <dali/integration-api/gl-defines.h>
8
9 namespace Dali::Graphics::GLES
10 {
11 class Buffer;
12 // Conversion functions
13 /**
14  * Stucture delivers format and type that can be used
15  * when creating GL texture
16  */
17 struct GLTextureFormatType
18 {
19   /**
20    * Constuctor from Graphics::Format
21    * @param value
22    */
23   constexpr GLTextureFormatType(Graphics::Format value)
24   {
25     // lookup table
26     switch(value)
27     {
28       case Graphics::Format::UNDEFINED:
29       {
30         Assign(0, 0);
31         break;
32       }
33
34       // Luminance formats
35       case Graphics::Format::L8:
36       {
37         Assign(GL_RED, GL_UNSIGNED_BYTE);
38         break;
39       }
40       case Graphics::Format::L8A8:
41       {
42         Assign(0, 0);
43         break;
44       }
45
46       // Packed formats (TODO: find supported)
47       case Graphics::Format::R4G4_UNORM_PACK8:
48       {
49         Assign(0, 0);
50         break;
51       }
52       case Graphics::Format::R4G4B4A4_UNORM_PACK16:
53       {
54         Assign(0, 0);
55         break;
56       }
57       case Graphics::Format::B4G4R4A4_UNORM_PACK16:
58       {
59         Assign(0, 0);
60         break;
61       }
62       case Graphics::Format::R5G6B5_UNORM_PACK16:
63       {
64         Assign(0, 0);
65         break;
66       }
67       case Graphics::Format::B5G6R5_UNORM_PACK16:
68       {
69         Assign(0, 0);
70         break;
71       }
72       case Graphics::Format::R5G5B5A1_UNORM_PACK16:
73       {
74         Assign(0, 0);
75         break;
76       }
77       case Graphics::Format::B5G5R5A1_UNORM_PACK16:
78       {
79         Assign(0, 0);
80         break;
81       }
82       case Graphics::Format::A1R5G5B5_UNORM_PACK16:
83       {
84         Assign(0, 0);
85         break;
86       }
87
88       // Formats
89       case Graphics::Format::R8_UNORM:
90       {
91         Assign(GL_RED, GL_UNSIGNED_BYTE);
92         break;
93       }
94       case Graphics::Format::R8_SNORM:
95       {
96         Assign(GL_RED, GL_BYTE);
97         break;
98       }
99       case Graphics::Format::R8_USCALED:
100       {
101         Assign(GL_RED, GL_UNSIGNED_BYTE);
102         break;
103       }
104       case Graphics::Format::R8_SSCALED:
105       {
106         Assign(GL_RED, GL_BYTE);
107         break;
108       }
109       case Graphics::Format::R8_UINT:
110       {
111         Assign(GL_RED, GL_UNSIGNED_BYTE);
112         break;
113       }
114       case Graphics::Format::R8_SINT:
115       {
116         Assign(GL_RED, GL_BYTE);
117         break;
118       }
119       case Graphics::Format::R8_SRGB:
120       {
121         Assign(GL_RED, GL_BYTE);
122         break;
123       }
124       case Graphics::Format::R8G8_UNORM:
125       {
126         Assign(GL_RG, GL_UNSIGNED_BYTE);
127         break;
128       }
129       case Graphics::Format::R8G8_SNORM:
130       {
131         Assign(GL_RG, GL_BYTE);
132         break;
133       }
134       case Graphics::Format::R8G8_USCALED:
135       {
136         Assign(GL_RG, GL_UNSIGNED_BYTE);
137         break;
138       }
139       case Graphics::Format::R8G8_SSCALED:
140       {
141         Assign(GL_RG, GL_BYTE);
142         break;
143       }
144       case Graphics::Format::R8G8_UINT:
145       {
146         Assign(GL_RG, GL_UNSIGNED_BYTE);
147         break;
148       }
149       case Graphics::Format::R8G8_SINT:
150       {
151         Assign(GL_RG, GL_BYTE);
152         break;
153       }
154       case Graphics::Format::R8G8_SRGB:
155       {
156         Assign(GL_RG, GL_BYTE);
157         break;
158       }
159       case Graphics::Format::R8G8B8_UNORM:
160       {
161         Assign(GL_RGB, GL_UNSIGNED_BYTE);
162         break;
163       }
164       case Graphics::Format::R8G8B8_SNORM:
165       {
166         Assign(GL_RGB, GL_BYTE);
167         break;
168       }
169       case Graphics::Format::R8G8B8_USCALED:
170       {
171         Assign(GL_RGB, GL_UNSIGNED_BYTE);
172         break;
173       }
174       case Graphics::Format::R8G8B8_SSCALED:
175       {
176         Assign(GL_RGB, GL_BYTE);
177         break;
178       }
179       case Graphics::Format::R8G8B8_UINT:
180       {
181         Assign(GL_RGB, GL_UNSIGNED_BYTE);
182         break;
183       }
184       case Graphics::Format::R8G8B8_SINT:
185       {
186         Assign(GL_RGB, GL_BYTE);
187         break;
188       }
189       case Graphics::Format::R8G8B8_SRGB:
190       {
191         Assign(GL_RGB, GL_BYTE);
192         break;
193       }
194
195       // BGR not supported in GLES
196       case Graphics::Format::B8G8R8_UNORM:
197       {
198         Assign(0, 0);
199         break;
200       }
201       case Graphics::Format::B8G8R8_SNORM:
202       {
203         Assign(0, 0);
204         break;
205       }
206       case Graphics::Format::B8G8R8_USCALED:
207       {
208         Assign(0, 0);
209         break;
210       }
211       case Graphics::Format::B8G8R8_SSCALED:
212       {
213         Assign(0, 0);
214         break;
215       }
216       case Graphics::Format::B8G8R8_UINT:
217       {
218         Assign(0, 0);
219         break;
220       }
221       case Graphics::Format::B8G8R8_SINT:
222       {
223         Assign(0, 0);
224         break;
225       }
226       case Graphics::Format::B8G8R8_SRGB:
227       {
228         Assign(0, 0);
229         break;
230       }
231
232       // RGBA
233       case Graphics::Format::R8G8B8A8_UNORM:
234       {
235         Assign(GL_RGBA, GL_UNSIGNED_BYTE);
236         break;
237       }
238       case Graphics::Format::R8G8B8A8_SNORM:
239       {
240         Assign(GL_RGBA, GL_BYTE);
241         break;
242       }
243       case Graphics::Format::R8G8B8A8_USCALED:
244       {
245         Assign(GL_RGBA, GL_UNSIGNED_BYTE);
246         break;
247       }
248       case Graphics::Format::R8G8B8A8_SSCALED:
249       {
250         Assign(GL_RGBA, GL_BYTE);
251         break;
252       }
253       case Graphics::Format::R8G8B8A8_UINT:
254       {
255         Assign(GL_RGBA, GL_UNSIGNED_BYTE);
256         break;
257       }
258       case Graphics::Format::R8G8B8A8_SINT:
259       {
260         Assign(GL_RGBA, GL_BYTE);
261         break;
262       }
263       case Graphics::Format::R8G8B8A8_SRGB:
264       {
265         Assign(GL_RGBA, GL_BYTE);
266         break;
267       }
268
269       // BGRA (seems to be not supported)
270       case Graphics::Format::B8G8R8A8_UNORM:
271       {
272         Assign(0, GL_UNSIGNED_BYTE);
273         break;
274       }
275       case Graphics::Format::B8G8R8A8_SNORM:
276       {
277         Assign(0, GL_BYTE);
278         break;
279       }
280       case Graphics::Format::B8G8R8A8_USCALED:
281       {
282         Assign(0, GL_UNSIGNED_BYTE);
283         break;
284       }
285       case Graphics::Format::B8G8R8A8_SSCALED:
286       {
287         Assign(0, GL_BYTE);
288         break;
289       }
290       case Graphics::Format::B8G8R8A8_UINT:
291       {
292         Assign(0, GL_UNSIGNED_BYTE);
293         break;
294       }
295       case Graphics::Format::B8G8R8A8_SINT:
296       {
297         Assign(0, GL_BYTE);
298         break;
299       }
300       case Graphics::Format::B8G8R8A8_SRGB:
301       {
302         Assign(0, GL_BYTE);
303         break;
304       }
305
306       // ABGR not supported
307       case Graphics::Format::A8B8G8R8_UNORM_PACK32:
308       {
309         Assign(0, 0);
310         break;
311       }
312       case Graphics::Format::A8B8G8R8_SNORM_PACK32:
313       {
314         Assign(0, 0);
315         break;
316       }
317       case Graphics::Format::A8B8G8R8_USCALED_PACK32:
318       {
319         Assign(0, 0);
320         break;
321       }
322       case Graphics::Format::A8B8G8R8_SSCALED_PACK32:
323       {
324         Assign(0, 0);
325         break;
326       }
327       case Graphics::Format::A8B8G8R8_UINT_PACK32:
328       {
329         Assign(0, 0);
330         break;
331       }
332       case Graphics::Format::A8B8G8R8_SINT_PACK32:
333       {
334         Assign(0, 0);
335         break;
336       }
337       case Graphics::Format::A8B8G8R8_SRGB_PACK32:
338       {
339         Assign(0, 0);
340         break;
341       }
342
343       // TBD which of the formats are supported
344       case Graphics::Format::A2R10G10B10_UNORM_PACK32:
345       {
346         Assign(0, 0);
347         break;
348       }
349       case Graphics::Format::A2R10G10B10_SNORM_PACK32:
350       {
351         Assign(0, 0);
352         break;
353       }
354       case Graphics::Format::A2R10G10B10_USCALED_PACK32:
355       {
356         Assign(0, 0);
357         break;
358       }
359       case Graphics::Format::A2R10G10B10_SSCALED_PACK32:
360       {
361         Assign(0, 0);
362         break;
363       }
364       case Graphics::Format::A2R10G10B10_UINT_PACK32:
365       {
366         Assign(0, 0);
367         break;
368       }
369       case Graphics::Format::A2R10G10B10_SINT_PACK32:
370       {
371         Assign(0, 0);
372         break;
373       }
374       case Graphics::Format::A2B10G10R10_UNORM_PACK32:
375       {
376         Assign(0, 0);
377         break;
378       }
379       case Graphics::Format::A2B10G10R10_SNORM_PACK32:
380       {
381         Assign(0, 0);
382         break;
383       }
384       case Graphics::Format::A2B10G10R10_USCALED_PACK32:
385       {
386         Assign(0, 0);
387         break;
388       }
389       case Graphics::Format::A2B10G10R10_SSCALED_PACK32:
390       {
391         Assign(0, 0);
392         break;
393       }
394       case Graphics::Format::A2B10G10R10_UINT_PACK32:
395       {
396         Assign(0, 0);
397         break;
398       }
399       case Graphics::Format::A2B10G10R10_SINT_PACK32:
400       {
401         Assign(0, 0);
402         break;
403       }
404       case Graphics::Format::R16_UNORM:
405       {
406         Assign(0, 0);
407         break;
408       }
409       case Graphics::Format::R16_SNORM:
410       {
411         Assign(0, 0);
412         break;
413       }
414       case Graphics::Format::R16_USCALED:
415       {
416         Assign(0, 0);
417         break;
418       }
419       case Graphics::Format::R16_SSCALED:
420       {
421         Assign(0, 0);
422         break;
423       }
424       case Graphics::Format::R16_UINT:
425       {
426         Assign(0, 0);
427         break;
428       }
429       case Graphics::Format::R16_SINT:
430       {
431         Assign(0, 0);
432         break;
433       }
434       case Graphics::Format::R16_SFLOAT:
435       {
436         Assign(0, 0);
437         break;
438       }
439       case Graphics::Format::R16G16_UNORM:
440       {
441         Assign(0, 0);
442         break;
443       }
444       case Graphics::Format::R16G16_SNORM:
445       {
446         Assign(0, 0);
447         break;
448       }
449       case Graphics::Format::R16G16_USCALED:
450       {
451         Assign(0, 0);
452         break;
453       }
454       case Graphics::Format::R16G16_SSCALED:
455       {
456         Assign(0, 0);
457         break;
458       }
459       case Graphics::Format::R16G16_UINT:
460       {
461         Assign(0, 0);
462         break;
463       }
464       case Graphics::Format::R16G16_SINT:
465       {
466         Assign(0, 0);
467         break;
468       }
469       case Graphics::Format::R16G16_SFLOAT:
470       {
471         Assign(0, 0);
472         break;
473       }
474       case Graphics::Format::R16G16B16_UNORM:
475       {
476         Assign(0, 0);
477         break;
478       }
479       case Graphics::Format::R16G16B16_SNORM:
480       {
481         Assign(0, 0);
482         break;
483       }
484       case Graphics::Format::R16G16B16_USCALED:
485       {
486         Assign(0, 0);
487         break;
488       }
489       case Graphics::Format::R16G16B16_SSCALED:
490       {
491         Assign(0, 0);
492         break;
493       }
494       case Graphics::Format::R16G16B16_UINT:
495       {
496         Assign(0, 0);
497         break;
498       }
499       case Graphics::Format::R16G16B16_SINT:
500       {
501         Assign(0, 0);
502         break;
503       }
504       case Graphics::Format::R16G16B16_SFLOAT:
505       {
506         Assign(0, 0);
507         break;
508       }
509       case Graphics::Format::R16G16B16A16_UNORM:
510       {
511         Assign(0, 0);
512         break;
513       }
514       case Graphics::Format::R16G16B16A16_SNORM:
515       {
516         Assign(0, 0);
517         break;
518       }
519       case Graphics::Format::R16G16B16A16_USCALED:
520       {
521         Assign(0, 0);
522         break;
523       }
524       case Graphics::Format::R16G16B16A16_SSCALED:
525       {
526         Assign(0, 0);
527         break;
528       }
529       case Graphics::Format::R16G16B16A16_UINT:
530       {
531         Assign(0, 0);
532         break;
533       }
534       case Graphics::Format::R16G16B16A16_SINT:
535       {
536         Assign(0, 0);
537         break;
538       }
539       case Graphics::Format::R16G16B16A16_SFLOAT:
540       {
541         Assign(0, 0);
542         break;
543       }
544       case Graphics::Format::R32_UINT:
545       {
546         Assign(0, 0);
547         break;
548       }
549       case Graphics::Format::R32_SINT:
550       {
551         Assign(0, 0);
552         break;
553       }
554       case Graphics::Format::R32_SFLOAT:
555       {
556         Assign(0, 0);
557         break;
558       }
559       case Graphics::Format::R32G32_UINT:
560       {
561         Assign(0, 0);
562         break;
563       }
564       case Graphics::Format::R32G32_SINT:
565       {
566         Assign(0, 0);
567         break;
568       }
569       case Graphics::Format::R32G32_SFLOAT:
570       {
571         Assign(0, 0);
572         break;
573       }
574       case Graphics::Format::R32G32B32_UINT:
575       {
576         Assign(0, 0);
577         break;
578       }
579       case Graphics::Format::R32G32B32_SINT:
580       {
581         Assign(0, 0);
582         break;
583       }
584       case Graphics::Format::R32G32B32_SFLOAT:
585       {
586         Assign(0, 0);
587         break;
588       }
589       case Graphics::Format::R32G32B32A32_UINT:
590       {
591         Assign(0, 0);
592         break;
593       }
594       case Graphics::Format::R32G32B32A32_SINT:
595       {
596         Assign(0, 0);
597         break;
598       }
599       case Graphics::Format::R32G32B32A32_SFLOAT:
600       {
601         Assign(0, 0);
602         break;
603       }
604       case Graphics::Format::R64_UINT:
605       {
606         Assign(0, 0);
607         break;
608       }
609       case Graphics::Format::R64_SINT:
610       {
611         Assign(0, 0);
612         break;
613       }
614       case Graphics::Format::R64_SFLOAT:
615       {
616         Assign(0, 0);
617         break;
618       }
619       case Graphics::Format::R64G64_UINT:
620       {
621         Assign(0, 0);
622         break;
623       }
624       case Graphics::Format::R64G64_SINT:
625       {
626         Assign(0, 0);
627         break;
628       }
629       case Graphics::Format::R64G64_SFLOAT:
630       {
631         Assign(0, 0);
632         break;
633       }
634       case Graphics::Format::R64G64B64_UINT:
635       {
636         Assign(0, 0);
637         break;
638       }
639       case Graphics::Format::R64G64B64_SINT:
640       {
641         Assign(0, 0);
642         break;
643       }
644       case Graphics::Format::R64G64B64_SFLOAT:
645       {
646         Assign(0, 0);
647         break;
648       }
649       case Graphics::Format::R64G64B64A64_UINT:
650       {
651         Assign(0, 0);
652         break;
653       }
654       case Graphics::Format::R64G64B64A64_SINT:
655       {
656         Assign(0, 0);
657         break;
658       }
659       case Graphics::Format::R64G64B64A64_SFLOAT:
660       {
661         Assign(0, 0);
662         break;
663       }
664       case Graphics::Format::B10G11R11_UFLOAT_PACK32:
665       {
666         Assign(0, 0);
667         break;
668       }
669       case Graphics::Format::E5B9G9R9_UFLOAT_PACK32:
670       {
671         Assign(0, 0);
672         break;
673       }
674       case Graphics::Format::D16_UNORM:
675       {
676         Assign(0, 0);
677         break;
678       }
679       case Graphics::Format::X8_D24_UNORM_PACK32:
680       {
681         Assign(0, 0);
682         break;
683       }
684       case Graphics::Format::D32_SFLOAT:
685       {
686         Assign(0, 0);
687         break;
688       }
689       case Graphics::Format::S8_UINT:
690       {
691         Assign(0, 0);
692         break;
693       }
694       case Graphics::Format::D16_UNORM_S8_UINT:
695       {
696         Assign(0, 0);
697         break;
698       }
699       case Graphics::Format::D24_UNORM_S8_UINT:
700       {
701         Assign(0, 0);
702         break;
703       }
704       case Graphics::Format::D32_SFLOAT_S8_UINT:
705       {
706         Assign(0, 0);
707         break;
708       }
709       case Graphics::Format::BC1_RGB_UNORM_BLOCK:
710       {
711         Assign(0, 0);
712         break;
713       }
714       case Graphics::Format::BC1_RGB_SRGB_BLOCK:
715       {
716         Assign(0, 0);
717         break;
718       }
719       case Graphics::Format::BC1_RGBA_UNORM_BLOCK:
720       {
721         Assign(0, 0);
722         break;
723       }
724       case Graphics::Format::BC1_RGBA_SRGB_BLOCK:
725       {
726         Assign(0, 0);
727         break;
728       }
729       case Graphics::Format::BC2_UNORM_BLOCK:
730       {
731         Assign(0, 0);
732         break;
733       }
734       case Graphics::Format::BC2_SRGB_BLOCK:
735       {
736         Assign(0, 0);
737         break;
738       }
739       case Graphics::Format::BC3_UNORM_BLOCK:
740       {
741         Assign(0, 0);
742         break;
743       }
744       case Graphics::Format::BC3_SRGB_BLOCK:
745       {
746         Assign(0, 0);
747         break;
748       }
749       case Graphics::Format::BC4_UNORM_BLOCK:
750       {
751         Assign(0, 0);
752         break;
753       }
754       case Graphics::Format::BC4_SNORM_BLOCK:
755       {
756         Assign(0, 0);
757         break;
758       }
759       case Graphics::Format::BC5_UNORM_BLOCK:
760       {
761         Assign(0, 0);
762         break;
763       }
764       case Graphics::Format::BC5_SNORM_BLOCK:
765       {
766         Assign(0, 0);
767         break;
768       }
769       case Graphics::Format::BC6H_UFLOAT_BLOCK:
770       {
771         Assign(0, 0);
772         break;
773       }
774       case Graphics::Format::BC6H_SFLOAT_BLOCK:
775       {
776         Assign(0, 0);
777         break;
778       }
779       case Graphics::Format::BC7_UNORM_BLOCK:
780       {
781         Assign(0, 0);
782         break;
783       }
784       case Graphics::Format::BC7_SRGB_BLOCK:
785       {
786         Assign(0, 0);
787         break;
788       }
789       case Graphics::Format::ETC2_R8G8B8_UNORM_BLOCK:
790       {
791         Assign(0, 0);
792         break;
793       }
794       case Graphics::Format::ETC2_R8G8B8_SRGB_BLOCK:
795       {
796         Assign(0, 0);
797         break;
798       }
799       case Graphics::Format::ETC2_R8G8B8A1_UNORM_BLOCK:
800       {
801         Assign(0, 0);
802         break;
803       }
804       case Graphics::Format::ETC2_R8G8B8A1_SRGB_BLOCK:
805       {
806         Assign(0, 0);
807         break;
808       }
809       case Graphics::Format::ETC2_R8G8B8A8_UNORM_BLOCK:
810       {
811         Assign(0, 0);
812         break;
813       }
814       case Graphics::Format::ETC2_R8G8B8A8_SRGB_BLOCK:
815       {
816         Assign(0, 0);
817         break;
818       }
819       case Graphics::Format::EAC_R11_UNORM_BLOCK:
820       {
821         Assign(0, 0);
822         break;
823       }
824       case Graphics::Format::EAC_R11_SNORM_BLOCK:
825       {
826         Assign(0, 0);
827         break;
828       }
829       case Graphics::Format::EAC_R11G11_UNORM_BLOCK:
830       {
831         Assign(0, 0);
832         break;
833       }
834       case Graphics::Format::EAC_R11G11_SNORM_BLOCK:
835       {
836         Assign(0, 0);
837         break;
838       }
839       case Graphics::Format::ASTC_4x4_UNORM_BLOCK:
840       {
841         Assign(0, 0);
842         break;
843       }
844       case Graphics::Format::ASTC_4x4_SRGB_BLOCK:
845       {
846         Assign(0, 0);
847         break;
848       }
849       case Graphics::Format::ASTC_5x4_UNORM_BLOCK:
850       {
851         Assign(0, 0);
852         break;
853       }
854       case Graphics::Format::ASTC_5x4_SRGB_BLOCK:
855       {
856         Assign(0, 0);
857         break;
858       }
859       case Graphics::Format::ASTC_5x5_UNORM_BLOCK:
860       {
861         Assign(0, 0);
862         break;
863       }
864       case Graphics::Format::ASTC_5x5_SRGB_BLOCK:
865       {
866         Assign(0, 0);
867         break;
868       }
869       case Graphics::Format::ASTC_6x5_UNORM_BLOCK:
870       {
871         Assign(0, 0);
872         break;
873       }
874       case Graphics::Format::ASTC_6x5_SRGB_BLOCK:
875       {
876         Assign(0, 0);
877         break;
878       }
879       case Graphics::Format::ASTC_6x6_UNORM_BLOCK:
880       {
881         Assign(0, 0);
882         break;
883       }
884       case Graphics::Format::ASTC_6x6_SRGB_BLOCK:
885       {
886         Assign(0, 0);
887         break;
888       }
889       case Graphics::Format::ASTC_8x5_UNORM_BLOCK:
890       {
891         Assign(0, 0);
892         break;
893       }
894       case Graphics::Format::ASTC_8x5_SRGB_BLOCK:
895       {
896         Assign(0, 0);
897         break;
898       }
899       case Graphics::Format::ASTC_8x6_UNORM_BLOCK:
900       {
901         Assign(0, 0);
902         break;
903       }
904       case Graphics::Format::ASTC_8x6_SRGB_BLOCK:
905       {
906         Assign(0, 0);
907         break;
908       }
909       case Graphics::Format::ASTC_8x8_UNORM_BLOCK:
910       {
911         Assign(0, 0);
912         break;
913       }
914       case Graphics::Format::ASTC_8x8_SRGB_BLOCK:
915       {
916         Assign(0, 0);
917         break;
918       }
919       case Graphics::Format::ASTC_10x5_UNORM_BLOCK:
920       {
921         Assign(0, 0);
922         break;
923       }
924       case Graphics::Format::ASTC_10x5_SRGB_BLOCK:
925       {
926         Assign(0, 0);
927         break;
928       }
929       case Graphics::Format::ASTC_10x6_UNORM_BLOCK:
930       {
931         Assign(0, 0);
932         break;
933       }
934       case Graphics::Format::ASTC_10x6_SRGB_BLOCK:
935       {
936         Assign(0, 0);
937         break;
938       }
939       case Graphics::Format::ASTC_10x8_UNORM_BLOCK:
940       {
941         Assign(0, 0);
942         break;
943       }
944       case Graphics::Format::ASTC_10x8_SRGB_BLOCK:
945       {
946         Assign(0, 0);
947         break;
948       }
949       case Graphics::Format::ASTC_10x10_UNORM_BLOCK:
950       {
951         Assign(0, 0);
952         break;
953       }
954       case Graphics::Format::ASTC_10x10_SRGB_BLOCK:
955       {
956         Assign(0, 0);
957         break;
958       }
959       case Graphics::Format::ASTC_12x10_UNORM_BLOCK:
960       {
961         Assign(0, 0);
962         break;
963       }
964       case Graphics::Format::ASTC_12x10_SRGB_BLOCK:
965       {
966         Assign(0, 0);
967         break;
968       }
969       case Graphics::Format::ASTC_12x12_UNORM_BLOCK:
970       {
971         Assign(0, 0);
972         break;
973       }
974       case Graphics::Format::ASTC_12x12_SRGB_BLOCK:
975       {
976         Assign(0, 0);
977         break;
978       }
979       case Graphics::Format::PVRTC1_2BPP_UNORM_BLOCK_IMG:
980       {
981         Assign(0, 0);
982         break;
983       }
984       case Graphics::Format::PVRTC1_4BPP_UNORM_BLOCK_IMG:
985       {
986         Assign(0, 0);
987         break;
988       }
989       case Graphics::Format::PVRTC2_2BPP_UNORM_BLOCK_IMG:
990       {
991         Assign(0, 0);
992         break;
993       }
994       case Graphics::Format::PVRTC2_4BPP_UNORM_BLOCK_IMG:
995       {
996         Assign(0, 0);
997         break;
998       }
999       case Graphics::Format::PVRTC1_2BPP_SRGB_BLOCK_IMG:
1000       {
1001         Assign(0, 0);
1002         break;
1003       }
1004       case Graphics::Format::PVRTC1_4BPP_SRGB_BLOCK_IMG:
1005       {
1006         Assign(0, 0);
1007         break;
1008       }
1009       case Graphics::Format::PVRTC2_2BPP_SRGB_BLOCK_IMG:
1010       {
1011         Assign(0, 0);
1012         break;
1013       }
1014       case Graphics::Format::PVRTC2_4BPP_SRGB_BLOCK_IMG:
1015       {
1016         Assign(0, 0);
1017         break;
1018       }
1019     }
1020   }
1021
1022   constexpr inline void Assign(uint32_t f, uint32_t t)
1023   {
1024     format = f;
1025     type   = t;
1026   }
1027
1028   uint32_t format{0};
1029   uint32_t type{0};
1030 };
1031
1032 struct GLSamplerFilterAndMipMapMode
1033 {
1034   GLSamplerFilterAndMipMapMode() = default;
1035   GLSamplerFilterAndMipMapMode(Graphics::SamplerFilter     filter,
1036                                Graphics::SamplerMipmapMode mipMapMode)
1037   {
1038     switch(filter)
1039     {
1040       case Graphics::SamplerFilter::NEAREST:
1041       {
1042         switch(mipMapMode)
1043         {
1044           case Graphics::SamplerMipmapMode::NONE:
1045           {
1046             glFilter = GL_NEAREST;
1047             break;
1048           }
1049           case Graphics::SamplerMipmapMode::NEAREST:
1050           {
1051             glFilter = GL_NEAREST_MIPMAP_NEAREST;
1052             break;
1053           }
1054           case Graphics::SamplerMipmapMode::LINEAR:
1055           {
1056             glFilter = GL_NEAREST_MIPMAP_NEAREST;
1057             break;
1058           }
1059         }
1060       }
1061       case Graphics::SamplerFilter::LINEAR:
1062       {
1063         switch(mipMapMode)
1064         {
1065           case Graphics::SamplerMipmapMode::NONE:
1066           {
1067             glFilter = GL_LINEAR;
1068             break;
1069           }
1070           case Graphics::SamplerMipmapMode::NEAREST:
1071           {
1072             glFilter = GL_LINEAR_MIPMAP_NEAREST;
1073             break;
1074           }
1075           case Graphics::SamplerMipmapMode::LINEAR:
1076           {
1077             glFilter = GL_LINEAR_MIPMAP_NEAREST;
1078             break;
1079           }
1080         }
1081       }
1082     }
1083   }
1084
1085   inline explicit operator uint32_t() const
1086   {
1087     return glFilter;
1088   }
1089
1090   inline operator int() const
1091   {
1092     return static_cast<int>(glFilter);
1093   }
1094
1095   uint32_t glFilter{0};
1096 };
1097
1098 /** Converts vertex format to GL */
1099 struct GLVertexFormat
1100 {
1101   constexpr explicit GLVertexFormat(Graphics::VertexInputFormat gfxFormat)
1102   {
1103     switch(gfxFormat)
1104     {
1105       case VertexInputFormat::FVECTOR2:
1106       {
1107         format = GL_FLOAT;
1108         size   = 2;
1109         break;
1110       }
1111       case VertexInputFormat::FVECTOR3:
1112       {
1113         format = GL_FLOAT;
1114         size   = 3;
1115         break;
1116       }
1117       case VertexInputFormat::FVECTOR4:
1118       {
1119         format = GL_FLOAT;
1120         size   = 4;
1121         break;
1122       }
1123       case VertexInputFormat::FLOAT:
1124       {
1125         format = GL_FLOAT;
1126         size   = 1;
1127         break;
1128       }
1129       case VertexInputFormat::INTEGER:
1130       {
1131         format = GL_INT;
1132         size   = 1;
1133         break;
1134       }
1135       case VertexInputFormat::IVECTOR2:
1136       {
1137         format = GL_INT;
1138         size   = 2;
1139         break;
1140       }
1141       case VertexInputFormat::IVECTOR3:
1142       {
1143         format = GL_INT;
1144         size   = 3;
1145         break;
1146       }
1147       case VertexInputFormat::IVECTOR4:
1148       {
1149         format = GL_INT;
1150         size   = 4;
1151         break;
1152       }
1153       case VertexInputFormat::UNDEFINED:
1154       {
1155         format = 0;
1156         size   = 0;
1157         break;
1158       }
1159     }
1160   }
1161
1162   GLenum   format{0u};
1163   uint32_t size{0u};
1164 };
1165
1166 /**
1167  * @brief Descriptor of single buffer binding within
1168  * command buffer.
1169  */
1170 struct VertexBufferBindingDescriptor
1171 {
1172   const GLES::Buffer* buffer{nullptr};
1173   uint32_t            offset{0u};
1174 };
1175
1176 /**
1177  * @brief Descriptor of ix buffer binding within
1178  * command buffer.
1179  */
1180 struct IndexBufferBindingDescriptor
1181 {
1182   const GLES::Buffer* buffer{nullptr};
1183   uint32_t            offset{};
1184   Graphics::Format    format{};
1185 };
1186
1187 /**
1188  * @brief The descriptor of draw call
1189  */
1190 struct DrawCallDescriptor
1191 {
1192   /**
1193    * @brief Enum specifying type of the draw call
1194    */
1195   enum class Type
1196   {
1197     DRAW,
1198     DRAW_INDEXED,
1199     DRAW_INDEXED_INDIRECT
1200   };
1201
1202   Type type{}; ///< Type of the draw call
1203
1204   /**
1205    * Union contains data for all types of draw calls.
1206    */
1207   union
1208   {
1209     /**
1210      * @brief Vertex array draw
1211      */
1212     struct
1213     {
1214       uint32_t vertexCount;
1215       uint32_t instanceCount;
1216       uint32_t firstVertex;
1217       uint32_t firstInstance;
1218     } draw;
1219
1220     /**
1221      * @brief Indexed draw
1222      */
1223     struct
1224     {
1225       uint32_t indexCount;
1226       uint32_t instanceCount;
1227       uint32_t firstIndex;
1228       int32_t  vertexOffset;
1229       uint32_t firstInstance;
1230     } drawIndexed;
1231
1232     /**
1233      * @brief Indexed draw indirect
1234      */
1235     struct
1236     {
1237       const GLES::Buffer* buffer;
1238       uint32_t            offset;
1239       uint32_t            drawCount;
1240       uint32_t            stride;
1241     } drawIndexedIndirect;
1242   };
1243 };
1244
1245 /**
1246  * @brief Topologu conversion from Graphics to GLES
1247  */
1248 struct GLESTopology
1249 {
1250   explicit constexpr GLESTopology(PrimitiveTopology topology)
1251   {
1252     switch(topology)
1253     {
1254       case PrimitiveTopology::POINT_LIST:
1255       {
1256         primitiveTopology = GL_POINTS;
1257         break;
1258       }
1259       case PrimitiveTopology::LINE_LIST:
1260       {
1261         primitiveTopology = GL_LINES;
1262         break;
1263       }
1264       case PrimitiveTopology::LINE_LOOP:
1265       {
1266         primitiveTopology = GL_LINE_LOOP;
1267         break;
1268       }
1269       case PrimitiveTopology::LINE_STRIP:
1270       {
1271         primitiveTopology = GL_LINE_STRIP;
1272         break;
1273       }
1274       case PrimitiveTopology::TRIANGLE_LIST:
1275       {
1276         primitiveTopology = GL_TRIANGLES;
1277         break;
1278       }
1279       case PrimitiveTopology::TRIANGLE_STRIP:
1280       {
1281         primitiveTopology = GL_TRIANGLE_STRIP;
1282         break;
1283       }
1284       case PrimitiveTopology::TRIANGLE_FAN:
1285       {
1286         primitiveTopology = GL_TRIANGLE_FAN;
1287         break;
1288       }
1289     }
1290   }
1291
1292   /**
1293    * @brief Explicit type conversion operator
1294    * @return converted value
1295    */
1296   constexpr inline operator GLenum() const
1297   {
1298     return primitiveTopology;
1299   }
1300
1301   GLenum primitiveTopology{0}; ///< Topology
1302 };
1303
1304 /**
1305  * @brief Index format conversion structure
1306  */
1307 struct GLIndexFormat
1308 {
1309   explicit constexpr GLIndexFormat(Format _format)
1310   {
1311     switch(_format)
1312     {
1313       // TODO: add more formats
1314       case Format::R16_UINT:
1315       {
1316         format = GL_UNSIGNED_SHORT;
1317         break;
1318       }
1319       default:
1320       {
1321         format = 0;
1322       }
1323     }
1324   }
1325
1326   /**
1327    * @brief Explicit type conversion operator
1328    * @return converted value
1329    */
1330   constexpr inline operator GLenum() const
1331   {
1332     return format;
1333   }
1334
1335   GLenum format{0}; ///< Converted format
1336 };
1337
1338 } // namespace Dali::Graphics::GLES
1339
1340 #endif //DALI_GRAPHICS_API_TYPES_H