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 ein GPUBindGroup basierend auf einem GPUBindGroupLayout, das eine Gruppe von zu bindenden Ressourcen und deren Verwendung in Shaderstufen definiert.
Syntax
createBindGroup(descriptor)
Parameter
descriptor-
Ein Objekt, das die folgenden Eigenschaften enthält:
entries-
Ein Array von Objekten, die die Ressourcen beschreiben, die für den Shader verfügbar gemacht werden sollen. Es gibt eines für jeden entsprechenden Eintrag, der durch das im
layoutreferenzierteGPUBindGroupLayoutbeschrieben wird. Jedes Eintragsobjekt hat die folgenden Eigenschaften:binding-
Eine Zahl, die eine eindeutige Kennung für diese Ressourcenbindung darstellt, die dem
binding-Wert eines entsprechendenGPUBindGroupLayout-Eintrags entspricht. Außerdem entspricht es demn-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:
GPUBufferBinding: Umfasst einGPUBuffer; siehe GPUBufferBinding-Objekte für eine Definition.GPUBuffer: Kann direkt verwendet werden, ohne in einGPUBufferBindingeingebunden zu werden, vorausgesetzt, die Standardwerte füroffsetundsizewerden verwendet.GPUExternalTextureGPUTextureView: Kann anstelle einerGPUExternalTextureverwendet werden, sofern sie kompatibel ist (ein 2D-Format mit einer einzigen Subresource, das heißtdimension: "2d").GPUTexture: Kann anstelle einerGPUTextureViewverwendet werden, sofern eine Standardansicht gewünscht wird. Wenn in diesem Kontext verwendet, istGPUTextureäquivalent zu einemGPUTextureView-Objekt, das mit einem Aufruf vonGPUTexture.createView()ohne angegebenes Argument erstellt wurde.GPUSampler
labelOptional-
Ein String, der ein Label bereitstellt, das verwendet werden kann, um das Objekt beispielsweise in
GPUError-Meldungen oder Konsolenwarnungen zu identifizieren. layout-
Das
GPUBindGroupLayout, dem dieentriesdieser Bindgruppe entsprechen.
GPUBufferBinding-Objekte
Ein GPUBufferBinding-Objekt kann die folgenden Eigenschaften enthalten:
buffer-
Das
GPUBuffer-Objekt, das Sie binden möchten. offsetOptional-
Der Offset in Bytes vom Anfang des
bufferbis zum Anfang des durch die Pufferbindung dem Shader bereitgestellten Bereichs. Wenn weggelassen, ist der Standardwert füroffset0. sizeOptional-
Die Größe in Bytes der Pufferbindung. Wird sie weggelassen, umfasst
sizeden Bereich, der beioffsetbeginnt und am Ende desbufferendet. Wenn sowohloffsetals auchsizeweggelassen werden, wird der gesamte Puffer dem Shader bereitgestellt.
Rückgabewert
Eine Instanz des 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 wird zurückgegeben:
- Die Anzahl der Einträge im
layoutGPUBindGroupLayoutentspricht der Anzahl der Eintragsobjekte inentries. - Für jeden Eintrag im
layoutGPUBindGroupLayoutbindet das entsprechende Eintragsobjekt inentriesden richtigen Ressourcentyp. Zum Beispiel hat einbuffer-Ressourcenlayout-Objekt einGPUBufferBinding-Objekt, das in der entsprechenden Bindung angegeben ist. - Wenn das Ressourcenlayout-Objekt ein
bufferist:- Der entsprechende gebundene
GPUBuffer:- Der gebundene Teil (wie durch
offsetundsizeangegeben) ist vollständig innerhalb des Puffers enthalten und hat eine nicht null Größe. - Hat eine Größe, die größer ist als die
minBindingSizedesbuffer-Ressourcenlayouts.
- Der gebundene Teil (wie durch
- Wenn der
typedes Ressourcenlayout-Objekts"uniform"ist:- Der gebundene
GPUBufferhat einenusage, derGPUBufferUsage.UNIFORMeinschließt. - Die effektive Größe des gebundenen Puffersegments ist kleiner oder gleich dem
maxUniformBufferBindingSize- Limit desGPUDevice. - Der angegebene
GPUBufferBindingoffsetist ein Vielfaches desminUniformBufferOffsetAlignment- Limit desGPUDevice.
- Der gebundene
- Wenn der
typedes Ressourcenlayout-Objekts"storage"oder"read-only-storage"ist:- Der gebundene
GPUBufferhat einenusage, derGPUBufferUsage.STORAGEeinschließt. - Die effektive Größe des gebundenen Puffersegments ist kleiner oder gleich dem
maxStorageBufferBindingSize- Limit desGPUDevice. - Die effektive Größe des gebundenen Puffersegments ist ein Vielfaches von 4.
- Der angegebene
GPUBufferBindingoffsetist ein Vielfaches desminStorageBufferOffsetAlignment- Limit desGPUDevice.
- Der gebundene
- Der entsprechende gebundene
- Wenn das Ressourcenlayout-Objekt ein
storageTextureist, hat das entsprechend gebundeneGPUTextureView:- Eine
dimension, die derviewDimensiondes Ressourcenlayout-Objekts entspricht (sieheGPUTexture.createView()für weitere Details zu den Einstellungen einer Texturansicht). - Ein
format, das demsampleTypedes Ressourcenlayout-Objekts entspricht. - Eine
mipLevelCountvon 1. - Ist eine Ansicht eines
GPUTexturemit einemusage, dasGPUTextureUsage.STORAGE_BINDINGeinschließt.
- Eine
- Wenn das Ressourcenlayout-Objekt ein
textureist, hat das entsprechend gebundeneGPUTextureView:- Eine
dimension, die derviewDimensiondes Ressourcenlayout-Objekts entspricht (sieheGPUTexture.createView()für weitere Details zu den Einstellungen einer Texturansicht). - Ein
format, das mit demsampleTypedes Ressourcenlayout-Objekts kompatibel ist. - Ist eine Ansicht eines
GPUTexturemit einemusage, dasGPUTextureUsage.TEXTURE_BINDINGeinschließt. - Ist eine Ansicht eines
GPUTexturemit einemsampleCount, der größer als 1 ist, wenn diemultisampled-Eigenschaft des Ressourcenlayout-Objektstrueist, oder gleich 1, wenn siefalseist.
- Eine
Beispiele
Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Compute-Demo zeigt ein Beispiel für das Erstellen eines Bindgruppenlayouts und die Verwendung dieses Layouts als Vorlage für das Erstellen einer Bindgruppe.
// …
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
Loading…
Siehe auch
- Die WebGPU API