From 70877662d15be3b7e64034176ac9b41740882706 Mon Sep 17 00:00:00 2001 From: Timon Date: Wed, 29 Jul 2026 12:54:51 +0000 Subject: [PATCH 1/2] Update vello --- Cargo.lock | 66 +++++++++++++++++++++++++++++++++++++++--------------- Cargo.toml | 4 ++-- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fa2e1934fd..4abe10233e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -946,7 +946,7 @@ dependencies = [ "rustc-hash 2.1.1", "serde", "serde_json", - "skrifa", + "skrifa 0.42.1", "tinyvec", "tokio", "tsify", @@ -1648,6 +1648,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "font-types" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75382bc7392ef10aad10935f92fc3db36d2d4dad0e5d96d8d65e04f89a07ec39" +dependencies = [ + "bytemuck", +] + [[package]] name = "fontconfig-parser" version = "0.5.8" @@ -1681,7 +1690,7 @@ dependencies = [ "linebender_resource_handle", "memmap2 0.9.10", "parlance", - "read-fonts", + "read-fonts 0.39.2", "smallvec", ] @@ -2491,7 +2500,7 @@ dependencies = [ "bitflags 2.11.0", "bytemuck", "core_maths", - "read-fonts", + "read-fonts 0.39.2", "smallvec", ] @@ -3955,9 +3964,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.3" +version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" @@ -4084,7 +4093,7 @@ dependencies = [ "linebender_resource_handle", "parlance", "parley_data", - "skrifa", + "skrifa 0.42.1", ] [[package]] @@ -4784,7 +4793,18 @@ checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" dependencies = [ "bytemuck", "core_maths", - "font-types", + "font-types 0.11.3", +] + +[[package]] +name = "read-fonts" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" +dependencies = [ + "bytemuck", + "font-types 0.12.3", + "once_cell", ] [[package]] @@ -4864,7 +4884,7 @@ dependencies = [ "num-traits", "parley", "serde", - "skrifa", + "skrifa 0.42.1", "text-nodes", "usvg", "vector-types", @@ -5531,7 +5551,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.39.2", +] + +[[package]] +name = "skrifa" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" +dependencies = [ + "bytemuck", + "read-fonts 0.41.0", ] [[package]] @@ -5923,7 +5953,7 @@ dependencies = [ "raster-types", "serde", "serde_json", - "skrifa", + "skrifa 0.42.1", "titlecase", "tsify", "unicode-segmentation", @@ -6622,16 +6652,16 @@ dependencies = [ [[package]] name = "vello" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261359dbef879f8110ef7e1c442246c838d33d3d91cb05e0ea9288d432760c9f" +checksum = "af76ceb17b2869be23598baef40a9c8db4de86b87c60510c3bc245559275a617" dependencies = [ "bytemuck", "futures-intrusive", "log", "peniko", "png 0.18.1", - "skrifa", + "skrifa 0.44.0", "static_assertions", "thiserror 2.0.18", "vello_encoding", @@ -6641,22 +6671,22 @@ dependencies = [ [[package]] name = "vello_encoding" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2346f5f0d7dccb3582fcd397b4a57b43165209f1424e0d76e85dd814db164af7" +checksum = "1e31cd622201690d8dfe9fd8fea8d1ae59db1bfeea414856a617d1d03438418c" dependencies = [ "bytemuck", "guillotiere", "peniko", - "skrifa", + "skrifa 0.44.0", "smallvec", ] [[package]] name = "vello_shaders" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd38937516fa4b47423d9255bb5e4a65e839ec9d57c38c4af6189ce56bf46b7" +checksum = "abf943bd2920bfd22928a9c1bad39866f7ffcc1109b6ed924ab52773e3868a83" dependencies = [ "bytemuck", "log", diff --git a/Cargo.toml b/Cargo.toml index 7e84652eac..4897d1e9d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -166,8 +166,8 @@ url = "2.5" tokio = { version = "1.29", features = ["fs", "macros", "io-std", "rt", "rt-multi-thread"] } # Linebender ecosystem (BEGIN) kurbo = { version = "0.13", features = ["serde"] } -vello = "0.9" -vello_encoding = "0.9" +vello = "0.10" +vello_encoding = "0.10" resvg = "0.47" usvg = "0.47" parley = { version = "0.9", default-features = false, features = ["std"] } From 9c432a63c41ee642caf4b6e62ca23227da346ecd Mon Sep 17 00:00:00 2001 From: Timon Date: Mon, 27 Jul 2026 14:00:47 +0000 Subject: [PATCH 2/2] Reuse vello image atlas slots across frames --- node-graph/libraries/rendering/src/renderer.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/node-graph/libraries/rendering/src/renderer.rs b/node-graph/libraries/rendering/src/renderer.rs index 6b23eb940a..9640f27aca 100644 --- a/node-graph/libraries/rendering/src/renderer.rs +++ b/node-graph/libraries/rendering/src/renderer.rs @@ -1933,8 +1933,13 @@ impl Render for List> { let width = raster.data().width(); let height = raster.data().height(); + + let resource_override_index = context.resource_overrides.len(); + // Stable across frames so vello reuses the atlas slot; high bit avoids Blob::new counter ids. + let blob_id = (resource_override_index as u64) << 40 | (width as u64) << 20 | height as u64 | 1 << 63; + let blob = peniko::Blob::from_raw_parts(LAZY_ARC_VEC_ZERO_U8.deref().clone(), blob_id); let image = peniko::ImageBrush::new(peniko::ImageData { - data: peniko::Blob::new(LAZY_ARC_VEC_ZERO_U8.deref().clone()), + data: blob, format: peniko::ImageFormat::Rgba8, width, height,