diff options
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); } |
