WebGPU vendor coheres with WebGL vendor
Both surfaces name the same GPU vendor; one string contains the other.
What a detector infers
Two independent graphics stacks in the same browser are backed by the same physical adapter: this check lowercases the WebGL UNMASKED_VENDOR string and the vendor from navigator.gpu.requestAdapter()'s adapter info, and passes when either contains the other (so "nvidia" and "nvidia corporation" reconcile).
A modification that hooks WebGLRenderingContext.getParameter changes only the WebGL answer; navigator.gpu is a different API surface entirely and keeps reporting the real adapter. A detector reading both sees one machine claiming two different GPU vendors, which no real hardware configuration produces.
The check reports N/A when either surface is missing (no WebGPU support, no adapter returned, or a masked WebGL vendor) — with only one reading there is no cross-surface contradiction to observe.
How to resolve it
Establish GPU identity at a level both stacks read from — an engine-level control or a bridge to a real GPU — rather than hooking WebGL's getParameter. If your setup cannot cover WebGPU, leave the WebGL strings real too; a matched pair of honest strings is coherent, a mismatched pair is not.
Nearby checks in Render & GPU
- A worker OffscreenCanvas encodes the pixels it reads back
offscreen-canvas-exits-agreeA canvas has more than one way out. getImageData hands pixels straight to script; convertToBlob encodes the same pixels into a file, and… - WebGPU's preferred canvas format belongs to the claimed OS
webgpu-canvas-format-vs-osnavigator.gpu.getPreferredCanvasFormat() returns the texture format the platform's compositor wants to be handed, and Chrome on Windows and… - A WebGPU device accepts every limit and feature its adapter advertises
webgpu-device-honours-adapterA WebGPU adapter advertises limits and features, and the device it creates is validated against them by Dawn, Chrome's WebGPU… - WebGL renderer (software vs hardware)
webgl-not-softwareThe audit reads UNMASKED_RENDERER through the WEBGL_debug_renderer_info extension and matches it against SwiftShader, llvmpipe and Software. - WebGPU's architecture is the one Chrome's own table gives the GPU WebGL names
webgpu-architecture-vs-rendererGPUAdapterInfo.architecture is not free text. Chrome's WebGPU implementation derives it from the GPU's PCI device id through its own table… - WebGPU's subgroup size is the wave width of the GPU WebGL names
webgpu-subgroup-vs-rendererChrome's WebGPU implementation (Dawn) reports GPUAdapterInfo.subgroupMinSize from the driver: on Windows the Direct3D 12 backend reads… - WebGPU's features and limits fit the hardware GPU WebGL names
webgpu-features-vs-rendererOn Windows, Chrome's WebGPU runs on Direct3D 12, and Direct3D bounds what an adapter can expose: DXGI has no ASTC or ETC2 formats at all, BC… - The WebGL renderer string is one ANGLE's Direct3D 11 backend can print
webgl-renderer-angle-formatOn Windows, Chrome's WebGL renderer string is assembled by ANGLE's Direct3D 11 backend, not typed by anyone: the adapter's description, then…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Render & GPU checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Render & GPU — the family webgl-webgpu-vendor belongs to.
