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

Франсуа Бофор
François Beaufort

Сбросить буфер вершин

Передача null вместо GPUBuffer в setVertexBuffer() в GPURenderPassEncoder или GPURenderBundleEncoder позволяет отменить ранее установленный буфер вершин в заданном слоте. См. issue 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 позволяет отменить ранее заданную группу привязки в данном слоте. См. issue 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 issue:1874 .

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

Создание шейдерного модуля SPIR-V с помощью createShaderModule() теперь приводит к ошибке TypeError, если только Chrome не запущен с флагом «Unsafe WebGPU Support», поскольку SPIR-V не входит в спецификацию WebGPU. До этого изменения использование SPIR-V приводило к возникновению ошибки GPUInternalError . См. изменение chromium:4711911 .

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

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

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

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

Обновления Dawn

Тип 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 .

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

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

Что нового в WebGPU

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

Хром 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