mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-04-22 03:02:01 -04:00
1417: Split the tracker into stateful/stateless to reduce the overhead r=cwfitzgerald a=kvark **Connections** Implements https://github.com/gfx-rs/wgpu/issues/1413#issuecomment-851604344 Reduces the overhead for resource tracking in the Animometer benchmark by up to 50%. **Description** We used to use the full tracker set on the usage scopes associated with compute/render passes. A resource tracker has 2 responsibilities: ensuring the resource is held alive, and validating and recording the state transitions. This PR exploits the fact that the latter responsibility is only applicable for buffers and textures. So doing all the lifetime tracking for a pass is a waste: we can instead just attach the lifetimes to the parent command buffer, straight. In the Animometer benchmark, there is one large buffer, and thousands of bind groups pointing to different offsets into it. The old code would fill up the pass tracker with those bind groups, and then merge it into the command buffer tracker. The new code would just fill up the command buffer tracker instead. Since there is only one buffer, the pass tracking becomes much lighter. **Testing** Untested. It would be nice to have some benchmarks here, possibly after #1397 ? Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>