From 1511162b0a6c18c8e45f87299fee8cca82711f99 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Thu, 9 Jan 2025 17:29:31 +0100 Subject: [PATCH] webgpu: fix cstring as parameter not loading correctly --- core/sys/wasm/js/odin.js | 5 ++++- vendor/wgpu/wgpu.js | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js index 07a77952c..29227c526 100644 --- a/core/sys/wasm/js/odin.js +++ b/core/sys/wasm/js/odin.js @@ -110,7 +110,10 @@ class WasmMemoryInterface { } loadCstring(ptr) { - const start = this.loadPtr(ptr); + return this.loadCstringDirect(this.loadPtr(ptr)); + } + + loadCstringDirect(start) { if (start == 0) { return null; } diff --git a/vendor/wgpu/wgpu.js b/vendor/wgpu/wgpu.js index 9c43756d7..5e0482b69 100644 --- a/vendor/wgpu/wgpu.js +++ b/vendor/wgpu/wgpu.js @@ -1181,7 +1181,7 @@ class WebGPUInterface { */ wgpuBufferSetLabel: (bufferIdx, labelPtr) => { const buffer = this.buffers.get(bufferIdx); - buffer.buffer.label = this.mem.loadCstring(labelPtr); + buffer.buffer.label = this.mem.loadCstringDirect(labelPtr); }, /** @@ -1370,7 +1370,7 @@ class WebGPUInterface { */ wgpuCommandEncoderInsertDebugMarker: (commandEncoderIdx, markerLabelPtr) => { const commandEncoder = this.commandEncoders.get(commandEncoderIdx); - commandEncoder.insertDebugMarker(this.mem.loadCstring(markerLabelPtr)); + commandEncoder.insertDebugMarker(this.mem.loadCstringDirect(markerLabelPtr)); }, /** @@ -1387,7 +1387,7 @@ class WebGPUInterface { */ wgpuCommandEncoderPushDebugGroup: (commandEncoderIdx, groupLabelPtr) => { const commandEncoder = this.commandEncoders.get(commandEncoderIdx); - commandEncoder.pushDebugGroup(this.mem.loadCstring(groupLabelPtr)); + commandEncoder.pushDebugGroup(this.mem.loadCstringDirect(groupLabelPtr)); }, /** @@ -1459,7 +1459,7 @@ class WebGPUInterface { */ wgpuComputePassEncoderInsertDebugMarker: (computePassEncoderIdx, markerLabelPtr) => { const computePassEncoder = this.computePassEncoders.get(computePassEncoderIdx); - computePassEncoder.insertDebugMarker(this.mem.loadCstring(markerLabelPtr)); + computePassEncoder.insertDebugMarker(this.mem.loadCstringDirect(markerLabelPtr)); }, /** @@ -1476,7 +1476,7 @@ class WebGPUInterface { */ wgpuComputePassEncoderPushDebugGroup: (computePassEncoderIdx, groupLabelPtr) => { const computePassEncoder = this.computePassEncoders.get(computePassEncoderIdx); - computePassEncoder.pushDebugGroup(this.mem.loadCstring(groupLabelPtr)); + computePassEncoder.pushDebugGroup(this.mem.loadCstringDirect(groupLabelPtr)); }, /** @@ -2216,7 +2216,7 @@ class WebGPUInterface { wgpuRenderBundleEncoderInsertDebugMarker: (renderBundleEncoderIdx, markerLabelPtr) => { const renderBundleEncoder = this.renderBundleEncoders.get(renderBundleEncoderIdx); this.assert(markerLabelPtr != 0); - const markerLabel = this.mem.loadCstring(markerLabelPtr); + const markerLabel = this.mem.loadCstringDirect(markerLabelPtr); renderBundleEncoder.insertDebugMarker(markerLabel); }, @@ -2235,7 +2235,7 @@ class WebGPUInterface { wgpuRenderBundleEncoderPushDebugGroup: (renderBundleEncoderIdx, groupLabelPtr) => { const renderBundleEncoder = this.renderBundleEncoders.get(renderBundleEncoderIdx); this.assert(groupLabelPtr!= 0); - const groupLabel = this.mem.loadCstring(groupLabelPtr); + const groupLabel = this.mem.loadCstringDirect(groupLabelPtr); renderBundleEncoder.pushDebugGroup(groupLabel); }, @@ -2407,7 +2407,7 @@ class WebGPUInterface { */ wgpuRenderPassEncoderInsertDebugMarker: (renderPassEncoderIdx, markerLabelPtr) => { const renderPassEncoder = this.renderPassEncoders.get(renderPassEncoderIdx); - const markerLabel = this.mem.loadCstring(markerLabelPtr); + const markerLabel = this.mem.loadCstringDirect(markerLabelPtr); renderPassEncoder.insertDebugMarker(markerLabel); }, @@ -2425,7 +2425,7 @@ class WebGPUInterface { */ wgpuRenderPassEncoderPushDebugGroup: (renderPassEncoderIdx, groupLabelPtr) => { const renderPassEncoder = this.renderPassEncoders.get(renderPassEncoderIdx); - const groupLabel = this.mem.loadCstring(groupLabelPtr); + const groupLabel = this.mem.loadCstringDirect(groupLabelPtr); renderPassEncoder.pushDebugGroup(groupLabel); }, @@ -2881,11 +2881,11 @@ class WebGPUObjectManager { } /** - * @param {number} idx + * @param {?number} idx * @returns {T} */ get(idx) { - return this.objects[idx-1].object; + return this.objects[idx-1]?.object; } /** @param {number} idx */ @@ -2908,7 +2908,7 @@ class WebGPUObjectManager { if (withLabelSetter) { inter[`wgpu${this.name}SetLabel`] = (idx, labelPtr) => { const obj = this.get(idx); - obj.label = this.mem.loadCstring(labelPtr); + obj.label = this.mem.loadCstringDirect(labelPtr); }; } return inter;