WebGPU — новый web-стандарт (W3C, финализирован 2023) для работы с GPU в браузере. Заменяет WebGL 2.0, добавляет compute shaders (ML inference, physics), нативно мапится на Vulkan/Metal/Direct3D 12. Shading language: WGSL (не GLSL). Поддержка: Chrome 113+, Safari 17+ (iOS 18), Firefox 141+ (флаг). Production: WebLLM, TensorFlow.js GPU backend.
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
// WebGPU — минимальный compute shader
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shader = device.createShaderModule({ code: /* WGSL */ `
@compute @workgroup_size(64)
fn main(@builtin(global_invocation_id) id: vec3<u32>) {
// parallel work here
}
`});WebGPU — это современный API для работы с графическими процессорами (GPU) в веб-приложениях, который предоставляет более низкоуровневый доступ к графическим и вычислительным возможностям, чем его предшественник WebGL. Он разработан для улучшения производительности и возможностей рендеринга, позволяя разработчикам создавать сложные визуализации и высокопроизводительные вычисления прямо в браузере.
WebGPU предлагает ряд преимуществ, которые делают его привлекательным для разработчиков:
С помощью WebGPU разработчики могут реализовывать такие функции, как параллельные вычисления, что значительно повышает производительность по сравнению с традиционными методами. Например, используя WebGPU, можно значительно ускорить обработку графики в играх и визуализациях.
Для начала работы с WebGPU необходимо убедиться, что ваш браузер поддерживает данный API. На данный момент WebGPU поддерживается в таких браузерах, как Chrome и Firefox. Далее, мы рассмотрим простой пример создания контекста WebGPU и рендеринга треугольника.
const canvas = document.getElementById('canvas');
const context = canvas.getContext('webgpu');
const device = await navigator.gpu.requestDevice();
const swapChainFormat = 'bgra8unorm';
const swapChain = context.configureSwapChain({ format: swapChainFormat });
const vertexData = new Float32Array([
0, 1,
-1, -1,
1, -1,
]);
const vertexBuffer = device.createBuffer({
size: vertexData.byteLength,
usage: GPUBufferUsage.VERTEX,
mappedAtCreation: true,
});
const mappedRange = vertexBuffer.getMappedRange();
new Float32Array(mappedRange).set(vertexData);
vertexBuffer.unmap();
const renderPassDescriptor = {
colorAttachments: [{
view: undefined,
loadValue: [0, 0, 0, 1],
storeOp: 'store',
}],
};
function frame() {
const swapChainTexture = swapChain.getCurrentTexture();
renderPassDescriptor.colorAttachments[0].view = swapChainTexture.createView();
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.setPipeline(pipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.draw(3, 1, 0, 0);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
requestAnimationFrame(frame);
}
requestAnimationFrame(frame);В данном примере мы создаем контекст WebGPU, настраиваем буфер для вершин треугольника и запускаем цикл рендеринга. Таким образом, WebGPU позволяет легко интегрировать высокопроизводительные графические возможности в веб-приложения, значительно улучшая пользовательский опыт.
WebGL — только graphics. WebGPU добавляет compute shaders + лучший memory model, зеркалит современные backend API.
Для progressive enhancement — да (Chrome 113+). Для production-critical workloads — ждите Firefox stable (2026).
WebLLM гоняет Llama-7B на RTX 3060 с WebGPU в 20-30 tokens/sec. Не лучше server-side, но удобно для приватных задач.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.