Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/src/compiler/translator/ExtensionGLSL.cpp
1693 views
1
//
2
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
3
// Use of this source code is governed by a BSD-style license that can be
4
// found in the LICENSE file.
5
//
6
// ExtensionGLSL.cpp: Implements the TExtensionGLSL class that tracks GLSL extension requirements
7
// of shaders.
8
9
#include "compiler/translator/ExtensionGLSL.h"
10
11
#include "compiler/translator/VersionGLSL.h"
12
13
namespace sh
14
{
15
16
TExtensionGLSL::TExtensionGLSL(ShShaderOutput output)
17
: TIntermTraverser(true, false, false), mTargetVersion(ShaderOutputTypeToGLSLVersion(output))
18
{}
19
20
const std::set<std::string> &TExtensionGLSL::getEnabledExtensions() const
21
{
22
return mEnabledExtensions;
23
}
24
25
const std::set<std::string> &TExtensionGLSL::getRequiredExtensions() const
26
{
27
return mRequiredExtensions;
28
}
29
30
bool TExtensionGLSL::visitUnary(Visit, TIntermUnary *node)
31
{
32
checkOperator(node);
33
34
return true;
35
}
36
37
bool TExtensionGLSL::visitAggregate(Visit, TIntermAggregate *node)
38
{
39
checkOperator(node);
40
41
return true;
42
}
43
44
void TExtensionGLSL::checkOperator(TIntermOperator *node)
45
{
46
if (mTargetVersion < GLSL_VERSION_130)
47
{
48
return;
49
}
50
51
switch (node->getOp())
52
{
53
case EOpAbs:
54
break;
55
56
case EOpSign:
57
break;
58
59
case EOpMix:
60
break;
61
62
case EOpFloatBitsToInt:
63
case EOpFloatBitsToUint:
64
case EOpIntBitsToFloat:
65
case EOpUintBitsToFloat:
66
if (mTargetVersion < GLSL_VERSION_330)
67
{
68
// Bit conversion functions cannot be emulated.
69
mRequiredExtensions.insert("GL_ARB_shader_bit_encoding");
70
}
71
break;
72
73
case EOpPackSnorm2x16:
74
case EOpPackHalf2x16:
75
case EOpUnpackSnorm2x16:
76
case EOpUnpackHalf2x16:
77
if (mTargetVersion < GLSL_VERSION_420)
78
{
79
mEnabledExtensions.insert("GL_ARB_shading_language_packing");
80
81
if (mTargetVersion < GLSL_VERSION_330)
82
{
83
// floatBitsToUint and uintBitsToFloat are needed to emulate
84
// packHalf2x16 and unpackHalf2x16 respectively and cannot be
85
// emulated themselves.
86
mRequiredExtensions.insert("GL_ARB_shader_bit_encoding");
87
}
88
}
89
break;
90
91
case EOpPackUnorm2x16:
92
case EOpUnpackUnorm2x16:
93
if (mTargetVersion < GLSL_VERSION_410)
94
{
95
mEnabledExtensions.insert("GL_ARB_shading_language_packing");
96
}
97
break;
98
99
default:
100
break;
101
}
102
}
103
104
} // namespace sh
105
106