Signal · signalsVersion 5

webgpu

The WebGPU adapter's vendor, architecture, device and description, its features and seven limits, as one digest.

webgpu at a glance (from the library code, signalsVersion 5)
Component namewebgpu
In the visitorIdyes
structuredId groupgpu (graphics)
Hashingalways a digest (first 128 bits of SHA-256)
Excluded underno browser class
Inner timeout1000 ms
Added insignalsVersion 3
In plain words

WebGPU is the newer way for web pages to use the graphics chip. Before doing any work, a page can ask for an “adapter” and read what it is and what it can do. WhiskerJS reads only that description and turns it into a short code. It gives a second, independent view of the GPU next to WebGL.

What it reads

  1. navigator.gpu.requestAdapter(), with no options.
  2. From the adapter’s info attribute: vendor, architecture, device and description (non-string values become empty).
  3. The adapter’s features set, as a sorted list of names.
  4. Seven entries of the adapter’s limits: maxBindGroups, maxBufferSize, maxComputeInvocationsPerWorkgroup, maxComputeWorkgroupStorageSize, maxStorageBufferBindingSize, maxTextureDimension2D and maxVertexBuffers.

No device is requested and the deprecated requestAdapterInfo() method is not called.

How the technique works

The parts are written as vendor=...;architecture=...;device=...;description=...;features=a,b,c;limits=n1,n2,... and the whole string is always hashed, since webgpu is a large component. Sorting the features makes the value independent of the order the browser lists them in. The call is asynchronous; like every collector it races its own 1000 ms timeout.

Why it helps

WebGPU adapters expose the GPU vendor and architecture as the browser chooses to present them, plus feature and limit sets that follow the GPU, the driver and the browser’s WebGPU implementation. That complements the WebGL components in the gpu group, and a mismatch between WebGPU and WebGL vendors is something your server can look at.

Stability

It changes when the browser’s WebGPU implementation changes what it reports (new features or limits in an update), with a driver update, or when a different GPU is used. Where WebGPU is not available the component is consistently unavailable, which is stable too.

Browser support and what blocks it

  • ok in browsers that offer navigator.gpu and return an adapter, in secure contexts only. Availability depends on the browser, its version and the operating system; check the support matrix.
  • unavailable / no_api where navigator.gpu is missing. In the container test runs used for these pages, headless Firefox and WebKit had no navigator.gpu.
  • unavailable / no_context when no adapter is returned: headless Chromium in the same container exposed the API but returned no adapter.
  • Not in the exclusion table.

Privacy

It reveals graphics hardware details. Everything leaves the library only as a 32-character digest. requestAdapter() shows no prompt, and WhiskerJS makes no request.

How WhiskerJS handles noise and failures

Status ruleId When
ok none adapter read; value is a digest
unavailable no_api no navigator.gpu or no requestAdapter
unavailable no_context requestAdapter() returned no adapter
unavailable no_digest no Web Crypto
blocked security_error, threw requestAdapter() rejected or a read threw
excluded caller_excluded your exclude list
timed_out timeout, aborted 1000 ms inner timeout, budget, abort

Example value

"webgpu": { "status": "ok", "value": "862da19ca084b185c1d8c76af676a08b", "hashed": true }

The headless test browsers used for these pages reported { "status": "unavailable", "ruleId": "no_context" } (Chromium) and no_api (Firefox, WebKit).

Questions and answers

Does reading WebGPU start using my GPU?

WhiskerJS only calls navigator.gpu.requestAdapter() and reads the adapter's info, features and limits. It never requests a device, so no GPU work is submitted.

Why is webgpu unavailable in my browser?

Either the browser has no navigator.gpu (no_api), for example because WebGPU is not shipped or not enabled there or the page is not a secure context, or it returned no adapter (no_context), which happens without a supported GPU.

Why is the deprecated requestAdapterInfo not used?

It prints a warning in the console in browsers that deprecated it, and WhiskerJS never writes to the console. The adapter's info attribute gives the same fields.