GPUDevice: createBindGroup() Methode

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 createBindGroup() Methode der GPUDevice-Schnittstelle erstellt eine GPUBindGroup basierend auf einem GPUBindGroupLayout, welches eine Gruppe von Ressourcen definiert, die zusammen gebunden und in Shader-Stufen verwendet werden.

Syntax

js
createBindGroup(descriptor)

Parameter

descriptor

Ein Objekt, das die folgenden Eigenschaften enthält:

entries

Ein Array von Eintragsobjekten, die die Ressourcen beschreiben, die im Shader verfügbar gemacht werden sollen. Es wird eines für jeden entsprechenden Eintrag geben, der im GPUBindGroupLayout referenziert wird, das in layout angegeben ist. Jedes Eintragsobjekt hat folgende Eigenschaften:

binding

Eine Zahl, die eine eindeutige Kennung für diese Ressourcenbindung darstellt und den binding-Wert eines entsprechenden GPUBindGroupLayout-Eintrags entspricht. Außerdem entspricht es dem n-Indexwert des entsprechenden @binding(n)-Attributs im Shader (GPUShaderModule), das in der zugehörigen Pipeline verwendet wird.

resource

Die zu bindende Ressource. Dies kann eine der folgenden sein:

label Optional

Ein String, der ein Label bereitstellt, welches verwendet werden kann, um das Objekt zu identifizieren, beispielsweise in GPUError-Meldungen oder Konsolenwarnungen.

layout

Das GPUBindGroupLayout, dem die entries dieser Bindungsgruppe entsprechen.

GPUBufferBinding-Objekte

Ein GPUBufferBinding-Objekt kann folgende Eigenschaften enthalten:

buffer

Das GPUBuffer-Objekt, das Sie binden möchten.

offset Optional

Der Offset, in Bytes, vom Beginn des buffer bis zum Beginn des Bereichs, der vom Pufferelement im Shader sichtbar gemacht wird. Wenn weggelassen, beträgt offset standardmäßig 0.

size Optional

Die Größe, in Bytes, der Pufferelementbindung. Wenn weggelassen, ist size der Bereich, der bei offset beginnt und am Ende des buffer endet. Wenn sowohl offset als auch size weggelassen werden, wird der gesamte Puffer dem Shader sichtbar gemacht.

Rückgabewert

Eine Instanz eines GPUBindGroup-Objekts.

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenn createBindGroup() aufgerufen wird. Andernfalls wird ein GPUValidationError generiert und ein ungültiges GPUBindGroup-Objekt zurückgegeben:

  • Die Anzahl der Einträge im layout GPUBindGroupLayout entspricht der Anzahl der Eintragsobjekte in entries.
  • Für jeden Eintrag im layout GPUBindGroupLayout bindet das entsprechende Eintragsobjekt in entries den richtigen Ressourcentyp. Zum Beispiel hat ein buffer-Ressourcenlayoutobjekt ein GPUBufferBinding-Objekt, das im entsprechenden Binding angegeben ist.
  • Wenn das Ressourcenlayoutobjekt ein buffer ist:
    • Der entsprechende gebundene GPUBuffer:
      • Hat seinen gebundenen Teil (wie durch offset und size angegeben) vollständig innerhalb und mit einer nicht-null Grösse enthalten.
      • Hat eine Größe, die größer ist als minBindingSize des buffer-Ressourcenlayout.
    • Wenn der type des Ressourcenlayoutobjekts "uniform" ist:
      • Hat der gebundene GPUBuffer einen usage, der GPUBufferUsage.UNIFORM enthält.
      • Ist die effektive Größe des gebundenen Puffersegments kleiner oder gleich dem maxUniformBufferBindingSize Limit des GPUDevice.
      • Ist der spezifizierte GPUBufferBinding-offset ein Vielfaches des minUniformBufferOffsetAlignment Limits des GPUDevice.
    • Wenn der type des Ressourcenlayoutobjekts "storage" oder "read-only-storage" ist:
      • Hat der gebundene GPUBuffer einen usage, der GPUBufferUsage.STORAGE enthält.
      • Ist die effektive Größe des gebundenen Puffersegments kleiner oder gleich dem maxStorageBufferBindingSize Limit des GPUDevice.
      • Ist die effektive Größe des gebundenen Puffersegments ein Vielfaches von 4.
      • Ist der spezifizierte GPUBufferBinding-offset ein Vielfaches des minStorageBufferOffsetAlignment Limits des GPUDevice.
  • Wenn das Ressourcenlayoutobjekt ein storageTexture ist, hat die entsprechende gebundene GPUTextureView:
    • Eine dimension, die der viewDimension des Ressourcenlayoutobjekts entspricht (siehe GPUTexture.createView() für mehr Details zu den Einstellungen einer Texture-View).
    • Ein format, das dem sampleType des Ressourcenlayoutobjekts entspricht.
    • Eine mipLevelCount von 1.
    • Ist eine Ansicht eines GPUTexture mit einer usage, die GPUTextureUsage.STORAGE_BINDING enthält.
  • Wenn das Ressourcenlayoutobjekt eine texture ist, hat die entsprechende gebundene GPUTextureView:
    • Eine dimension, die der viewDimension des Ressourcenlayoutobjekts entspricht (siehe GPUTexture.createView() für mehr Details zu den Einstellungen einer Texture-View).
    • Ein format, das mit dem sampleType des Ressourcenlayoutobjekts kompatibel ist.
    • Ist eine Ansicht eines GPUTexture mit einer usage, die GPUTextureUsage.TEXTURE_BINDING enthält.
    • Ist eine Ansicht eines GPUTexture mit einer sampleCount größer 1, wenn die multisampled-Eigenschaft des Ressourcenlayoutobjekts true ist, oder gleich 1, wenn sie false ist.

Beispiele

Hinweis: Die WebGPU-Beispiele enthalten viele weitere Beispiele.

Einfaches Beispiel

Unser grundlegendes Berechnungsdemo zeigt ein Beispiel für die Erstellung eines Bindungsgruppenlayouts und dessen Verwendung als Vorlage beim Erstellen einer Bindungsgruppe.

js
// …

const bindGroupLayout = device.createBindGroupLayout({
  entries: [
    {
      binding: 0,
      visibility: GPUShaderStage.COMPUTE,
      buffer: {
        type: "storage",
      },
    },
  ],
});

const bindGroup = device.createBindGroup({
  layout: bindGroupLayout,
  entries: [
    {
      binding: 0,
      resource: {
        buffer: output,
      },
    },
  ],
});

// …

Spezifikationen

Specification
WebGPU
# dom-gpudevice-createbindgroup

Browser-Kompatibilität

Siehe auch