Use GLSLANG_ANGLE to strip features to what ANGLE requires
This change strips a few features similar to GLSLANG_WEB but doesn't remove every detail like the latter. It also hardcodes profile/version to core/450. In particular, TBuiltIns::initialize is specialized to remove most of what is not supported or won't be supported by ANGLE. The result of this function is parsed with TParseContext::parseShaderStrings which is a performance bottleneck. This change shaves about 300KB off of ANGLE's binary size and reduces the cost of SetupBuiltinSymbolTable to nearly a sixth. Signed-off-by: Shahbaz Youssefi <ShabbyX@gmail.com>
This commit is contained in:
parent
7ab4564696
commit
1ef2e250fc
17 changed files with 214 additions and 102 deletions
|
|
@ -147,6 +147,10 @@ EProfile EDesktopProfile = static_cast<EProfile>(ENoProfile | ECoreProfile | ECo
|
|||
#ifdef GLSLANG_WEB
|
||||
const Versioning* Es300Desktop130 = nullptr;
|
||||
const Versioning* Es310Desktop420 = nullptr;
|
||||
#elif defined(GLSLANG_ANGLE)
|
||||
const Versioning* Es300Desktop130 = nullptr;
|
||||
const Versioning* Es310Desktop420 = nullptr;
|
||||
const Versioning* Es310Desktop450 = nullptr;
|
||||
#else
|
||||
const Versioning Es300Desktop130Version[] = { { EEsProfile, 0, 300, 0, nullptr },
|
||||
{ EDesktopProfile, 0, 130, 0, nullptr },
|
||||
|
|
@ -415,7 +419,7 @@ void AddTabledBuiltin(TString& decls, const BuiltInFunction& function)
|
|||
// See if the tabled versioning information allows the current version.
|
||||
bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
|
||||
{
|
||||
#ifdef GLSLANG_WEB
|
||||
#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
|
||||
// all entries in table are valid
|
||||
return true;
|
||||
#endif
|
||||
|
|
@ -499,7 +503,7 @@ TBuiltIns::TBuiltIns()
|
|||
prefixes[EbtFloat] = "";
|
||||
prefixes[EbtInt] = "i";
|
||||
prefixes[EbtUint] = "u";
|
||||
#ifndef GLSLANG_WEB
|
||||
#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
|
||||
prefixes[EbtFloat16] = "f16";
|
||||
prefixes[EbtInt8] = "i8";
|
||||
prefixes[EbtUint8] = "u8";
|
||||
|
|
@ -516,7 +520,9 @@ TBuiltIns::TBuiltIns()
|
|||
dimMap[Esd3D] = 3;
|
||||
dimMap[EsdCube] = 3;
|
||||
#ifndef GLSLANG_WEB
|
||||
#ifndef GLSLANG_ANGLE
|
||||
dimMap[Esd1D] = 1;
|
||||
#endif
|
||||
dimMap[EsdRect] = 2;
|
||||
dimMap[EsdBuffer] = 1;
|
||||
dimMap[EsdSubpass] = 2; // potentially unused for now
|
||||
|
|
@ -541,6 +547,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
#ifdef GLSLANG_WEB
|
||||
version = 310;
|
||||
profile = EEsProfile;
|
||||
#elif defined(GLSLANG_ANGLE)
|
||||
version = 450;
|
||||
profile = ECoreProfile;
|
||||
#endif
|
||||
addTabledBuiltins(version, profile, spvVersion);
|
||||
|
||||
|
|
@ -586,6 +595,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"vec4 fwidthCoarse(vec4 p);"
|
||||
);
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
TString derivativesAndControl16bits (
|
||||
"float16_t dFdx(float16_t);"
|
||||
"f16vec2 dFdx(f16vec2);"
|
||||
|
|
@ -1173,6 +1183,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n"
|
||||
);
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
(profile != EEsProfile && version >= 430)) {
|
||||
|
|
@ -1210,6 +1221,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
if (profile != EEsProfile && version >= 440) {
|
||||
commonBuiltins.append(
|
||||
"uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
|
||||
|
|
@ -1271,7 +1283,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"void atomicStore(coherent volatile out double, double, int, int, int);"
|
||||
"\n");
|
||||
}
|
||||
#endif
|
||||
#endif // !GLSLANG_ANGLE
|
||||
#endif // !GLSLANG_WEB
|
||||
|
||||
if ((profile == EEsProfile && version >= 300) ||
|
||||
(profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
|
||||
|
|
@ -1311,6 +1324,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
|
||||
commonBuiltins.append(
|
||||
"double fma(double, double, double);"
|
||||
|
|
@ -1319,6 +1333,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"dvec4 fma(dvec4, dvec4, dvec4 );"
|
||||
"\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
(profile != EEsProfile && version >= 400)) {
|
||||
|
|
@ -1336,6 +1351,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
|
||||
commonBuiltins.append(
|
||||
"double frexp(double, out int);"
|
||||
|
|
@ -1353,6 +1369,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
|
||||
"\n");
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if ((profile == EEsProfile && version >= 300) ||
|
||||
|
|
@ -1462,6 +1479,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
}
|
||||
|
||||
#ifndef GLSLANG_WEB
|
||||
#ifndef GLSLANG_ANGLE
|
||||
//
|
||||
// Original-style texture functions existing in all stages.
|
||||
// (Per-stage functions below.)
|
||||
|
|
@ -1610,6 +1628,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
// Bitfield
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
|
|
@ -1752,6 +1771,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
// GL_ARB_shader_ballot
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
commonBuiltins.append(
|
||||
|
|
@ -3072,6 +3092,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
|
||||
"\n");
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
if ((profile == EEsProfile && version >= 300 && version < 310) ||
|
||||
(profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix
|
||||
|
|
@ -3091,6 +3112,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
// GL_AMD_gpu_shader_half_float/Explicit types
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
commonBuiltins.append(
|
||||
|
|
@ -3941,28 +3963,30 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"f64vec3 log2(f64vec3);"
|
||||
"f64vec4 log2(f64vec4);"
|
||||
"\n");
|
||||
}
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
stageBuiltins[EShLangFragment].append(derivativesAndControl64bits);
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
"float64_t interpolateAtCentroid(float64_t);"
|
||||
"f64vec2 interpolateAtCentroid(f64vec2);"
|
||||
"f64vec3 interpolateAtCentroid(f64vec3);"
|
||||
"f64vec4 interpolateAtCentroid(f64vec4);"
|
||||
}
|
||||
|
||||
"float64_t interpolateAtSample(float64_t, int);"
|
||||
"f64vec2 interpolateAtSample(f64vec2, int);"
|
||||
"f64vec3 interpolateAtSample(f64vec3, int);"
|
||||
"f64vec4 interpolateAtSample(f64vec4, int);"
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
stageBuiltins[EShLangFragment].append(derivativesAndControl64bits);
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
"float64_t interpolateAtCentroid(float64_t);"
|
||||
"f64vec2 interpolateAtCentroid(f64vec2);"
|
||||
"f64vec3 interpolateAtCentroid(f64vec3);"
|
||||
"f64vec4 interpolateAtCentroid(f64vec4);"
|
||||
|
||||
"float64_t interpolateAtOffset(float64_t, f64vec2);"
|
||||
"f64vec2 interpolateAtOffset(f64vec2, f64vec2);"
|
||||
"f64vec3 interpolateAtOffset(f64vec3, f64vec2);"
|
||||
"f64vec4 interpolateAtOffset(f64vec4, f64vec2);"
|
||||
"float64_t interpolateAtSample(float64_t, int);"
|
||||
"f64vec2 interpolateAtSample(f64vec2, int);"
|
||||
"f64vec3 interpolateAtSample(f64vec3, int);"
|
||||
"f64vec4 interpolateAtSample(f64vec4, int);"
|
||||
|
||||
"\n");
|
||||
"float64_t interpolateAtOffset(float64_t, f64vec2);"
|
||||
"f64vec2 interpolateAtOffset(f64vec2, f64vec2);"
|
||||
"f64vec3 interpolateAtOffset(f64vec3, f64vec2);"
|
||||
"f64vec4 interpolateAtOffset(f64vec4, f64vec2);"
|
||||
|
||||
"\n");
|
||||
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
|
|
@ -3978,6 +4002,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
|
||||
stageBuiltins[EShLangVertex].append("vec4 ftransform();");
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
//
|
||||
// Original-style texture Functions with lod.
|
||||
//
|
||||
|
|
@ -4037,6 +4062,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
if ((profile != EEsProfile && version >= 150) ||
|
||||
(profile == EEsProfile && version >= 310)) {
|
||||
|
|
@ -4057,7 +4083,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"void EndPrimitive();"
|
||||
"\n");
|
||||
}
|
||||
#endif
|
||||
#endif // !GLSLANG_WEB
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
|
|
@ -4117,6 +4143,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
|
||||
commonBuiltins.append("void debugPrintfEXT();\n");
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
// coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
|
||||
// adding it introduces undesirable tempArgs on the stack. What we want
|
||||
|
|
@ -4240,6 +4267,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
|
||||
"\n");
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
// GL_ARB_derivative_control
|
||||
if (profile != EEsProfile && version >= 400) {
|
||||
|
|
@ -4277,6 +4305,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"bool helperInvocationEXT();"
|
||||
"\n");
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
// GL_AMD_shader_explicit_vertex_parameter
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
|
|
@ -4411,12 +4440,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"void executeCallableEXT(uint, int);"
|
||||
"\n");
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
//E_SPV_NV_compute_shader_derivatives
|
||||
if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
|
||||
stageBuiltins[EShLangCompute].append(derivativeControls);
|
||||
stageBuiltins[EShLangCompute].append("\n");
|
||||
}
|
||||
#ifndef GLSLANG_ANGLE
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
|
||||
stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
|
||||
|
|
@ -4429,7 +4460,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"void writePackedPrimitiveIndices4x8NV(uint, uint);"
|
||||
"\n");
|
||||
}
|
||||
#endif
|
||||
#endif // !GLSLANG_ANGLE
|
||||
#endif // !GLSLANG_WEB
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
|
|
@ -4466,7 +4498,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_WEB
|
||||
#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
|
||||
if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
|
||||
//
|
||||
// Matrix state. p. 31, 32, 37, 39, 40.
|
||||
|
|
@ -4584,7 +4616,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
|
||||
"\n");
|
||||
}
|
||||
#endif
|
||||
#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
|
|
@ -4615,6 +4647,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
}
|
||||
|
||||
#ifndef GLSLANG_WEB
|
||||
#ifndef GLSLANG_ANGLE
|
||||
//============================================================================
|
||||
//
|
||||
// Define the interface to the mesh/task shader.
|
||||
|
|
@ -4702,6 +4735,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
|
|
@ -5372,6 +5406,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
|
||||
#ifndef GLSLANG_WEB
|
||||
|
||||
if ((profile != EEsProfile && version >= 140) ||
|
||||
(profile == EEsProfile && version >= 310)) {
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
"flat in highp int gl_DeviceIndex;" // GL_EXT_device_group
|
||||
"flat in highp int gl_ViewIndex;" // GL_EXT_multiview
|
||||
"\n");
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
// GL_ARB_shader_ballot
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
const char* ballotDecls =
|
||||
|
|
@ -5402,14 +5445,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
stageBuiltins[EShLangTaskNV] .append(ballotDecls);
|
||||
}
|
||||
|
||||
if ((profile != EEsProfile && version >= 140) ||
|
||||
(profile == EEsProfile && version >= 310)) {
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
"flat in highp int gl_DeviceIndex;" // GL_EXT_device_group
|
||||
"flat in highp int gl_ViewIndex;" // GL_EXT_multiview
|
||||
"\n");
|
||||
}
|
||||
|
||||
// GL_KHR_shader_subgroup
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
(profile != EEsProfile && version >= 140)) {
|
||||
|
|
@ -5613,6 +5648,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
stageBuiltins[EShLangCallable].append(callableDecls);
|
||||
|
||||
}
|
||||
|
||||
if ((profile != EEsProfile && version >= 140)) {
|
||||
const char *deviceIndex =
|
||||
"in highp int gl_DeviceIndex;" // GL_EXT_device_group
|
||||
|
|
@ -5625,12 +5661,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
stageBuiltins[EShLangMiss].append(deviceIndex);
|
||||
}
|
||||
|
||||
if (version >= 300 /* both ES and non-ES */) {
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
"flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2
|
||||
"\n");
|
||||
}
|
||||
|
||||
if ((profile != EEsProfile && version >= 420) ||
|
||||
(profile == EEsProfile && version >= 310)) {
|
||||
commonBuiltins.append("const int gl_ScopeDevice = 1;\n");
|
||||
|
|
@ -5654,7 +5684,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
commonBuiltins.append("const int gl_StorageSemanticsImage = 0x800;\n");
|
||||
commonBuiltins.append("const int gl_StorageSemanticsOutput = 0x1000;\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
if (version >= 300 /* both ES and non-ES */) {
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
"flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2
|
||||
"\n");
|
||||
}
|
||||
#endif // !GLSLANG_WEB
|
||||
|
||||
// printf("%s\n", commonBuiltins.c_str());
|
||||
// printf("%s\n", stageBuiltins[EShLangFragment].c_str());
|
||||
|
|
@ -5672,13 +5710,16 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
|
|||
//
|
||||
|
||||
// enumerate all the types
|
||||
const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint,
|
||||
#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
|
||||
EbtFloat16
|
||||
#endif
|
||||
};
|
||||
#ifdef GLSLANG_WEB
|
||||
const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint };
|
||||
bool skipBuffer = true;
|
||||
bool skipCubeArrayed = true;
|
||||
const int image = 0;
|
||||
#else
|
||||
const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint, EbtFloat16 };
|
||||
bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
|
||||
bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
|
||||
for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler
|
||||
|
|
@ -5703,8 +5744,13 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c
|
|||
for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
|
||||
#ifdef GLSLANG_WEB
|
||||
for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube
|
||||
#else
|
||||
#if defined(GLSLANG_ANGLE)
|
||||
// TODO: what is subpass?
|
||||
for (int dim = Esd2D; dim < EsdSubpass; ++dim) { // 2D, ..., buffer
|
||||
#else
|
||||
for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
|
||||
#endif
|
||||
if (dim == EsdSubpass && spvVersion.vulkan == 0)
|
||||
continue;
|
||||
if (dim == EsdSubpass && (image || shadow || arrayed))
|
||||
|
|
@ -6125,6 +6171,9 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
|
|||
#ifdef GLSLANG_WEB
|
||||
profile = EEsProfile;
|
||||
version = 310;
|
||||
#elif defined(GLSLANG_ANGLE)
|
||||
profile = ECoreProfile;
|
||||
version = 450;
|
||||
#endif
|
||||
|
||||
//
|
||||
|
|
@ -6201,7 +6250,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
|
|||
continue;
|
||||
|
||||
// loop over 16-bit floating-point texel addressing
|
||||
#ifdef GLSLANG_WEB
|
||||
#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
|
||||
const int f16TexAddr = 0;
|
||||
#else
|
||||
for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
|
||||
|
|
@ -6214,7 +6263,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
|
|||
totalDims--;
|
||||
}
|
||||
// loop over "bool" lod clamp
|
||||
#ifdef GLSLANG_WEB
|
||||
#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
|
||||
const int lodClamp = 0;
|
||||
#else
|
||||
for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
|
||||
|
|
@ -6226,7 +6275,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
|
|||
continue;
|
||||
|
||||
// loop over "bool" sparse or not
|
||||
#ifdef GLSLANG_WEB
|
||||
#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
|
||||
const int sparse = 0;
|
||||
#else
|
||||
for (int sparse = 0; sparse <= 1; ++sparse)
|
||||
|
|
@ -6281,7 +6330,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
|
|||
s.append("Offset");
|
||||
if (lodClamp)
|
||||
s.append("Clamp");
|
||||
if (lodClamp || sparse)
|
||||
if (lodClamp != 0 || sparse)
|
||||
s.append("ARB");
|
||||
s.append("(");
|
||||
|
||||
|
|
@ -6381,7 +6430,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName,
|
|||
s.append(");\n");
|
||||
|
||||
// Add to the per-language set of built-ins
|
||||
if (bias || lodClamp) {
|
||||
if (bias || lodClamp != 0) {
|
||||
stageBuiltins[EShLangFragment].append(s);
|
||||
stageBuiltins[EShLangCompute].append(s);
|
||||
} else
|
||||
|
|
@ -6410,6 +6459,9 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in
|
|||
#ifdef GLSLANG_WEB
|
||||
profile = EEsProfile;
|
||||
version = 310;
|
||||
#elif defined(GLSLANG_ANGLE)
|
||||
profile = ECoreProfile;
|
||||
version = 450;
|
||||
#endif
|
||||
|
||||
switch (sampler.dim) {
|
||||
|
|
@ -6653,6 +6705,9 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
|
|||
#ifdef GLSLANG_WEB
|
||||
version = 310;
|
||||
profile = EEsProfile;
|
||||
#elif defined(GLSLANG_ANGLE)
|
||||
version = 450;
|
||||
profile = ECoreProfile;
|
||||
#endif
|
||||
|
||||
//
|
||||
|
|
@ -7081,6 +7136,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
|
|||
s.append("\n");
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
// atomic counters (some in compute below)
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
(profile != EEsProfile && version >= 420)) {
|
||||
|
|
@ -7117,6 +7173,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
|
|||
|
||||
s.append("\n");
|
||||
}
|
||||
#endif // !GLSLANG_ANGLE
|
||||
|
||||
// GL_ARB_cull_distance
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
|
|
@ -7133,6 +7190,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
|
|||
s.append(builtInConstant);
|
||||
}
|
||||
|
||||
#ifndef GLSLANG_ANGLE
|
||||
// SPV_NV_mesh_shader
|
||||
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
|
||||
snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
|
||||
|
|
@ -7155,6 +7213,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
|
|||
|
||||
s.append("\n");
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
s.append("\n");
|
||||
|
|
@ -7239,6 +7298,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
#ifdef GLSLANG_WEB
|
||||
version = 310;
|
||||
profile = EEsProfile;
|
||||
#elif defined(GLSLANG_ANGLE)
|
||||
version = 450;
|
||||
profile = ECoreProfile;
|
||||
#endif
|
||||
|
||||
//
|
||||
|
|
@ -7428,7 +7490,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
|
||||
case EShLangTessEvaluation:
|
||||
case EShLangGeometry:
|
||||
#endif
|
||||
#endif // !GLSLANG_WEB
|
||||
SpecialQualifier("gl_Position", EvqPosition, EbvPosition, symbolTable);
|
||||
SpecialQualifier("gl_PointSize", EvqPointSize, EbvPointSize, symbolTable);
|
||||
|
||||
|
|
@ -7589,7 +7651,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
|
||||
BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
|
||||
}
|
||||
#endif
|
||||
#endif // !GLSLANG_WEB
|
||||
break;
|
||||
|
||||
case EShLangFragment:
|
||||
|
|
@ -8095,7 +8157,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
}
|
||||
|
||||
symbolTable.setFunctionExtensions("helperInvocationEXT", 1, &E_GL_EXT_demote_to_helper_invocation);
|
||||
#endif
|
||||
#endif // !GLSLANG_WEB
|
||||
break;
|
||||
|
||||
case EShLangCompute:
|
||||
|
|
@ -8227,10 +8289,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
}
|
||||
#endif
|
||||
#endif // !GLSLANG_WEB
|
||||
break;
|
||||
|
||||
#ifndef GLSLANG_WEB
|
||||
#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
|
||||
case EShLangRayGen:
|
||||
case EShLangIntersect:
|
||||
case EShLangAnyHit:
|
||||
|
|
@ -9133,7 +9195,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
default:
|
||||
assert(false && "Language not supported");
|
||||
}
|
||||
#endif
|
||||
#endif // !GLSLANG_WEB
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -9148,6 +9210,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
|
||||
{
|
||||
#ifndef GLSLANG_WEB
|
||||
#if defined(GLSLANG_ANGLE)
|
||||
profile = ECoreProfile;
|
||||
version = 450;
|
||||
#endif
|
||||
if (profile != EEsProfile && version >= 430 && version < 440) {
|
||||
symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
|
||||
symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue