GPUDevice: createShaderModule() Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die createShaderModule()
Methode der GPUDevice
Schnittstelle erstellt ein GPUShaderModule
aus einem Quellcode-String in WGSL.
Syntax
createShaderModule(descriptor)
Parameter
descriptor
-
Ein Objekt, das die folgenden Eigenschaften enthält:
code
-
Ein String, der den WGSL-Quellcode für das Shader-Modul repräsentiert.
hints
Optional-
Eine Sequenz von Datensatztypen, mit der Struktur
("string", compilationHint)
. Diese verhalten sich wie geordnete Maps. In jedem Fall ist der"string"
ein Schlüssel, der verwendet wird, um den Datensatz zu identifizieren oder auszuwählen, und dercompilationHint
ist entweder eine Instanz desGPUPipelineLayout
Objekts oder ein aufgezählter Wert von"auto"
.Der Zweck von
hints
besteht darin, so früh wie möglich Informationen über das Pipeline-Layout bereitzustellen, um die Leistung zu verbessern. Die Idee ist, dass durchcreateShaderModule()
so viel wie möglich an Kompilierung einmal durchgeführt werden kann, anstatt mehrfach in mehreren Aufrufen vonGPUDevice.createComputePipeline()
undGPUDevice.createRenderPipeline()
.Hinweis: Verschiedene Implementierungen können
hints
unterschiedlich behandeln, möglicherweise auch komplett ignorieren. Das Bereitstellen von Hinweisen garantiert nicht in allen Browsern/Systemen eine verbesserte Shader-Kompilierungsleistung. label
Optional-
Ein String, der ein Label bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, beispielsweise in
GPUError
Nachrichten oder Konsolenwarnungen. sourceMap
Optional-
Eine Definition der Quellkarte zur Bereitstellung von Entwicklungswerkzeugintegrationen wie Debugging in der Quellsprache. WGSL Namen (Bezeichner) in Quellkarten sollten den Regeln folgen, die im WGSL Bezeichnervergleich definiert sind. Wenn definiert, kann die Quellkarte als source-map-v3 Format interpretiert werden.
Hinweis: Verschiedene Implementierungen können
sourceMap
s unterschiedlich behandeln, möglicherweise auch komplett ignorieren.
Rückgabewert
Eine Instanz des GPUShaderModule
Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createShaderModule()
aufgerufen wird, sonst wird ein GPUValidationError
generiert und ein ungültiges GPUShaderModule
Objekt zurückgegeben:
Beispiele
In unserem Grundlegenden Render-Demo wird unser Shader-Modul mit dem folgenden Code erstellt:
const shaders = `
struct VertexOut {
@builtin(position) position : vec4f,
@location(0) color : vec4f
}
@vertex
fn vertex_main(@location(0) position: vec4f,
@location(1) color: vec4f) -> VertexOut
{
var output : VertexOut;
output.position = position;
output.color = color;
return output;
}
@fragment
fn fragment_main(fragData: VertexOut) -> @location(0) vec4f
{
return fragData.color;
}
`;
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const device = await adapter.requestDevice();
// …
// later on
const shaderModule = device.createShaderModule({
code: shaders,
});
// …
}
Spezifikationen
Specification |
---|
WebGPU # dom-gpudevice-createshadermodule |