blob: 30660e32993ebe3186f29035912943f7434d269b [file] [log] [blame]
{{{
// Helper functions for code generation
global.html5_gpu = {
makeImportExport: function(snake_case, CamelCase) {
var s = '';
s += 'LibraryHTML5WebGPU.emscripten_webgpu_import_' + snake_case + '__sig = "ii";';
s += 'LibraryHTML5WebGPU.emscripten_webgpu_import_' + snake_case + '__deps = ["$WebGPU", "$JsValStore"];';
s += 'LibraryHTML5WebGPU.emscripten_webgpu_import_' + snake_case + ' = function(handle) { '
s += 'return WebGPU.mgr' + CamelCase + '.create(JsValStore.get(handle));'
s += '};';
s += 'LibraryHTML5WebGPU.emscripten_webgpu_export_' + snake_case + '__sig = "ii";';
s += 'LibraryHTML5WebGPU.emscripten_webgpu_export_' + snake_case + '__deps = ["$WebGPU", "$JsValStore"];';
s += 'LibraryHTML5WebGPU.emscripten_webgpu_export_' + snake_case + ' = function(handle) { '
s += 'return JsValStore.add(WebGPU.mgr' + CamelCase + '.get(handle));'
s += '};';
return s;
},
};
null;
}}}
var LibraryHTML5WebGPU = {
$JsValStore: {
values: {},
next_id: 1,
add: function (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: function (id) {
#if ASSERTIONS
assert(id in JsValStore.values);
#endif
delete JsValStore.values[id];
},
get: function (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: function (id) {
JsValStore.remove(id);
},
emscripten_webgpu_get_device__deps: ['$WebGPU'],
emscripten_webgpu_get_device: function() {
#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);