KHR_parallel_shader_compile Erweiterung
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die KHR_parallel_shader_compile
Erweiterung ist Teil der WebGL API und ermöglicht eine nicht-blockierende Abfrageoperation, sodass der Verfügbarkeitsstatus von Kompilation/Verlinkung (COMPLETION_STATUS_KHR
) abgefragt werden kann, ohne dass potenziell Verzögerungen auftreten. Mit anderen Worten, Sie können den Status der Kompilierung Ihrer Shader abfragen, ohne den Ablauf zu blockieren.
WebGL-Erweiterungen sind über die Methode WebGLRenderingContext.getExtension()
verfügbar. Weitere Informationen finden Sie auch unter Using Extensions im WebGL Leitfaden.
Konstanten
ext.COMPLETION_STATUS_KHR
-
Ein GLenum.
Beispiele
Aktivieren Sie die Erweiterung:
const ext = gl.getExtension("KHR_parallel_shader_compile");
Im Allgemeinen gilt als Best Practice mit oder ohne die Erweiterung:
// 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);
Mit der Erweiterung können Anwendungen abfragen, ob Programme ohne Ruckeln verlinkt wurden, aber diese werden wahrscheinlich die gleiche Gesamtzeit zur Verlinkung benötigen:
// 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;
}
}
Spezifikationen
Specification |
---|
WebGL KHR_parallel_shader_compile Extension Specification |
Browser-Kompatibilität
BCD tables only load in the browser