a Mesa OpenGL WebGL renderer reports the varying and uniform limits Mesa and ANGLE give it
When the unmasked renderer is ANGLE over OpenGL with a Mesa Intel, radeonsi, llvmpipe, softpipe or virgl driver: MAX_VERTEX_UNIFORM_VECTORS 1024, MAX_FRAGMENT_UNIFORM_VECTORS 1024 and MAX_VARYING_VECTORS 32, in WebGL 1 and WebGL 2. N/A for every other renderer, including Mesa's d3d12 and zink drivers, NVIDIA's proprietary driver and Android GPUs, whose limits differ (severity: warn).
What a detector infers
Chrome on Linux renders WebGL through ANGLE's OpenGL backend, which does not invent shader limits: it reads MAX_VARYING_VECTORS from the GL driver and caps both uniform-vector limits at 1024. Every Mesa driver exposes 32 varyings (Mesa's own ceiling), and the common ones — Intel's iris, AMD's radeonsi and the llvmpipe software rasteriser — expose all 32.
So a renderer string naming one of those drivers comes with 1024 vertex uniform vectors, 1024 fragment uniform vectors and 32 varyings. A persona that renames its GPU to a Mesa driver but keeps another backend's limit table gives itself away: 4096 vertex uniform vectors and 30 varyings are what ANGLE's Direct3D 11 backend reports, a combination no Mesa driver produces.
How to resolve it
Take the limit table from the driver the renderer string names. A Linux persona that claims a Mesa GPU has to report Mesa's limits — 32 varyings, 1024 uniform vectors — rather than the Direct3D 11 values of a Windows persona; and where the real backend cannot reach them (a software rasteriser with lower ceilings), the renderer string should not claim that driver.
Read in the wild by
Clearcote (measured)
Measured while establishing ground truth for this row. Clearcote r30's Linux persona names a Mesa Intel UHD Graphics 770 while reporting the Direct3D 11 limit table.
Audit corpus, 2026-10-06: 90 of 91 captures naming a Mesa driver (Mesa Intel, radeonsi, llvmpipe, virgl) report 1024 / 1024 / 32; the exception is Mesa's d3d12 driver under WSL (31 varyings), which this row does not judge. Genuine Chrome 154 on llvmpipe: 1024 / 1024 / 32. Captures carrying the persona's renderer string: 4096 / 1024 / 30 in 31 of 32 and 4095 / 1024 / 30 in the other.
clearcotelabs.com/auditEvery attribution traces to a published artifact. See the sources and their limits.
Nearby checks in Render & GPU
- WebGL exposes a full parameter table + UNMASKED vendor/renderer
webgl-param-tableBeyond the two headline strings, a WebGL context answers getParameter for dozens of driver-specific limits. - WebGL parameters return the JavaScript types the specification assigns them
webgl-param-value-typesgetParameter does not return loose values: the WebGL specification fixes the JavaScript TYPE of each one. - the anisotropy limit reads as a number once its WebGL extension is enabled
webgl-anisotropy-after-extensionEXT_texture_filter_anisotropic adds exactly one parameter to getParameter, MAX_TEXTURE_MAX_ANISOTROPY_EXT, and the extension guarantees it… - a Direct3D 11 WebGL renderer reports the uniform limits ANGLE fixes for its vendor
webgl-d3d11-limits-vs-vendorChrome, Edge, Brave and Firefox on Windows render WebGL through ANGLE's Direct3D 11 backend, and that backend does not ask the driver for… - WebGL vendor/renderer identical in a Worker
webgl-worker-vs-mainThe audit reads UNMASKED_VENDOR and UNMASKED_RENDERER on the main thread, then spawns a dedicated Worker that builds its own WebGL context… - masked WebGL VENDOR matches the engine
webgl-engine-vendorThis check reads the plain gl.getParameter(gl.VENDOR) — the masked value, not the debug extension's unmasked GPU string. - WebGL1 and WebGL2 report the same UNMASKED GPU
webgl1-webgl2-coherenceThe check creates a WebGL1 context and a WebGL2 context and reads UNMASKED_VENDOR_WEBGL / UNMASKED_RENDERER_WEBGL from each through the… - canvas readback is not noise-injected (1×1 probe)
canvas-tamperThe probe fills a single pixel with pure black on a 1x1 canvas and reads it straight back with getImageData.
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-mesa-limits-vs-driver belongs to.
