Browse Source

webgpu: fix cstring as parameter not loading correctly

Laytan Laats 7 months ago
parent
commit
1511162b0a
2 changed files with 16 additions and 13 deletions
  1. 4 1
      core/sys/wasm/js/odin.js
  2. 12 12
      vendor/wgpu/wgpu.js

+ 4 - 1
core/sys/wasm/js/odin.js

@@ -110,7 +110,10 @@ class WasmMemoryInterface {
 	}
 	}
 
 
 	loadCstring(ptr) {
 	loadCstring(ptr) {
-		const start = this.loadPtr(ptr);
+		return this.loadCstringDirect(this.loadPtr(ptr));
+	}
+
+	loadCstringDirect(start) {
 		if (start == 0) {
 		if (start == 0) {
 			return null;
 			return null;
 		}
 		}

+ 12 - 12
vendor/wgpu/wgpu.js

@@ -1181,7 +1181,7 @@ class WebGPUInterface {
 			 */
 			 */
 			wgpuBufferSetLabel: (bufferIdx, labelPtr) => {
 			wgpuBufferSetLabel: (bufferIdx, labelPtr) => {
 				const buffer = this.buffers.get(bufferIdx);
 				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) => {
 			wgpuCommandEncoderInsertDebugMarker: (commandEncoderIdx, markerLabelPtr) => {
 				const commandEncoder = this.commandEncoders.get(commandEncoderIdx);
 				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) => {
 			wgpuCommandEncoderPushDebugGroup: (commandEncoderIdx, groupLabelPtr) => {
 				const commandEncoder = this.commandEncoders.get(commandEncoderIdx);
 				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) => {
 			wgpuComputePassEncoderInsertDebugMarker: (computePassEncoderIdx, markerLabelPtr) => {
 				const computePassEncoder = this.computePassEncoders.get(computePassEncoderIdx);
 				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) => {
 			wgpuComputePassEncoderPushDebugGroup: (computePassEncoderIdx, groupLabelPtr) => {
 				const computePassEncoder = this.computePassEncoders.get(computePassEncoderIdx);
 				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) => {
 			wgpuRenderBundleEncoderInsertDebugMarker: (renderBundleEncoderIdx, markerLabelPtr) => {
 				const renderBundleEncoder = this.renderBundleEncoders.get(renderBundleEncoderIdx);
 				const renderBundleEncoder = this.renderBundleEncoders.get(renderBundleEncoderIdx);
 				this.assert(markerLabelPtr != 0);
 				this.assert(markerLabelPtr != 0);
-				const markerLabel = this.mem.loadCstring(markerLabelPtr);
+				const markerLabel = this.mem.loadCstringDirect(markerLabelPtr);
 				renderBundleEncoder.insertDebugMarker(markerLabel);
 				renderBundleEncoder.insertDebugMarker(markerLabel);
 			},
 			},
 
 
@@ -2235,7 +2235,7 @@ class WebGPUInterface {
 			wgpuRenderBundleEncoderPushDebugGroup: (renderBundleEncoderIdx, groupLabelPtr) => {
 			wgpuRenderBundleEncoderPushDebugGroup: (renderBundleEncoderIdx, groupLabelPtr) => {
 				const renderBundleEncoder = this.renderBundleEncoders.get(renderBundleEncoderIdx);
 				const renderBundleEncoder = this.renderBundleEncoders.get(renderBundleEncoderIdx);
 				this.assert(groupLabelPtr!= 0);
 				this.assert(groupLabelPtr!= 0);
-				const groupLabel = this.mem.loadCstring(groupLabelPtr);
+				const groupLabel = this.mem.loadCstringDirect(groupLabelPtr);
 				renderBundleEncoder.pushDebugGroup(groupLabel);
 				renderBundleEncoder.pushDebugGroup(groupLabel);
 			},
 			},
 
 
@@ -2407,7 +2407,7 @@ class WebGPUInterface {
 			 */
 			 */
 			wgpuRenderPassEncoderInsertDebugMarker: (renderPassEncoderIdx, markerLabelPtr) => {
 			wgpuRenderPassEncoderInsertDebugMarker: (renderPassEncoderIdx, markerLabelPtr) => {
 				const renderPassEncoder = this.renderPassEncoders.get(renderPassEncoderIdx);
 				const renderPassEncoder = this.renderPassEncoders.get(renderPassEncoderIdx);
-				const markerLabel = this.mem.loadCstring(markerLabelPtr);
+				const markerLabel = this.mem.loadCstringDirect(markerLabelPtr);
 				renderPassEncoder.insertDebugMarker(markerLabel);
 				renderPassEncoder.insertDebugMarker(markerLabel);
 			},
 			},
 
 
@@ -2425,7 +2425,7 @@ class WebGPUInterface {
 			 */
 			 */
 			wgpuRenderPassEncoderPushDebugGroup: (renderPassEncoderIdx, groupLabelPtr) => {
 			wgpuRenderPassEncoderPushDebugGroup: (renderPassEncoderIdx, groupLabelPtr) => {
 				const renderPassEncoder = this.renderPassEncoders.get(renderPassEncoderIdx);
 				const renderPassEncoder = this.renderPassEncoders.get(renderPassEncoderIdx);
-				const groupLabel = this.mem.loadCstring(groupLabelPtr);
+				const groupLabel = this.mem.loadCstringDirect(groupLabelPtr);
 				renderPassEncoder.pushDebugGroup(groupLabel);
 				renderPassEncoder.pushDebugGroup(groupLabel);
 			},
 			},
 
 
@@ -2881,11 +2881,11 @@ class WebGPUObjectManager {
 	}
 	}
 
 
 	/**
 	/**
-	 * @param {number} idx
+	 * @param {?number} idx
 	 * @returns {T}
 	 * @returns {T}
 	 */
 	 */
 	get(idx) {
 	get(idx) {
-		return this.objects[idx-1].object;
+		return this.objects[idx-1]?.object;
 	}
 	}
 
 
 	/** @param {number} idx */
 	/** @param {number} idx */
@@ -2908,7 +2908,7 @@ class WebGPUObjectManager {
 		if (withLabelSetter) {
 		if (withLabelSetter) {
 			inter[`wgpu${this.name}SetLabel`] = (idx, labelPtr) => {
 			inter[`wgpu${this.name}SetLabel`] = (idx, labelPtr) => {
 				const obj = this.get(idx);
 				const obj = this.get(idx);
-				obj.label = this.mem.loadCstring(labelPtr);
+				obj.label = this.mem.loadCstringDirect(labelPtr);
 			};
 			};
 		}
 		}
 		return inter;
 		return inter;