)]}'
{
  "commit": "71c3f0dbfccfaf008add2cab2dcc48a4e7f1319b",
  "tree": "c56c31672f9894b2e352f6e4aeca7887d96ec096",
  "parents": [
    "8df3cbca7e312a561c2dc0430708e9782dda2306"
  ],
  "author": {
    "name": "Sanjeevi Suresh",
    "email": "sanjeevisuresh@google.com",
    "time": "Thu Oct 08 09:12:19 2026 -0700"
  },
  "committer": {
    "name": "dawn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "dawn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu Oct 08 09:12:19 2026 -0700"
  },
  "message": "[native] Deduplicate BindGroup usage tracking per pass\n\nIn a render pass, render bundle or compute pass, rebinding the same\nBindGroup across draws or dispatches (e.g. with varying dynamic offsets)\nrepeatedly walks the bind group layout and records identical\nwhole-resource usage on every SetBindGroup call.\n\nAdd a 64-bit PassTrackerID TypedInteger generated atomically by\nDeviceBase (GetNextPassTrackerID) and give one to each pass-level\ntracker (RenderPassResourceUsageTracker and\nComputePassResourceUsageTracker). Track the last pass tracker a\nBindGroup was recorded in intrusively on BindGroupBase via an\natomic\u003cPassTrackerID\u003e checked in ShouldAddToPassTracker() with relaxed\natomics. Duplicate additions caused by concurrent use in multiple\nencoders are benign.\n\n- Render passes and bundles:\n  RenderPassResourceUsageTracker::AddBindGroup skips bind groups\n  already recorded in the pass.\n- Compute passes:\n  ComputePassResourceUsageTracker::AddResourcesReferencedByBindGroup\n  skips bind groups already referenced in the pass. Per-dispatch\n  synchronization scopes still record every bind group since each\n  dispatch needs its own SyncScopeResourceUsage.\n\nTo keep a single, type-safe code path, the non-deduplicated walk\nbecomes the protected SyncScopeUsageTracker::AddBindGroupUsages(), and\na new DispatchResourceUsageTracker exposes it as AddBindGroup() for the\nper-dispatch scopes of compute passes.\n\nOn Animometer (10,000 draws/frame), this reduces AddBindGroup CPU cycle\ncost from 7.00% to 0.71% (~220 us saved per frame) on Adreno 840.\nGained 8.8% CPU FPS. With 1,000 to 10,000 dispatches per frame that\nrebind the same bind group with dynamic offsets, this reduces Dawn CPU\ninstructions per frame by 4-6% on Pixel 11.\n\nBug: b/564314926, b/570398140\nChange-Id: I682bacceafa6d1de156e0b61669d8f814303d17a\nReviewed-on: https://dawn-review.googlesource.com/c/dawn/+/342775\nReviewed-by: Brandon Jones \u003cbajones@chromium.org\u003e\nReviewed-by: Corentin Wallez \u003ccwallez@chromium.org\u003e\nCommit-Queue: Sanjeevi Suresh \u003csanjeevisuresh@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6464cc6077ae839045b593139e4dfeed8d3327bc",
      "old_mode": 33188,
      "old_path": "src/dawn/native/BindGroup.h",
      "new_id": "7e4f860bb605f1a12dc83b42efc6a7fe6b262d26",
      "new_mode": 33188,
      "new_path": "src/dawn/native/BindGroup.h"
    },
    {
      "type": "modify",
      "old_id": "3c9396fdf69d094b80768e062b9e70f2da7989e4",
      "old_mode": 33188,
      "old_path": "src/dawn/native/CommandEncoder.cpp",
      "new_id": "31a056ad5688821dd1e0442204e9eedda3ef21fd",
      "new_mode": 33188,
      "new_path": "src/dawn/native/CommandEncoder.cpp"
    },
    {
      "type": "modify",
      "old_id": "5583c697e6937601317e27c465961aee424423c8",
      "old_mode": 33188,
      "old_path": "src/dawn/native/ComputePassEncoder.cpp",
      "new_id": "963dfe388b5db3849632ea9127703b709eb09721",
      "new_mode": 33188,
      "new_path": "src/dawn/native/ComputePassEncoder.cpp"
    },
    {
      "type": "modify",
      "old_id": "bf2728c4e15310103d2ebbb9e27f9c321e85a212",
      "old_mode": 33188,
      "old_path": "src/dawn/native/ComputePassEncoder.h",
      "new_id": "fe6bd498f7339cc1d3dc2ff5cad0516fe9235560",
      "new_mode": 33188,
      "new_path": "src/dawn/native/ComputePassEncoder.h"
    },
    {
      "type": "modify",
      "old_id": "c4bf94c179fc8412d001d8ce748fbdcf3a29bf70",
      "old_mode": 33188,
      "old_path": "src/dawn/native/Device.cpp",
      "new_id": "6163a11a50575dec323fe636000b4344bc9ffe99",
      "new_mode": 33188,
      "new_path": "src/dawn/native/Device.cpp"
    },
    {
      "type": "modify",
      "old_id": "20c07860994c7b5bee832e05bf843d33473a9742",
      "old_mode": 33188,
      "old_path": "src/dawn/native/Device.h",
      "new_id": "f53b9df6d5ec7851fa886179222345df18fa853f",
      "new_mode": 33188,
      "new_path": "src/dawn/native/Device.h"
    },
    {
      "type": "modify",
      "old_id": "e8e0c58e0881cf4957d940a16d0b18de2797b787",
      "old_mode": 33188,
      "old_path": "src/dawn/native/IntegerTypes.h",
      "new_id": "950372ef4364c17dbe4efa53da8e7eb87af36434",
      "new_mode": 33188,
      "new_path": "src/dawn/native/IntegerTypes.h"
    },
    {
      "type": "modify",
      "old_id": "6b6a6dfbd7469ca72015cd8c5f2d7a3adcd10faf",
      "old_mode": 33188,
      "old_path": "src/dawn/native/PassResourceUsageTracker.cpp",
      "new_id": "4d41eefd3378e7d93f3ba75dbecd839c318d2bdf",
      "new_mode": 33188,
      "new_path": "src/dawn/native/PassResourceUsageTracker.cpp"
    },
    {
      "type": "modify",
      "old_id": "19dda3e2e5a96547bd76dbaeaaca06fd2c0c1b82",
      "old_mode": 33188,
      "old_path": "src/dawn/native/PassResourceUsageTracker.h",
      "new_id": "fbcd4e54fd1987942ccd2570044faebc4f724d85",
      "new_mode": 33188,
      "new_path": "src/dawn/native/PassResourceUsageTracker.h"
    },
    {
      "type": "modify",
      "old_id": "eb14ab8beed3033e6c206bef266b6f92f36340d6",
      "old_mode": 33188,
      "old_path": "src/dawn/native/RenderBundleEncoder.cpp",
      "new_id": "961abc9a80ca124da2128c49465188088c9092e2",
      "new_mode": 33188,
      "new_path": "src/dawn/native/RenderBundleEncoder.cpp"
    },
    {
      "type": "modify",
      "old_id": "1b8af79e0511d0d7c93e7b392bf05f75e40e4df4",
      "old_mode": 33188,
      "old_path": "src/dawn/native/RenderEncoderBase.cpp",
      "new_id": "d08527ed3dec5ab5311a2751d744c270c7cbc1b9",
      "new_mode": 33188,
      "new_path": "src/dawn/native/RenderEncoderBase.cpp"
    },
    {
      "type": "modify",
      "old_id": "4b1fcad08528b042f27019521bdc7cf2ee1bd741",
      "old_mode": 33188,
      "old_path": "src/dawn/native/RenderEncoderBase.h",
      "new_id": "4179ee90ea351063cf80ac776c09212464806afc",
      "new_mode": 33188,
      "new_path": "src/dawn/native/RenderEncoderBase.h"
    },
    {
      "type": "modify",
      "old_id": "45de178946eb328f94237a9bce71753ee51c8aa6",
      "old_mode": 33188,
      "old_path": "src/dawn/native/RenderPassEncoder.cpp",
      "new_id": "3907be6ad9d596faebeaab9f3a8767a9ad5fadd2",
      "new_mode": 33188,
      "new_path": "src/dawn/native/RenderPassEncoder.cpp"
    },
    {
      "type": "modify",
      "old_id": "cff348e37d8f4875dd874b8961aea766ec2b236a",
      "old_mode": 33188,
      "old_path": "src/dawn/tests/unittests/validation/QueueSubmitValidationTests.cpp",
      "new_id": "7d273bbefbb86071434ae2b45ebd678119c09d21",
      "new_mode": 33188,
      "new_path": "src/dawn/tests/unittests/validation/QueueSubmitValidationTests.cpp"
    }
  ]
}
