Что нового в 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» .

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113