Расширение KHR_parallel_shader_compile
Ограниченная доступность
Эта функция не относится к базовому уровню, так как она не работает в некоторых из наиболее широко используемых браузеров.
Расширение KHR_parallel_shader_compile является частью API WebGL и позволяет выполнять операцию опроса без блокировки, чтобы можно было запросить доступность статуса компиляции/связывания (COMPLETION_STATUS_KHR) без потенциальных задержек. Другими словами, вы можете проверить статус компиляции шейдеров без блокирования выполнения.
Расширения WebGL доступны с помощью метода WebGLRenderingContext.getExtension(). Дополнительную информацию можно также найти в Использовании расширений в учебнике по WebGL.
Константы
ext.COMPLETION_STATUS_KHR-
Тип GLenum.
Примеры
Включить расширение:
const ext = gl.getExtension("KHR_parallel_shader_compile");
В общем случае, лучшей практикой как с расширением, так и без него, является:
// Assuming lists of `shaders` and `programs`: for (const x of shaders) gl.compileShader(x); // Never check compile status unless subsequent linking fails. for (const x of programs) gl.linkProgram(x);
С расширением приложения смогут проверять, были ли связаны программы, не вызывая задержек, но для связывания, скорее всего, потребуется одинаковое общее время:
// Generator yielding a progress ratio [0.0, 1.0].
// Without the extension, this will jank and only check one program per generation.
function* linkingProgress(programs) {
const ext = gl.getExtension("KHR_parallel_shader_compile");
let todo = programs.slice();
while (todo.length) {
if (ext) {
todo = todo.filter(
(x) => !gl.getProgramParameter(x, ext.COMPLETION_STATUS_KHR),
);
} else {
const x = todo.pop();
gl.getProgramParameter(x, gl.LINK_STATUS);
}
if (!todo.length) return;
yield 1.0 - todo.length / programs.length;
}
}
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
KHR_parallel_shader_compile |
76 | 79 | Нет | 63 | 14.1 | 76 | Нет | 54 | 14.5 | 12.0 | 76 |
См. также
© 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/KHR_parallel_shader_compile