GPUDevice: Methode createShaderModule()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
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 Methode createShaderModule()
des GPUDevice
-Interfaces erstellt ein GPUShaderModule
aus einem String von WGSL-Quellcode.
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 darstellt.
hints
Optional-
Eine Sequenz von Datensätzen mit der Struktur
("string", compilationHint)
. Diese verhalten sich wie geordnete Karten. In jedem Fall ist der"string"
ein Schlüssel, der zur Identifizierung oder Auswahl des Datensatzes verwendet wird, und dercompilationHint
ist entweder eine Instanz einesGPUPipelineLayout
-Objekts oder ein enumerierter Wert von"auto"
.Der Zweck von
hints
besteht darin, Informationen über das Pipeline-Layout so früh wie möglich bereitzustellen, um die Leistung zu verbessern. Die Idee ist, die Menge der Kompilierung zu maximieren, die einmal durchcreateShaderModule()
durchgeführt werden kann, anstatt sie mehrfach in mehreren Aufrufen vonGPUDevice.createComputePipeline()
undGPUDevice.createRenderPipeline()
durchzuführen.Hinweis: Verschiedene Implementierungen können
hints
auf unterschiedliche Weise verarbeiten, einschließlich der Möglichkeit, sie vollständig zu ignorieren. Das Bereitstellen von Hinweisen garantiert nicht, dass die Shader-Kompilierungsleistung in allen Browsern/Systemen verbessert wird. label
Optional-
Ein String, der ein Label bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, zum Beispiel in
GPUError
-Meldungen oder Konsolenwarnungen. sourceMap
Optional-
Eine Source-Map-Definition zur Bereitstellung der Integration von Entwickler-Tools wie Debugging in der Quellsprache. WGSL-Namen (Bezeichner) in Source-Maps sollten den Regeln entsprechen, die in WGSL-Bezeichnervergleich definiert sind. Falls definiert, kann die Source-Map als Source-Map-v3-Format interpretiert werden.
Hinweis: Verschiedene Implementierungen können
sourceMap
s auf unterschiedliche Weise verarbeiten, einschließlich der Möglichkeit, sie vollständig zu ignorieren.
Rückgabewert
Eine Instanz des GPUShaderModule
-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createShaderModule()
aufgerufen wird, ansonsten wird ein GPUValidationError
erzeugt und ein ungültiges GPUShaderModule
-Objekt zurückgegeben:
Beispiele
In unserem Basis-Render-Demo wird unser Shader-Modul mit folgendem 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 |