summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-emit.cpp
diff options
context:
space:
mode:
authorJay Kwak <82421531+jkwak-work@users.noreply.github.com>2024-07-17 17:00:05 -0700
committerGitHub <noreply@github.com>2024-07-17 17:00:05 -0700
commit32b1e25e359f8daf5254301dca8be308e8e1e2ab (patch)
tree2dd2bf7324b771c4a0aa989194a9b1d3b219af18 /source/slang/slang-emit.cpp
parent2db15080085856ed9b5f20642dbb354aac59a888 (diff)
Use slang-glslang.dll for spirv-validation (#4642)
* Use slang-glslang.dll for spirv-validation This change replaces the use of "spirv-val.exe" with an API call to "spvtools::SpirvTools::Validate()". Closes #4610
Diffstat (limited to 'source/slang/slang-emit.cpp')
-rw-r--r--source/slang/slang-emit.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp
index cb8460173..679d8ce88 100644
--- a/source/slang/slang-emit.cpp
+++ b/source/slang/slang-emit.cpp
@@ -1704,6 +1704,22 @@ SlangResult emitSPIRVForEntryPointsDirectly(
PassThroughMode::SpirvOpt, codeGenContext->getSink());
if (compiler)
{
+ if (!codeGenContext->shouldSkipSPIRVValidation())
+ {
+ StringBuilder runSpirvValEnvVar;
+ PlatformUtil::getEnvironmentVariable(UnownedStringSlice("SLANG_RUN_SPIRV_VALIDATION"), runSpirvValEnvVar);
+ if (runSpirvValEnvVar.getUnownedSlice() == "1")
+ {
+ if (SLANG_FAILED(compiler->validate((uint32_t*)spirv.getBuffer(), int(spirv.getCount()/4))))
+ {
+ codeGenContext->getSink()->diagnoseWithoutSourceView(
+ SourceLoc{},
+ Diagnostics::spirvValidationFailed
+ );
+ }
+ }
+ }
+
ComPtr<IArtifact> optimizedArtifact;
DownstreamCompileOptions downstreamOptions;
downstreamOptions.sourceArtifacts = makeSlice(artifact.readRef(), 1);