juj/wasm_webgpu

Add support for data offset on wgpu_queue_write_buffer

alienself opened this issue · 2 comments

Hi,

Looks like the write buffer call is missing an argument.
The JS API has an extra argument for data offset:

writeBuffer(buffer: GPUBuffer, bufferOffset: GPUSize64, data: BufferSource, dataOffset: GPUSize64, size: GPUSize64): void

this call is missing from wgpu_queue_write_buffer:

void wgpu_queue_write_buffer(WGpuQueue queue, WGpuBuffer buffer, double_int53_t bufferOffset, const void *data __attribute__((nonnull)), double_int53_t size);

juj commented

The reason that dataOffset is missing is that it is redundant in Wasm, as it can be solved by pointer arithmetic in C side. For example, if you have an array arr in C side, and wanted to upload byte range [100, 200[ of that array (i.e. dataOffset==100), then you can call

uint8_t arr[200] = { ... };
wgpu_queue_write_buffer(queue, buffer, bufferOffset, arr + 100, 100);

Oh I see! Totally makes sense thanks for this example.