If you are scoping a browser-delivered XR perception pipeline and someone points you at WebCL as the way to run computer-vision kernels on the GPU, stop before you write a line of prototype code. WebCL is dead. It was a real proposal — a JavaScript binding to OpenCL, drafted by Khronos in the early 2010s — but it never shipped in any mainstream browser engine, and there is no runtime to target today. Planning a hand-pose, gaze, or scene-understanding pipeline around it means building against a standard that does not exist. That sounds like a small correction. It is not. The choice WebCL was meant to make — how to get parallel compute onto the GPU from inside a browser — is still the central architectural decision for headset-class perception delivered over the web. WebCL just isn’t the thing that answers it anymore. WebGPU is. What should you know about WebCL in practice? WebCL was designed to expose OpenCL’s compute model to JavaScript: create a context, compile kernels written in OpenCL C, enqueue them against a device queue, and read buffers back. In principle it would have let a web page dispatch data-parallel work — the exact shape of workload a perception pipeline is made of — onto whatever GPU or accelerator OpenCL could see. In practice, “how it works” is a historical question. The Khronos working draft existed. A Nokia research prototype and a Samsung Firefox extension implemented pieces of it. Neither Chromium nor the shipping Firefox engine ever adopted it as a web platform feature. So the honest answer to “how does WebCL work” is: it worked in two abandoned prototypes and works in zero browsers your users will run. Treat any tutorial that presents WebCL as a live API the way you would treat a guide to a discontinued SDK. The reason this matters for XR is that the intent behind WebCL is completely legitimate. Perception stages — the convolution passes behind hand tracking, the matrix work behind gaze estimation, the segmentation behind scene understanding — are embarrassingly parallel and belong on the GPU. WebCL was one proposed door to that room. The door was bricked up. The room is still there. Why did WebCL never ship in mainstream browsers, and what replaced it? Two forces killed it. First, security and sandboxing: exposing a general OpenCL surface to arbitrary web content raised memory-safety and driver-exposure concerns the browser vendors were unwilling to carry. OpenCL’s C-based kernel model and pointer semantics were hard to sandbox to the standard a web platform demands. Second, and more decisively, the web already had a GPU story that was easier to secure — WebGL — and the industry chose to grow compute out of the graphics API rather than bolt on a separate compute API. That growth arrived in two stages. WebGL 2.0 compute shaders were a partial, short-lived attempt to run compute-style work through the graphics pipeline; support was uneven and Chromium eventually deprecated the compute-shader context. The durable replacement is WebGPU, the portable GPU compute and graphics API for the web, which reached stable Chromium in 2023 and exposes first-class compute shaders written in WGSL. WebGPU is the standard that actually answers the question WebCL was drafted to answer, and it does so with a sandboxing model the browser vendors were willing to ship. This is a case where the abandoned standard and its successor are separated by roughly a decade of platform evolution — a market-direction observation, not a benchmarked claim, but one you can verify against each engine’s public release notes. There is a native-side parallel worth noting. On the desktop and console side, the same “compute grew out of graphics” pattern produced DirectCompute, GPU compute shaders for XR workloads. The browser arrived at the same design conclusion later, and WebGPU’s compute model rhymes with it deliberately. What is the difference between WebCL, WebGL compute shaders, and WebGPU compute? For a team choosing a GPU-compute path for browser-delivered CV, the practical distinctions collapse to a few axes: does a runtime exist, can it schedule against the renderer, and what does it cost you in kernel-authoring effort. Path Runtime status in mainstream browsers Kernel language Fit for XR perception on GPU WebCL None — never shipped, effectively dead OpenCL C Not viable; no target WebGL 2.0 compute shaders Deprecated / removed in Chromium GLSL compute Fragile; not a path to build on WebGL via fragment-shader tricks Broadly available GLSL fragment Works, but awkward — compute smuggled through a draw call WebGPU compute Stable in Chromium (2023+), rolling out elsewhere WGSL The current answer; native compute dispatch WASM-backed CV kernels (CPU) Universally available C/C++/Rust → WASM Fallback path when no GPU adapter is present The row that matters is WebGPU compute. It gives you dispatchWorkgroups against a real compute pipeline, shared device access with the renderer, and buffer interop that keeps perception output on the GPU instead of round-tripping to JavaScript. That last property is what makes it usable for a frame-locked pipeline: you can hand a segmentation mask straight into a render pass without a readback stall. Can browser-based XR perception pipelines run CV stages on the GPU today, and how? Yes — and the “how” is the whole point. A browser-delivered perception pipeline in 2026 looks like this in practice: the camera or WebXR frame lands in a GPU texture, WebGPU compute shaders run the perception stages (feature extraction, a lightweight detection or pose network, tracking), and the results feed the WebGPU render pass that draws the overlay. Because WebGPU shares the device between compute and render, the perception output never has to leave the GPU to reach the renderer. Where does the model itself come from? Two common patterns. One is compiling a small CV model to WGSL compute shaders directly, hand-written or generated. The other is running an inference runtime that has a WebGPU execution provider — ONNX Runtime Web and TensorFlow.js both expose WebGPU backends — so a model you already trained can dispatch onto the browser GPU without you writing kernels by hand. The perception primitives being accelerated here are the same computer-vision fundamentals that run everywhere else; the browser is just another executor. If you want the perception-side grounding rather than the GPU-plumbing side, our computer vision practice covers those primitives directly, and this is exactly the cross-discipline bridge WebCL was originally meant to serve. The fusion discipline still applies. On a tight per-frame budget, dispatching each perception stage as an isolated compute pass leaves throughput on the table; the same reasoning behind fusing GPU passes into a mega-kernel for frame-locked AR overlays applies to WebGPU compute passes, where pass-launch overhead and intermediate buffer traffic are real costs. How does WebGPU compute affect the per-frame latency and jitter budget? This is where a dead-standard conversation becomes an engineering one. A browser-delivered motion-tracking or perception pipeline lives inside a frame budget — at 72 Hz that is roughly 13.8 ms per frame, at 90 Hz roughly 11.1 ms, and perception is only one tenant of that budget alongside rendering and compositing. The number that kills XR comfort is not average latency but jitter: the variance frame to frame. WebGPU changes the jitter picture in two ways. First, keeping perception on the GPU avoids the readback-and-reprocess stall that a CPU fallback path incurs every frame — a stall that shows up as a jitter spike, not a steady tax. Second, WebGPU’s explicit command-buffer and queue model gives you more control over when work is submitted relative to the frame, which matters for holding variance down. We treat these as budget questions, not throughput questions: the useful measurement is the p99 per-frame perception time against the renderer’s remaining budget, measured on the actual target device (an observed-pattern framing — the exact numbers are device- and thermal-specific, not a published benchmark). Headset-class hardware under a power cap will throttle, and a path that fits the budget on a workstation can miss it on a standalone unit. When should a team accept a WASM/CPU fallback instead of a browser GPU-compute path? Not every browser session will have a usable WebGPU adapter — older devices, locked-down enterprise browsers, and some mobile configurations still fall back. The question is whether your pipeline degrades gracefully or breaks. A WASM/CPU fallback is the right choice when: The perception stage is light enough that a SIMD-optimised WASM kernel keeps you inside budget on the target CPU — small classifiers, sparse tracking, low-resolution masks. Coverage matters more than peak quality, and you would rather serve a reduced-fidelity perception path to every user than a high-fidelity one to a subset. The GPU is already saturated by rendering on a weak device, so moving perception to the CPU is a deliberate load-balancing decision rather than a defeat. The failure mode to avoid is a WASM fallback that runs single-threaded JavaScript-speed CV and blows the frame budget on every user who lacks WebGPU — which produces exactly the jitter you were trying to eliminate. Decide the fallback’s fidelity ceiling up front; do not let it be whatever the model happens to cost. How do you decide the accelerator path: browser-delivered versus on-headset SoC? The deepest version of the WebCL question is not “which browser API” but “should this pipeline live in the browser at all.” Browser delivery buys you zero-install reach and update velocity. An on-headset SoC pipeline — running against the device’s native accelerator through its vendor runtime — buys you lower and more predictable latency, access to camera and sensor data the browser sandbox restricts, and a power profile you can actually tune. The accelerator-selection question WebCL was drafted to answer still applies; it just now spans a wider decision than “which compute API.” That decision is measurable rather than philosophical. Our A1 GPU Audit approach on the GPU engineering page exists precisely to put numbers on it: measuring perception jitter and latency against the renderer budget, and clarifying whether a WebGPU-compute browser path meets that budget where WebCL never could — and where an on-headset path becomes the honest recommendation instead. FAQ What does working with WebCL involve in practice? WebCL was a proposed JavaScript binding to OpenCL that would have let web pages compile and dispatch parallel compute kernels onto the GPU. In practice it only ever existed in two abandoned research prototypes and shipped in zero mainstream browsers, so any live use of “WebCL” today is building against a runtime that does not exist. Why did WebCL never ship in mainstream browsers, and what replaced it? Browser vendors rejected WebCL because OpenCL’s C-based kernel and pointer model was hard to sandbox to web-platform security standards, and because the industry chose to grow compute out of the existing WebGL graphics API instead. The durable replacement is WebGPU, which reached stable Chromium in 2023 and exposes first-class compute shaders written in WGSL. What is the difference between WebCL, WebGL compute shaders, and WebGPU compute? WebCL has no runtime and is dead; WebGL 2.0 compute shaders were deprecated in Chromium and were never a durable path; WebGPU compute is the current standard, offering native compute dispatch and buffer interop shared with the renderer. For browser-delivered CV, WebGPU is the only path that both exists and can schedule compute against the render pass. Can browser-based XR perception pipelines run CV stages on the GPU today, and how? Yes — a WebXR or camera frame lands in a GPU texture, WebGPU compute shaders run the perception stages, and results feed the WebGPU render pass without leaving the GPU. Models reach the browser either as hand-written WGSL kernels or through an inference runtime with a WebGPU backend, such as ONNX Runtime Web or TensorFlow.js. How does WebGPU compute affect the per-frame latency and jitter budget for browser-delivered motion tracking? Keeping perception on the GPU with WebGPU avoids the per-frame readback stall a CPU fallback incurs, and its explicit queue model gives more control over when work is submitted relative to the frame — both of which reduce jitter. The measurement that matters is p99 per-frame perception time against the renderer’s remaining budget on the actual target device, since power-capped headsets throttle differently from workstations. When should a team accept a WASM/CPU fallback instead of a browser GPU-compute path? Accept a WASM/CPU fallback when the perception stage is light enough for a SIMD-optimised kernel to stay inside budget, when universal coverage matters more than peak fidelity, or when the GPU is already saturated by rendering on a weak device. Decide the fallback’s fidelity ceiling up front so it does not silently blow the frame budget on users without WebGPU. How do you decide the accelerator path for a browser-delivered CV pipeline versus an on-headset SoC pipeline? Browser delivery buys zero-install reach and update velocity; an on-headset SoC pipeline buys lower, more predictable latency, richer sensor access, and a tunable power profile. The decision is measurable — audit perception jitter and latency against the renderer budget on the real target hardware, and let the numbers decide whether the browser path meets it or an on-headset path is the honest recommendation. What changes once you test this yourself The useful reframe is not “WebCL is dead, use WebGPU.” It is that the accelerator-selection question survives the death of any one API. WebCL was one candidate answer to how does headset-class perception get onto the GPU under a power budget, and the question outlived it. The right path today — WebGPU compute, a shader-based approach, an on-headset runtime, or a deliberate WASM fallback — is decided by measuring per-frame perception latency and jitter against the renderer’s budget on the hardware your users actually hold, not by which standard’s name is in the tutorial you found.