| commit | 6ee5b8fed80589de02b551fbc2e52eb9dde91f89 | [log] [tgz] |
|---|---|---|
| author | Antonio Maiorano <amaiorano@google.com> | Tue Oct 28 17:47:17 2025 -0700 |
| committer | Dawn LUCI CQ <dawn-scoped@luci-project-accounts.iam.gserviceaccount.com> | Tue Oct 28 17:47:17 2025 -0700 |
| tree | bc85793f9ffbf87cbf8bab6095117a9d2573af01 | |
| parent | b2e93484bc0611525df54473e6771ad3e4500c6d [diff] |
d3d12: optimize root signature slot usage for dynamic storage buffers Rather than bind dynamic storage buffers to root descriptors as [base offset + dynamic offset, size], bind them instead to the root descriptor table at [base offset, full size - base offset], and store the dynamic offset as a root constant. The dynamic offsets are fed to Tint via ArrayOffsetFromUniform, and thus are applied at shader runtime by reading the offsets from a UBO and adding them to all reads/writes of dynamic storage buffers. Before this change, each dynamic storage buffer binding would use 3 root signature slots: 2 for the root descriptor binding, and 1 for the buffer length. With this change, each binding now takes 2 root signature slots: 1 for the buffer length (as before), and 1 for the buffer offset. This frees up 8 slots (maxDynamicStorageBuffersPerPipelineLayout) in total. Other things to point out: - Added BindGroupTests.DynamicOffsetsWithAtomicOperations test to cover the case of atomic operations on dynamic buffers. This is because along with (RW)ByteAddressBuffer Load and Store functions, the Interlocked* functions are the ones that take an offset, so we want to make sure the dynamic offsets are properly applied. - Added some useful comments to DynamicBufferOffsetTests. - Added dawn::ityp::stack_vec::empty() - Added dawn::ityp::vector::resize(Index, const Value&) overload Bug: 449703736 Change-Id: I394ae0a82352eda9b8d109fabf05597339fd4d47 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/267454 Commit-Queue: Antonio Maiorano <amaiorano@google.com> Reviewed-by: Loko Kung <lokokung@google.com> Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
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.