From ea04ad12110df6b958c117f5d92f45813316cd70 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 11 Nov 2024 19:29:18 -0800 Subject: Add wasm binding to get reflection json. (#5536) Co-authored-by: Ellie Hermaszewska --- source/slang-wasm/slang-wasm-bindings.cpp | 1 + source/slang-wasm/slang-wasm.cpp | 13 +++++++++++++ source/slang-wasm/slang-wasm.h | 2 ++ 3 files changed, 16 insertions(+) (limited to 'source/slang-wasm') diff --git a/source/slang-wasm/slang-wasm-bindings.cpp b/source/slang-wasm/slang-wasm-bindings.cpp index 346fe8a04..8c8257795 100644 --- a/source/slang-wasm/slang-wasm-bindings.cpp +++ b/source/slang-wasm/slang-wasm-bindings.cpp @@ -54,6 +54,7 @@ EMSCRIPTEN_BINDINGS(slang) .function("getBindingIndex", &slang::wgsl::VariableLayoutReflection::getBindingIndex); class_("ProgramLayout") + .function("toJsonObject", &slang::wgsl::ProgramLayout::toJsonObject) .function("getParameterCount", &slang::wgsl::ProgramLayout::getParameterCount) .function( "getParameterByIndex", diff --git a/source/slang-wasm/slang-wasm.cpp b/source/slang-wasm/slang-wasm.cpp index bdc2e5e6e..c6c008483 100644 --- a/source/slang-wasm/slang-wasm.cpp +++ b/source/slang-wasm/slang-wasm.cpp @@ -415,6 +415,19 @@ unsigned int ProgramLayout::getParameterCount() return interface()->getParameterCount(); } +emscripten::val ProgramLayout::toJsonObject() +{ + Slang::ComPtr blob; + if (SLANG_FAILED(interface()->toJson(blob.writeRef()))) + return {}; + auto jsonString = std::string( + (char*)blob->getBufferPointer(), + (char*)blob->getBufferPointer() + blob->getBufferSize()); + emscripten::val parsedObject = + emscripten::val::global("JSON").call("parse", jsonString); + return parsedObject; +} + VariableLayoutReflection* ProgramLayout::getParameterByIndex(unsigned int index) { return (slang::wgsl::VariableLayoutReflection*)(interface()->getParameterByIndex(index)); diff --git a/source/slang-wasm/slang-wasm.h b/source/slang-wasm/slang-wasm.h index 1f2be2fb5..4288aed18 100644 --- a/source/slang-wasm/slang-wasm.h +++ b/source/slang-wasm/slang-wasm.h @@ -82,6 +82,8 @@ public: slang::wgsl::TypeLayoutReflection* getGlobalParamsTypeLayout(); slang::ProgramLayout* interface() const { return (slang::ProgramLayout*)this; } + + emscripten::val toJsonObject(); }; class Session; -- cgit v1.2.3