1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
|
#include "slang-wasm.h"
#include <emscripten/bind.h>
#include <slang-com-ptr.h>
using namespace emscripten;
EMSCRIPTEN_BINDINGS(slang)
{
constant("SLANG_OK", SLANG_OK);
function("getLastError", &slang::wgsl::getLastError);
function("getCompileTargets", &slang::wgsl::getCompileTargets);
class_<slang::wgsl::GlobalSession>("GlobalSession")
.function(
"createSession",
&slang::wgsl::GlobalSession::createSession,
allow_raw_pointers());
function("createGlobalSession", &slang::wgsl::createGlobalSession, allow_raw_pointers());
class_<slang::wgsl::Session>("Session")
.function(
"loadModuleFromSource",
&slang::wgsl::Session::loadModuleFromSource,
allow_raw_pointers())
.function(
"createCompositeComponentType",
&slang::wgsl::Session::createCompositeComponentType,
allow_raw_pointers());
class_<slang::wgsl::ComponentType>("ComponentType")
.function("link", &slang::wgsl::ComponentType::link, allow_raw_pointers())
.function("getEntryPointCode", &slang::wgsl::ComponentType::getEntryPointCode)
.function("getEntryPointCodeBlob", &slang::wgsl::ComponentType::getEntryPointCodeBlob)
.function("getTargetCodeBlob", &slang::wgsl::ComponentType::getTargetCodeBlob)
.function("getTargetCode", &slang::wgsl::ComponentType::getTargetCode)
.function("getLayout", &slang::wgsl::ComponentType::getLayout, allow_raw_pointers())
.function("loadStrings", &slang::wgsl::ComponentType::loadStrings, allow_raw_pointers());
class_<slang::wgsl::TypeLayoutReflection>("TypeLayoutReflection")
.function(
"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(
"getTypeLayout",
&slang::wgsl::VariableLayoutReflection::getTypeLayout,
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",
&slang::wgsl::EntryPointReflection::getComputeThreadGroupSize);
class_<slang::wgsl::EntryPointReflection::ThreadGroupSize>("ThreadGroupSize")
.property("x", &slang::wgsl::EntryPointReflection::ThreadGroupSize::x)
.property("y", &slang::wgsl::EntryPointReflection::ThreadGroupSize::y)
.property("z", &slang::wgsl::EntryPointReflection::ThreadGroupSize::z);
class_<slang::wgsl::ProgramLayout>("ProgramLayout")
.function("toJsonObject", &slang::wgsl::ProgramLayout::toJsonObject)
.function("getParameterCount", &slang::wgsl::ProgramLayout::getParameterCount)
.function(
"getParameterByIndex",
&slang::wgsl::ProgramLayout::getParameterByIndex,
allow_raw_pointers())
.function(
"getGlobalParamsTypeLayout",
&slang::wgsl::ProgramLayout::getGlobalParamsTypeLayout,
allow_raw_pointers())
.function(
"findEntryPointByName",
&slang::wgsl::ProgramLayout::findEntryPointByName,
allow_raw_pointers())
.function(
"findFunctionByName",
&slang::wgsl::ProgramLayout::findFunctionByName,
allow_raw_pointers());
enum_<slang::BindingType>("BindingType")
.value("Unknown", slang::BindingType::Unknown)
.value("Texture", slang::BindingType::Texture)
.value("ConstantBuffer", slang::BindingType::ConstantBuffer)
.value("MutableRawBuffer", slang::BindingType::MutableRawBuffer)
.value("MutableTypedBuffer", slang::BindingType::MutableTypedBuffer)
.value("MutableTexture", slang::BindingType::MutableTexture);
class_<slang::wgsl::Module, base<slang::wgsl::ComponentType>>("Module")
.function(
"findEntryPointByName",
&slang::wgsl::Module::findEntryPointByName,
allow_raw_pointers())
.function(
"findAndCheckEntryPoint",
&slang::wgsl::Module::findAndCheckEntryPoint,
allow_raw_pointers())
.function(
"getDefinedEntryPoint",
&slang::wgsl::Module::getDefinedEntryPoint,
allow_raw_pointers())
.function("getDefinedEntryPointCount", &slang::wgsl::Module::getDefinedEntryPointCount);
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")
.function("getName", &slang::wgsl::EntryPoint::getName, allow_raw_pointers());
register_vector<std::string>("StringList");
register_optional<std::vector<std::string>>();
value_object<slang::wgsl::lsp::Position>("Position")
.field("line", &slang::wgsl::lsp::Position::line)
.field("character", &slang::wgsl::lsp::Position::character);
value_object<slang::wgsl::lsp::Range>("Range")
.field("start", &slang::wgsl::lsp::Range::start)
.field("end", &slang::wgsl::lsp::Range::end);
value_object<slang::wgsl::lsp::Location>("Location")
.field("uri", &slang::wgsl::lsp::Location::uri)
.field("range", &slang::wgsl::lsp::Location::range);
register_vector<slang::wgsl::lsp::Location>("LocationList");
register_optional<std::vector<slang::wgsl::lsp::Location>>();
value_object<slang::wgsl::lsp::TextEdit>("TextEdit")
.field("range", &slang::wgsl::lsp::TextEdit::range)
.field("text", &slang::wgsl::lsp::TextEdit::text);
register_optional<slang::wgsl::lsp::TextEdit>();
register_vector<slang::wgsl::lsp::TextEdit>("TextEditList");
register_optional<std::vector<slang::wgsl::lsp::TextEdit>>();
value_object<slang::wgsl::lsp::MarkupContent>("MarkupContent")
.field("kind", &slang::wgsl::lsp::MarkupContent::kind)
.field("value", &slang::wgsl::lsp::MarkupContent::value);
register_optional<slang::wgsl::lsp::MarkupContent>();
value_object<slang::wgsl::lsp::Hover>("Hover")
.field("contents", &slang::wgsl::lsp::Hover::contents)
.field("range", &slang::wgsl::lsp::Hover::range);
register_optional<slang::wgsl::lsp::Hover>();
value_object<slang::wgsl::lsp::CompletionItem>("CompletionItem")
.field("label", &slang::wgsl::lsp::CompletionItem::label)
.field("kind", &slang::wgsl::lsp::CompletionItem::kind)
.field("detail", &slang::wgsl::lsp::CompletionItem::detail)
.field("documentation", &slang::wgsl::lsp::CompletionItem::documentation)
.field("textEdit", &slang::wgsl::lsp::CompletionItem::textEdit)
.field("data", &slang::wgsl::lsp::CompletionItem::data)
.field("commitCharacters", &slang::wgsl::lsp::CompletionItem::commitCharacters);
register_optional<slang::wgsl::lsp::CompletionItem>();
register_vector<slang::wgsl::lsp::CompletionItem>("CompletionItemList");
register_optional<std::vector<slang::wgsl::lsp::CompletionItem>>();
value_object<slang::wgsl::lsp::CompletionContext>("CompletionContext")
.field("triggerKind", &slang::wgsl::lsp::CompletionContext::triggerKind)
.field("triggerCharacter", &slang::wgsl::lsp::CompletionContext::triggerCharacter);
value_array<std::array<uint32_t, 2>>("array_uint_2")
.element(emscripten::index<0>())
.element(emscripten::index<1>());
value_object<slang::wgsl::lsp::ParameterInformation>("ParameterInformation")
.field("label", &slang::wgsl::lsp::ParameterInformation::label)
.field("documentation", &slang::wgsl::lsp::ParameterInformation::documentation);
register_vector<slang::wgsl::lsp::ParameterInformation>("ParameterInformationList");
value_object<slang::wgsl::lsp::SignatureInformation>("SignatureInformation")
.field("label", &slang::wgsl::lsp::SignatureInformation::label)
.field("documentation", &slang::wgsl::lsp::SignatureInformation::documentation)
.field("parameters", &slang::wgsl::lsp::SignatureInformation::parameters);
register_vector<slang::wgsl::lsp::SignatureInformation>("SignatureInformationList");
value_object<slang::wgsl::lsp::SignatureHelp>("SignatureHelp")
.field("signatures", &slang::wgsl::lsp::SignatureHelp::signatures)
.field("activeSignature", &slang::wgsl::lsp::SignatureHelp::activeSignature)
.field("activeParameter", &slang::wgsl::lsp::SignatureHelp::activeParameter);
register_optional<slang::wgsl::lsp::SignatureHelp>();
value_object<slang::wgsl::lsp::DocumentSymbol>("DocumentSymbol")
.field("name", &slang::wgsl::lsp::DocumentSymbol::name)
.field("detail", &slang::wgsl::lsp::DocumentSymbol::detail)
.field("kind", &slang::wgsl::lsp::DocumentSymbol::kind)
.field("range", &slang::wgsl::lsp::DocumentSymbol::range)
.field("selectionRange", &slang::wgsl::lsp::DocumentSymbol::selectionRange)
.field("children", &slang::wgsl::lsp::DocumentSymbol::children);
register_vector<slang::wgsl::lsp::DocumentSymbol>("DocumentSymbolList");
register_optional<std::vector<slang::wgsl::lsp::DocumentSymbol>>();
value_object<slang::wgsl::lsp::Diagnostics>("Diagnostics")
.field("code", &slang::wgsl::lsp::Diagnostics::code)
.field("range", &slang::wgsl::lsp::Diagnostics::range)
.field("severity", &slang::wgsl::lsp::Diagnostics::severity)
.field("message", &slang::wgsl::lsp::Diagnostics::message);
register_vector<slang::wgsl::lsp::Diagnostics>("DiagnosticsList");
register_optional<std::vector<slang::wgsl::lsp::Diagnostics>>();
register_vector<uint32_t>("Uint32List");
register_optional<std::vector<uint32_t>>();
class_<slang::wgsl::lsp::LanguageServer>("LanguageServer")
.function(
"didOpenTextDocument",
&slang::wgsl::lsp::LanguageServer::didOpenTextDocument,
allow_raw_pointers())
.function(
"didCloseTextDocument",
&slang::wgsl::lsp::LanguageServer::didCloseTextDocument,
allow_raw_pointers())
.function(
"didChangeTextDocument",
&slang::wgsl::lsp::LanguageServer::didChangeTextDocument,
allow_raw_pointers())
.function("hover", &slang::wgsl::lsp::LanguageServer::hover, allow_raw_pointers())
.function(
"gotoDefinition",
&slang::wgsl::lsp::LanguageServer::gotoDefinition,
allow_raw_pointers())
.function("completion", &slang::wgsl::lsp::LanguageServer::completion, allow_raw_pointers())
.function(
"completionResolve",
&slang::wgsl::lsp::LanguageServer::completionResolve,
allow_raw_pointers())
.function(
"semanticTokens",
&slang::wgsl::lsp::LanguageServer::semanticTokens,
allow_raw_pointers())
.function(
"signatureHelp",
&slang::wgsl::lsp::LanguageServer::signatureHelp,
allow_raw_pointers())
.function(
"documentSymbol",
&slang::wgsl::lsp::LanguageServer::documentSymbol,
allow_raw_pointers())
.function(
"getDiagnostics",
&slang::wgsl::lsp::LanguageServer::getDiagnostics,
allow_raw_pointers());
function(
"createLanguageServer",
&slang::wgsl::lsp::createLanguageServer,
return_value_policy::take_ownership());
};
|