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

js
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 der compilationHint ist entweder eine Instanz des GPUPipelineLayout 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 durch createShaderModule() so viel wie möglich an Kompilierung einmal durchgeführt werden kann, anstatt mehrfach in mehreren Aufrufen von GPUDevice.createComputePipeline() und GPUDevice.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 sourceMaps 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:

  • Wenn der WGSL-Code Ihres Shaders den Halbpräzisions-Gleitkommatyp f16 verwendet, muss er enable f16; zu Beginn enthalten und das zugehörige GPUDevice muss mit dem shader-f16 Feature erstellt sein.

Beispiele

In unserem Grundlegenden Render-Demo wird unser Shader-Modul mit dem folgenden Code erstellt:

js
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

Browser-Kompatibilität

Siehe auch