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

Франсуа Бофор
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 возвращают промис, который разрешается после завершения создания конвейера. Отныне ошибки, возникающие при асинхронном создании конвейера, будут подавляться при lost GPUDevice , чтобы потерянные устройства максимально эффективно работали. См. выпуск dawn:1874 .

Обновления по созданию шейдерных модулей SPIR-V

Теперь при создании модуля шейдера SPIR-V с помощью createShaderModule() возникает ошибка TypeError, если Chrome не запущен с флагом "Unsafe WebGPU Support", поскольку 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 . Это изменение было внесено для обеспечения эквивалентного ABI в C и C++.

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

Что нового в WebGPU?

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

Хром 144

Хром 143

Хром 142

Хром 141

Хром 140

Хром 139

Хром 138

Хром 137

Хром 136

Хром 135

Хром 134

Хром 133

Хром 132

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113