Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/common/PackedEnums.cpp
1693 views
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
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
55
bool IsCubeMapFaceTarget(TextureTarget target)
56
{
57
return TextureTargetToType(target) == TextureType::CubeMap;
58
}
59
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
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
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
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
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
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
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
253
bool IsStaticBufferUsage(BufferUsage useage)
254
{
255
switch (useage)
256
{
257
case BufferUsage::StaticCopy:
258
case BufferUsage::StaticDraw:
259
case BufferUsage::StaticRead:
260
return true;
261
default:
262
return false;
263
}
264
}
265
266
std::ostream &operator<<(std::ostream &os, PrimitiveMode value)
267
{
268
switch (value)
269
{
270
case PrimitiveMode::LineLoop:
271
os << "GL_LINE_LOOP";
272
break;
273
case PrimitiveMode::Lines:
274
os << "GL_LINES";
275
break;
276
case PrimitiveMode::LinesAdjacency:
277
os << "GL_LINES_ADJACENCY";
278
break;
279
case PrimitiveMode::LineStrip:
280
os << "GL_LINE_STRIP";
281
break;
282
case PrimitiveMode::LineStripAdjacency:
283
os << "GL_LINE_STRIP_ADJANCENCY";
284
break;
285
case PrimitiveMode::Points:
286
os << "GL_POINTS";
287
break;
288
case PrimitiveMode::TriangleFan:
289
os << "GL_TRIANGLE_FAN";
290
break;
291
case PrimitiveMode::Triangles:
292
os << "GL_TRIANGLES";
293
break;
294
case PrimitiveMode::TrianglesAdjacency:
295
os << "GL_TRIANGLES_ADJANCENCY";
296
break;
297
case PrimitiveMode::TriangleStrip:
298
os << "GL_TRIANGLE_STRIP";
299
break;
300
case PrimitiveMode::TriangleStripAdjacency:
301
os << "GL_TRIANGLE_STRIP_ADJACENCY";
302
break;
303
default:
304
os << "GL_INVALID_ENUM";
305
break;
306
}
307
return os;
308
}
309
310
std::ostream &operator<<(std::ostream &os, DrawElementsType value)
311
{
312
switch (value)
313
{
314
case DrawElementsType::UnsignedByte:
315
os << "GL_UNSIGNED_BYTE";
316
break;
317
case DrawElementsType::UnsignedShort:
318
os << "GL_UNSIGNED_SHORT";
319
break;
320
case DrawElementsType::UnsignedInt:
321
os << "GL_UNSIGNED_INT";
322
break;
323
default:
324
os << "GL_INVALID_ENUM";
325
break;
326
}
327
328
return os;
329
}
330
331
std::ostream &operator<<(std::ostream &os, BlendEquationType value)
332
{
333
switch (value)
334
{
335
case BlendEquationType::Add:
336
os << "GL_FUNC_ADD";
337
break;
338
case BlendEquationType::Min:
339
os << "GL_MIN";
340
break;
341
case BlendEquationType::Max:
342
os << "GL_MAX";
343
break;
344
case BlendEquationType::Subtract:
345
os << "GL_FUNC_SUBTRACT";
346
break;
347
case BlendEquationType::ReverseSubtract:
348
os << "GL_FUNC_REVERSE_SUBTRACT";
349
break;
350
default:
351
os << "GL_INVALID_ENUM";
352
break;
353
}
354
355
return os;
356
}
357
358
std::ostream &operator<<(std::ostream &os, BlendFactorType value)
359
{
360
switch (value)
361
{
362
case BlendFactorType::Zero:
363
os << "GL_ZERO";
364
break;
365
case BlendFactorType::One:
366
os << "GL_ONE";
367
break;
368
case BlendFactorType::SrcColor:
369
os << "GL_SRC_COLOR";
370
break;
371
case BlendFactorType::OneMinusSrcColor:
372
os << "GL_ONE_MINUS_SRC_COLOR";
373
break;
374
case BlendFactorType::SrcAlpha:
375
os << "GL_SRC_ALPHA";
376
break;
377
case BlendFactorType::OneMinusSrcAlpha:
378
os << "GL_ONE_MINUS_SRC_ALPHA";
379
break;
380
case BlendFactorType::DstAlpha:
381
os << "GL_DST_ALPHA";
382
break;
383
case BlendFactorType::OneMinusDstAlpha:
384
os << "GL_ONE_MINUS_DST_ALPHA";
385
break;
386
case BlendFactorType::DstColor:
387
os << "GL_DST_COLOR";
388
break;
389
case BlendFactorType::OneMinusDstColor:
390
os << "GL_ONE_MINUS_DST_COLOR";
391
break;
392
case BlendFactorType::SrcAlphaSaturate:
393
os << "GL_SRC_ALPHA_SATURATE";
394
break;
395
case BlendFactorType::ConstantColor:
396
os << "GL_CONSTANT_COLOR";
397
break;
398
case BlendFactorType::OneMinusConstantColor:
399
os << "GL_ONE_MINUS_CONSTANT_COLOR";
400
break;
401
case BlendFactorType::ConstantAlpha:
402
os << "GL_CONSTANT_ALPHA";
403
break;
404
case BlendFactorType::OneMinusConstantAlpha:
405
os << "GL_ONE_MINUS_CONSTANT_ALPHA";
406
break;
407
case BlendFactorType::Src1Alpha:
408
os << "GL_SRC1_ALPHA_EXT";
409
break;
410
case BlendFactorType::Src1Color:
411
os << "GL_SRC1_COLOR_EXT";
412
break;
413
case BlendFactorType::OneMinusSrc1Color:
414
os << "GL_ONE_MINUS_SRC1_COLOR_EXT";
415
break;
416
case BlendFactorType::OneMinusSrc1Alpha:
417
os << "GL_ONE_MINUS_SRC1_ALPHA_EXT";
418
break;
419
default:
420
os << "GL_INVALID_ENUM";
421
break;
422
}
423
424
return os;
425
}
426
427
std::ostream &operator<<(std::ostream &os, VertexAttribType value)
428
{
429
switch (value)
430
{
431
case VertexAttribType::Byte:
432
os << "GL_BYTE";
433
break;
434
case VertexAttribType::Fixed:
435
os << "GL_FIXED";
436
break;
437
case VertexAttribType::Float:
438
os << "GL_FLOAT";
439
break;
440
case VertexAttribType::HalfFloat:
441
os << "GL_HALF_FLOAT";
442
break;
443
case VertexAttribType::HalfFloatOES:
444
os << "GL_HALF_FLOAT_OES";
445
break;
446
case VertexAttribType::Int:
447
os << "GL_INT";
448
break;
449
case VertexAttribType::Int2101010:
450
os << "GL_INT_2_10_10_10_REV";
451
break;
452
case VertexAttribType::Int1010102:
453
os << "GL_INT_10_10_10_2_OES";
454
break;
455
case VertexAttribType::Short:
456
os << "GL_SHORT";
457
break;
458
case VertexAttribType::UnsignedByte:
459
os << "GL_UNSIGNED_BYTE";
460
break;
461
case VertexAttribType::UnsignedInt:
462
os << "GL_UNSIGNED_INT";
463
break;
464
case VertexAttribType::UnsignedInt2101010:
465
os << "GL_UNSIGNED_INT_2_10_10_10_REV";
466
break;
467
case VertexAttribType::UnsignedInt1010102:
468
os << "GL_UNSIGNED_INT_10_10_10_2_OES";
469
break;
470
case VertexAttribType::UnsignedShort:
471
os << "GL_UNSIGNED_SHORT";
472
break;
473
default:
474
os << "GL_INVALID_ENUM";
475
break;
476
}
477
return os;
478
}
479
480
std::ostream &operator<<(std::ostream &os, TessEvaluationType value)
481
{
482
switch (value)
483
{
484
case TessEvaluationType::Triangles:
485
os << "GL_TRIANGLES";
486
break;
487
case TessEvaluationType::Quads:
488
os << "GL_QUADS";
489
break;
490
case TessEvaluationType::Isolines:
491
os << "GL_ISOLINES";
492
break;
493
case TessEvaluationType::EqualSpacing:
494
os << "GL_EQUAL";
495
break;
496
case TessEvaluationType::FractionalEvenSpacing:
497
os << "GL_FRACTIONAL_EVEN";
498
break;
499
case TessEvaluationType::FractionalOddSpacing:
500
os << "GL_FRACTIONAL_ODD";
501
break;
502
case TessEvaluationType::Cw:
503
os << "GL_CW";
504
break;
505
case TessEvaluationType::Ccw:
506
os << "GL_CCW";
507
break;
508
case TessEvaluationType::PointMode:
509
os << "GL_TESS_GEN_POINT_MODE";
510
break;
511
default:
512
os << "GL_INVALID_ENUM";
513
break;
514
}
515
return os;
516
}
517
518
const char *ShaderTypeToString(ShaderType shaderType)
519
{
520
constexpr ShaderMap<const char *> kShaderTypeNameMap = {
521
{ShaderType::Vertex, "Vertex"},
522
{ShaderType::TessControl, "Tessellation control"},
523
{ShaderType::TessEvaluation, "Tessellation evaluation"},
524
{ShaderType::Geometry, "Geometry"},
525
{ShaderType::Fragment, "Fragment"},
526
{ShaderType::Compute, "Compute"}};
527
return kShaderTypeNameMap[shaderType];
528
}
529
} // namespace gl
530
531
namespace egl
532
{
533
MessageType ErrorCodeToMessageType(EGLint errorCode)
534
{
535
switch (errorCode)
536
{
537
case EGL_BAD_ALLOC:
538
case EGL_CONTEXT_LOST:
539
case EGL_NOT_INITIALIZED:
540
return MessageType::Critical;
541
542
case EGL_BAD_ACCESS:
543
case EGL_BAD_ATTRIBUTE:
544
case EGL_BAD_CONFIG:
545
case EGL_BAD_CONTEXT:
546
case EGL_BAD_CURRENT_SURFACE:
547
case EGL_BAD_DISPLAY:
548
case EGL_BAD_MATCH:
549
case EGL_BAD_NATIVE_PIXMAP:
550
case EGL_BAD_NATIVE_WINDOW:
551
case EGL_BAD_PARAMETER:
552
case EGL_BAD_SURFACE:
553
case EGL_BAD_STREAM_KHR:
554
case EGL_BAD_STATE_KHR:
555
case EGL_BAD_DEVICE_EXT:
556
return MessageType::Error;
557
558
case EGL_SUCCESS:
559
default:
560
UNREACHABLE();
561
return MessageType::InvalidEnum;
562
}
563
}
564
} // namespace egl
565
566
namespace egl_gl
567
{
568
569
gl::TextureTarget EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget)
570
{
571
ASSERT(egl::IsCubeMapTextureTarget(eglTarget));
572
return gl::CubeFaceIndexToTextureTarget(egl::CubeMapTextureTargetToLayerIndex(eglTarget));
573
}
574
575
gl::TextureTarget EGLImageTargetToTextureTarget(EGLenum eglTarget)
576
{
577
switch (eglTarget)
578
{
579
case EGL_GL_TEXTURE_2D_KHR:
580
return gl::TextureTarget::_2D;
581
582
case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR:
583
case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR:
584
case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR:
585
case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
586
case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
587
case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
588
return EGLCubeMapTargetToCubeMapTarget(eglTarget);
589
590
case EGL_GL_TEXTURE_3D_KHR:
591
return gl::TextureTarget::_3D;
592
593
default:
594
UNREACHABLE();
595
return gl::TextureTarget::InvalidEnum;
596
}
597
}
598
599
gl::TextureType EGLTextureTargetToTextureType(EGLenum eglTarget)
600
{
601
switch (eglTarget)
602
{
603
case EGL_TEXTURE_2D:
604
return gl::TextureType::_2D;
605
606
case EGL_TEXTURE_RECTANGLE_ANGLE:
607
return gl::TextureType::Rectangle;
608
609
default:
610
UNREACHABLE();
611
return gl::TextureType::InvalidEnum;
612
}
613
}
614
} // namespace egl_gl
615
616