diff options
| author | Anders Leino <aleino@nvidia.com> | 2024-10-11 13:13:04 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-11 18:13:04 +0800 |
| commit | dfab34e4bf508fc517d4d645ebb3b6b1179a5003 (patch) | |
| tree | 0a75a9618ffdbd0604145cade8dbaff7b2af01cd /source/slang-wasm/slang-wasm-bindings.cpp | |
| parent | 5fa35fcce532267a2ae5779dee9ff4d07fab6bf4 (diff) | |
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")
Diffstat (limited to 'source/slang-wasm/slang-wasm-bindings.cpp')
| -rw-r--r-- | source/slang-wasm/slang-wasm-bindings.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
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 <emscripten/bind.h> +#include <slang-com-ptr.h> +#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_<slang::wgsl::GlobalSession>("GlobalSession") + .function( + "createSession", + &slang::wgsl::GlobalSession::createSession, + return_value_policy::take_ownership()); + + class_<slang::wgsl::Session>("Session") + .function( + "loadModuleFromSource", + &slang::wgsl::Session::loadModuleFromSource, + return_value_policy::take_ownership()) + .function( + "createCompositeComponentType", + &slang::wgsl::Session::createCompositeComponentType, + return_value_policy::take_ownership()); + + class_<slang::wgsl::ComponentType>("ComponentType") + .function( + "link", + &slang::wgsl::ComponentType::link, + return_value_policy::take_ownership()) + .function( + "getEntryPointCode", + &slang::wgsl::ComponentType::getEntryPointCode); + + class_<slang::wgsl::Module, base<slang::wgsl::ComponentType>>("Module") + .function( + "findEntryPointByName", + &slang::wgsl::Module::findEntryPointByName, + return_value_policy::take_ownership()); + + value_object<slang::wgsl::Error>("Error") + .field("type", &slang::wgsl::Error::type) + .field("result", &slang::wgsl::Error::result) + .field("message", &slang::wgsl::Error::message); + + class_<slang::wgsl::EntryPoint, base<slang::wgsl::ComponentType>>("EntryPoint"); + + register_vector<slang::wgsl::ComponentType*>("ComponentTypeList"); +} |
