[emscripten] Add support for immediates Bug: 507581790 Change-Id: I419b72f503c4bfa054462ffea88723cd1f0aa855 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/305875 Reviewed-by: Kai Ninomiya <kainino@chromium.org> Commit-Queue: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json index b9458d6..77f0dd9 100644 --- a/src/dawn/dawn.json +++ b/src/dawn/dawn.json
@@ -1119,7 +1119,6 @@ }, { "name": "set immediates", - "tags": ["dawn"], "args": [ {"name": "offset", "type": "uint32_t"}, {"name": "data", "type": "void", "annotation": "const*", "length": "size"}, @@ -3168,7 +3167,6 @@ }, { "name": "set immediates", - "tags": ["dawn"], "args": [ {"name": "offset", "type": "uint32_t"}, {"name": "data", "type": "void", "annotation": "const*", "length": "size"}, @@ -3492,7 +3490,6 @@ }, { "name": "set immediates", - "tags": ["dawn"], "args": [ {"name": "offset", "type": "uint32_t"}, {"name": "data", "type": "void", "annotation": "const*", "length": "size"},
diff --git a/third_party/emdawnwebgpu/pkg/webgpu/src/library_webgpu.js b/third_party/emdawnwebgpu/pkg/webgpu/src/library_webgpu.js index e9740b0..2f6298b 100644 --- a/third_party/emdawnwebgpu/pkg/webgpu/src/library_webgpu.js +++ b/third_party/emdawnwebgpu/pkg/webgpu/src/library_webgpu.js
@@ -1386,6 +1386,14 @@ } }, + wgpuComputePassEncoderSetImmediates: (passPtr, offset, data, size) => { + var pass = WebGPU.getJsObject(passPtr); + // There is a size limitation for ArrayBufferView. Work around by passing in a subarray + // instead of the whole heap. crbug.com/1201109 + var subarray = HEAPU8.subarray(data, data + size); + pass.setImmediates(offset, subarray, 0, size); + }, + wgpuComputePassEncoderSetPipeline: (passPtr, pipelinePtr) => { var pass = WebGPU.getJsObject(passPtr); var pipeline = WebGPU.getJsObject(pipelinePtr); @@ -1690,6 +1698,7 @@ "label": WebGPU.makeStringFromOptionalStringView( descriptor + {{{ C_STRUCTS.WGPUPipelineLayoutDescriptor.label }}}), "bindGroupLayouts": bgls, + "immediateSize": {{{ makeGetValue('descriptor', C_STRUCTS.WGPUPipelineLayoutDescriptor.immediateSize, 'u32') }}}, }; var device = WebGPU.getJsObject(devicePtr); @@ -2252,6 +2261,14 @@ } }, + wgpuRenderBundleEncoderSetImmediates: (passPtr, offset, data, size) => { + var pass = WebGPU.getJsObject(passPtr); + // There is a size limitation for ArrayBufferView. Work around by passing in a subarray + // instead of the whole heap. crbug.com/1201109 + var subarray = HEAPU8.subarray(data, data + size); + pass.setImmediates(offset, subarray, 0, size); + }, + wgpuRenderBundleEncoderSetIndexBuffer: (passPtr, bufferPtr, format, offset, size) => { var pass = WebGPU.getJsObject(passPtr); var buffer = WebGPU.getJsObject(bufferPtr); @@ -2377,6 +2394,14 @@ } }, + wgpuRenderPassEncoderSetImmediates: (passPtr, offset, data, size) => { + var pass = WebGPU.getJsObject(passPtr); + // There is a size limitation for ArrayBufferView. Work around by passing in a subarray + // instead of the whole heap. crbug.com/1201109 + var subarray = HEAPU8.subarray(data, data + size); + pass.setImmediates(offset, subarray, 0, size); + }, + wgpuRenderPassEncoderSetBlendConstant: (passPtr, colorPtr) => { var pass = WebGPU.getJsObject(passPtr); var color = WebGPU.makeColor(colorPtr);
diff --git a/third_party/webgpu-headers/webgpu.h.diff b/third_party/webgpu-headers/webgpu.h.diff index e69de29..e128d73 100644 --- a/third_party/webgpu-headers/webgpu.h.diff +++ b/third_party/webgpu-headers/webgpu.h.diff
@@ -0,0 +1,14 @@ +--- webgpu_header ++++ dawn_header +@@ ++typedef void (*WGPUProcComputePassEncoderSetImmediates)(WGPUComputePassEncoder computePassEncoder, uint32_t offset, void const * data, size_t size) WGPU_FUNCTION_ATTRIBUTE; +@@ ++typedef void (*WGPUProcRenderBundleEncoderSetImmediates)(WGPURenderBundleEncoder renderBundleEncoder, uint32_t offset, void const * data, size_t size) WGPU_FUNCTION_ATTRIBUTE; +@@ ++typedef void (*WGPUProcRenderPassEncoderSetImmediates)(WGPURenderPassEncoder renderPassEncoder, uint32_t offset, void const * data, size_t size) WGPU_FUNCTION_ATTRIBUTE; +@@ ++WGPU_EXPORT void wgpuComputePassEncoderSetImmediates(WGPUComputePassEncoder computePassEncoder, uint32_t offset, void const * data, size_t size) WGPU_FUNCTION_ATTRIBUTE; +@@ ++WGPU_EXPORT void wgpuRenderBundleEncoderSetImmediates(WGPURenderBundleEncoder renderBundleEncoder, uint32_t offset, void const * data, size_t size) WGPU_FUNCTION_ATTRIBUTE; +@@ ++WGPU_EXPORT void wgpuRenderPassEncoderSetImmediates(WGPURenderPassEncoder renderPassEncoder, uint32_t offset, void const * data, size_t size) WGPU_FUNCTION_ATTRIBUTE;