From a9e16bd73a957b7849055923f9ee2a1f0c0fafe4 Mon Sep 17 00:00:00 2001 From: nihui Date: Sat, 12 Sep 2020 10:04:36 +0800 Subject: [PATCH 1/2] Fix build android ndk r16b --- glslang/MachineIndependent/ParseHelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 4d202260..36e37157 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5417,7 +5417,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi if (! IsPow2(value)) error(loc, "must be a power of 2", "buffer_reference_align", ""); else - publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)std::log2(value); + publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)log2(value); if (nonLiteral) error(loc, "needs a literal integer", "buffer_reference_align", ""); return; From 5c202faffbb826fdec87caa3496b2b6726b3cc07 Mon Sep 17 00:00:00 2001 From: nihui Date: Wed, 23 Dec 2020 21:56:23 +0800 Subject: [PATCH 2/2] Update ParseHelper.cpp --- glslang/MachineIndependent/ParseHelper.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 36e37157..cc4c4970 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5417,7 +5417,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi if (! IsPow2(value)) error(loc, "must be a power of 2", "buffer_reference_align", ""); else - publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)log2(value); +#ifdef __ANDROID__ + // Android NDK r15c tageting ABI 15 doesn't have full support for C++11 + // (no std::exp2/log2). ::exp2 is available from C99 but ::log2 isn't + // available up until ABI 18 so we use the mathematical equivalent form + publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)(std::log(value) / std::log(2.0)); +#else + publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)std::log2(value); +#endif if (nonLiteral) error(loc, "needs a literal integer", "buffer_reference_align", ""); return;