summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-emit.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-03-05 10:59:54 -0500
committerGitHub <noreply@github.com>2020-03-05 10:59:54 -0500
commit6684d32db1f5693bcfb4971558cb30e855cd3bad (patch)
tree480e014b917a6eb0fe72faa6c52a25f4856ed1cb /source/slang/slang-emit.cpp
parent5951d2a45f3546a619fb5b032a4a422229c46e4c (diff)
Feature/glslang spirv version (#1256)
* WIP add support for __spirv_version . * Added IRRequireSPIRVVersionDecoration * SPIR-V version passed to glslang. Enable VK wave tests. Split ExtensionTracker out, so can be cast and used externally to emit. Added SourceResult. * Fix warning on Clang. * Missing hlsl.meta.h * Refactor communication/parsing of __spirv_version with glslang. * Fix some debug typos. Be more precise in handling of substring handling. * Make glslang forwards and backwards binary compatible. * Small comment improvements. * Added slang-spirv-target-info.h/cpp * Fix for major/minor on gcc. * Another fix for gcc/clang. * VS projects include slang-spirv-target-info.h/cpp * Removed SPIRVTargetInfo Added SemanticVersion. Don't bother with passing a target to glslang. Should be separate from 'version'. * Renamed slang-emit-glsl-extension-tracker.cpp/.h -> slang-glsl-extension-tracker.cpp/.h Fixed some VS project issues. * Fix a comment. * Added slang-semantic-version.cpp/.h * Added slang-glsl-extension-tracker.cpp/.h * Added split that can check for input has all been parsed. * Fix problem on x86 win build.
Diffstat (limited to 'source/slang/slang-emit.cpp')
-rw-r--r--source/slang/slang-emit.cpp34
1 files changed, 24 insertions, 10 deletions
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp
index d5dc9cbe7..dcca7d25e 100644
--- a/source/slang/slang-emit.cpp
+++ b/source/slang/slang-emit.cpp
@@ -421,12 +421,14 @@ Result linkAndOptimizeIR(
{
case CodeGenTarget::GLSL:
{
+ auto glslExtensionTracker = as<GLSLExtensionTracker>(options.sourceEmitter->getExtensionTracker());
+
legalizeEntryPointForGLSL(
session,
irModule,
irEntryPoint,
compileRequest->getSink(),
- options.sourceEmitter->getGLSLExtensionTracker());
+ glslExtensionTracker);
#if 0
dumpIRIfEnabled(compileRequest, irModule, "GLSL LEGALIZED");
@@ -458,12 +460,15 @@ Result linkAndOptimizeIR(
return SLANG_OK;
}
-String emitEntryPointSourceFromIR(
+SlangResult emitEntryPointSourceFromIR(
BackEndCompileRequest* compileRequest,
Int entryPointIndex,
CodeGenTarget target,
- TargetRequest* targetRequest)
+ TargetRequest* targetRequest,
+ SourceResult& outSource)
{
+ outSource.reset();
+
auto sink = compileRequest->getSink();
auto program = compileRequest->getProgram();
@@ -496,7 +501,7 @@ String emitEntryPointSourceFromIR(
LinkedIR linkedIR;
RefPtr<CLikeSourceEmitter> sourceEmitter;
-
+
typedef CLikeSourceEmitter::SourceStyle SourceStyle;
SourceStyle sourceStyle = CLikeSourceEmitter::getSourceStyle(target);
@@ -528,7 +533,7 @@ String emitEntryPointSourceFromIR(
if (!sourceEmitter)
{
sink->diagnose(SourceLoc(), Diagnostics::unableToGenerateCodeForTarget, TypeTextUtil::getCompileTargetName(SlangCompileTarget(target)));
- return String();
+ return SLANG_FAIL;
}
{
@@ -582,8 +587,10 @@ String emitEntryPointSourceFromIR(
case Stage::RayGeneration:
if( target == CodeGenTarget::GLSL )
{
- sourceEmitter->getGLSLExtensionTracker()->requireExtension("GL_NV_ray_tracing");
- sourceEmitter->getGLSLExtensionTracker()->requireVersion(ProfileVersion::GLSL_460);
+ auto glslExtensionTracker = as<GLSLExtensionTracker>(sourceEmitter->getExtensionTracker());
+
+ glslExtensionTracker->requireExtension(UnownedStringSlice::fromLiteral("GL_NV_ray_tracing"));
+ glslExtensionTracker->requireVersion(ProfileVersion::GLSL_460);
}
break;
}
@@ -630,13 +637,20 @@ String emitEntryPointSourceFromIR(
StringBuilder finalResultBuilder;
finalResultBuilder << prefix;
- finalResultBuilder << sourceEmitter->getGLSLExtensionTracker()->getExtensionRequireLines();
+ RefObject* extensionTracker = sourceEmitter->getExtensionTracker();
+
+ if (auto glslExtensionTracker = as<GLSLExtensionTracker>(extensionTracker))
+ {
+ glslExtensionTracker->appendExtensionRequireLines(finalResultBuilder);
+ }
finalResultBuilder << code;
- String finalResult = finalResultBuilder.ProduceString();
+ // Write out the result
+ outSource.source = finalResultBuilder.ProduceString();
+ outSource.extensionTracker = extensionTracker;
- return finalResult;
+ return SLANG_OK;
}
SlangResult emitSPIRVFromIR(