summaryrefslogtreecommitdiffstats
path: root/source/slang-wasm/slang-wasm-bindings.cpp
diff options
context:
space:
mode:
authorarya <64514807+arya3d@users.noreply.github.com>2024-12-24 09:34:59 -0800
committerGitHub <noreply@github.com>2024-12-24 09:34:59 -0800
commit1b5679f9556b65c65146123ce98ca4f62fe71d72 (patch)
treee3b4bd02b7a7279d8ff3fcdcdcc9578f6ef3122c /source/slang-wasm/slang-wasm-bindings.cpp
parente15c2802434058096bc0ced0ac23b39226a17334 (diff)
Reflection API Wasm Bindings Part1 (#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>
Diffstat (limited to 'source/slang-wasm/slang-wasm-bindings.cpp')
-rw-r--r--source/slang-wasm/slang-wasm-bindings.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/source/slang-wasm/slang-wasm-bindings.cpp b/source/slang-wasm/slang-wasm-bindings.cpp
index 43a516ccc..0871665b9 100644
--- a/source/slang-wasm/slang-wasm-bindings.cpp
+++ b/source/slang-wasm/slang-wasm-bindings.cpp
@@ -45,6 +45,36 @@ EMSCRIPTEN_BINDINGS(slang)
"getDescriptorSetDescriptorRangeType",
&slang::wgsl::TypeLayoutReflection::getDescriptorSetDescriptorRangeType);
+ enum_<slang::Modifier::ID>("ModifierID")
+ .value("Shared", slang::Modifier::ID::Shared)
+ .value("NoDiff", slang::Modifier::ID::NoDiff)
+ .value("Static", slang::Modifier::ID::Static)
+ .value("Const", slang::Modifier::ID::Const)
+ .value("Export", slang::Modifier::ID::Export)
+ .value("Extern", slang::Modifier::ID::Extern)
+ .value("Differentiable", slang::Modifier::ID::Differentiable)
+ .value("Mutating", slang::Modifier::ID::Mutating)
+ .value("In", slang::Modifier::ID::In)
+ .value("Out", slang::Modifier::ID::Out)
+ .value("InOut", slang::Modifier::ID::InOut);
+
+ class_<slang::Modifier>("Modifier");
+
+ class_<slang::wgsl::VariableReflection>("VariableReflection")
+ .function("getName", &slang::wgsl::VariableReflection::getName)
+ .function(
+ "findModifier",
+ &slang::wgsl::VariableReflection::findModifier,
+ allow_raw_pointers())
+ .function("getType", &slang::wgsl::VariableReflection::getType, allow_raw_pointers())
+ .function("getUserAttributeCount", &slang::wgsl::VariableReflection::getUserAttributeCount)
+ .function(
+ "getUserAttributeByIndex",
+ &slang::wgsl::VariableReflection::getUserAttributeByIndex,
+ allow_raw_pointers())
+ .function("hasDefaultValue", &slang::wgsl::VariableReflection::hasDefaultValue);
+
+
class_<slang::wgsl::VariableLayoutReflection>("VariableLayoutReflection")
.function("getName", &slang::wgsl::VariableLayoutReflection::getName)
.function(
@@ -53,6 +83,130 @@ EMSCRIPTEN_BINDINGS(slang)
allow_raw_pointers())
.function("getBindingIndex", &slang::wgsl::VariableLayoutReflection::getBindingIndex);
+ class_<slang::wgsl::GenericReflection>("GenericReflection")
+ .function("getName", &slang::wgsl::GenericReflection::getName)
+ .function("getTypeParameterCount", &slang::wgsl::GenericReflection::getTypeParameterCount)
+ .function("getValueParameterCount", &slang::wgsl::GenericReflection::getValueParameterCount)
+ .function("getInnerKind", &slang::wgsl::GenericReflection::getInnerKind)
+ .function("asDecl", &slang::wgsl::GenericReflection::asDecl, allow_raw_pointers())
+ // .function(
+ // "getTypeParameterConstraintCount",
+ // &slang::wgsl::GenericReflection::getTypeParameterConstraintCount,
+ // allow_raw_pointers())
+ .function(
+ "getTypeParameter",
+ &slang::wgsl::GenericReflection::getTypeParameter,
+ allow_raw_pointers())
+ .function(
+ "getValueParameter",
+ &slang::wgsl::GenericReflection::getValueParameter,
+ allow_raw_pointers())
+ .function(
+ "getInnerDecl",
+ &slang::wgsl::GenericReflection::getInnerDecl,
+ allow_raw_pointers())
+ .function(
+ "getOuterGenericContainer",
+ &slang::wgsl::GenericReflection::getOuterGenericContainer,
+ allow_raw_pointers());
+
+ enum_<SlangDeclKind>("SlangDeclKind")
+ .value(
+ "SLANG_DECL_KIND_UNSUPPORTED_FOR_REFLECTION",
+ SlangDeclKind::SLANG_DECL_KIND_UNSUPPORTED_FOR_REFLECTION)
+ .value("SLANG_DECL_KIND_STRUCT", SlangDeclKind::SLANG_DECL_KIND_STRUCT)
+ .value("SLANG_DECL_KIND_FUNC", SlangDeclKind::SLANG_DECL_KIND_FUNC)
+ .value("SLANG_DECL_KIND_MODULE", SlangDeclKind::SLANG_DECL_KIND_MODULE)
+ .value("SLANG_DECL_KIND_GENERIC", SlangDeclKind::SLANG_DECL_KIND_GENERIC)
+ .value("SLANG_DECL_KIND_VARIABLE", SlangDeclKind::SLANG_DECL_KIND_VARIABLE)
+ .value("SLANG_DECL_KIND_NAMESPACE", SlangDeclKind::SLANG_DECL_KIND_NAMESPACE);
+
+ class_<slang::wgsl::DeclReflection>("DeclReflection")
+ .function("getName", &slang::wgsl::DeclReflection::getName)
+ .function("getChildrenCount", &slang::wgsl::DeclReflection::getChildrenCount)
+ .function("getKind", &slang::wgsl::DeclReflection::getKind)
+ .function("getChild", &slang::wgsl::DeclReflection::getChild, allow_raw_pointers())
+ .function("getType", &slang::wgsl::DeclReflection::getType, allow_raw_pointers())
+ .function("asVariable", &slang::wgsl::DeclReflection::asVariable, allow_raw_pointers())
+ .function("asFunction", &slang::wgsl::DeclReflection::asFunction, allow_raw_pointers())
+ .function("asGeneric", &slang::wgsl::DeclReflection::asGeneric, allow_raw_pointers())
+ .function("getParent", &slang::wgsl::DeclReflection::getParent, allow_raw_pointers());
+
+ enum_<slang::DeclReflection::Kind>("DeclReflectionKind")
+ .value("Unsupported", slang::DeclReflection::Kind::Unsupported)
+ .value("Struct", slang::DeclReflection::Kind::Struct)
+ .value("Func", slang::DeclReflection::Kind::Func)
+ .value("Module", slang::DeclReflection::Kind::Module)
+ .value("Generic", slang::DeclReflection::Kind::Generic)
+ .value("Variable", slang::DeclReflection::Kind::Variable)
+ .value("Namespace", slang::DeclReflection::Kind::Namespace);
+
+ enum_<slang::TypeReflection::ScalarType>("ScalarType")
+ .value("None", slang::TypeReflection::ScalarType::None)
+ .value("Void", slang::TypeReflection::ScalarType::Void)
+ .value("Bool", slang::TypeReflection::ScalarType::Bool)
+ .value("Int32", slang::TypeReflection::ScalarType::Int32)
+ .value("UInt32", slang::TypeReflection::ScalarType::UInt32)
+ .value("Int64", slang::TypeReflection::ScalarType::Int64)
+ .value("UInt64", slang::TypeReflection::ScalarType::UInt64)
+ .value("Float16", slang::TypeReflection::ScalarType::Float16)
+ .value("Float32", slang::TypeReflection::ScalarType::Float32)
+ .value("Float64", slang::TypeReflection::ScalarType::Float64)
+ .value("Int8", slang::TypeReflection::ScalarType::Int8)
+ .value("UInt8", slang::TypeReflection::ScalarType::UInt8)
+ .value("Int16", slang::TypeReflection::ScalarType::Int16)
+ .value("UInt16", slang::TypeReflection::ScalarType::UInt16);
+
+ class_<slang::wgsl::TypeReflection>("TypeReflection")
+ .function("getScalarType", &slang::wgsl::TypeReflection::getScalarType)
+ .function("getKind", &slang::wgsl::TypeReflection::getKind);
+
+ enum_<slang::TypeReflection::Kind>("TypeReflectionKind")
+ .value("None", slang::TypeReflection::Kind::None)
+ .value("Struct", slang::TypeReflection::Kind::Struct)
+ .value("Array", slang::TypeReflection::Kind::Array)
+ .value("Matrix", slang::TypeReflection::Kind::Matrix)
+ .value("Vector", slang::TypeReflection::Kind::Vector)
+ .value("Scalar", slang::TypeReflection::Kind::Scalar)
+ .value("ConstantBuffer", slang::TypeReflection::Kind::ConstantBuffer)
+ .value("Resource", slang::TypeReflection::Kind::Resource)
+ .value("SamplerState", slang::TypeReflection::Kind::SamplerState)
+ .value("TextureBuffer", slang::TypeReflection::Kind::TextureBuffer)
+ .value("ShaderStorageBuffer", slang::TypeReflection::Kind::ShaderStorageBuffer)
+ .value("ParameterBlock", slang::TypeReflection::Kind::ParameterBlock)
+ .value("GenericTypeParameter", slang::TypeReflection::Kind::GenericTypeParameter)
+ .value("Interface", slang::TypeReflection::Kind::Interface)
+ .value("OutputStream", slang::TypeReflection::Kind::OutputStream)
+ .value("Specialized", slang::TypeReflection::Kind::Specialized)
+ .value("Feedback", slang::TypeReflection::Kind::Feedback)
+ .value("Pointer", slang::TypeReflection::Kind::Pointer)
+ .value("DynamicResource", slang::TypeReflection::Kind::DynamicResource);
+
+
+ class_<slang::wgsl::UserAttribute>("UserAttribute")
+ .function("getName", &slang::wgsl::UserAttribute::getName)
+ .function("getArgumentCount", &slang::wgsl::UserAttribute::getArgumentCount)
+ .function(
+ "getArgumentType",
+ &slang::wgsl::UserAttribute::getArgumentType,
+ allow_raw_pointers())
+ .function(
+ "getArgumentValueString",
+ &slang::wgsl::UserAttribute::getArgumentValueString,
+ allow_raw_pointers())
+ .function(
+ "getArgumentValueFloat",
+ &slang::wgsl::UserAttribute::getArgumentValueFloat,
+ allow_raw_pointers());
+
+ class_<slang::wgsl::FunctionReflection>("FunctionReflection")
+ .function("getName", &slang::wgsl::FunctionReflection::getName)
+ .function("getUserAttributeCount", &slang::wgsl::FunctionReflection::getUserAttributeCount)
+ .function(
+ "getUserAttributeByIndex",
+ &slang::wgsl::FunctionReflection::getUserAttributeByIndex,
+ allow_raw_pointers());
+
class_<slang::wgsl::EntryPointReflection>("EntryPointReflection")
.function(
"getComputeThreadGroupSize",
@@ -77,6 +231,10 @@ EMSCRIPTEN_BINDINGS(slang)
.function(
"findEntryPointByName",
&slang::wgsl::ProgramLayout::findEntryPointByName,
+ allow_raw_pointers())
+ .function(
+ "findFunctionByName",
+ &slang::wgsl::ProgramLayout::findFunctionByName,
allow_raw_pointers());
enum_<slang::BindingType>("BindingType")