https://github.com/shader-slang/slang
Raw File
Tip revision: d386e27dc319b2feb362acd430ff5c640d8c6fba authored by jsmall-nvidia on 02 June 2020, 19:26:51 UTC
Added spGetBuildTagString. (#1365)
Tip revision: d386e27
slang-glsl-extension-tracker.cpp
// slang-glsl-extension-tracker.cpp
#include "slang-glsl-extension-tracker.h"

namespace Slang {

void GLSLExtensionTracker::appendExtensionRequireLines(StringBuilder& ioBuilder) const
{
    for (const auto& extension : m_extensionPool.getSlices())
    {
        ioBuilder.append("#extension ");
        ioBuilder.append(extension);
        ioBuilder.append(" : require\n");
    }
}

void GLSLExtensionTracker::requireSPIRVVersion(const SemanticVersion& version)
{
    if (version > m_spirvVersion)
    {
        m_spirvVersion = version;
    }
}

void GLSLExtensionTracker::requireVersion(ProfileVersion version)
{
    // Check if this profile is newer
    if ((UInt)version > (UInt)m_profileVersion)
    {
        m_profileVersion = version;
    }
}

void GLSLExtensionTracker::requireBaseTypeExtension(BaseType baseType)
{
    uint32_t bit = 1 << int(baseType);
    if (m_hasBaseTypeFlags & bit)
    {
        return;
    }

    switch (baseType)
    {
        case BaseType::Half:
        case BaseType::UInt16:
        case BaseType::Int16:
        {
            // https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_16bit_storage.txt
            requireExtension(UnownedStringSlice::fromLiteral("GL_EXT_shader_16bit_storage"));

            // https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_shader_explicit_arithmetic_types.txt
            requireExtension(UnownedStringSlice::fromLiteral("GL_EXT_shader_explicit_arithmetic_types"));
            break;
        }
        case BaseType::UInt64:
        case BaseType::Int64:
        {
            requireExtension(UnownedStringSlice::fromLiteral("GL_EXT_shader_explicit_arithmetic_types_int64"));
            m_hasBaseTypeFlags |= _getFlag(BaseType::UInt64) | _getFlag(BaseType::Int64);
            break;
        }
    }

    m_hasBaseTypeFlags |= bit;
}

} // namespace Slang
back to top