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 createShaderModule()-Methode der GPUDevice-Schnittstelle 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.
hintsOptional-
Eine Sequenz von Aufzeichnungstypen mit der Struktur
("string", compilationHint). Diese verhalten sich wie geordnete Karten. In jedem Fall ist die"string"ein Schlüssel, der verwendet wird, um die Aufzeichnung zu identifizieren oder auszuwählen, und dercompilationHintist entweder eineGPUPipelineLayout-Objektinstanz oder ein enumerierter Wert von"auto".Der Zweck von
hintsbesteht darin, so früh wie möglich Informationen über das Pipeline-Layout bereitzustellen, um die Leistung zu verbessern. Die Idee ist, die Menge an Kompilierung zu maximieren, die durchcreateShaderModule()einmal durchgeführt werden kann, anstatt mehrmals in mehreren Aufrufen vonGPUDevice.createComputePipeline()undGPUDevice.createRenderPipeline().Hinweis: Verschiedene Implementierungen können
hintsunterschiedlich behandeln, einschließlich der Möglichkeit, sie vollständig zu ignorieren. Das Bereitstellen von Hinweisen garantiert nicht, dass die Leistung der Shader-Kompilierung in allen Browsern/Systemen verbessert wird. labelOptional-
Ein String, der ein Label bereitstellt, das zur Identifizierung des Objekts verwendet werden kann, zum Beispiel in
GPUError-Nachrichten oder Konsolenwarnungen. sourceMapOptional-
Eine Definition einer Source-Map zur Integration von Entwicklerwerkzeugen wie Debugging in der Quellsprache. WGSL-Namen (Identifier) in Source-Maps sollten den Regeln folgen, die in WGSL-Identifier-Vergleich definiert sind. Wenn definiert, kann die Source-Map als ein source-map-v3-Format interpretiert werden.
Hinweis: Verschiedene Implementierungen können
sourceMaps unterschiedlich behandeln, einschließlich der Möglichkeit, sie vollständig zu ignorieren.
Rückgabewert
Eine GPUShaderModule-Objektinstanz.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createShaderModule() aufgerufen wird, andernfalls wird ein GPUValidationError generiert 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> |