Skip to content

Commit 1b5679f

Browse files
arya3dslangbot
andauthored
Reflection API Wasm Bindings Part1 (shader-slang#5936)
* add a lot of missing classes, functios and enums * typescript defintion generation * formatting * format code --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
1 parent e15c280 commit 1b5679f

File tree

4 files changed

+469
-20
lines changed

4 files changed

+469
-20
lines changed

source/slang-wasm/CMakeLists.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,8 @@ if(EMSCRIPTEN)
2222
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/include .
2323
)
2424
# To generate binding code
25-
target_link_options(slang-wasm PUBLIC "--bind")
25+
target_link_options(
26+
slang-wasm
27+
PUBLIC "--bind" "--emit-tsd" "interface.d.ts" "-s" "EXPORT_ES6=1"
28+
)
2629
endif()

source/slang-wasm/slang-wasm-bindings.cpp

+158
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,36 @@ EMSCRIPTEN_BINDINGS(slang)
4545
"getDescriptorSetDescriptorRangeType",
4646
&slang::wgsl::TypeLayoutReflection::getDescriptorSetDescriptorRangeType);
4747

48+
enum_<slang::Modifier::ID>("ModifierID")
49+
.value("Shared", slang::Modifier::ID::Shared)
50+
.value("NoDiff", slang::Modifier::ID::NoDiff)
51+
.value("Static", slang::Modifier::ID::Static)
52+
.value("Const", slang::Modifier::ID::Const)
53+
.value("Export", slang::Modifier::ID::Export)
54+
.value("Extern", slang::Modifier::ID::Extern)
55+
.value("Differentiable", slang::Modifier::ID::Differentiable)
56+
.value("Mutating", slang::Modifier::ID::Mutating)
57+
.value("In", slang::Modifier::ID::In)
58+
.value("Out", slang::Modifier::ID::Out)
59+
.value("InOut", slang::Modifier::ID::InOut);
60+
61+
class_<slang::Modifier>("Modifier");
62+
63+
class_<slang::wgsl::VariableReflection>("VariableReflection")
64+
.function("getName", &slang::wgsl::VariableReflection::getName)
65+
.function(
66+
"findModifier",
67+
&slang::wgsl::VariableReflection::findModifier,
68+
allow_raw_pointers())
69+
.function("getType", &slang::wgsl::VariableReflection::getType, allow_raw_pointers())
70+
.function("getUserAttributeCount", &slang::wgsl::VariableReflection::getUserAttributeCount)
71+
.function(
72+
"getUserAttributeByIndex",
73+
&slang::wgsl::VariableReflection::getUserAttributeByIndex,
74+
allow_raw_pointers())
75+
.function("hasDefaultValue", &slang::wgsl::VariableReflection::hasDefaultValue);
76+
77+
4878
class_<slang::wgsl::VariableLayoutReflection>("VariableLayoutReflection")
4979
.function("getName", &slang::wgsl::VariableLayoutReflection::getName)
5080
.function(
@@ -53,6 +83,130 @@ EMSCRIPTEN_BINDINGS(slang)
5383
allow_raw_pointers())
5484
.function("getBindingIndex", &slang::wgsl::VariableLayoutReflection::getBindingIndex);
5585

86+
class_<slang::wgsl::GenericReflection>("GenericReflection")
87+
.function("getName", &slang::wgsl::GenericReflection::getName)
88+
.function("getTypeParameterCount", &slang::wgsl::GenericReflection::getTypeParameterCount)
89+
.function("getValueParameterCount", &slang::wgsl::GenericReflection::getValueParameterCount)
90+
.function("getInnerKind", &slang::wgsl::GenericReflection::getInnerKind)
91+
.function("asDecl", &slang::wgsl::GenericReflection::asDecl, allow_raw_pointers())
92+
// .function(
93+
// "getTypeParameterConstraintCount",
94+
// &slang::wgsl::GenericReflection::getTypeParameterConstraintCount,
95+
// allow_raw_pointers())
96+
.function(
97+
"getTypeParameter",
98+
&slang::wgsl::GenericReflection::getTypeParameter,
99+
allow_raw_pointers())
100+
.function(
101+
"getValueParameter",
102+
&slang::wgsl::GenericReflection::getValueParameter,
103+
allow_raw_pointers())
104+
.function(
105+
"getInnerDecl",
106+
&slang::wgsl::GenericReflection::getInnerDecl,
107+
allow_raw_pointers())
108+
.function(
109+
"getOuterGenericContainer",
110+
&slang::wgsl::GenericReflection::getOuterGenericContainer,
111+
allow_raw_pointers());
112+
113+
enum_<SlangDeclKind>("SlangDeclKind")
114+
.value(
115+
"SLANG_DECL_KIND_UNSUPPORTED_FOR_REFLECTION",
116+
SlangDeclKind::SLANG_DECL_KIND_UNSUPPORTED_FOR_REFLECTION)
117+
.value("SLANG_DECL_KIND_STRUCT", SlangDeclKind::SLANG_DECL_KIND_STRUCT)
118+
.value("SLANG_DECL_KIND_FUNC", SlangDeclKind::SLANG_DECL_KIND_FUNC)
119+
.value("SLANG_DECL_KIND_MODULE", SlangDeclKind::SLANG_DECL_KIND_MODULE)
120+
.value("SLANG_DECL_KIND_GENERIC", SlangDeclKind::SLANG_DECL_KIND_GENERIC)
121+
.value("SLANG_DECL_KIND_VARIABLE", SlangDeclKind::SLANG_DECL_KIND_VARIABLE)
122+
.value("SLANG_DECL_KIND_NAMESPACE", SlangDeclKind::SLANG_DECL_KIND_NAMESPACE);
123+
124+
class_<slang::wgsl::DeclReflection>("DeclReflection")
125+
.function("getName", &slang::wgsl::DeclReflection::getName)
126+
.function("getChildrenCount", &slang::wgsl::DeclReflection::getChildrenCount)
127+
.function("getKind", &slang::wgsl::DeclReflection::getKind)
128+
.function("getChild", &slang::wgsl::DeclReflection::getChild, allow_raw_pointers())
129+
.function("getType", &slang::wgsl::DeclReflection::getType, allow_raw_pointers())
130+
.function("asVariable", &slang::wgsl::DeclReflection::asVariable, allow_raw_pointers())
131+
.function("asFunction", &slang::wgsl::DeclReflection::asFunction, allow_raw_pointers())
132+
.function("asGeneric", &slang::wgsl::DeclReflection::asGeneric, allow_raw_pointers())
133+
.function("getParent", &slang::wgsl::DeclReflection::getParent, allow_raw_pointers());
134+
135+
enum_<slang::DeclReflection::Kind>("DeclReflectionKind")
136+
.value("Unsupported", slang::DeclReflection::Kind::Unsupported)
137+
.value("Struct", slang::DeclReflection::Kind::Struct)
138+
.value("Func", slang::DeclReflection::Kind::Func)
139+
.value("Module", slang::DeclReflection::Kind::Module)
140+
.value("Generic", slang::DeclReflection::Kind::Generic)
141+
.value("Variable", slang::DeclReflection::Kind::Variable)
142+
.value("Namespace", slang::DeclReflection::Kind::Namespace);
143+
144+
enum_<slang::TypeReflection::ScalarType>("ScalarType")
145+
.value("None", slang::TypeReflection::ScalarType::None)
146+
.value("Void", slang::TypeReflection::ScalarType::Void)
147+
.value("Bool", slang::TypeReflection::ScalarType::Bool)
148+
.value("Int32", slang::TypeReflection::ScalarType::Int32)
149+
.value("UInt32", slang::TypeReflection::ScalarType::UInt32)
150+
.value("Int64", slang::TypeReflection::ScalarType::Int64)
151+
.value("UInt64", slang::TypeReflection::ScalarType::UInt64)
152+
.value("Float16", slang::TypeReflection::ScalarType::Float16)
153+
.value("Float32", slang::TypeReflection::ScalarType::Float32)
154+
.value("Float64", slang::TypeReflection::ScalarType::Float64)
155+
.value("Int8", slang::TypeReflection::ScalarType::Int8)
156+
.value("UInt8", slang::TypeReflection::ScalarType::UInt8)
157+
.value("Int16", slang::TypeReflection::ScalarType::Int16)
158+
.value("UInt16", slang::TypeReflection::ScalarType::UInt16);
159+
160+
class_<slang::wgsl::TypeReflection>("TypeReflection")
161+
.function("getScalarType", &slang::wgsl::TypeReflection::getScalarType)
162+
.function("getKind", &slang::wgsl::TypeReflection::getKind);
163+
164+
enum_<slang::TypeReflection::Kind>("TypeReflectionKind")
165+
.value("None", slang::TypeReflection::Kind::None)
166+
.value("Struct", slang::TypeReflection::Kind::Struct)
167+
.value("Array", slang::TypeReflection::Kind::Array)
168+
.value("Matrix", slang::TypeReflection::Kind::Matrix)
169+
.value("Vector", slang::TypeReflection::Kind::Vector)
170+
.value("Scalar", slang::TypeReflection::Kind::Scalar)
171+
.value("ConstantBuffer", slang::TypeReflection::Kind::ConstantBuffer)
172+
.value("Resource", slang::TypeReflection::Kind::Resource)
173+
.value("SamplerState", slang::TypeReflection::Kind::SamplerState)
174+
.value("TextureBuffer", slang::TypeReflection::Kind::TextureBuffer)
175+
.value("ShaderStorageBuffer", slang::TypeReflection::Kind::ShaderStorageBuffer)
176+
.value("ParameterBlock", slang::TypeReflection::Kind::ParameterBlock)
177+
.value("GenericTypeParameter", slang::TypeReflection::Kind::GenericTypeParameter)
178+
.value("Interface", slang::TypeReflection::Kind::Interface)
179+
.value("OutputStream", slang::TypeReflection::Kind::OutputStream)
180+
.value("Specialized", slang::TypeReflection::Kind::Specialized)
181+
.value("Feedback", slang::TypeReflection::Kind::Feedback)
182+
.value("Pointer", slang::TypeReflection::Kind::Pointer)
183+
.value("DynamicResource", slang::TypeReflection::Kind::DynamicResource);
184+
185+
186+
class_<slang::wgsl::UserAttribute>("UserAttribute")
187+
.function("getName", &slang::wgsl::UserAttribute::getName)
188+
.function("getArgumentCount", &slang::wgsl::UserAttribute::getArgumentCount)
189+
.function(
190+
"getArgumentType",
191+
&slang::wgsl::UserAttribute::getArgumentType,
192+
allow_raw_pointers())
193+
.function(
194+
"getArgumentValueString",
195+
&slang::wgsl::UserAttribute::getArgumentValueString,
196+
allow_raw_pointers())
197+
.function(
198+
"getArgumentValueFloat",
199+
&slang::wgsl::UserAttribute::getArgumentValueFloat,
200+
allow_raw_pointers());
201+
202+
class_<slang::wgsl::FunctionReflection>("FunctionReflection")
203+
.function("getName", &slang::wgsl::FunctionReflection::getName)
204+
.function("getUserAttributeCount", &slang::wgsl::FunctionReflection::getUserAttributeCount)
205+
.function(
206+
"getUserAttributeByIndex",
207+
&slang::wgsl::FunctionReflection::getUserAttributeByIndex,
208+
allow_raw_pointers());
209+
56210
class_<slang::wgsl::EntryPointReflection>("EntryPointReflection")
57211
.function(
58212
"getComputeThreadGroupSize",
@@ -77,6 +231,10 @@ EMSCRIPTEN_BINDINGS(slang)
77231
.function(
78232
"findEntryPointByName",
79233
&slang::wgsl::ProgramLayout::findEntryPointByName,
234+
allow_raw_pointers())
235+
.function(
236+
"findFunctionByName",
237+
&slang::wgsl::ProgramLayout::findFunctionByName,
80238
allow_raw_pointers());
81239

82240
enum_<slang::BindingType>("BindingType")

0 commit comments

Comments
 (0)