diff options
| author | kaizhangNV <149626564+kaizhangNV@users.noreply.github.com> | 2024-10-17 17:26:51 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-17 15:26:51 -0700 |
| commit | 11e1ecafa09396a3559fe245d729b40ce4f25d52 (patch) | |
| tree | d55928a4897033705401ea0fdb4e034d61b80cbb | |
| parent | fa3287fb6ec38127bad8fe948fbc190e7a3d54b2 (diff) | |
Add 'findAndCheckEntryPoint' to wasm binding (#5337)
| -rw-r--r-- | source/slang-wasm/slang-wasm-bindings.cpp | 4 | ||||
| -rw-r--r-- | source/slang-wasm/slang-wasm.cpp | 25 | ||||
| -rw-r--r-- | source/slang-wasm/slang-wasm.h | 1 |
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()); |
