)]}'
{
  "commit": "4a32b89161b8f409b99e28d9a30f1b18efb136b6",
  "tree": "0c440e1ba517a06b0da48e8c18c3622f5a70e97f",
  "parents": [
    "d9786db93830a01efc22460b7853256ef1f3989e"
  ],
  "author": {
    "name": "Taj Pereira",
    "email": "taj@canva.com",
    "time": "Tue Feb 24 06:34:08 2026 +1030"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Feb 23 20:04:08 2026 +0000"
  },
  "message": "Render more than ~5300 images  (#1467)\n\nFixes https://github.com/linebender/vello/issues/1468\n\nThere is a bug in the shader code - we only check the first row of the\nencoded paints texture. On my machine, that gives me ~5400 images before\nI start drawing empty rectangles.\n\nThis PR modifies our `textureLoad` calls to consider more than the first\nrow of texels.\n\nOn my machine, I used the following test to verify the fix.\n\n```rs\n#[vello_test(width \u003d 10, height \u003d 10)]\nfn image_many_unique_paints_wrap_encoded_texture(ctx: \u0026mut impl Renderer) {\n    const NUM_IMAGES: usize \u003d 6000;\n    let sampler \u003d ImageSampler {\n        x_extend: Extend::Pad,\n        y_extend: Extend::Pad,\n        quality: ImageQuality::Low,\n        alpha: 1.0,\n    };\n\n    let dummy_rect \u003d Rect::new(0.0, 0.0, 1.0, 1.0);\n    for i in 0..NUM_IMAGES {\n        let mut pix \u003d Pixmap::new(1, 1);\n        let val \u003d (i % 255 + 1) as u8;\n        pix.set_pixel(0, 0, PremulRgba8::from_u32(u32::from_be_bytes([val, val, val, 255])));\n        let source \u003d ctx.get_image_source(Arc::new(pix));\n        ctx.set_paint(Image {\n            image: source,\n            sampler,\n        });\n        ctx.fill_rect(\u0026dummy_rect);\n    }\n\n    let mut final_pix \u003d Pixmap::new(1, 1);\n    final_pix.set_pixel(0, 0, PremulRgba8::from_u32(u32::from_be_bytes([255, 0, 0, 255])));\n    let final_source \u003d ctx.get_image_source(Arc::new(final_pix));\n    ctx.set_paint(Image {\n        image: final_source,\n        sampler,\n    });\n    ctx.fill_rect(\u0026Rect::new(0.0, 0.0, 10.0, 10.0));\n}\n```",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d8992199e549f49b9b95f538b10120f01aeb7bdf",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_hybrid/src/render/common.rs",
      "new_id": "d55f4255bd179499452f4b559303d82486c840a6",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_hybrid/src/render/common.rs"
    },
    {
      "type": "modify",
      "old_id": "eb359c791d81cfa25f4a85b1f6d16c6a167b087c",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_hybrid/src/render/webgl.rs",
      "new_id": "aa1ba80f5dd91f34dfc28880ecae40f3a10bc868",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_hybrid/src/render/webgl.rs"
    },
    {
      "type": "modify",
      "old_id": "a86b2b8b3b707080e8c532cb266dc8c8c9c0b451",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_hybrid/src/render/wgpu.rs",
      "new_id": "03028b1283ff2b719faf7705033ee9f8106480b3",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_hybrid/src/render/wgpu.rs"
    },
    {
      "type": "modify",
      "old_id": "b5bec047d3262ff6b045fb9201cb76db3577d2b8",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_sparse_shaders/shaders/render_strips.wgsl",
      "new_id": "bc598c4cc1a71193d6605f6cc698280c34b37aa6",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_shaders/shaders/render_strips.wgsl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d98a6c04c29be86b0fc2e50bc13d106df449c298",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_tests/snapshots/issue_1468.png"
    },
    {
      "type": "modify",
      "old_id": "85ef3256395112449bb88816296620c52dd12bde",
      "old_mode": 33188,
      "old_path": "sparse_strips/vello_sparse_tests/tests/issues.rs",
      "new_id": "d01c0ec2262eac7bedfeb9fd00941299d6e41771",
      "new_mode": 33188,
      "new_path": "sparse_strips/vello_sparse_tests/tests/issues.rs"
    }
  ]
}
