)]}'
{
  "commit": "c55a2b5e51108b5924eb6530e7b96c2cf323cbb3",
  "tree": "8bb3340bed86d79f846ffe3dd7e48e8c2ec66865",
  "parents": [
    "d8686d52e86eec613f47a0e4a0ebed930eb99e13"
  ],
  "author": {
    "name": "Bruce Mitchener",
    "email": "bruce.mitchener@gmail.com",
    "time": "Tue Apr 28 14:32:36 2026 +0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Apr 28 07:32:36 2026 +0000"
  },
  "message": "vello: Keep image atlas residency across renders (#1558)\n\nThis changes Vello’s image atlas handling from per-render rebuilds to\npersistent residency.\n\nBefore this series, image atlas placement was recomputed on every\nresolve, and the renderer recreated and rewrote the atlas texture every\nrender. That meant even steady-state scenes that only moved\nalready-uploaded images still paid repeated atlas upload cost. This\nseries keeps atlas residency metadata alive in `vello_encoding`, keeps\nthe atlas texture proxy alive in `vello`, and only uploads images that\nare newly inserted or dirtied by atlas growth.\n\nWhat changed:\n\n* `vello_encoding` now keeps the single-atlas allocator and resident\nimage map across resolves.\n* Resident entries are reused by blob id instead of being repacked every\nrender.\n* Eviction uses generation-based staleness under allocation pressure\nbefore growing the atlas.\n* Atlas growth still repacks, but marks residents dirty so only required\nre-uploads happen afterward.\n* The renderer now keeps the atlas texture resident across renders and\nonly recreates it when the atlas size changes.\n* Atlas logging is quieter in the steady state, but still reports\ncreation, resize, uploads, and eviction activity.\n* Added demo scenes that make residency visible, including a large-image\ncase that roughly fills a 4096x4096 atlas with moving images.\n\nUse this to see the trace log messages:\n\n```\nRUST_LOG\u003dvello::render\u003ddebug cargo run -p with_winit -- --test-scenes\n```",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5d87c1fec12bcd0d7246d573746d6378df3f305b",
      "old_mode": 33188,
      "old_path": "examples/scenes/src/test_scenes.rs",
      "new_id": "f5fced85900bacaef641ccc8c338a9e0fd77139b",
      "new_mode": 33188,
      "new_path": "examples/scenes/src/test_scenes.rs"
    },
    {
      "type": "modify",
      "old_id": "0e5192ed192f2f0472c28b40c031cb52a57c8fda",
      "old_mode": 33188,
      "old_path": "vello/src/lib.rs",
      "new_id": "91b92f778af3fa52b8d7d0d9a528d4f2f7b89271",
      "new_mode": 33188,
      "new_path": "vello/src/lib.rs"
    },
    {
      "type": "modify",
      "old_id": "1097f93981f0e5cf90d7986c9abc522214890801",
      "old_mode": 33188,
      "old_path": "vello/src/render.rs",
      "new_id": "8c901e3a863eda4668b5977cf78fe81aa3208b74",
      "new_mode": 33188,
      "new_path": "vello/src/render.rs"
    },
    {
      "type": "modify",
      "old_id": "ad16a43c59d19282af94754442ffa7653c761dbf",
      "old_mode": 33188,
      "old_path": "vello_encoding/src/image_cache.rs",
      "new_id": "cdda2690f30e7e5976e7736301a5761fca9bd01b",
      "new_mode": 33188,
      "new_path": "vello_encoding/src/image_cache.rs"
    },
    {
      "type": "modify",
      "old_id": "4a8a41540d88a534b4147a22bdc1a52c3175e856",
      "old_mode": 33188,
      "old_path": "vello_encoding/src/resolve.rs",
      "new_id": "442f6042753f0a7f8ef288852cd178513bf304ca",
      "new_mode": 33188,
      "new_path": "vello_encoding/src/resolve.rs"
    }
  ]
}
