diff --git a/third_party/emdawnwebgpu/library_html5_webgpu.js b/third_party/emdawnwebgpu/library_html5_webgpu.js index bfd55a40bff..f530bfad364 100644 --- a/third_party/emdawnwebgpu/library_html5_webgpu.js +++ b/third_party/emdawnwebgpu/library_html5_webgpu.js @@ -1,15 +1,15 @@ {{{ // Helper functions for code generation globalThis.html5_gpu = { - makeImportExport: (snake_case, CamelCase) => { + makeImportExport: (snake_case) => { 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_import_${snake_case} = (ptr) => + WebGPU._tableInsert(JsValStore.get(ptr)); LibraryHTML5WebGPU.emscripten_webgpu_export_${snake_case}__deps = ['$WebGPU', '$JsValStore']; -LibraryHTML5WebGPU.emscripten_webgpu_export_${snake_case} = (handle) => - JsValStore.add(WebGPU.mgr${CamelCase}.get(handle));` +LibraryHTML5WebGPU.emscripten_webgpu_export_${snake_case} = (ptr) => + JsValStore.add(WebGPU._tableGet(ptr));` }, }; null; @@ -48,46 +48,45 @@ var LibraryHTML5WebGPU = { 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__deps: ['$WebGPU', 'emwgpuTableInsertDevice', 'wgpuDeviceAddRef'], 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.preinitializedDeviceId = _emwgpuTableInsertDevice(device); } - WebGPU.mgrDevice.reference(WebGPU.preinitializedDeviceId); + _wgpuDeviceAddRef(WebGPU.preinitializedDeviceId); return WebGPU.preinitializedDeviceId; }, }; -{{{ html5_gpu.makeImportExport('surface', 'Surface') }}} -{{{ html5_gpu.makeImportExport('swap_chain', 'SwapChain') }}} +{{{ html5_gpu.makeImportExport('surface') }}} +{{{ html5_gpu.makeImportExport('swap_chain') }}} -{{{ html5_gpu.makeImportExport('device', 'Device') }}} -{{{ html5_gpu.makeImportExport('queue', 'Queue') }}} +{{{ html5_gpu.makeImportExport('device') }}} +{{{ html5_gpu.makeImportExport('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('command_buffer') }}} +{{{ html5_gpu.makeImportExport('command_encoder') }}} +{{{ html5_gpu.makeImportExport('render_pass_encoder') }}} +{{{ html5_gpu.makeImportExport('compute_pass_encoder') }}} -{{{ 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') }}} +{{{ html5_gpu.makeImportExport('buffer') }}} +{{{ html5_gpu.makeImportExport('sampler') }}} +{{{ html5_gpu.makeImportExport('texture') }}} +{{{ html5_gpu.makeImportExport('texture_view') }}} +{{{ html5_gpu.makeImportExport('query_set') }}} -{{{ 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('bind_group_layout') }}} +{{{ html5_gpu.makeImportExport('pipeline_layout') }}} +{{{ html5_gpu.makeImportExport('render_pipeline') }}} +{{{ html5_gpu.makeImportExport('compute_pipeline') }}} +{{{ html5_gpu.makeImportExport('shader_module') }}} -{{{ html5_gpu.makeImportExport('render_bundle_encoder', 'RenderBundleEncoder') }}} -{{{ html5_gpu.makeImportExport('render_bundle', 'RenderBundle') }}} +{{{ html5_gpu.makeImportExport('render_bundle_encoder') }}} +{{{ html5_gpu.makeImportExport('render_bundle') }}} mergeInto(LibraryManager.library, LibraryHTML5WebGPU); diff --git a/third_party/emdawnwebgpu/library_webgpu.js b/third_party/emdawnwebgpu/library_webgpu.js index ac3b0dfa8db..0041c106c03 100644 --- a/third_party/emdawnwebgpu/library_webgpu.js +++ b/third_party/emdawnwebgpu/library_webgpu.js @@ -469,13 +469,26 @@ var LibraryWebGPU = { }, // ---------------------------------------------------------------------------- - // Definitions for standalone JS emwgpu functions (callable from webgpu.cpp) + // Definitions for standalone JS emwgpu functions (callable from webgpu.cpp and + // library_html5_html.js) // ---------------------------------------------------------------------------- emwgpuDelete: (id) => { delete WebGPU._table[id]; }, + // Extra helper that allow for directly inserting Devices (and their + // corresponding Queue) that is called from the HTML5 library since there + // isn't access to the C++ in webgpu.cpp there. + emwgpuTableInsertDevice__deps: ['emwgpuCreateDevice', 'emwgpuCreateQueue'], + emwgpuTableInsertDevice: (device) => { + var queuePtr = _emwgpuCreateQueue(); + WebGPU._tableInsert(queuePtr, device.queue); + var devicePtr = _emwgpuCreateDevice(queuePtr); + WebGPU._tableInsert(devicePtr, device); + return devicePtr; + }, + #if ASYNCIFY // Returns a FutureID that was resolved, or kNullFutureId if timed out. emwgpuWaitAny__async: true,