summaryrefslogtreecommitdiffstats
path: root/source/slang/compiler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/compiler.cpp')
-rw-r--r--source/slang/compiler.cpp52
1 files changed, 35 insertions, 17 deletions
diff --git a/source/slang/compiler.cpp b/source/slang/compiler.cpp
index 9ca1d247f..25ae460c7 100644
--- a/source/slang/compiler.cpp
+++ b/source/slang/compiler.cpp
@@ -499,25 +499,14 @@ namespace Slang
}
#endif
-#if 0
- String emitSPIRVAssembly(
- ExtraContext& context)
+ List<uint8_t> emitSlangIRForEntryPoint(
+ EntryPointRequest* entryPoint)
{
- if(context.getTranslationUnitOptions().entryPoints.Count() == 0)
- {
- // TODO(tfoley): need to write diagnostics into this whole thing...
- fprintf(stderr, "no entry point specified\n");
- return "";
- }
-
- StringBuilder sb;
- for (auto entryPoint : context.getTranslationUnitOptions().entryPoints)
- {
- sb << emitSPIRVAssemblyForEntryPoint(context, entryPoint);
- }
- return sb.ProduceString();
+ SLANG_UNIMPLEMENTED_X("Slang IR Binary Generation");
}
-#endif
+
+ String emitSlangIRAssemblyForEntryPoint(
+ EntryPointRequest* entryPoint);
// Do emit logic for a single entry point
CompileResult emitEntryPoint(
@@ -578,6 +567,22 @@ namespace Slang
}
break;
+ case CodeGenTarget::SlangIR:
+ {
+ List<uint8_t> code = emitSlangIRForEntryPoint(entryPoint);
+ maybeDumpIntermediate(compileRequest, code.Buffer(), code.Count(), target);
+ result = CompileResult(code);
+ }
+ break;
+
+ case CodeGenTarget::SlangIRAssembly:
+ {
+ String code = emitSlangIRAssemblyForEntryPoint(entryPoint);
+ maybeDumpIntermediate(compileRequest, code.Buffer(), target);
+ result = CompileResult(code);
+ }
+ break;
+
case CodeGenTarget::None:
// The user requested no output
break;
@@ -957,6 +962,10 @@ namespace Slang
dumpIntermediateText(compileRequest, data, size, ".dxbc.asm");
break;
+ case CodeGenTarget::SlangIRAssembly:
+ dumpIntermediateText(compileRequest, data, size, ".slang-ir.asm");
+ break;
+
case CodeGenTarget::SPIRV:
dumpIntermediateBinary(compileRequest, data, size, ".spv");
{
@@ -972,6 +981,15 @@ namespace Slang
dumpIntermediateText(compileRequest, dxbcAssembly.begin(), dxbcAssembly.Length(), ".dxbc.asm");
}
break;
+
+ case CodeGenTarget::SlangIR:
+ dumpIntermediateBinary(compileRequest, data, size, ".slang-ir");
+ {
+ // TODO: need to support dissassembly from Slang IR binary
+// String slangIRAssembly = dissassembleSlangIR(compileRequest, data, size);
+// dumpIntermediateText(compileRequest, slangIRAssembly.begin(), slangIRAssembly.Length(), ".slang-ir.asm");
+ }
+ break;
}
}