GPUDevice: createBindGroup()-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 createBindGroup()-Methode des GPUDevice-Interfaces erzeugt eine GPUBindGroup basierend auf einem GPUBindGroupLayout, das eine Menge von Ressourcen definiert, die in einer Gruppe gebunden werden sollen, und wie diese Ressourcen 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 dem Shader ausgesetzt werden sollen. Es gibt für jede entsprechende Eintragung, die im layout-Attribut durch das GPUBindGroupLayout beschrieben ist, eine Eintragung. Jedes Eintragsobjekt hat die folgenden Eigenschaften:

binding

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

resource

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

label Optional

Ein String, der ein Etikett bereitstellt, das verwendet werden kann, um das Objekt, zum Beispiel in GPUError-Meldungen oder Konsolenwarnungen, zu identifizieren.

layout

Das GPUBindGroupLayout, dem die entries dieser Bindungsgruppe entsprechen.

GPUBufferBinding-Objekte

Ein GPUBufferBinding-Objekt kann die folgenden Eigenschaften enthalten:

buffer

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

offset Optional

Der Offset in Bytes vom Beginn des buffers bis zum Beginn des Bereichs, der dem Shader durch die Pufferbindung freigelegt wird. Wenn ausgelassen, wird offset standardmäßig auf 0 gesetzt.

size Optional

Die Größe in Bytes der Pufferbindung. Wenn ausgelassen, wird size der Bereich ab offset bis zum Ende des buffers sein. Wenn sowohl offset als auch size weggelassen werden, wird der gesamte Puffer dem Shader ausgesetzt.

Rückgabewert

Eine Instanz des GPUBindGroup-Objekts.

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenn createBindGroup() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt 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 korrekten Ressourcentyp. Zum Beispiel hat ein buffer-Ressourcenlayoutobjekt ein GPUBufferBinding-Objekt, das in der entsprechenden Bindung angegeben ist.
  • Wenn das Ressourcenlayoutobjekt ein buffer ist:
    • Der entsprechend gebundene GPUBuffer:
      • Hat seinen gebundenen Teil (wie durch offset und size angegeben) komplett darin enthalten, mit einer nicht-null Größe.
      • Hat eine Größe, die größer ist als die minBindingSize des buffer-Ressourcenlayouts.
    • Wenn der Ressourcenlayoutobjekttyp "uniform" ist:
      • Hat der gebundene GPUBuffer eine usage, die GPUBufferUsage.UNIFORM umfasst.
      • Ist die effektive Größe des gebundenen Puffersegments kleiner oder gleich der maxUniformBufferBindingSize Grenze des GPUDevice.
      • Ist der angegebene GPUBufferBinding-offset ein Vielfaches der minUniformBufferOffsetAlignment Grenze des GPUDevice.
    • Wenn der Ressourcenlayoutobjekttyp "storage" oder "read-only-storage" ist:
      • Hat der gebundene GPUBuffer eine usage, die GPUBufferUsage.STORAGE umfasst.
      • Ist die effektive Größe des gebundenen Puffersegments kleiner oder gleich der maxStorageBufferBindingSize Grenze des GPUDevice.
      • Ist die effektive Größe des gebundenen Puffersegments ein Vielfaches von 4.
      • Ist der angegebene GPUBufferBinding-offset ein Vielfaches der minStorageBufferOffsetAlignment Grenze des GPUDevice.
  • Wenn das Ressourcenlayoutobjekt ein storageTexture ist, hat die entsprechend gebundene GPUTextureView:
    • Eine dimension, die der viewDimension des Ressourcenlayoutobjekts entspricht (siehe GPUTexture.createView() für mehr Details zu den Einstellungen einer Texture-Ansicht).
    • Ein format, das den sampleType des Ressourcenlayoutobjekts entspricht.
    • Eine mipLevelCount gleich 1.
    • Eine Ansicht eines GPUTexture, deren usage GPUTextureUsage.STORAGE_BINDING umfasst.
  • Wenn das Ressourcenlayoutobjekt ein texture ist, hat die entsprechend gebundene GPUTextureView:
    • Eine dimension, die der viewDimension des Ressourcenlayoutobjekts entspricht (siehe GPUTexture.createView() für mehr Details zu den Einstellungen einer Texture-Ansicht).
    • Ein format, das mit dem sampleType des Ressourcenlayoutobjekts kompatibel ist.
    • Eine Ansicht eines GPUTexture, deren usage GPUTextureUsage.TEXTURE_BINDING umfasst.
    • Eine Ansicht eines GPUTexture mit einem sampleCount, das größer als 1 ist, wenn die multisampled-Eigenschaft des Ressourcenlayoutobjekts true ist, oder gleich 1, wenn sie false ist.

Beispiele

Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.

Einfaches Beispiel

Unser einfaches Compute-Demo zeigt ein Beispiel für die Erstellung eines Bindungsgruppenlayouts und die 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