| # WebGPU Hello World | |
| This sample is the first bring-up checkpoint for the WebGPU target. It keeps the | |
| scope intentionally small: compile one tensor program to a WebGPU VMFB, dump the | |
| compiler-generated WGSL, and ask Dawn to validate that WGSL as a compute | |
| pipeline. | |
| The sample does not use `samples/simple_embedding`. That sample exercises a | |
| synchronous embedding flow with blocking host transfers, which is the wrong | |
| shape for the current inline WebGPU host because JavaScript promises cannot | |
| settle while the wasm thread is blocked in C. | |
| ## Build the VMFB | |
| Enable WebGPU SPIR-V compiler support in the Bazel configuration before | |
| building the sample: | |
| ```sh | |
| IREE_TARGET_BACKEND_WEBGPU_SPIRV=ON build_tools/bin/iree-bazel-configure | |
| ``` | |
| ```sh | |
| build_tools/bin/iree-bazel-build \ | |
| //samples/webgpu/hello_world:hello_world_bytecode_module_webgpu | |
| ``` | |
| ## Dump and Validate WGSL | |
| The validator uses the `webgpu` Node package. Install it outside of the checkout | |
| so npm does not create `package.json`, `package-lock.json`, or `node_modules/` | |
| in the repository root: | |
| ```sh | |
| npm install --prefix /tmp/iree-webgpu-validator webgpu | |
| ``` | |
| ```sh | |
| mkdir -p /tmp/iree-webgpu-hello-world | |
| bazel-bin/tools/iree-compile \ | |
| samples/webgpu/hello_world/hello_world.mlir \ | |
| --iree-hal-target-device=webgpu \ | |
| --iree-hal-dump-executable-binaries-to=/tmp/iree-webgpu-hello-world \ | |
| -o=/tmp/iree-webgpu-hello-world/hello_world.vmfb | |
| IREE_WEBGPU_PACKAGE_ROOT=/tmp/iree-webgpu-validator \ | |
| node samples/webgpu/hello_world/validate_wgsl.mjs \ | |
| /tmp/iree-webgpu-hello-world/*.wgsl | |
| ``` |