Что нового в 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 , чтобы потерянные устройства работали максимально эффективно. См. выпуск «Рассвет: 1874» .

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

Создание шейдерного модуля SPIR-V с помощью createShaderModule() теперь вызывает ошибку TypeError, если вы не запускаете Chrome с флагом «Небезопасная поддержка WebGPU», поскольку SPIR-V не является частью спецификации WebGPU. До этого изменения использование SPIR-V приводило к созданию ошибки GPUInternalError . См. изменение хрома: 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 .

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

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

Что нового в WebGPU

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

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113