summaryrefslogtreecommitdiff
path: root/source/slang-glslang
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang-glslang')
-rw-r--r--source/slang-glslang/slang-glslang.cpp20
-rw-r--r--source/slang-glslang/slang-glslang.h1
2 files changed, 21 insertions, 0 deletions
diff --git a/source/slang-glslang/slang-glslang.cpp b/source/slang-glslang/slang-glslang.cpp
index cdbc95031..8ae85b631 100644
--- a/source/slang-glslang/slang-glslang.cpp
+++ b/source/slang-glslang/slang-glslang.cpp
@@ -145,6 +145,26 @@ struct SPIRVOptimizationDiagnostic
std::string message;
};
+// Validate the given SPIRV-ASM instructions.
+extern "C"
+#ifdef _MSC_VER
+_declspec(dllexport)
+#else
+__attribute__((__visibility__("default")))
+#endif
+bool glslang_validateSPIRV(const uint32_t* contents, int contentsSize)
+{
+ spv_target_env target_env = SPV_ENV_VULKAN_1_3;
+
+ spvtools::ValidatorOptions options;
+ options.SetScalarBlockLayout(true);
+
+ spvtools::SpirvTools tools(target_env);
+ //tools.SetMessageConsumer(spvtools::utils::CLIMessageConsumer);
+
+ return tools.Validate(contents, contentsSize, options);
+}
+
// Apply the SPIRV-Tools optimizer to generated SPIR-V based on the desired optimization level
// TODO: add flag for optimizing SPIR-V size as well
static void glslang_optimizeSPIRV(spv_target_env targetEnv, const glslang_CompileRequest_1_2& request, std::vector<SPIRVOptimizationDiagnostic>& outDiags, std::vector<unsigned int>& ioSpirv)
diff --git a/source/slang-glslang/slang-glslang.h b/source/slang-glslang/slang-glslang.h
index 68c24d889..00205a114 100644
--- a/source/slang-glslang/slang-glslang.h
+++ b/source/slang-glslang/slang-glslang.h
@@ -147,5 +147,6 @@ inline void glslang_CompileRequest_1_2::set(const glslang_CompileRequest_1_1& in
typedef int (*glslang_CompileFunc_1_0)(glslang_CompileRequest_1_0* request);
typedef int (*glslang_CompileFunc_1_1)(glslang_CompileRequest_1_1* request);
typedef int (*glslang_CompileFunc_1_2)(glslang_CompileRequest_1_2* request);
+typedef bool (*glslang_ValidateSPIRVFunc)(const uint32_t* contents, int contentsSize);
#endif