blob: bfd55a40bffa4aa1d99594c04a970f01b0b1198a [file] [log] [blame]
{{{
// Helper functions for code generation
globalThis.html5_gpu = {
makeImportExport: (snake_case, CamelCase) => {
return `
LibraryHTML5WebGPU.emscripten_webgpu_import_${snake_case}__deps = ['$WebGPU', '$JsValStore'];
LibraryHTML5WebGPU.emscripten_webgpu_import_${snake_case} = (handle) =>
WebGPU.mgr${CamelCase}.create(JsValStore.get(handle));
LibraryHTML5WebGPU.emscripten_webgpu_export_${snake_case}__deps = ['$WebGPU', '$JsValStore'];
LibraryHTML5WebGPU.emscripten_webgpu_export_${snake_case} = (handle) =>
JsValStore.add(WebGPU.mgr${CamelCase}.get(handle));`
},
};
null;
}}}
var LibraryHTML5WebGPU = {
$JsValStore: {
values: {},
next_id: 1,
add(js_val) {
var id;
do {
id = JsValStore.next_id++;
if (JsValStore.next_id > 2147483647) JsValStore.next_id = 1; // Wraparound signed int32.
} while (id in JsValStore.values);
JsValStore.values[id] = js_val;
return id;
},
remove(id) {
#if ASSERTIONS
assert(id in JsValStore.values);
#endif
delete JsValStore.values[id];
},
get(id) {
#if ASSERTIONS
assert(id === 0 || id in JsValStore.values);
#endif
return JsValStore.values[id];
},
},
emscripten_webgpu_release_js_handle__deps: ['$JsValStore'],
emscripten_webgpu_release_js_handle: (id) => JsValStore.remove(id),
emscripten_webgpu_get_device__deps: ['$WebGPU'],
emscripten_webgpu_get_device: () => {
#if ASSERTIONS
assert(Module['preinitializedWebGPUDevice']);
#endif
if (WebGPU.preinitializedDeviceId === undefined) {
var device = Module['preinitializedWebGPUDevice'];
var deviceWrapper = { queueId: WebGPU.mgrQueue.create(device["queue"]) };
WebGPU.preinitializedDeviceId = WebGPU.mgrDevice.create(device, deviceWrapper);
}
WebGPU.mgrDevice.reference(WebGPU.preinitializedDeviceId);
return WebGPU.preinitializedDeviceId;
},
};
{{{ html5_gpu.makeImportExport('surface', 'Surface') }}}
{{{ html5_gpu.makeImportExport('swap_chain', 'SwapChain') }}}
{{{ html5_gpu.makeImportExport('device', 'Device') }}}
{{{ html5_gpu.makeImportExport('queue', 'Queue') }}}
{{{ html5_gpu.makeImportExport('command_buffer', 'CommandBuffer') }}}
{{{ html5_gpu.makeImportExport('command_encoder', 'CommandEncoder') }}}
{{{ html5_gpu.makeImportExport('render_pass_encoder', 'RenderPassEncoder') }}}
{{{ html5_gpu.makeImportExport('compute_pass_encoder', 'ComputePassEncoder') }}}
{{{ html5_gpu.makeImportExport('bind_group', 'BindGroup') }}}
{{{ html5_gpu.makeImportExport('buffer', 'Buffer') }}}
{{{ html5_gpu.makeImportExport('sampler', 'Sampler') }}}
{{{ html5_gpu.makeImportExport('texture', 'Texture') }}}
{{{ html5_gpu.makeImportExport('texture_view', 'TextureView') }}}
{{{ html5_gpu.makeImportExport('query_set', 'QuerySet') }}}
{{{ html5_gpu.makeImportExport('bind_group_layout', 'BindGroupLayout') }}}
{{{ html5_gpu.makeImportExport('pipeline_layout', 'PipelineLayout') }}}
{{{ html5_gpu.makeImportExport('render_pipeline', 'RenderPipeline') }}}
{{{ html5_gpu.makeImportExport('compute_pipeline', 'ComputePipeline') }}}
{{{ html5_gpu.makeImportExport('shader_module', 'ShaderModule') }}}
{{{ html5_gpu.makeImportExport('render_bundle_encoder', 'RenderBundleEncoder') }}}
{{{ html5_gpu.makeImportExport('render_bundle', 'RenderBundle') }}}
mergeInto(LibraryManager.library, LibraryHTML5WebGPU);