summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaizhangNV <149626564+kaizhangNV@users.noreply.github.com>2024-10-17 17:26:51 -0500
committerGitHub <noreply@github.com>2024-10-17 15:26:51 -0700
commit11e1ecafa09396a3559fe245d729b40ce4f25d52 (patch)
treed55928a4897033705401ea0fdb4e034d61b80cbb
parentfa3287fb6ec38127bad8fe948fbc190e7a3d54b2 (diff)
Add 'findAndCheckEntryPoint' to wasm binding (#5337)
-rw-r--r--source/slang-wasm/slang-wasm-bindings.cpp4
-rw-r--r--source/slang-wasm/slang-wasm.cpp25
-rw-r--r--source/slang-wasm/slang-wasm.h1
3 files changed, 30 insertions, 0 deletions
diff --git a/source/slang-wasm/slang-wasm-bindings.cpp b/source/slang-wasm/slang-wasm-bindings.cpp
index 4880596a9..f8175180a 100644
--- a/source/slang-wasm/slang-wasm-bindings.cpp
+++ b/source/slang-wasm/slang-wasm-bindings.cpp
@@ -46,6 +46,10 @@ EMSCRIPTEN_BINDINGS(slang)
.function(
"findEntryPointByName",
&slang::wgsl::Module::findEntryPointByName,
+ return_value_policy::take_ownership())
+ .function(
+ "findAndCheckEntryPoint",
+ &slang::wgsl::Module::findAndCheckEntryPoint,
return_value_policy::take_ownership());
value_object<slang::wgsl::Error>("Error")
diff --git a/source/slang-wasm/slang-wasm.cpp b/source/slang-wasm/slang-wasm.cpp
index ee64f0e9b..a679a5f3d 100644
--- a/source/slang-wasm/slang-wasm.cpp
+++ b/source/slang-wasm/slang-wasm.cpp
@@ -103,6 +103,31 @@ EntryPoint* Module::findEntryPointByName(const std::string& name)
return new EntryPoint(entryPoint);
}
+
+EntryPoint* Module::findAndCheckEntryPoint(const std::string& name, int stage)
+{
+ Slang::ComPtr<IEntryPoint> entryPoint;
+ {
+ Slang::ComPtr<slang::IBlob> diagnosticsBlob;
+ SlangResult result = moduleInterface()->findAndCheckEntryPoint(
+ name.c_str(), (SlangStage)stage, entryPoint.writeRef(), diagnosticsBlob.writeRef());
+ if (!SLANG_SUCCEEDED(result))
+ {
+ g_error.type = std::string("USER");
+ g_error.result = result;
+
+ if (diagnosticsBlob->getBufferSize())
+ {
+ char* diagnostics = (char*)diagnosticsBlob->getBufferPointer();
+ g_error.message = std::string(diagnostics);
+ }
+ return nullptr;
+ }
+ }
+
+ return new EntryPoint(entryPoint);
+}
+
ComponentType* Session::createCompositeComponentType(
const std::vector<ComponentType*>& components)
{
diff --git a/source/slang-wasm/slang-wasm.h b/source/slang-wasm/slang-wasm.h
index 24ce62392..c329716e8 100644
--- a/source/slang-wasm/slang-wasm.h
+++ b/source/slang-wasm/slang-wasm.h
@@ -60,6 +60,7 @@ public:
Module(slang::IModule* interface) : ComponentType(interface) {}
EntryPoint* findEntryPointByName(const std::string& name);
+ EntryPoint* findAndCheckEntryPoint(const std::string& name, int stage);
slang::IModule* moduleInterface() const {
return static_cast<slang::IModule*>(interface());