Mobile UA renders WebGL on a non-mobile GPU (desktop/software renderer)

br.mobile_gpu_not_mobile  ·  convicts

browserlayer
coherencecategory

What it catches

Mobile GPU-family coherence (the ladder's mobile GPU<->device rung). A phone/tablet renders WebGL on a MOBILE GPU: Adreno (Qualcomm), Mali/Immortalis (ARM), PowerVR (Imagination), Apple GPU (iOS), Xclipse (Samsung), Tegra (NVIDIA Shield) or VideoCore. A Mobile/Android/iPhone/iPad UA whose UNMASKED_RENDERER names NONE of these is a desktop faking mobile. CRUCIALLY BROADER than br.webgl_software (which fires only on a SOFTWARE rasteriser, SwiftShader/llvmpipe): this ALSO convicts a scraper on a real DESKTOP GPU (NVIDIA GeForce/Radeon RX/discrete Intel Arc) under a phone UA — a case webgl_software misses entirely, because a hardware desktop GPU is not 'software'. FP-SAFE: the family list covers every shipping mobile GPU, and it is scoped to a present renderer string (a privacy-masked empty renderer skips). The RED counter — spoofing the renderer string to a mobile GPU (e.g. Adreno) to clear it — is a main-thread patch caught by the WebGL Worker-realm check (br.webgl_worker_divergence: the OffscreenCanvas Worker reports the real desktop/software renderer), so a coherent mobile GPU needs REAL mobile silicon, realm-backed like the model/cores rungs. EXPERIMENTAL (w0.6; the family list needs refresh as new mobile GPUs ship). GROUNDED LIVE: (1) KS_DEVICE='Pixel 5' (SwiftShader renderer) FIRES it; (2) THE DISTINCTIVE CASE — SPOOF_UA=<a Pixel 5 mobile UA> + FULL (which spoofs the renderer to 'NVIDIA GeForce RTX 3060', a hardware desktop GPU) FIRES mobile_gpu_not_mobile while br.webgl_software stays SILENT (RTX 3060 is not software) — proving it catches a desktop-GPU scraper the software check cannot.

Signals it reads

browser.mobile_gpu_not_mobile

How it fires

present

Bypassed by 10

Frontier evaders that reach the detector uncaught (scored only suspicious, defeating every convicting tell) — this check is not one that stops them. The red-team frontier this detection still has to convict.

← all detections