Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. Web-APIs
  3. GPUDevice
  4. createBindGroupLayout()

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

GPUDevice: Methode createBindGroupLayout()

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 insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist inWeb Workers verfügbar.

DiecreateBindGroupLayout()-Methode desGPUDevice-Interfaces erstellt einGPUBindGroupLayout, das die Struktur und den Zweck von verbundenen GPU-Ressourcen wie Buffern definiert, die in einer Pipeline verwendet werden, und wird als Vorlage verwendet, wennGPUBindGroups erstellt werden.

Syntax

js
createBindGroupLayout(descriptor)

Parameter

descriptor

Ein Objekt, das die folgenden Eigenschaften enthält:

entries

Ein Array vonEintragsobjekten, von denen jedes eine einzelne Shader-Ressourcenbindung beschreibt, die in dasGPUBindGroupLayout aufgenommen werden soll. Jeder Eintrag entspricht einem Eintrag, der in einerGPUBindGroup (erstellt durch einen Aufruf vonGPUDevice.createBindGroup()) definiert wurde, die diesesGPUBindGroupLayout-Objekt als Vorlage verwendet.

labelOptional

Ein String, der eine Bezeichnung angibt, die zur Identifizierung des Objekts verwendet werden kann, zum Beispiel inGPUError-Meldungen oder Konsolenwarnungen.

Eintragsobjekte

Ein Eintragsobjekt beinhaltet die folgenden Eigenschaften:

binding

Eine Zahl, die einen eindeutigen Bezeichner für diesen spezifischen Eintrag darstellt, der dembinding-Wert eines entsprechendenGPUBindGroup-Eintrags entspricht. Darüber hinaus entspricht es demn-Indexwert des entsprechenden@binding(n)-Attributs im Shader (GPUShaderModule), das in der zugehörigen Pipeline verwendet wird.

visibility

Ein oder mehrereBitmaskenflags, die die Shader-Stufen definieren, für die einGPUBindGroup-Eintrag sichtbar ist, der diesem Eintrag entspricht. Mögliche Werte sind:

  • GPUShaderStage.COMPUTE: Der Bindungseintrag wird für Compute-Shader zugänglich sein.
  • GPUShaderStage.FRAGMENT: Der Bindungseintrag wird für Fragment-Shader zugänglich sein.
  • GPUShaderStage.VERTEX: Der Bindungseintrag wird für Vertex-Shader zugänglich sein.

Beachten Sie, dass mehrere Stufen spezifiziert werden können, indem Werte mitbitweise ODER getrennt werden, zum Beispiel:GPUShaderStage.FRAGMENT | GPUShaderStage.VERTEX.

"Ressourcen-Layout-Objekt"

Ein Objekt, das den erforderlichen Bindungsressourcentyp und die Struktur desGPUBindGroup-Eintrags definiert, der diesem Eintrag entspricht. Diese Eigenschaft kann eines vonbuffer,externalTexture,sampler,storageTexture odertexture sein, deren Objektstrukturen im nächsten Abschnitt beschrieben werden.

Ressourcen-Layout-Objekte

Das Ressourcen-Layout-Objekt kann eines der folgenden sein (siehe auchGPUDevice.createBindGroup() für Details, wie die erforderlichen Ressourcen für jeden Eintrag strukturiert sind):

  • buffer: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUBufferBinding-Objekt ist, das einenGPUBuffer plusoffset- undsize-Werte enthält. Einbuffer Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:

    hasDynamicOffsetOptional

    Ein Boolean. Wenn auftrue gesetzt, zeigt es an, dass diese Bindung einen dynamischen Offset erfordert, beispielsweise wenn er während eines Aufrufs vonGPURenderPassEncoder.setBindGroup() festgelegt wird. Wenn ausgelassen, wirdhasDynamicOffset standardmäßig auffalse gesetzt.

    minBindingSizeOptional

    Eine Zahl, die die minimal zulässige Größe, in Bytes, gebundener Buffer angibt. Wenn ausgelassen, wirdminBindingSize standardmäßig auf 0 gesetzt. Wenn der Wert 0 ist, wird die minimale Buffergröße während der Pipelinenerstellung ignoriert und stattdessen von ausgegebenen Zeichen-/Verteilkommandos validiert.

    typeOptional

    Ein enumerierter Wert, der den erforderlichen Typ fürGPUBuffers angibt, die an diese Bindung gebunden sind (sieheGPUDevice.createBuffer() für weitere Informationen zu Buffer-Typen). Mögliche Werte sind:

    • "read-only-storage": Ein Nur-Lese-Buffer, erstellt mit einerusage vonGPUBufferUsage.STORAGE.
    • "storage": Ein beschreibbarer Buffer, erstellt mit einerusage vonGPUBufferUsage.STORAGE.
    • "uniform": Ein Buffer, erstellt mit einerusage vonGPUBufferUsage.UNIFORM.

    Wenn ausgelassen, wirdtype standardmäßig auf"uniform" gesetzt.

  • externalTexture: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUExternalTexture-Objekt ist. EinexternalTexture Ressourcen-Layout-Objekt ist leer —{}.

  • sampler: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUSampler-Objekt ist. Einsampler Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:

    typeOptional

    Ein enumerierter Wert, der den erforderlichen Typ fürGPUSamplers angibt, die an diese Bindung gebunden sind (sieheGPUDevice.createSampler() für weitere Informationen zu Sampler-Typen). Mögliche Werte sind:

    • "comparison": Ein Vergleichs-Sampler.
    • "filtering": Ein Filter-Sampler.
    • "non-filtering": Ein Nicht-Filter-Sampler.

    Wenn ausgelassen, wirdtype standardmäßig auf"filtering" gesetzt.

  • storageTexture: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUTextureView-Objekt ist. EinstorageTexture Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:

    accessOptional

    Ein enumerierter Wert, der angibt, ob die an diese Bindung gebundenen Texturansichten für Lese- und/oder Schreibzugriff gebunden werden. Mögliche Werte sind:

    • "read-only": Ermöglicht WGSL-Code, Speichertexturen zu lesen.
    • "read-write": Ermöglicht WGSL-Code, Speichertexturen zu lesen und zu schreiben.
    • "write-only": Der Standardwert; ermöglicht WGSL-Code, in Speichertexturen zu schreiben.

    Die"read-only" und"read-write" Werte können nur verwendet werden, wenn die"readonly_and_readwrite_storage_textures" WGSL-Spracherweiterung inWGSLLanguageFeatures vorhanden ist. Wenn dies nicht der Fall ist, wird einGPUValidationError erzeugt.

    format

    Ein enumerierter Wert, der das erforderliche Format der an diese Bindung gebundenen Texturansichten spezifiziert. Siehe die Spezifikation im AbschnittTexturformate für alle verfügbarenformat-Werte. Siehe auchTier 1 und Tier 2 Texturformate.

    Hinweis:Die Verwendung desbgra8unorm-Formats für Nur-Lese-Speichertexturen ist veraltet. Die Spezifikation verbietet dies explizit, da dieses Format für Schreibzugriff gedacht ist und nicht portabel ist. Jegliche Browserunterstützung für diese Kombination wird als Bug angesehen.

    viewDimensionOptional

    Ein enumerierter Wert, der die erforderliche Dimension für an diese Bindung gebundene Texturansichten spezifiziert. Mögliche Werte sind:

    • "1d": Die Textur wird als eindimensionales Bild betrachtet.
    • "2d": Die Textur wird als einzelnes zweidimensionales Bild betrachtet.
    • "2d-array": Die Textur wird als Array von zweidimensionalen Bildern betrachtet.
    • "cube": Die Textur wird als Würfelkarte betrachtet. Die Ansicht hat 6 Array-Ebenen, die den[+X, -X, +Y, -Y, +Z, -Z]-Flächen des Würfels entsprechen. Das Abtasten erfolgt nahtlos über die Flächen der Würfelkarte.
    • "cube-array": Die Textur wird als gepacktes Array vonn Würfelkarten betrachtet, jede mit 6 Array-Ebenen, die den[+X, -X, +Y, -Y, +Z, -Z]-Flächen des Würfels entsprechen. Das Abtasten erfolgt nahtlos über die Flächen der Würfelkarten.
    • "3d": Die Textur wird als dreidimensionales Bild betrachtet.

    Wenn ausgelassen, wirdviewDimension standardmäßig auf"2d" gesetzt.

  • texture: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUTextureView-Objekt ist. Eintexture Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:

    multisampledOptional

    Ein Boolean. Ein Wert vontrue gibt an, dass die an diese Bindung gebundenen Texturansichten multi-abgetastet sein müssen. Wenn ausgelassen, wirdmultisampled standardmäßig auffalse gesetzt.

    sampleTypeOptional

    Ein enumerierter Wert, der den erforderlichen Abtasttyp für an diese Bindung gebundene Texturansichten spezifiziert (sieheGPUDevice.createTexture() für weitere Informationen über Texturansichtstypen). Mögliche Werte sind:

    • "depth"
    • "float"
    • "sint"
    • "uint"
    • "unfilterable-float"

    Wenn ausgelassen, wirdsampleType standardmäßig auf"float" gesetzt.

    viewDimensionOptional

    Ein enumerierter Wert, der die erforderliche Dimension für an diese Bindung gebundene Texturansichten spezifiziert. Mögliche und Standardwerte sind die gleichen wie fürstorageTexture Ressourcen-Layout-Objekte — siehe oben.

Rückgabewert

Eine Instanz desGPUBindGroupLayout-Objekts.

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenncreateBindGroupLayout() aufgerufen wird, andernfalls wird einGPUValidationError erzeugt, und ein ungültigesGPUBindGroupLayout-Objekt wird zurückgegeben:

  • Jeder Eintrag hat einen eindeutigenbinding-Wert.
  • Jeder Eintrag hat einenbinding-Wert, der kleiner als dasmaxBindingsPerBindGroupLimit desGPUDevice ist.
  • Die Anzahl der Einträge überschreitet nicht dieBindungsslotbeschränkungen.
  • Nur ein Ressourcen-Layout-Objekt ist pro Eintrag definiert.
  • Wenn dievisibility eines EintragsGPUShaderStage.VERTEX enthält:
    • Wenn das Ressourcen-Layout-Objekt einbuffer ist, ist seintype nicht"storage".
    • Sein Ressourcen-Layout-Objekt ist keinstorageTexture.
  • Wenn das Ressourcen-Layout-Objekt eines Eintrags eintexture ist und seinmultisampled-Werttrue ist:
    • SeineviewDimension ist"2d".
    • SeinsampleType ist nicht"float".
  • Wenn das Ressourcen-Layout-Objekt eines Eintrags einstorageTexture ist:
    • SeineviewDimension ist nicht"cube" oder"cube-array".
    • Seinformat ist ein Format, das Speicherverwendung unterstützt.

Beispiele

Hinweis:DieWebGPU-Beispiele bieten viele weitere Beispiele.

Einfaches Beispiel

Unsereinfaches Compute-Demo zeigt ein Beispiel für die Erstellung eines Bindungsgruppenlayouts und dessen Verwendung als Vorlage bei der Erstellung 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-createbindgrouplayout

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2026 Movatter.jp