[dawn][native] Add DynamicArrayState default bindings
The default bindings are used instead of the dynamic array element when
!hasBinding<T>. They are inserted at the end of the dynamic binding
array, after all of the slots for the users' bindings. This CL:
- Adds creation of all 26 default bindings for
wgpu::DynamicBindingKind::SampledTexture. This is cached on a
DynamicArrayDefaultBindings object.
- Makes the DynamicArrayDefaultBindings object part of the device so it
can be reused between bindgroups.
- Inserts the default bindings at the end of the DynamicArrayState
bindings.
- This requires updating the Vulkan backend to reserve enough space
for the additional bindings.
- Separately keep track of the API size of the DynamicArrayState
since mBindings now also contains default bindings.
- Changes the logic in DynamicArrayState metadata updates to only do
updates for the user bindings.
- Updates the Vulkan backend to handle empty metadata updates.
- Pass to Tint the order in which we put the default bindings at the
end of the binding array.
- Adds a test that default bindings contain zeroes and have size 1
(only for a few interesting types).
- Fix the KeepBIndingArrayAsPointer transform to list
DuplicateBindings as a capability.
Bug: 435317394
Change-Id: I97201f193b0136d6c5b1003e9ba6ac2598295bbf
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/260255
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.
Dawn provides several WebGPU building blocks:
webgpu.h version that Dawn implements.webgpu.h.Helpful links:
Developer documentation:
User documentation: (TODO, figure out what overlaps with the webgpu.h docs)
BSD 3-Clause License, please see LICENSE.
This is not an officially supported Google product.