)]}'
{
  "commit": "12f4bc468e7a724285bfc9aac2e4fc3f2162c423",
  "tree": "219179f665fdfedc37ab0c0ea705551de7a78adb",
  "parents": [
    "063c2e8b3e7c80d23890a60f3662fcae22145db4"
  ],
  "author": {
    "name": "Kai Ninomiya",
    "email": "kainino@chromium.org",
    "time": "Mon Mar 09 14:53:56 2026 -0700"
  },
  "committer": {
    "name": "Dawn LUCI CQ",
    "email": "dawn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Mar 09 14:53:56 2026 -0700"
  },
  "message": "[dawn][metal] Fix robustness issues around buffer lengths being u32\n\nOn Metal, the sizes of storage buffers (and vertex buffers when\ntransformed into storage buffers for vertex pulling for robustness) are\npassed to MSL in an array of u32 values. Thus, such bindings cannot be\nlarger than 4GiB-1.\n\nThere is no separate limit on vertex buffer binding size (as there is\nfor storage buffer bindings), so in order to make this safe - without\nsignificantly changing how buffer sizes are passed - this also reduces\nmaxBufferSize by 4 bytes to 4GiB-4. This should have minimal impact on\napps, but in order to raise it back to 4GiB we can either:\n- Pass buffer size minus one (i.e. the max byte index value) into the\n  shader so the minus-one step doesn\u0027t have to happen inside the shader\n- Or just pass sizes as u64.\n\nThe tests are verified to fail without the fix, with the exception of\nVertexBuffer_ZeroSizeRemaining which exists to help test later when we\nraise the limit again.\n\nTest: MetalBufferRobustnessTest.*\nFixed: 488400770\nChange-Id: I3b4207b63ba641271b098a964734f70446595814\nReviewed-on: https://dawn-review.googlesource.com/c/dawn/+/295255\nReviewed-by: Loko Kung \u003clokokung@google.com\u003e\nCommit-Queue: Kai Ninomiya \u003ckainino@chromium.org\u003e\nReviewed-by: Corentin Wallez \u003ccwallez@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fceae293dd4e1239a6c504c6fd7dfa5922b87777",
      "old_mode": 33188,
      "old_path": "src/dawn/native/Limits.cpp",
      "new_id": "ae06f6dd0f88edcff27bc611eaad1fa7af22895e",
      "new_mode": 33188,
      "new_path": "src/dawn/native/Limits.cpp"
    },
    {
      "type": "modify",
      "old_id": "c7c87417e0c1244fc4652a0d769900c86daa20bf",
      "old_mode": 33188,
      "old_path": "src/dawn/native/metal/BufferMTL.mm",
      "new_id": "7fd2a0b780731b6a4fb0b52e021b31643fc063cc",
      "new_mode": 33188,
      "new_path": "src/dawn/native/metal/BufferMTL.mm"
    },
    {
      "type": "modify",
      "old_id": "8cd6c61809d86034adffc5297732ed7b50bd500b",
      "old_mode": 33188,
      "old_path": "src/dawn/native/metal/CommandBufferMTL.mm",
      "new_id": "810a8ac1466c680f49db07ef6d27c9f373d6a355",
      "new_mode": 33188,
      "new_path": "src/dawn/native/metal/CommandBufferMTL.mm"
    },
    {
      "type": "modify",
      "old_id": "01ce8c34cbaeed09ac96f2796e6ca8187b2eee9a",
      "old_mode": 33188,
      "old_path": "src/dawn/native/metal/PhysicalDeviceMTL.mm",
      "new_id": "216b08bdcc0644f3ca5273df6ab172ad42186d48",
      "new_mode": 33188,
      "new_path": "src/dawn/native/metal/PhysicalDeviceMTL.mm"
    },
    {
      "type": "modify",
      "old_id": "704d6d5e467c3f846e63042b1e78fa0312141f3c",
      "old_mode": 33188,
      "old_path": "src/dawn/tests/BUILD.gn",
      "new_id": "6d1f264f7fa404775908c52a8b0f343c2601c112",
      "new_mode": 33188,
      "new_path": "src/dawn/tests/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "a992319b8a326230a6658cde832f7f091bc34298",
      "old_mode": 33188,
      "old_path": "src/dawn/tests/CMakeLists.txt",
      "new_id": "01c0609201745a0720013f31dcd475c2334d3461",
      "new_mode": 33188,
      "new_path": "src/dawn/tests/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "45d54f39414a18db9edf3bb44f807ed8d3edc81d",
      "old_mode": 33188,
      "old_path": "src/dawn/tests/end2end/ArchTierLimitsExhaustive.cpp",
      "new_id": "2e5be7648af1983c9440aacf22112cb5fbb96e33",
      "new_mode": 33188,
      "new_path": "src/dawn/tests/end2end/ArchTierLimitsExhaustive.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "65476eae787904a485c8ce1343cfc2c1532b785f",
      "new_mode": 33188,
      "new_path": "src/dawn/tests/end2end/BufferRobustnessTests.cpp"
    },
    {
      "type": "modify",
      "old_id": "96b12969245b7bb0fc9bff5c8735e1c58d770349",
      "old_mode": 33188,
      "old_path": "src/tint/lang/core/ir/transform/robustness.cc",
      "new_id": "85a92c6ef23cda71937362c321c799ae0dfafd1f",
      "new_mode": 33188,
      "new_path": "src/tint/lang/core/ir/transform/robustness.cc"
    }
  ]
}
