diff options
| author | cheneym2 <acheney@nvidia.com> | 2024-09-05 14:59:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-05 11:59:28 -0700 |
| commit | 313677160a186efebf83fab4df7d08dd119a5cd2 (patch) | |
| tree | e12e159846f0b7b0e3567d028ad4a57cd9f001aa /source/slang/slang-compiler.cpp | |
| parent | 33e8bfd43f66613f6f834fb0e1816ef43071f2e4 (diff) | |
Initial -embed-spirv support (#4974)
* Initial -embed-spirv support
Add support for SPIR-V precompilation using the framework
established for DXIL.
Work on #4883
* SLANG_UNUSED
* Add linkage attributes to exported spirv functions
* Combine DXIL and SPIRV paths
* Whitespace fix
* Merge remaining precompiled spirv/dxil paths
* Change inst accessors to return codegentarget
* Add unit test for precompiled spirv
---------
Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/slang-compiler.cpp')
| -rw-r--r-- | source/slang/slang-compiler.cpp | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/source/slang/slang-compiler.cpp b/source/slang/slang-compiler.cpp index 7d2dbed0d..4bb420fa7 100644 --- a/source/slang/slang-compiler.cpp +++ b/source/slang/slang-compiler.cpp @@ -767,9 +767,9 @@ namespace Slang # pragma warning(pop) #endif - SlangResult CodeGenContext::emitPrecompiledDXIL(ComPtr<IArtifact>& outArtifact) + SlangResult CodeGenContext::emitPrecompiledDownstreamIR(ComPtr<IArtifact>& outArtifact) { - return emitWithDownstreamForEntryPoints(outArtifact); + return _emitEntryPoints(outArtifact); } String GetHLSLProfileName(Profile profile) @@ -1257,10 +1257,7 @@ namespace Slang { CodeGenContext sourceCodeGenContext(this, sourceTarget, extensionTracker); - if (target == CodeGenTarget::DXILAssembly || target == CodeGenTarget::DXIL) - { - sourceCodeGenContext.removeAvailableInDXIL = true; - } + sourceCodeGenContext.removeAvailableInDownstreamIR = true; SLANG_RETURN_ON_FAIL(sourceCodeGenContext.emitEntryPointsSource(sourceArtifact)); sourceCodeGenContext.maybeDumpIntermediate(sourceArtifact); @@ -1561,20 +1558,23 @@ namespace Slang // Load embedded precompiled libraries from IR into library artifacts program->enumerateIRModules([&](IRModule* irModule) { - for (auto inst : irModule->getModuleInst()->getChildren()) + for (auto globalInst : irModule->getModuleInst()->getChildren()) { if (target == CodeGenTarget::DXILAssembly || target == CodeGenTarget::DXIL) { - if (inst->getOp() == kIROp_EmbeddedDXIL) + if (auto inst = as<IREmbeddedDownstreamIR>(globalInst)) { - auto slice = static_cast<IRBlobLit*>(inst->getOperand(0))->getStringSlice(); - ArtifactDesc desc = ArtifactDescUtil::makeDescForCompileTarget(SLANG_DXIL); - desc.kind = ArtifactKind::Library; + if (inst->getTarget() == CodeGenTarget::DXIL) + { + auto slice = inst->getBlob()->getStringSlice(); + ArtifactDesc desc = ArtifactDescUtil::makeDescForCompileTarget(SLANG_DXIL); + desc.kind = ArtifactKind::Library; - auto library = ArtifactUtil::createArtifact(desc); + auto library = ArtifactUtil::createArtifact(desc); - library->addRepresentationUnknown(StringBlob::create(slice)); - libraries.add(library); + library->addRepresentationUnknown(StringBlob::create(slice)); + libraries.add(library); + } } } } @@ -2030,7 +2030,7 @@ namespace Slang { if (auto artifact = targetProgram->getExistingWholeProgramResult()) { - if (!targetProgram->getOptionSet().getBoolOption(CompilerOptionName::EmbedDXIL)) + if (!targetProgram->getOptionSet().getBoolOption(CompilerOptionName::EmbedDownstreamIR)) { artifacts.add(ComPtr<IArtifact>(artifact)); } @@ -2285,6 +2285,9 @@ namespace Slang auto linkage = getLinkage(); for (auto targetReq : linkage->targets) { + if (targetReq->getOptionSet().getBoolOption(CompilerOptionName::EmbedDownstreamIR)) + continue; + auto targetProgram = program->getTargetProgram(targetReq); generateOutput(targetProgram); } |
