summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-diagnostic-defs.h6
-rw-r--r--source/slang/slang-emit-spirv.cpp10
2 files changed, 16 insertions, 0 deletions
diff --git a/source/slang/slang-diagnostic-defs.h b/source/slang/slang-diagnostic-defs.h
index 305013f43..a2975e88f 100644
--- a/source/slang/slang-diagnostic-defs.h
+++ b/source/slang/slang-diagnostic-defs.h
@@ -2452,6 +2452,12 @@ DIAGNOSTIC(
DIAGNOSTIC(57001, Warning, spirvOptFailed, "spirv-opt failed. $0")
DIAGNOSTIC(57002, Error, unknownPatchConstantParameter, "unknown patch constant parameter '$0'.")
DIAGNOSTIC(57003, Error, unknownTessPartitioning, "unknown tessellation partitioning '$0'.")
+DIAGNOSTIC(
+ 57004,
+ Error,
+ outputSpvIsEmpty,
+ "output SPIR-V contains no exported symbols. Please make sure to specify at least one "
+ "entrypoint.")
// GLSL Compatibility
DIAGNOSTIC(
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp
index 92fa507e0..63ebfcf6e 100644
--- a/source/slang/slang-emit-spirv.cpp
+++ b/source/slang/slang-emit-spirv.cpp
@@ -7964,6 +7964,8 @@ SlangResult emitSPIRVFromIR(
{
spirvOut.clear();
+ bool symbolsEmitted = false;
+
auto sink = codeGenContext->getSink();
#if 0
@@ -8008,6 +8010,7 @@ SlangResult emitSPIRVFromIR(
if (shouldPreserveParams && as<IRGlobalParam>(inst))
{
context.ensureInst(inst);
+ symbolsEmitted = true;
}
if (generateWholeProgram)
{
@@ -8016,6 +8019,7 @@ SlangResult emitSPIRVFromIR(
if (func->findDecoration<IRDownstreamModuleExportDecoration>())
{
context.ensureInst(inst);
+ symbolsEmitted = true;
}
}
}
@@ -8046,8 +8050,14 @@ SlangResult emitSPIRVFromIR(
for (auto irEntryPoint : irEntryPoints)
{
context.ensureInst(irEntryPoint);
+ symbolsEmitted = true;
}
+ if (!symbolsEmitted)
+ {
+ sink->diagnose(irModule->getModuleInst(), Diagnostics::outputSpvIsEmpty);
+ return SLANG_FAIL;
+ }
// Move forward delcared pointers to the end.
do