diff options
Diffstat (limited to 'source/slang/emit.cpp')
| -rw-r--r-- | source/slang/emit.cpp | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/source/slang/emit.cpp b/source/slang/emit.cpp index 4754578b3..ee90510a9 100644 --- a/source/slang/emit.cpp +++ b/source/slang/emit.cpp @@ -15,6 +15,31 @@ namespace Slang { +struct ExtensionUsageTracker +{ + // Record the GLSL extnsions we have already emitted a `#extension` for + HashSet<String> glslExtensionsRequired; + StringBuilder glslExtensionRequireLines; +}; + +void requireGLSLExtension( + ExtensionUsageTracker* tracker, + String const& name) +{ + if (tracker->glslExtensionsRequired.Contains(name)) + return; + + StringBuilder& sb = tracker->glslExtensionRequireLines; + + sb.append("#extension "); + sb.append(name); + sb.append(" : require\n"); + + tracker->glslExtensionsRequired.Add(name); +} + + + // Shared state for an entire emit session struct SharedEmitContext { @@ -61,9 +86,7 @@ struct SharedEmitContext bool needHackSamplerForTexelFetch = false; - // Record the GLSL extnsions we have already emitted a `#extension` for - HashSet<String> glslExtensionsRequired; - StringBuilder glslExtensionRequireLines; + ExtensionUsageTracker extensionUsageTracker; }; struct EmitContext @@ -1668,16 +1691,7 @@ struct EmitVisitor void requireGLSLExtension(String const& name) { - if (context->shared->glslExtensionsRequired.Contains(name)) - return; - - StringBuilder& sb = context->shared->glslExtensionRequireLines; - - sb.append("#extension "); - sb.append(name); - sb.append(" : require\n"); - - context->shared->glslExtensionsRequired.Add(name); + Slang::requireGLSLExtension(&context->shared->extensionUsageTracker, name); } void requireGLSLVersion(ProfileVersion version) @@ -3774,7 +3788,7 @@ String emitEntryPoint( // because the lowering process might change how we emit some // boilerplate at the start of the ouput for GLSL (e.g., what // version we require). - auto lowered = lowerEntryPoint(entryPoint, programLayout, target); + auto lowered = lowerEntryPoint(entryPoint, programLayout, target, &sharedContext.extensionUsageTracker); sharedContext.program = lowered.program; // Note that we emit the main body code of the program *before* @@ -3797,7 +3811,7 @@ String emitEntryPoint( StringBuilder finalResultBuilder; finalResultBuilder << prefix; - finalResultBuilder << sharedContext.glslExtensionRequireLines.ProduceString(); + finalResultBuilder << sharedContext.extensionUsageTracker.glslExtensionRequireLines.ProduceString(); if (sharedContext.needHackSamplerForTexelFetch) { |
