GPUQueue: метод onSubmittedWorkDone()
Ограниченная доступность
Эта функция не является базовой, так как она не работает в некоторых из наиболее широко используемых браузеров.
Экспериментально: Это экспериментальная технология
Перед использованием в продакшене внимательно проверьте таблицу совместимости браузеров в разделе Совместимость с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод onSubmittedWorkDone() интерфейса GPUQueue возвращает Promise, который разрешается, когда вся работа, отправленная в графический процессор через этот GPUQueue в момент вызова метода, была обработана.
Это включает завершение любых вызовов mapAsync(), выполненных на GPUBuffers, используемых в командах, отправленных в очередь, до вызова onSubmittedWorkDone().
Примечание: В большинстве случаев вы не должны вызывать onSubmittedWorkDone(). Вам не нужно вызывать его для отображения буфера. mapAsync гарантирует, что работа, отправленная в очередь до вызова mapAsync, выполняется до того, как mapAsync возвращается (см. Спецификация WebGPU: раздел 5.2)
Два случая использования onSubmittedWorkDone
-
Ожидание отображения нескольких буферов (медленно)
// good await Promise.all([ buffer1.mapAsync(), buffer2.mapAsync(), buffer3.mapAsync(), ]); data1 = buffer1.getMappedRange(); data2 = buffer2.getMappedRange(); data3 = buffer3.getMappedRange();
// works but slow buffer1.mapAsync(); buffer2.mapAsync(); buffer3.mapAsync(); await device.queue.onSubmittedWorkDone(); data1 = buffer1.getMappedRange(); data2 = buffer2.getMappedRange(); data3 = buffer3.getMappedRange();
Причина, по которой второй метод медленный, заключается в том, что реализация может отобразить буферы до завершения всей отправленной работы. Например, если все буферы закончили использоваться, но уже отправлена другая работа (не связанная с буферами), то при использовании второго метода вы будете ждать дольше, чем при использовании первого.
-
Управление нагрузкой работы
Если вы выполняете сложные вычисления и отправляете слишком много работы одновременно, браузер может остановить вашу работу. Вы можете управлять нагрузкой, отправляя новую работу только тогда, когда завершена отправленная ранее.
Синтаксис
device.queue.onSubmittedWorkDone()
Параметры
Нет.
Возвращаемое значение
Примеры
device.queue.submit([commandEncoder.finish()]);
device.queue.onSubmittedWorkDone().then(() => {
console.log("All submitted commands processed.");
});
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpuqueue-onsubmittedworkdone |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
onSubmittedWorkDone |
113В настоящее время поддерживается только в ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только в ChromeOS, macOS и Windows. |
Нет | 99В настоящее время поддерживается только в ChromeOS, macOS и Windows. |
превью | 121 | Нет | 81 | Нет | 25.0 | 121 |
См. также
- API WebGPU
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/GPUQueue/onSubmittedWorkDone