The features read-only property of the
GPUAdapter interface returns a GPUSupportedFeatures object that describes additional functionality supported by the adapter.
You should note that not all features will be available to WebGPU in all browsers that support it, even if the features are supported by the underlying hardware. This could be due to constraints in the underlying system, browser, or adapter. For example:
The underlying system might not be able to guarantee exposure of a feature in a way that is compatible with a certain browser.
The browser vendor might not have found a secure way to implement support for that feature, or might just not have gotten round to it yet.
If you are hoping to take advantage of a specific additional feature in a WebGPU app, thorough testing is advised.
In the following code we check whether a GPUAdapter has the texture-compression-astc feature available. If so, we push it into the array of requiredFeatures, and request a device with that feature requirement using GPUAdapter.requestDevice()
js
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const requiredFeatures = [];
if (adapter.features.has("texture-compression-astc")) {
requiredFeatures.push("texture-compression-astc");
}
const device = await adapter.requestDevice({
requiredFeatures,
});
// …
}