xref: /aosp_15_r20/external/angle/src/common/PackedEnums.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 // Copyright 2018 The ANGLE Project Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // PackedGLEnums.cpp:
6 //   Declares ANGLE-specific enums classes for GLEnum and functions operating
7 //   on them.
8 
9 #include "common/PackedEnums.h"
10 
11 #include "common/utilities.h"
12 
13 namespace gl
14 {
15 
TextureTargetToType(TextureTarget target)16 TextureType TextureTargetToType(TextureTarget target)
17 {
18     switch (target)
19     {
20         case TextureTarget::CubeMapNegativeX:
21         case TextureTarget::CubeMapNegativeY:
22         case TextureTarget::CubeMapNegativeZ:
23         case TextureTarget::CubeMapPositiveX:
24         case TextureTarget::CubeMapPositiveY:
25         case TextureTarget::CubeMapPositiveZ:
26             return TextureType::CubeMap;
27         case TextureTarget::CubeMapArray:
28             return TextureType::CubeMapArray;
29         case TextureTarget::External:
30             return TextureType::External;
31         case TextureTarget::Rectangle:
32             return TextureType::Rectangle;
33         case TextureTarget::_2D:
34             return TextureType::_2D;
35         case TextureTarget::_2DArray:
36             return TextureType::_2DArray;
37         case TextureTarget::_2DMultisample:
38             return TextureType::_2DMultisample;
39         case TextureTarget::_2DMultisampleArray:
40             return TextureType::_2DMultisampleArray;
41         case TextureTarget::_3D:
42             return TextureType::_3D;
43         case TextureTarget::VideoImage:
44             return TextureType::VideoImage;
45         case TextureTarget::Buffer:
46             return TextureType::Buffer;
47         case TextureTarget::InvalidEnum:
48             return TextureType::InvalidEnum;
49         default:
50             UNREACHABLE();
51             return TextureType::InvalidEnum;
52     }
53 }
54 
IsCubeMapFaceTarget(TextureTarget target)55 bool IsCubeMapFaceTarget(TextureTarget target)
56 {
57     return TextureTargetToType(target) == TextureType::CubeMap;
58 }
59 
NonCubeTextureTypeToTarget(TextureType type)60 TextureTarget NonCubeTextureTypeToTarget(TextureType type)
61 {
62     switch (type)
63     {
64         case TextureType::External:
65             return TextureTarget::External;
66         case TextureType::Rectangle:
67             return TextureTarget::Rectangle;
68         case TextureType::_2D:
69             return TextureTarget::_2D;
70         case TextureType::_2DArray:
71             return TextureTarget::_2DArray;
72         case TextureType::_2DMultisample:
73             return TextureTarget::_2DMultisample;
74         case TextureType::_2DMultisampleArray:
75             return TextureTarget::_2DMultisampleArray;
76         case TextureType::_3D:
77             return TextureTarget::_3D;
78         case TextureType::CubeMapArray:
79             return TextureTarget::CubeMapArray;
80         case TextureType::VideoImage:
81             return TextureTarget::VideoImage;
82         case TextureType::Buffer:
83             return TextureTarget::Buffer;
84         default:
85             UNREACHABLE();
86             return TextureTarget::InvalidEnum;
87     }
88 }
89 
90 // Check that we can do arithmetic on TextureTarget to convert from / to cube map faces
91 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeX) -
92                       static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
93                   1u,
94               "");
95 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveY) -
96                       static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
97                   2u,
98               "");
99 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeY) -
100                       static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
101                   3u,
102               "");
103 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveZ) -
104                       static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
105                   4u,
106               "");
107 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeZ) -
108                       static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
109                   5u,
110               "");
111 
CubeFaceIndexToTextureTarget(size_t face)112 TextureTarget CubeFaceIndexToTextureTarget(size_t face)
113 {
114     ASSERT(face < 6u);
115     return static_cast<TextureTarget>(static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) + face);
116 }
117 
CubeMapTextureTargetToFaceIndex(TextureTarget target)118 size_t CubeMapTextureTargetToFaceIndex(TextureTarget target)
119 {
120     ASSERT(IsCubeMapFaceTarget(target));
121     return static_cast<uint8_t>(target) - static_cast<uint8_t>(TextureTarget::CubeMapPositiveX);
122 }
123 
SamplerTypeToTextureType(GLenum samplerType)124 TextureType SamplerTypeToTextureType(GLenum samplerType)
125 {
126     switch (samplerType)
127     {
128         case GL_SAMPLER_2D:
129         case GL_INT_SAMPLER_2D:
130         case GL_UNSIGNED_INT_SAMPLER_2D:
131         case GL_SAMPLER_2D_SHADOW:
132             return TextureType::_2D;
133 
134         case GL_SAMPLER_EXTERNAL_OES:
135         case GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT:
136             return TextureType::External;
137 
138         case GL_SAMPLER_CUBE:
139         case GL_INT_SAMPLER_CUBE:
140         case GL_UNSIGNED_INT_SAMPLER_CUBE:
141         case GL_SAMPLER_CUBE_SHADOW:
142             return TextureType::CubeMap;
143 
144         case GL_SAMPLER_CUBE_MAP_ARRAY:
145         case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
146         case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
147         case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW:
148             return TextureType::CubeMapArray;
149 
150         case GL_SAMPLER_2D_ARRAY:
151         case GL_INT_SAMPLER_2D_ARRAY:
152         case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
153         case GL_SAMPLER_2D_ARRAY_SHADOW:
154             return TextureType::_2DArray;
155 
156         case GL_SAMPLER_3D:
157         case GL_INT_SAMPLER_3D:
158         case GL_UNSIGNED_INT_SAMPLER_3D:
159             return TextureType::_3D;
160 
161         case GL_SAMPLER_2D_MULTISAMPLE:
162         case GL_INT_SAMPLER_2D_MULTISAMPLE:
163         case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
164             return TextureType::_2DMultisample;
165 
166         case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
167         case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
168         case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
169             return TextureType::_2DMultisampleArray;
170 
171         case GL_SAMPLER_BUFFER:
172         case GL_INT_SAMPLER_BUFFER:
173         case GL_UNSIGNED_INT_SAMPLER_BUFFER:
174             return TextureType::Buffer;
175 
176         case GL_SAMPLER_2D_RECT_ANGLE:
177             return TextureType::Rectangle;
178 
179         case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
180             return TextureType::VideoImage;
181 
182         default:
183             UNREACHABLE();
184             return TextureType::InvalidEnum;
185     }
186 }
187 
ImageTypeToTextureType(GLenum imageType)188 TextureType ImageTypeToTextureType(GLenum imageType)
189 {
190     switch (imageType)
191     {
192         case GL_IMAGE_2D:
193         case GL_INT_IMAGE_2D:
194         case GL_UNSIGNED_INT_IMAGE_2D:
195             return TextureType::_2D;
196 
197         case GL_IMAGE_CUBE:
198         case GL_INT_IMAGE_CUBE:
199         case GL_UNSIGNED_INT_IMAGE_CUBE:
200             return TextureType::CubeMap;
201 
202         case GL_IMAGE_CUBE_MAP_ARRAY:
203         case GL_INT_IMAGE_CUBE_MAP_ARRAY:
204         case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
205             return TextureType::CubeMapArray;
206 
207         case GL_IMAGE_2D_ARRAY:
208         case GL_INT_IMAGE_2D_ARRAY:
209         case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
210             return TextureType::_2DArray;
211 
212         case GL_IMAGE_3D:
213         case GL_INT_IMAGE_3D:
214         case GL_UNSIGNED_INT_IMAGE_3D:
215             return TextureType::_3D;
216 
217         case GL_IMAGE_BUFFER:
218         case GL_INT_IMAGE_BUFFER:
219         case GL_UNSIGNED_INT_IMAGE_BUFFER:
220             return TextureType::Buffer;
221 
222         default:
223             UNREACHABLE();
224             return TextureType::InvalidEnum;
225     }
226 }
227 
IsMultisampled(TextureType type)228 bool IsMultisampled(TextureType type)
229 {
230     switch (type)
231     {
232         case TextureType::_2DMultisample:
233         case TextureType::_2DMultisampleArray:
234             return true;
235         default:
236             return false;
237     }
238 }
239 
IsArrayTextureType(TextureType type)240 bool IsArrayTextureType(TextureType type)
241 {
242     switch (type)
243     {
244         case TextureType::_2DArray:
245         case TextureType::_2DMultisampleArray:
246         case TextureType::CubeMapArray:
247             return true;
248         default:
249             return false;
250     }
251 }
252 
IsLayeredTextureType(TextureType type)253 bool IsLayeredTextureType(TextureType type)
254 {
255     switch (type)
256     {
257         case TextureType::_2DArray:
258         case TextureType::_2DMultisampleArray:
259         case TextureType::_3D:
260         case TextureType::CubeMap:
261         case TextureType::CubeMapArray:
262             return true;
263         default:
264             return false;
265     }
266 }
267 
IsStaticBufferUsage(BufferUsage useage)268 bool IsStaticBufferUsage(BufferUsage useage)
269 {
270     switch (useage)
271     {
272         case BufferUsage::StaticCopy:
273         case BufferUsage::StaticDraw:
274         case BufferUsage::StaticRead:
275             return true;
276         default:
277             return false;
278     }
279 }
280 
operator <<(std::ostream & os,PrimitiveMode value)281 std::ostream &operator<<(std::ostream &os, PrimitiveMode value)
282 {
283     switch (value)
284     {
285         case PrimitiveMode::LineLoop:
286             os << "GL_LINE_LOOP";
287             break;
288         case PrimitiveMode::Lines:
289             os << "GL_LINES";
290             break;
291         case PrimitiveMode::LinesAdjacency:
292             os << "GL_LINES_ADJACENCY";
293             break;
294         case PrimitiveMode::LineStrip:
295             os << "GL_LINE_STRIP";
296             break;
297         case PrimitiveMode::LineStripAdjacency:
298             os << "GL_LINE_STRIP_ADJANCENCY";
299             break;
300         case PrimitiveMode::Patches:
301             os << "GL_PATCHES";
302             break;
303         case PrimitiveMode::Points:
304             os << "GL_POINTS";
305             break;
306         case PrimitiveMode::TriangleFan:
307             os << "GL_TRIANGLE_FAN";
308             break;
309         case PrimitiveMode::Triangles:
310             os << "GL_TRIANGLES";
311             break;
312         case PrimitiveMode::TrianglesAdjacency:
313             os << "GL_TRIANGLES_ADJANCENCY";
314             break;
315         case PrimitiveMode::TriangleStrip:
316             os << "GL_TRIANGLE_STRIP";
317             break;
318         case PrimitiveMode::TriangleStripAdjacency:
319             os << "GL_TRIANGLE_STRIP_ADJACENCY";
320             break;
321         default:
322             os << "GL_INVALID_ENUM";
323             break;
324     }
325     return os;
326 }
327 
operator <<(std::ostream & os,DrawElementsType value)328 std::ostream &operator<<(std::ostream &os, DrawElementsType value)
329 {
330     switch (value)
331     {
332         case DrawElementsType::UnsignedByte:
333             os << "GL_UNSIGNED_BYTE";
334             break;
335         case DrawElementsType::UnsignedShort:
336             os << "GL_UNSIGNED_SHORT";
337             break;
338         case DrawElementsType::UnsignedInt:
339             os << "GL_UNSIGNED_INT";
340             break;
341         default:
342             os << "GL_INVALID_ENUM";
343             break;
344     }
345 
346     return os;
347 }
348 
operator <<(std::ostream & os,BlendEquationType value)349 std::ostream &operator<<(std::ostream &os, BlendEquationType value)
350 {
351     switch (value)
352     {
353         case BlendEquationType::Add:
354             os << "GL_FUNC_ADD";
355             break;
356         case BlendEquationType::Min:
357             os << "GL_MIN";
358             break;
359         case BlendEquationType::Max:
360             os << "GL_MAX";
361             break;
362         case BlendEquationType::Subtract:
363             os << "GL_FUNC_SUBTRACT";
364             break;
365         case BlendEquationType::ReverseSubtract:
366             os << "GL_FUNC_REVERSE_SUBTRACT";
367             break;
368         case BlendEquationType::Multiply:
369             os << "GL_MULTIPLY_KHR";
370             break;
371         case BlendEquationType::Screen:
372             os << "GL_SCREEN_KHR";
373             break;
374         case BlendEquationType::Overlay:
375             os << "GL_OVERLAY_KHR";
376             break;
377         case BlendEquationType::Darken:
378             os << "GL_DARKEN_KHR";
379             break;
380         case BlendEquationType::Lighten:
381             os << "GL_LIGHTEN_KHR";
382             break;
383         case BlendEquationType::Colordodge:
384             os << "GL_COLORDODGE_KHR";
385             break;
386         case BlendEquationType::Colorburn:
387             os << "GL_COLORBURN_KHR";
388             break;
389         case BlendEquationType::Hardlight:
390             os << "GL_HARDLIGHT_KHR";
391             break;
392         case BlendEquationType::Softlight:
393             os << "GL_SOFTLIGHT_KHR";
394             break;
395         case BlendEquationType::Difference:
396             os << "GL_DIFFERENCE_KHR";
397             break;
398         case BlendEquationType::Exclusion:
399             os << "GL_EXCLUSION_KHR";
400             break;
401         case BlendEquationType::HslHue:
402             os << "GL_HSL_HUE_KHR";
403             break;
404         case BlendEquationType::HslSaturation:
405             os << "GL_HSL_SATURATION_KHR";
406             break;
407         case BlendEquationType::HslColor:
408             os << "GL_HSL_COLOR_KHR";
409             break;
410         case BlendEquationType::HslLuminosity:
411             os << "GL_HSL_LUMINOSITY_KHR";
412             break;
413         default:
414             os << "GL_INVALID_ENUM";
415             break;
416     }
417 
418     return os;
419 }
420 
operator <<(std::ostream & os,BlendFactorType value)421 std::ostream &operator<<(std::ostream &os, BlendFactorType value)
422 {
423     switch (value)
424     {
425         case BlendFactorType::Zero:
426             os << "GL_ZERO";
427             break;
428         case BlendFactorType::One:
429             os << "GL_ONE";
430             break;
431         case BlendFactorType::SrcColor:
432             os << "GL_SRC_COLOR";
433             break;
434         case BlendFactorType::OneMinusSrcColor:
435             os << "GL_ONE_MINUS_SRC_COLOR";
436             break;
437         case BlendFactorType::SrcAlpha:
438             os << "GL_SRC_ALPHA";
439             break;
440         case BlendFactorType::OneMinusSrcAlpha:
441             os << "GL_ONE_MINUS_SRC_ALPHA";
442             break;
443         case BlendFactorType::DstAlpha:
444             os << "GL_DST_ALPHA";
445             break;
446         case BlendFactorType::OneMinusDstAlpha:
447             os << "GL_ONE_MINUS_DST_ALPHA";
448             break;
449         case BlendFactorType::DstColor:
450             os << "GL_DST_COLOR";
451             break;
452         case BlendFactorType::OneMinusDstColor:
453             os << "GL_ONE_MINUS_DST_COLOR";
454             break;
455         case BlendFactorType::SrcAlphaSaturate:
456             os << "GL_SRC_ALPHA_SATURATE";
457             break;
458         case BlendFactorType::ConstantColor:
459             os << "GL_CONSTANT_COLOR";
460             break;
461         case BlendFactorType::OneMinusConstantColor:
462             os << "GL_ONE_MINUS_CONSTANT_COLOR";
463             break;
464         case BlendFactorType::ConstantAlpha:
465             os << "GL_CONSTANT_ALPHA";
466             break;
467         case BlendFactorType::OneMinusConstantAlpha:
468             os << "GL_ONE_MINUS_CONSTANT_ALPHA";
469             break;
470         case BlendFactorType::Src1Alpha:
471             os << "GL_SRC1_ALPHA_EXT";
472             break;
473         case BlendFactorType::Src1Color:
474             os << "GL_SRC1_COLOR_EXT";
475             break;
476         case BlendFactorType::OneMinusSrc1Color:
477             os << "GL_ONE_MINUS_SRC1_COLOR_EXT";
478             break;
479         case BlendFactorType::OneMinusSrc1Alpha:
480             os << "GL_ONE_MINUS_SRC1_ALPHA_EXT";
481             break;
482         default:
483             os << "GL_INVALID_ENUM";
484             break;
485     }
486 
487     return os;
488 }
489 
operator <<(std::ostream & os,VertexAttribType value)490 std::ostream &operator<<(std::ostream &os, VertexAttribType value)
491 {
492     switch (value)
493     {
494         case VertexAttribType::Byte:
495             os << "GL_BYTE";
496             break;
497         case VertexAttribType::Fixed:
498             os << "GL_FIXED";
499             break;
500         case VertexAttribType::Float:
501             os << "GL_FLOAT";
502             break;
503         case VertexAttribType::HalfFloat:
504             os << "GL_HALF_FLOAT";
505             break;
506         case VertexAttribType::HalfFloatOES:
507             os << "GL_HALF_FLOAT_OES";
508             break;
509         case VertexAttribType::Int:
510             os << "GL_INT";
511             break;
512         case VertexAttribType::Int2101010:
513             os << "GL_INT_2_10_10_10_REV";
514             break;
515         case VertexAttribType::Int1010102:
516             os << "GL_INT_10_10_10_2_OES";
517             break;
518         case VertexAttribType::Short:
519             os << "GL_SHORT";
520             break;
521         case VertexAttribType::UnsignedByte:
522             os << "GL_UNSIGNED_BYTE";
523             break;
524         case VertexAttribType::UnsignedInt:
525             os << "GL_UNSIGNED_INT";
526             break;
527         case VertexAttribType::UnsignedInt2101010:
528             os << "GL_UNSIGNED_INT_2_10_10_10_REV";
529             break;
530         case VertexAttribType::UnsignedInt1010102:
531             os << "GL_UNSIGNED_INT_10_10_10_2_OES";
532             break;
533         case VertexAttribType::UnsignedShort:
534             os << "GL_UNSIGNED_SHORT";
535             break;
536         default:
537             os << "GL_INVALID_ENUM";
538             break;
539     }
540     return os;
541 }
542 
operator <<(std::ostream & os,TessEvaluationType value)543 std::ostream &operator<<(std::ostream &os, TessEvaluationType value)
544 {
545     switch (value)
546     {
547         case TessEvaluationType::Triangles:
548             os << "GL_TRIANGLES";
549             break;
550         case TessEvaluationType::Quads:
551             os << "GL_QUADS";
552             break;
553         case TessEvaluationType::Isolines:
554             os << "GL_ISOLINES";
555             break;
556         case TessEvaluationType::EqualSpacing:
557             os << "GL_EQUAL";
558             break;
559         case TessEvaluationType::FractionalEvenSpacing:
560             os << "GL_FRACTIONAL_EVEN";
561             break;
562         case TessEvaluationType::FractionalOddSpacing:
563             os << "GL_FRACTIONAL_ODD";
564             break;
565         case TessEvaluationType::Cw:
566             os << "GL_CW";
567             break;
568         case TessEvaluationType::Ccw:
569             os << "GL_CCW";
570             break;
571         case TessEvaluationType::PointMode:
572             os << "GL_TESS_GEN_POINT_MODE";
573             break;
574         default:
575             os << "GL_INVALID_ENUM";
576             break;
577     }
578     return os;
579 }
580 
ShaderTypeToString(ShaderType shaderType)581 const char *ShaderTypeToString(ShaderType shaderType)
582 {
583     constexpr ShaderMap<const char *> kShaderTypeNameMap = {
584         {ShaderType::Vertex, "Vertex"},
585         {ShaderType::TessControl, "Tessellation control"},
586         {ShaderType::TessEvaluation, "Tessellation evaluation"},
587         {ShaderType::Geometry, "Geometry"},
588         {ShaderType::Fragment, "Fragment"},
589         {ShaderType::Compute, "Compute"}};
590     return kShaderTypeNameMap[shaderType];
591 }
592 
operator <(const UniformLocation & lhs,const UniformLocation & rhs)593 bool operator<(const UniformLocation &lhs, const UniformLocation &rhs)
594 {
595     return lhs.value < rhs.value;
596 }
597 
IsEmulatedCompressedFormat(GLenum format)598 bool IsEmulatedCompressedFormat(GLenum format)
599 {
600     // TODO(anglebug.com/42264702): Check for all formats ANGLE will use to emulate a compressed
601     // texture
602     return format == GL_RGBA || format == GL_RG || format == GL_RED;
603 }
604 }  // namespace gl
605 
606 namespace egl
607 {
ErrorCodeToMessageType(EGLint errorCode)608 MessageType ErrorCodeToMessageType(EGLint errorCode)
609 {
610     switch (errorCode)
611     {
612         case EGL_BAD_ALLOC:
613         case EGL_CONTEXT_LOST:
614         case EGL_NOT_INITIALIZED:
615             return MessageType::Critical;
616 
617         case EGL_BAD_ACCESS:
618         case EGL_BAD_ATTRIBUTE:
619         case EGL_BAD_CONFIG:
620         case EGL_BAD_CONTEXT:
621         case EGL_BAD_CURRENT_SURFACE:
622         case EGL_BAD_DISPLAY:
623         case EGL_BAD_MATCH:
624         case EGL_BAD_NATIVE_PIXMAP:
625         case EGL_BAD_NATIVE_WINDOW:
626         case EGL_BAD_PARAMETER:
627         case EGL_BAD_SURFACE:
628         case EGL_BAD_STREAM_KHR:
629         case EGL_BAD_STATE_KHR:
630         case EGL_BAD_DEVICE_EXT:
631             return MessageType::Error;
632 
633         case EGL_SUCCESS:
634         default:
635             UNREACHABLE();
636             return MessageType::InvalidEnum;
637     }
638 }
639 }  // namespace egl
640 
641 namespace egl_gl
642 {
643 
EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget)644 gl::TextureTarget EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget)
645 {
646     ASSERT(egl::IsCubeMapTextureTarget(eglTarget));
647     return gl::CubeFaceIndexToTextureTarget(egl::CubeMapTextureTargetToLayerIndex(eglTarget));
648 }
649 
EGLImageTargetToTextureTarget(EGLenum eglTarget)650 gl::TextureTarget EGLImageTargetToTextureTarget(EGLenum eglTarget)
651 {
652     switch (eglTarget)
653     {
654         case EGL_GL_TEXTURE_2D_KHR:
655             return gl::TextureTarget::_2D;
656 
657         case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR:
658         case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR:
659         case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR:
660         case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
661         case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
662         case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
663             return EGLCubeMapTargetToCubeMapTarget(eglTarget);
664 
665         case EGL_GL_TEXTURE_3D_KHR:
666             return gl::TextureTarget::_3D;
667 
668         default:
669             UNREACHABLE();
670             return gl::TextureTarget::InvalidEnum;
671     }
672 }
673 
EGLTextureTargetToTextureType(EGLenum eglTarget)674 gl::TextureType EGLTextureTargetToTextureType(EGLenum eglTarget)
675 {
676     switch (eglTarget)
677     {
678         case EGL_TEXTURE_2D:
679             return gl::TextureType::_2D;
680 
681         case EGL_TEXTURE_RECTANGLE_ANGLE:
682             return gl::TextureType::Rectangle;
683 
684         default:
685             UNREACHABLE();
686             return gl::TextureType::InvalidEnum;
687     }
688 }
689 }  // namespace egl_gl
690