Что нового в WebGPU (Chrome 117)

François Beaufort
François Beaufort

Отменить буфер вершин

Передача null вместо GPUBuffer в setVertexBuffer() на GPURenderPassEncoder или GPURenderBundleEncoder позволяет отменить ранее заданный буфер вершин в определенном слоте. Подробнее о проблеме dawn:1675…

// Set vertex buffer in slot 0.
myRenderPassEncoder.setVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.setVertexBuffer(0, null);

Отмена привязки группы

Передача null вместо GPUBindGroup в setBindGroup() на GPURenderPassEncoder или GPURenderBundleEncoder позволяет отменить ранее заданную группу привязки в определенном слоте. Подробнее о проблеме dawn:1675…

// Set bing group in slot 0.
myRenderPassEncoder.setBindGroup(0, myBindGroup);

// Then later, unset bind group in slot 0.
myRenderPassEncoder.setBindGroup(0, null);

Отключение ошибок при создании асинхронного конвейера, когда устройство потеряно

Методы createComputePipelineAsync() и createRenderPipelineAsync() объекта GPUDevice возвращают объект Promise, который распознается после создания конвейера. Теперь, если GPUDevice имеет значение lost, ошибки при создании асинхронного конвейера не будут показываться, чтобы потерянные устройства выглядели как можно более работоспособными. См. dawn issue:1874.

Изменения в создании модуля шейдера SPIR-V

При создании модуля шейдера SPIR-V с помощью createShaderModule() теперь возникает ошибка TypeError, если вы не запустили Chrome с флагом "Небезопасная поддержка WebGPU", поскольку SPIR-V не входит в спецификацию WebGPU. Раньше при использовании SPIR-V вместо этого возникала ошибка GPUInternalError. Подробнее об изменении chromium:4711911…

Улучшение работы разработчиков

Улучшено сообщение об ошибке проверки для привязок макета группы привязок в вершинном шейдере для буфера хранения с доступом на чтение и запись и привязок текстуры хранения с доступом только на запись. См. проблему dawn:1883.

Кэширование конвейеров с автоматически сгенерированной разметкой

Теперь при создании конвейеров с помощью createRenderPipeline({ layout: "auto" }) используются механизмы кеширования в Chrome. Это означает, что такие конвейеры будут создаваться более эффективно и использовать меньше памяти. См. проблему dawn:1933.

Обновления на рассвете

Теперь wgpu::RequestAdapterOptionsBackendType входит в состав wgpu::RequestAdapterOptions, чтобы приложениям было проще запрашивать определенный сервер при получении адаптера. Ознакомьтесь с примером ниже и проблемой dawn:1875.

wgpu::RequestAdapterOptions options = {
    .backendType = wgpu::BackendType::D3D12};

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

Для Node.js реализовано несколько дополнительных методов. См. изменение dawn:142465.

В C API webgpu.h тип логических значений был изменен с stdbool на WGPUBool, который является uint32_t. Это изменение было внесено, чтобы у API был эквивалентный ABI на языках C и C++.

Это лишь некоторые из основных изменений. Ознакомьтесь с полным списком коммитов.

Что нового в WebGPU

Список всех тем, которые были рассмотрены в серии статей Что нового в WebGPU.

Chrome 155–156

Chrome 153–154

Chrome 151–152

Chrome 149–150

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113