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

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

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

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

Конвейеры, созданные с помощью createRenderPipeline({ layout: "auto" }) теперь используют механизмы кэширования в Chrome. Это означает, что эти конвейеры будут создаваться более эффективно и будут использовать меньше памяти. См. issue 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 webgpu.h C изменил свой тип для булевых значений с stdbool на WGPUBool , который является uint32_t . Это изменение было сделано для того, чтобы гарантировать, что API имеет эквивалентный ABI в C и C++.

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

Что нового в WebGPU

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

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