)]}'
{
  "commit": "b24903553e3437e53783ef146fdebba494958b55",
  "tree": "1a6cb9e0f93baf0ad15bd7676d71f9cffa98bd08",
  "parents": [
    "809244764436824f20426bd53f92e645e9845ab3"
  ],
  "author": {
    "name": "Thomas Smith",
    "email": "68340554+b0nes164@users.noreply.github.com",
    "time": "Mon Dec 08 16:06:53 2025 -0500"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Dec 08 21:06:53 2025 +0000"
  },
  "message": "Add tile intersection checking (#1293)\n\nThis PR adds generation of intersection data to `make_tiles.` \n\nFor our MSAA calculations, we need the points where a line intersects\nwith a tile. Since the end goal is to perform the MSAA in parallel, we\nneed these intersections to be watertight between different threads. By\nperforming these calculations in `make_tiles`, we can create a source of\nground truth, ensuring watertightness.\n\nAlthough it is feasible to calculate the exact intersection points in\n`make_tiles`, we defer that work to the gpu. Instead we create an\nintersection bitmask, which unambiguously defines which edges the line\nintersects. We say a line *intersects* the edge of a tile if it touches\nthat edge AND continues into another tile. A endpoint that exactly\ntouches an edge does NOT count as intersecting, though it may still\ncontribute to winding (in the case of a top edge touch).\n\nThe bitmask is 5 bits, and will be consumed downstream by the\nrasterization stage:\n`P(erfect) | R(ight) | L(eft) | B(ottom) | T(op)`\nThe lower 4 bits correspond to the intersection edges. The \"Perfect\" bit\nis necessary to resolve ambiguity in cases where a line perfectly\nintersects with a corner of a tile.\n\n---\nCases of 3 bit ambiguity can be resolved by always calculating\nintersections on the opposing edges of the tile.\nConsider a tile with intersections `T | L | B`:\n```\no--------+\n|\\       |\n| \\      |\n|  \\     | \n+---o----+\n```\nCalculate the intersections on `T` and `B`!\n\n---\n\nCases of 2 bit ambiguity require the \"Perfect\" bit, which is set when\nthere is exactly one unique edge intersection.\nConsider a tile with intersections `T | L`:\n\nThis is valid:\n```\no--------+\n|\\       |\n| o      |\n|        | \n+--------+\n```\n\nBut so is this:\n ```\n+--o-----+\n| /      |\no        |\n|        | \n+--------+\n```\n\nWith the perfect bit, the first case would be `P | T | L` and the second case would be `T | L`\n\n---------\n\nCo-authored-by: Thomas Smith \u003cthomsmit@google.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "989eeec43ebe3a8f606262168dcc3cf1e8446ca7",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_bench/src/data.rs",
      "new_id": "4d3f4939797f8c925b9f4dcc6d3183f122af8645",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_bench/src/data.rs"
    },
    {
      "type": "modify",
      "old_id": "e7ff0796d83445f75edb282e69a6be9d0fe9fca2",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_bench/src/tile.rs",
      "new_id": "c987db96e26c793ad43096f4e0674bd8a02c33d4",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_bench/src/tile.rs"
    },
    {
      "type": "modify",
      "old_id": "739dceb9fa51ae1d3b34846f2e12781adfbbfe1e",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_common/src/strip.rs",
      "new_id": "3f5ffe9226a5d39ef433083ff9afa1e4bd6d2e3c",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_common/src/strip.rs"
    },
    {
      "type": "modify",
      "old_id": "6eb47f8ecb84efe2587050ba637c0a24dfde87c5",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_common/src/strip_generator.rs",
      "new_id": "4effbd8b00591a4b9ebf7863e04326c208085baf",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_common/src/strip_generator.rs"
    },
    {
      "type": "modify",
      "old_id": "f688f6cf9f1352aaa98ebff425631de03fe725af",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_common/src/tile.rs",
      "new_id": "99de591d8c0dbb4c480df78755b5af4a9faeb92b",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_common/src/tile.rs"
    },
    {
      "type": "modify",
      "old_id": "b5de6ffd628de6960ace1e948c1b951fbee4950f",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_toy/src/debug.rs",
      "new_id": "b9e129a1f6438d3d5ad60188b52587711e177edf",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_toy/src/debug.rs"
    }
  ]
}
