From 11e1ecafa09396a3559fe245d729b40ce4f25d52 Mon Sep 17 00:00:00 2001 From: kaizhangNV <149626564+kaizhangNV@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:26:51 -0500 Subject: Add 'findAndCheckEntryPoint' to wasm binding (#5337) --- source/slang-wasm/slang-wasm-bindings.cpp | 4 ++++ source/slang-wasm/slang-wasm.cpp | 25 +++++++++++++++++++++++++ source/slang-wasm/slang-wasm.h | 1 + 3 files changed, 30 insertions(+) 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("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 entryPoint; + { + Slang::ComPtr 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& 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(interface()); -- cgit v1.2.3