summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-glsl-extension-tracker.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-01-30 16:28:50 -0500
committerGitHub <noreply@github.com>2020-01-30 16:28:50 -0500
commit5942ff81d9a63ee1e37ba81172ea579646be774e (patch)
tree2a4cdb5851348f11a8fcde1605e81c29c1227727 /source/slang/slang-emit-glsl-extension-tracker.cpp
parent415409fc10cfd0d6b2eb805df8f37bdabc4f2405 (diff)
Support for 64 bit integer types (#1191)
* * For integer literals add postfix, and use unsigned/signed output appropriately * Extend GLSL extension handling by type, and for adding 64 bit int extensions * Added tests for int/uint64 types * Add explicit Int/UInt64 emit functions to avoid ambiguity.
Diffstat (limited to 'source/slang/slang-emit-glsl-extension-tracker.cpp')
-rw-r--r--source/slang/slang-emit-glsl-extension-tracker.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/source/slang/slang-emit-glsl-extension-tracker.cpp b/source/slang/slang-emit-glsl-extension-tracker.cpp
index c162f2f46..e1bbb3e46 100644
--- a/source/slang/slang-emit-glsl-extension-tracker.cpp
+++ b/source/slang/slang-emit-glsl-extension-tracker.cpp
@@ -26,18 +26,35 @@ void GLSLExtensionTracker::requireVersion(ProfileVersion version)
}
}
-void GLSLExtensionTracker::requireHalfExtension()
+void GLSLExtensionTracker::requireBaseTypeExtension(BaseType baseType)
{
- if (!m_hasHalfExtension)
+ uint32_t bit = 1 << int(baseType);
+ if (m_hasBaseTypeFlags & bit)
{
- // https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_16bit_storage.txt
- requireExtension("GL_EXT_shader_16bit_storage");
-
- // https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_explicit_arithmetic_types.txt
- requireExtension("GL_EXT_shader_explicit_arithmetic_types");
+ return;
+ }
- m_hasHalfExtension = true;
+ switch (baseType)
+ {
+ case BaseType::Half:
+ {
+ // https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_16bit_storage.txt
+ requireExtension("GL_EXT_shader_16bit_storage");
+
+ // https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_explicit_arithmetic_types.txt
+ requireExtension("GL_EXT_shader_explicit_arithmetic_types");
+ break;
+ }
+ case BaseType::UInt64:
+ case BaseType::Int64:
+ {
+ requireExtension("GL_EXT_shader_explicit_arithmetic_types_int64");
+ m_hasBaseTypeFlags |= _getFlag(BaseType::UInt64) | _getFlag(BaseType::Int64);
+ break;
+ }
}
+
+ m_hasBaseTypeFlags |= bit;
}