diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-03-05 10:59:54 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-05 10:59:54 -0500 |
| commit | 6684d32db1f5693bcfb4971558cb30e855cd3bad (patch) | |
| tree | 480e014b917a6eb0fe72faa6c52a25f4856ed1cb /source/slang/slang-emit.cpp | |
| parent | 5951d2a45f3546a619fb5b032a4a422229c46e4c (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.cpp | 34 |
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( |
