summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-compiler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-compiler.cpp')
-rw-r--r--source/slang/slang-compiler.cpp33
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);
}