GPUDevice: метод createBindGroupLayout()
Ограниченная доступность
Эта функция не является базовой, так как она не работает во всех наиболее распространённых браузерах.
Экспериментально: Это экспериментальная технология.
Перед использованием в производстве внимательно изучите таблицу совместимости с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод createBindGroupLayout() интерфейса GPUDevice создаёт GPUBindGroupLayout, определяющий структуру и назначение связанных ресурсов графического процессора, таких как буферы, которые будут использоваться в конвейере. Он используется в качестве шаблона при создании GPUBindGroup.
Синтаксис
createBindGroupLayout(descriptor)
Параметры
descriptor-
Объект, содержащий следующие свойства:
entries-
Массив объектов входов, каждый из которых описывает одно связывание ресурса шейдера, подлежащее включению в
GPUBindGroupLayout. Каждый вход будет соответствовать входу, определённому вGPUBindGroup(созданном с помощью вызоваGPUDevice.createBindGroup()), который использует этот объектGPUBindGroupLayoutв качестве шаблона. labelНеобязательно-
Строка, предоставляющая метку, которую можно использовать для идентификации объекта, например, в сообщениях об
GPUErrorили предупреждениях консоли.
Объекты входов
Объект входа включает следующие свойства:
binding-
Число, представляющее уникальный идентификатор этого входа, который соответствует значению
bindingсоответствующего входаGPUBindGroup. Кроме того, он соответствует значению индексаnсоответствующего атрибута@binding(n)в шейдере (GPUShaderModule), используемом в связанном конвейере. visibility-
Один или несколько битовых флагов, определяющих стадии шейдеров, для которых вход
GPUBindGroup, соответствующий этому входу, будет видимым. Возможные значения:-
GPUShaderStage.COMPUTE: Вход группы связывания будет доступен для шейдеров вычислений. -
GPUShaderStage.FRAGMENT: Вход группы связывания будет доступен для фрагментных шейдеров. -
GPUShaderStage.VERTEX: Вход группы связывания будет доступен для вершинных шейдеров.
Обратите внимание, что можно указать несколько стадий, разделив значения символом "|" (например):
visibility: GPUShaderStage.FRAGMENT | GPUShaderStage.VERTEX;
-
- "Объект макета ресурсов"
-
Объект, определяющий требуемый тип и структуру ресурса для связывания входа
GPUBindGroup, соответствующего этому входу. Это свойство может быть одним изbuffer,externalTexture,sampler,storageTexture, илиtexture, структуры которых описаны в следующей секции.
Объекты макета ресурсов
Объект макета ресурса может быть одним из следующих (см. также GPUDevice.createBindGroup() для подробностей о структуре необходимых ресурсов для каждой записи):
-
buffer: Указывает, что соответствующая записьGPUBindGroupбудет объектомGPUBufferBinding, который содержитGPUBufferплюс значенияoffsetиsize. Объект макета ресурсаbufferможет содержать следующие свойства:hasDynamicOffsetНеобязательно-
Булево значение. Если установлено в
true, это указывает, что данному связыванию требуется динамический смещение, например, установленное во время вызоваGPURenderPassEncoder.setBindGroup(). Если опущено,hasDynamicOffsetпо умолчанию равноfalse. minBindingSizeНеобязательно-
Число, указывающее минимально допустимый размер, в байтах, связанных буферов. Если опущено,
minBindingSizeпо умолчанию равно 0. Если значение равно 0, минимальный размер буфера игнорируется при создании конвейера и вместо этого проверяется выпущенными командами отрисовки/диспатча. typeНеобязательно-
Перечисление, определяющее требуемый тип
GPUBufferсвязываний с этим связыванием (см.GPUDevice.createBuffer()для получения дополнительной информации о типах буферов). Возможные значения:-
"read-only-storage": Читать-только буфер, созданный сusageGPUBufferUsage.STORAGE. -
"storage": Записываемый буфер, созданный сusageGPUBufferUsage.STORAGE. -
"uniform": Буфер, созданный сusageGPUBufferUsage.UNIFORM.
Если опущено,
typeпо умолчанию равно"uniform". -
-
externalTexture: Указывает, что соответствующая записьGPUBindGroupбудет объектомGPUExternalTexture. Объект макета ресурсаexternalTextureпуст —{}. -
sampler: Указывает, что соответствующая записьGPUBindGroupбудет объектомGPUSampler. Объект макета ресурсаsamplerможет содержать следующие свойства:typeНеобязательно-
Перечисление, определяющее требуемый тип для
GPUSamplerсвязываний с этим связыванием (см.GPUDevice.createSampler()для получения дополнительной информации о типах сэмплеров). Возможные значения:-
"comparison": Сэмплер сравнения. -
"filtering": Сэмплер фильтрации. -
"non-filtering": Сэмплер без фильтрации.
Если опущено,
typeпо умолчанию равно"filtering". -
-
storageTexture: Указывает, что соответствующая записьGPUBindGroupбудет объектомGPUTextureView. Объект макета ресурсаstorageTextureможет содержать следующие свойства:accessНеобязательно-
Перечисление, определяющее, будут ли текстурные представления, связанные с этим связыванием, связаны для чтения и/или записи. Возможные значения:
-
"read-only": Разрешает коду WGSL читать хранилищные текстуры. -
"read-write": Разрешает коду WGSL читать и писать в хранилищные текстуры. -
"write-only": Значение по умолчанию; Разрешает коду WGSL писать в хранилищные текстуры.
Значения
"read-only"и"read-write"могут быть использованы только в том случае, если расширение языка WGSL"readonly_and_readwrite_storage_textures"присутствует вWGSLLanguageFeatures. В противном случае генерируетсяGPUValidationError. -
format-
Перечисление, определяющее требуемый формат текстурных представлений, связанных с этим связыванием. См. раздел «Форматы текстур» спецификации по всем доступным значениям
format. viewDimensionНеобязательно-
Перечисление, определяющее требуемую размерность для текстурных представлений, связанных с этим связыванием. Возможные значения:
-
"1d": Текстура рассматривается как одномерное изображение. -
"2d": Текстура рассматривается как одно двумерное изображение. -
"2d-array": Текстура рассматривается как массив двумерных изображений. -
"cube": Текстура рассматривается как кубмап. Представление имеет 6 слоёв массива, соответствующих[+X, -X, +Y, -Y, +Z, -Z]граням куба. Выборка выполняется плавно по граням кубмапа. -
"cube-array": Текстура рассматривается как упакованный массивnкубмапов, каждый из которых имеет 6 слоёв массива, соответствующих[+X, -X, +Y, -Y, +Z, -Z]граням куба. Выборка выполняется плавно по граням кубмапов. -
"3d": Текстура рассматривается как трехмерное изображение.
Если опущено,
viewDimensionпо умолчанию равно"2d". -
-
texture: Указывает, что соответствующая записьGPUBindGroupбудет объектомGPUTextureView. Объект макета ресурсаtextureможет содержать следующие свойства:multisampledНеобязательно-
Булево значение. Значение
trueуказывает, что текстурные представления, связанные с этим связыванием, должны быть многообразными. Если опущено,multisampledпо умолчанию равноfalse. sampleTypeНеобязательно-
Перечисление, определяющее требуемый тип выборки для текстурных представлений, связанных с этим связыванием (см.
GPUDevice.createTexture()для получения дополнительной информации о типах текстурных представлений). Возможные значения:"depth""float""sint""uint""unfilterable-float"
Если опущено,
sampleTypeпо умолчанию равно"float". viewDimensionНеобязательно-
Перечисление, определяющее требуемую размерность для текстурных представлений, связанных с этим связыванием. Возможные и значения по умолчанию такие же, как у объектов макета ресурсов
storageTexture— см. выше.
Значение возврата
Экземпляр объекта GPUBindGroupLayout.
Валидация
При вызове createBindGroupLayout() должны быть выполнены следующие критерии, иначе генерируется GPUValidationError, и возвращается недопустимый объект GPUBindGroupLayout:
- Значение каждой записи
bindingявляется уникальным. - Значение каждой записи
bindingменьше, чемmaxBindingsPerBindGroupпредел устройстваGPUDevice. - Количество записей не превышает пределов слотов связывания.
- Только 1 объект макета ресурса определен на запись.
- Если запись
visibilityвключаетGPUShaderStage.VERTEX:- Если её объект макета ресурса является
buffer, еёtypeне равно"storage". - Её объект макета ресурса не является
storageTexture.
- Если её объект макета ресурса является
- Если объект макета ресурса записи является
texture, и её значениеmultisampledравноtrue:- Её
viewDimensionравно"2d". - Её
sampleTypeне равно"float".
- Её
- Если объект макета ресурса записи является
storageTexture:- Её
viewDimensionне равно"cube"или"cube-array". - Её
format— это формат, поддерживающий хранилищное использование.
- Её
Примеры
Примечание: В примерах WebGPU представлено множество других примеров.
Базовый пример
Наш базовый демонстрационный пример вычислений демонстрирует пример создания макета группы связей, а затем использования его в качестве шаблона при создании группы связей.
// ...
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,
},
},
],
});
// ...
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpudevice-createbindgrouplayout |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
createBindGroupLayout |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
previewВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
preview | 121 | Нет | 81 | Нет | 25.0 | 121 |
storageTexture_access_read-write_read-only |
124 | 124 | Нет | 110 | Нет | 124 | Нет | 82 | Нет | 27.0 | 124 |
texture_rgb10a2uint |
119В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
119В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 105В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
См. также
- API WebGPU
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/GPUDevice/createBindGroupLayout