summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-spirv.cpp
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2023-08-08 06:02:53 +0800
committerGitHub <noreply@github.com>2023-08-07 15:02:53 -0700
commit3a9624040d3a3395d855caaa4358a9ff1fbcca3b (patch)
tree97a7f9de5b7c7718714f566a28c147d93cadd086 /source/slang/slang-emit-spirv.cpp
parent0e28cd02710e6a8e989e89fd1f9b4ebf85892f99 (diff)
Validate generated SPIR-V on output (#3061)
* Validate generated SPIR-V * regenerate vs projects * Do not fail compiles if spirv-val is not available --------- Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/slang-emit-spirv.cpp')
-rw-r--r--source/slang/slang-emit-spirv.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/source/slang/slang-emit-spirv.cpp b/source/slang/slang-emit-spirv.cpp
index 1386de4eb..c16ee6a90 100644
--- a/source/slang/slang-emit-spirv.cpp
+++ b/source/slang/slang-emit-spirv.cpp
@@ -9,6 +9,7 @@
#include "slang-ir-layout.h"
#include "slang-ir-spirv-snippet.h"
#include "slang-ir-spirv-legalize.h"
+#include "slang-spirv-val.h"
#include "spirv/unified1/spirv.h"
#include "../core/slang-memory-arena.h"
@@ -3078,6 +3079,18 @@ SlangResult emitSPIRVFromIR(
(uint8_t const*) context.m_words.getBuffer(),
context.m_words.getCount() * sizeof(context.m_words[0]));
+ const auto validationResult = debugValidateSPIRV(spirvOut);
+ // If validation isn't available, don't say it failed, it's just a debug
+ // feature so we can skip
+ if(SLANG_FAILED(validationResult) && validationResult != SLANG_E_NOT_AVAILABLE)
+ {
+ codeGenContext->getSink()->diagnoseWithoutSourceView(
+ SourceLoc{},
+ Diagnostics::spirvValidationFailed
+ );
+ return validationResult;
+ }
+
return SLANG_OK;
}