[native] Deduplicate BindGroup usage tracking per pass In a render pass, render bundle or compute pass, rebinding the same BindGroup across draws or dispatches (e.g. with varying dynamic offsets) repeatedly walks the bind group layout and records identical whole-resource usage on every SetBindGroup call. Add a 64-bit PassTrackerID TypedInteger generated atomically by DeviceBase (GetNextPassTrackerID) and give one to each pass-level tracker (RenderPassResourceUsageTracker and ComputePassResourceUsageTracker). Track the last pass tracker a BindGroup was recorded in intrusively on BindGroupBase via an atomic<PassTrackerID> checked in ShouldAddToPassTracker() with relaxed atomics. Duplicate additions caused by concurrent use in multiple encoders are benign. - Render passes and bundles: RenderPassResourceUsageTracker::AddBindGroup skips bind groups already recorded in the pass. - Compute passes: ComputePassResourceUsageTracker::AddResourcesReferencedByBindGroup skips bind groups already referenced in the pass. Per-dispatch synchronization scopes still record every bind group since each dispatch needs its own SyncScopeResourceUsage. To keep a single, type-safe code path, the non-deduplicated walk becomes the protected SyncScopeUsageTracker::AddBindGroupUsages(), and a new DispatchResourceUsageTracker exposes it as AddBindGroup() for the per-dispatch scopes of compute passes. On Animometer (10,000 draws/frame), this reduces AddBindGroup CPU cycle cost from 7.00% to 0.71% (~220 us saved per frame) on Adreno 840. Gained 8.8% CPU FPS. With 1,000 to 10,000 dispatches per frame that rebind the same bind group with dynamic offsets, this reduces Dawn CPU instructions per frame by 4-6% on Pixel 11. Bug: b/564314926, b/570398140 Change-Id: I682bacceafa6d1de156e0b61669d8f814303d17a Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/342775 Reviewed-by: Brandon Jones <bajones@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Sanjeevi Suresh <sanjeevisuresh@google.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.