From dfab34e4bf508fc517d4d645ebb3b6b1179a5003 Mon Sep 17 00:00:00 2001 From: Anders Leino Date: Fri, 11 Oct 2024 13:13:04 +0300 Subject: Add slang-wasm target (#5237) Support for exceptions is enabled, since Slang uses them for diagnostics. The size optimization arguments ('-Os') resolves some internal emscripten error during the slang-wasm.wasm linking step, which happens when enabling exceptions. ("parse exception: too many locals") --- source/slang-wasm/slang-wasm-bindings.cpp | 59 +++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 source/slang-wasm/slang-wasm-bindings.cpp (limited to 'source/slang-wasm/slang-wasm-bindings.cpp') diff --git a/source/slang-wasm/slang-wasm-bindings.cpp b/source/slang-wasm/slang-wasm-bindings.cpp new file mode 100644 index 000000000..4880596a9 --- /dev/null +++ b/source/slang-wasm/slang-wasm-bindings.cpp @@ -0,0 +1,59 @@ +#include +#include +#include "slang-wasm.h" + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(slang) +{ + constant("SLANG_OK", SLANG_OK); + + function( + "createGlobalSession", + &slang::wgsl::createGlobalSession, + return_value_policy::take_ownership()); + + function( + "getLastError", + &slang::wgsl::getLastError); + + class_("GlobalSession") + .function( + "createSession", + &slang::wgsl::GlobalSession::createSession, + return_value_policy::take_ownership()); + + class_("Session") + .function( + "loadModuleFromSource", + &slang::wgsl::Session::loadModuleFromSource, + return_value_policy::take_ownership()) + .function( + "createCompositeComponentType", + &slang::wgsl::Session::createCompositeComponentType, + return_value_policy::take_ownership()); + + class_("ComponentType") + .function( + "link", + &slang::wgsl::ComponentType::link, + return_value_policy::take_ownership()) + .function( + "getEntryPointCode", + &slang::wgsl::ComponentType::getEntryPointCode); + + class_>("Module") + .function( + "findEntryPointByName", + &slang::wgsl::Module::findEntryPointByName, + return_value_policy::take_ownership()); + + value_object("Error") + .field("type", &slang::wgsl::Error::type) + .field("result", &slang::wgsl::Error::result) + .field("message", &slang::wgsl::Error::message); + + class_>("EntryPoint"); + + register_vector("ComponentTypeList"); +} -- cgit v1.2.3