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