From c4dc45728ed15fa8dfd6fde10f9d458071884768 Mon Sep 17 00:00:00 2001 From: Timo Sonnenschein Date: Sat, 11 Apr 2026 14:00:23 +0200 Subject: [PATCH 1/5] wgpu template: wgpu 27.0.1 -> 29.0.1, winit FIXME --- Cargo.lock | 1055 ++++++++++------- Cargo.toml | 4 +- graphics/Cargo.toml.liquid | 4 +- graphics/mygraphics/src/wgpu_renderer/app.rs | 83 ++ graphics/mygraphics/src/wgpu_renderer/mod.rs | 98 +- .../src/wgpu_renderer/render_pipeline.rs | 14 +- .../mygraphics/src/wgpu_renderer/renderer.rs | 1 + .../mygraphics/src/wgpu_renderer/state.rs | 139 +++ .../mygraphics/src/wgpu_renderer/swapchain.rs | 117 -- 9 files changed, 840 insertions(+), 675 deletions(-) create mode 100644 graphics/mygraphics/src/wgpu_renderer/app.rs create mode 100644 graphics/mygraphics/src/wgpu_renderer/state.rs delete mode 100644 graphics/mygraphics/src/wgpu_renderer/swapchain.rs diff --git a/Cargo.lock b/Cargo.lock index b7fbffe..14af725 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -50,25 +50,29 @@ dependencies = [ "as-slice", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android-activity" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" +checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", "bitflags 2.11.0", "cc", - "cesu8", "jni", - "jni-sys", "libc", "log", "ndk", "ndk-context", "ndk-sys", "num_enum", - "thiserror 1.0.69", + "thiserror 2.0.18", ] [[package]] @@ -88,9 +92,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.21" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", @@ -103,15 +107,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" -version = "0.2.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] @@ -138,9 +142,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.101" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "anymap2" @@ -192,7 +196,7 @@ checksum = "52bca67b61cb81e5553babde81b8211f713cb6db79766f80168f3e5f40ea6c82" dependencies = [ "ash", "raw-window-handle", - "raw-window-metal", + "raw-window-metal 0.4.0", ] [[package]] @@ -220,18 +224,18 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bit-set" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" +checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" [[package]] name = "bitflags" @@ -269,7 +273,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", ] [[package]] @@ -285,9 +289,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.19.1" +version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytemuck" @@ -358,9 +362,9 @@ dependencies = [ [[package]] name = "cargo-generate" -version = "0.23.7" +version = "0.23.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ecf1e81816c3dbe016101d21a198ec0f4a55bb04173ff9d3071ebb626f2cc1" +checksum = "0c3b0a106ac22b8fcd7dee8fb5b21c9276564866d954244324a7bdd346ebdb68" dependencies = [ "anstyle", "anyhow", @@ -384,7 +388,7 @@ dependencies = [ "liquid-lib", "log", "names", - "paste", + "pastey", "regex", "remove_dir_all", "rhai", @@ -489,9 +493,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.56" +version = "1.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" dependencies = [ "find-msvc-tools", "jobserver", @@ -499,12 +503,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cesu8" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" - [[package]] name = "cfg-if" version = "1.0.4" @@ -519,9 +517,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "clap" -version = "4.5.58" +version = "4.5.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63be97961acde393029492ce0be7a1af7e323e6bae9511ebfac33751be5e6806" +checksum = "52fa72306bb30daf11bc97773431628e5b4916e97aaa74b7d3f625d4d495da02" dependencies = [ "clap_builder", "clap_derive", @@ -529,9 +527,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.58" +version = "4.5.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f13174bda5dfd69d7e947827e5af4b0f2f94a4a3ee92912fba07a66150f21e2" +checksum = "2071365c5c56eae7d77414029dde2f4f4ba151cf68d5a3261c9a40de428ace93" dependencies = [ "anstream", "anstyle", @@ -542,9 +540,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.55" +version = "4.5.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" +checksum = "dec5be1eea072311774b7b84ded287adbd9f293f9d23456817605c6042f4f5e0" dependencies = [ "heck", "proc-macro2", @@ -554,9 +552,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "cocoa" @@ -590,9 +588,9 @@ dependencies = [ [[package]] name = "codespan-reporting" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" dependencies = [ "serde", "termcolor", @@ -601,9 +599,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" @@ -626,13 +624,12 @@ dependencies = [ [[package]] name = "console" -version = "0.16.2" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e45a4a8926227e4197636ba97a9fc9b00477e9f4bd711395687c5f0734bec4" +checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87" dependencies = [ "encode_unicode", "libc", - "once_cell", "unicode-width", "windows-sys 0.61.2", ] @@ -742,7 +739,7 @@ dependencies = [ "document-features", "mio", "parking_lot", - "rustix 1.1.3", + "rustix 1.1.4", "signal-hook", "signal-hook-mio", "winapi", @@ -790,9 +787,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc3dc5ad92c2e2d1c193bbbbdf2ea477cb81331de4f3103f267ca18368b988c4" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", ] @@ -855,6 +852,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.11.0", + "objc2 0.6.4", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -868,9 +875,9 @@ dependencies = [ [[package]] name = "dlib" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" dependencies = [ "libloading", ] @@ -916,9 +923,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "env_filter" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a1c3cc8e57274ec99de65301228b537f1e4eedc1b8e0f9411c6caac8ae7308f" +checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" dependencies = [ "log", "regex", @@ -926,9 +933,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2daee4ea451f429a58296525ddf28b45a3b64f1acf6587e2067437bb11e218d" +checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" dependencies = [ "anstream", "anstyle", @@ -945,9 +952,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e8918065695684b2b0702da20382d5ae6065cf3327bc2d6436bd49a71ce9f3" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" dependencies = [ "serde", "serde_core", @@ -976,9 +983,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "find-msvc-tools" @@ -1042,9 +1049,9 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.1.3" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad492b2cf1d89d568a43508ab24f98501fe03f2f31c01e1d0fe7366a71745d2" +checksum = "baf68cef89750956493a66a10f512b9e58d9db21f2a573c079c0bdf1207a54a7" dependencies = [ "autocfg", ] @@ -1074,26 +1081,25 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-task" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-core", "futures-task", "pin-project-lite", - "pin-utils", "slab", ] @@ -1113,7 +1119,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" dependencies = [ - "rustix 1.1.3", + "rustix 1.1.4", "windows-link", ] @@ -1136,19 +1142,19 @@ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", ] [[package]] name = "getrandom" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 6.0.0", "wasip2", "wasip3", ] @@ -1170,23 +1176,23 @@ dependencies = [ [[package]] name = "gix-actor" -version = "0.35.6" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "987a51a7e66db6ef4dc030418eb2a42af6b913a79edd8670766122d8af3ba59e" +checksum = "636ca0d7bf8f7ad8ba84a5dda8312c8944b275be09d88b072e08f57d3e47c1e8" dependencies = [ "bstr", "gix-date", "gix-utils", "itoa", "thiserror 2.0.18", - "winnow", + "winnow 0.7.15", ] [[package]] name = "gix-config" -version = "0.46.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfb898c5b695fd4acfc3c0ab638525a65545d47706064dcf7b5ead6cdb136c0" +checksum = "9419284839421488b5ab9b9b88386bdc1e159a986c08e17ffa3e9a5cd2b139f5" dependencies = [ "bstr", "gix-config-value", @@ -1196,11 +1202,10 @@ dependencies = [ "gix-ref", "gix-sec", "memchr", - "once_cell", "smallvec", "thiserror 2.0.18", "unicode-bom", - "winnow", + "winnow 0.7.15", ] [[package]] @@ -1218,9 +1223,9 @@ dependencies = [ [[package]] name = "gix-date" -version = "0.10.7" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "661245d045aa7c16ba4244daaabd823c562c3e45f1f25b816be2c57ee09f2171" +checksum = "c0a1259955c76335c9d1a8c511811b10dbc800ffeeca3daea1e0aadd0c98f6b7" dependencies = [ "bstr", "itoa", @@ -1231,9 +1236,9 @@ dependencies = [ [[package]] name = "gix-features" -version = "0.43.1" +version = "0.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1543cd9b8abcbcebaa1a666a5c168ee2cda4dea50d3961ee0e6d1c42f81e5b" +checksum = "dfa64593d1586135102307fb57fb3a9d3868b6b1f45a4da1352cce5070f8916a" dependencies = [ "gix-path", "gix-trace", @@ -1245,9 +1250,9 @@ dependencies = [ [[package]] name = "gix-fs" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a4d90307d064fa7230e0f87b03231be28f8ba63b913fc15346f489519d0c304" +checksum = "3f1ecd896258cdc5ccd94d18386d17906b8de265ad2ecf68e3bea6b007f6a28f" dependencies = [ "bstr", "fastrand", @@ -1259,9 +1264,9 @@ dependencies = [ [[package]] name = "gix-glob" -version = "0.21.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b947db8366823e7a750c254f6bb29e27e17f27e457bf336ba79b32423db62cd5" +checksum = "74254992150b0a88fdb3ad47635ab649512dff2cbbefca7916bb459894fc9d56" dependencies = [ "bitflags 2.11.0", "bstr", @@ -1271,9 +1276,9 @@ dependencies = [ [[package]] name = "gix-hash" -version = "0.19.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "251fad79796a731a2a7664d9ea95ee29a9e99474de2769e152238d4fdb69d50e" +checksum = "826036a9bee95945b0be1e2394c64cd4289916c34a639818f8fd5153906985c1" dependencies = [ "faster-hex", "gix-features", @@ -1283,20 +1288,20 @@ dependencies = [ [[package]] name = "gix-hashtable" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35300b54896153e55d53f4180460931ccd69b7e8d2f6b9d6401122cdedc4f07" +checksum = "a27d4a3ea9640da504a2657fef3419c517fd71f1767ad8935298bcc805edd195" dependencies = [ "gix-hash", - "hashbrown 0.15.5", + "hashbrown 0.16.1", "parking_lot", ] [[package]] name = "gix-lock" -version = "18.0.0" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fa71da90365668a621e184eb5b979904471af1b3b09b943a84bc50e8ad42ed" +checksum = "729d7857429a66023bc0c29d60fa21d0d6ae8862f33c1937ba89e0f74dd5c67f" dependencies = [ "gix-tempfile", "gix-utils", @@ -1305,9 +1310,9 @@ dependencies = [ [[package]] name = "gix-object" -version = "0.50.2" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d69ce108ab67b65fbd4fb7e1331502429d78baeb2eee10008bdef55765397c07" +checksum = "84743d1091c501a56f00d7f4c595cb30f20fcef6503b32ac0a1ff3817efd7b5d" dependencies = [ "bstr", "gix-actor", @@ -1321,7 +1326,7 @@ dependencies = [ "itoa", "smallvec", "thiserror 2.0.18", - "winnow", + "winnow 0.7.15", ] [[package]] @@ -1338,9 +1343,9 @@ dependencies = [ [[package]] name = "gix-ref" -version = "0.53.1" +version = "0.55.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b966f578079a42f4a51413b17bce476544cca1cf605753466669082f94721758" +checksum = "e51330a32f173c8e831731dfef8e93a748c23c057f4b028841f222564cad84cb" dependencies = [ "gix-actor", "gix-features", @@ -1354,7 +1359,7 @@ dependencies = [ "gix-validate", "memmap2", "thiserror 2.0.18", - "winnow", + "winnow 0.7.15", ] [[package]] @@ -1371,13 +1376,12 @@ dependencies = [ [[package]] name = "gix-tempfile" -version = "18.0.0" +version = "19.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666c0041bcdedf5fa05e9bef663c897debab24b7dc1741605742412d1d47da57" +checksum = "e265fc6b54e57693232a79d84038381ebfda7b1a3b1b8a9320d4d5fe6e820086" dependencies = [ "gix-fs", "libc", - "once_cell", "parking_lot", "tempfile", ] @@ -1410,9 +1414,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34627c5158214743a374170fed714833fdf4e4b0cbcc1ea98417866a4c5d4441" +checksum = "f70749695b063ecbf6b62949ccccde2e733ec3ecbbd71d467dca4e5c6c97cca0" dependencies = [ "libm", ] @@ -1430,25 +1434,6 @@ dependencies = [ "regex-syntax", ] -[[package]] -name = "gpu-alloc" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" -dependencies = [ - "bitflags 2.11.0", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" -dependencies = [ - "bitflags 2.11.0", -] - [[package]] name = "gpu-allocator" version = "0.28.0" @@ -1456,6 +1441,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" dependencies = [ "ash", + "hashbrown 0.16.1", "log", "presser", "thiserror 2.0.18", @@ -1517,9 +1503,17 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ + "allocator-api2", + "equivalent", "foldhash 0.2.0", ] +[[package]] +name = "hashbrown" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" + [[package]] name = "heapless" version = "0.8.0" @@ -1559,12 +1553,13 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "utf8_iter", "yoke", "zerofrom", "zerovec", @@ -1572,9 +1567,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -1585,9 +1580,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1599,15 +1594,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ "icu_collections", "icu_locale_core", @@ -1619,15 +1614,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", @@ -1683,12 +1678,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.0", "serde", "serde_core", ] @@ -1708,9 +1703,9 @@ dependencies = [ [[package]] name = "inotify" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199" dependencies = [ "bitflags 2.11.0", "inotify-sys", @@ -1752,15 +1747,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.20" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c867c356cc096b33f4981825ab281ecba3db0acefe60329f044c1789d94c6543" +checksum = "1a3546dc96b6d42c5f24902af9e2538e82e39ad350b0c766eb3fbf2d8f3d8359" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -1773,9 +1768,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.20" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7946b4325269738f270bb55b3c19ab5c5040525f83fd625259422a9d25d9be5" +checksum = "2a8c8b344124222efd714b73bb41f8b5120b27a7cc1c75593a6ff768d9d05aa4" dependencies = [ "proc-macro2", "quote", @@ -1784,9 +1779,9 @@ dependencies = [ [[package]] name = "jiff-tzdb" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68971ebff725b9e2ca27a601c5eb38a4c5d64422c4cbab0c535f248087eda5c2" +checksum = "c900ef84826f1338a557697dc8fc601df9ca9af4ac137c7fb61d4c6f2dfd3076" [[package]] name = "jiff-tzdb-platform" @@ -1799,25 +1794,61 @@ dependencies = [ [[package]] name = "jni" -version = "0.21.1" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" dependencies = [ - "cesu8", "cfg-if", "combine", - "jni-sys", + "jni-macros", + "jni-sys 0.4.1", "log", - "thiserror 1.0.69", + "simd_cesu8", + "thiserror 2.0.18", "walkdir", - "windows-sys 0.45.0", + "windows-link", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn", ] [[package]] name = "jni-sys" -version = "0.3.0" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn", +] [[package]] name = "jobserver" @@ -1831,10 +1862,12 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.85" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" dependencies = [ + "cfg-if", + "futures-util", "once_cell", "wasm-bindgen", ] @@ -1877,9 +1910,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.182" +version = "0.2.184" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" [[package]] name = "libgit2-sys" @@ -1913,13 +1946,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.12" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ "bitflags 2.11.0", "libc", - "redox_syscall 0.7.1", + "plain", + "redox_syscall 0.7.4", ] [[package]] @@ -1938,9 +1972,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.23" +version = "1.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" +checksum = "fc3a226e576f50782b3305c5ccf458698f92798987f551c6a02efe8276721e22" dependencies = [ "cc", "libc", @@ -1956,9 +1990,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "linux-raw-sys" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "liquid" @@ -2016,9 +2050,9 @@ dependencies = [ [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "litrs" @@ -2058,18 +2092,18 @@ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memmap2" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744133e4a0e0a658e1374cf3bf8e415c4052a15a111acd372764c55b4177d490" +checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3" dependencies = [ "libc", ] [[package]] name = "mio" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "log", @@ -2106,9 +2140,9 @@ dependencies = [ [[package]] name = "naga" -version = "27.0.3" +version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" +checksum = "aa2630921705b9b01dcdd0b6864b9562ca3c1951eecd0f0c4f5f04f61e412647" dependencies = [ "arrayvec", "bit-set", @@ -2126,7 +2160,7 @@ dependencies = [ "once_cell", "petgraph", "rustc-hash", - "spirv", + "spirv 0.4.0+sdk-1.4.341.0", "thiserror 2.0.18", "unicode-ident", ] @@ -2147,7 +2181,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ "bitflags 2.11.0", - "jni-sys", + "jni-sys 0.3.1", "log", "ndk-sys", "num_enum", @@ -2167,7 +2201,7 @@ version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ - "jni-sys", + "jni-sys 0.3.1", ] [[package]] @@ -2220,9 +2254,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-traits" @@ -2236,9 +2270,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -2246,9 +2280,9 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -2281,6 +2315,15 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-app-kit" version = "0.2.2" @@ -2290,11 +2333,11 @@ dependencies = [ "bitflags 2.11.0", "block2", "libc", - "objc2", + "objc2 0.5.2", "objc2-core-data", "objc2-core-image", - "objc2-foundation", - "objc2-quartz-core", + "objc2-foundation 0.2.2", + "objc2-quartz-core 0.2.2", ] [[package]] @@ -2305,9 +2348,9 @@ checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ "bitflags 2.11.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -2317,8 +2360,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -2329,8 +2372,19 @@ checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.11.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.0", + "dispatch2", + "objc2 0.6.4", ] [[package]] @@ -2340,9 +2394,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ "block2", - "objc2", - "objc2-foundation", - "objc2-metal", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal 0.2.2", ] [[package]] @@ -2352,9 +2406,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-contacts", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -2373,7 +2427,18 @@ dependencies = [ "block2", "dispatch", "libc", - "objc2", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.11.0", + "objc2 0.6.4", + "objc2-core-foundation", ] [[package]] @@ -2383,9 +2448,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -2396,8 +2461,19 @@ checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.11.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-metal" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" +dependencies = [ + "bitflags 2.11.0", + "objc2 0.6.4", + "objc2-foundation 0.3.2", ] [[package]] @@ -2408,9 +2484,22 @@ checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.11.0", "block2", - "objc2", - "objc2-foundation", - "objc2-metal", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal 0.2.2", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.11.0", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "objc2-metal 0.3.2", ] [[package]] @@ -2419,8 +2508,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -2431,14 +2520,14 @@ checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ "bitflags 2.11.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-image", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-link-presentation", - "objc2-quartz-core", + "objc2-quartz-core 0.2.2", "objc2-symbols", "objc2-uniform-type-identifiers", "objc2-user-notifications", @@ -2451,8 +2540,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -2463,16 +2552,16 @@ checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ "bitflags 2.11.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[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" dependencies = [ "portable-atomic", ] @@ -2491,9 +2580,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.111" +version = "0.9.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb" dependencies = [ "cc", "libc", @@ -2509,9 +2598,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.50" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ad2c6bae700b7aa5d1cc30c59bdd3a1c180b09dbaea51e2ae2b8e1cf211fdd" +checksum = "59aed3b33578edcfa1bc96a321d590d31832b6ad55a26f0313362ce687e9abd6" dependencies = [ "libc", "libredox", @@ -2528,9 +2617,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "5.1.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" +checksum = "b7d950ca161dc355eaf28f82b11345ed76c6e1f6eb1f4f4479e0323b9e2fbd0e" dependencies = [ "num-traits", ] @@ -2568,10 +2657,10 @@ dependencies = [ ] [[package]] -name = "paste" -version = "1.0.15" +name = "pastey" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec" [[package]] name = "percent-encoding" @@ -2635,18 +2724,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", @@ -2655,15 +2744,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" @@ -2671,6 +2754,12 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + [[package]] name = "polling" version = "3.11.0" @@ -2681,7 +2770,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 1.1.3", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -2699,18 +2788,18 @@ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9db96d7fa8782dd8c15ce32ffe8680bbd1e978a43bf51a34d39483540495f5" +checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" dependencies = [ "portable-atomic", ] [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -2748,11 +2837,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.23.10+spec-1.0.0", + "toml_edit 0.25.11+spec-1.1.0", ] [[package]] @@ -2781,18 +2870,18 @@ checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" [[package]] name = "quick-xml" -version = "0.38.4" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +checksum = "958f21e8e7ceb5a1aa7fa87fab28e7c75976e0bfe7e23ff069e0a260f894067d" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] @@ -2803,6 +2892,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" version = "0.8.5" @@ -2857,6 +2952,18 @@ dependencies = [ "raw-window-handle", ] +[[package]] +name = "raw-window-metal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" +dependencies = [ + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -2877,9 +2984,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35985aa610addc02e24fc232012c86fd11f14111180f902b67e2d5331f8ebf2b" +checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" dependencies = [ "bitflags 2.11.0", ] @@ -2920,9 +3027,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "relative-path" @@ -2988,7 +3095,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cf3a93856b6e5946537278df0d3075596371b1950ccff012f02b0f7eafec8d" dependencies = [ "rustc-hash", - "spirv", + "spirv 0.3.0+sdk-1.3.268.0", ] [[package]] @@ -3006,10 +3113,19 @@ dependencies = [ "semver", "serde", "serde_json", - "spirv", + "spirv 0.3.0+sdk-1.3.268.0", "thiserror 2.0.18", ] +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.38.44" @@ -3025,14 +3141,14 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys 0.11.0", + "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] @@ -3087,9 +3203,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" dependencies = [ "serde", "serde_core", @@ -3171,9 +3287,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] @@ -3253,6 +3369,22 @@ dependencies = [ "libc", ] +[[package]] +name = "simd_cesu8" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "slab" version = "0.4.12" @@ -3320,6 +3452,15 @@ dependencies = [ "serde", ] +[[package]] +name = "spirv" +version = "0.4.0+sdk-1.4.341.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f" +dependencies = [ + "bitflags 2.11.0", +] + [[package]] name = "spirv-builder" version = "0.9.0" @@ -3393,9 +3534,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.115" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e614ed320ac28113fa64972c4262d5dbc89deacdfd00c34a3e4cea073243c12" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -3415,14 +3556,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.25.0" +version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0136791f7c95b1f6dd99f9cc786b91bb81c3800b639b3478e561ddb7be95e5f1" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.1", + "getrandom 0.4.2", "once_cell", - "rustix 1.1.3", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -3447,19 +3588,19 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" +checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874" dependencies = [ - "rustix 1.1.3", - "windows-sys 0.60.2", + "rustix 1.1.4", + "windows-sys 0.61.2", ] [[package]] name = "thin-vec" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d" +checksum = "da322882471314edc77fa5232c587bcb87c9df52bfd0d7d4826f8868ead61899" [[package]] name = "thiserror" @@ -3568,9 +3709,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", @@ -3578,9 +3719,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" dependencies = [ "tinyvec_macros", ] @@ -3611,11 +3752,11 @@ checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" dependencies = [ "indexmap", "serde_core", - "serde_spanned 1.0.4", + "serde_spanned 1.1.1", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.15", ] [[package]] @@ -3636,6 +3777,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -3647,28 +3797,28 @@ dependencies = [ "serde_spanned 0.6.9", "toml_datetime 0.6.11", "toml_write", - "winnow", + "winnow 0.7.15", ] [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap", - "toml_datetime 0.7.5+spec-1.1.0", + "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow", + "winnow 1.0.1", ] [[package]] name = "toml_parser" -version = "1.0.8+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0742ff5ff03ea7e67c8ae6c93cac239e0d9784833362da3f9a9c1da8dfefcbdc" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow", + "winnow 1.0.1", ] [[package]] @@ -3679,9 +3829,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.0.6+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tracing" @@ -3731,9 +3881,9 @@ checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" [[package]] name = "unicode-ident" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "537dd038a89878be9b64dd4bd1b260315c1bb94f4d784956b81e27a088d9a09e" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-normalization" @@ -3746,9 +3896,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-width" @@ -3840,9 +3990,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.108" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" +checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" dependencies = [ "cfg-if", "once_cell", @@ -3853,23 +4003,19 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.58" +version = "0.4.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" dependencies = [ - "cfg-if", - "futures-util", "js-sys", - "once_cell", "wasm-bindgen", - "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.108" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" +checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3877,9 +4023,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.108" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" +checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" dependencies = [ "bumpalo", "proc-macro2", @@ -3890,9 +4036,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.108" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" +checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" dependencies = [ "unicode-ident", ] @@ -3933,13 +4079,13 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" +checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" dependencies = [ "cc", "downcast-rs", - "rustix 1.1.3", + "rustix 1.1.4", "scoped-tls", "smallvec", "wayland-sys", @@ -3947,12 +4093,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.12" +version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" +checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ "bitflags 2.11.0", - "rustix 1.1.3", + "rustix 1.1.4", "wayland-backend", "wayland-scanner", ] @@ -3970,20 +4116,20 @@ dependencies = [ [[package]] name = "wayland-cursor" -version = "0.31.12" +version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5864c4b5b6064b06b1e8b74ead4a98a6c45a285fe7a0e784d24735f011fdb078" +checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d" dependencies = [ - "rustix 1.1.3", + "rustix 1.1.4", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.32.10" +version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" +checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -3993,9 +4139,9 @@ dependencies = [ [[package]] name = "wayland-protocols-plasma" -version = "0.3.10" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa98634619300a535a9a97f338aed9a5ff1e01a461943e8346ff4ae26007306b" +checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -4006,9 +4152,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.10" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" +checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ "bitflags 2.11.0", "wayland-backend", @@ -4019,9 +4165,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.8" +version = "0.31.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" +checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" dependencies = [ "proc-macro2", "quick-xml", @@ -4030,9 +4176,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.8" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" +checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" dependencies = [ "dlib", "log", @@ -4042,9 +4188,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.85" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" dependencies = [ "js-sys", "wasm-bindgen", @@ -4062,16 +4208,18 @@ dependencies = [ [[package]] name = "wgpu" -version = "27.0.1" +version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" +checksum = "72c239a9a747bbd379590985bac952c2e53cb19873f7072b3370c6a6a8e06837" dependencies = [ "arrayvec", "bitflags 2.11.0", + "bytemuck", "cfg-if", "cfg_aliases", "document-features", "hashbrown 0.16.1", + "js-sys", "log", "naga", "parking_lot", @@ -4080,6 +4228,9 @@ dependencies = [ "raw-window-handle", "smallvec", "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", "wgpu-core", "wgpu-hal", "wgpu-types", @@ -4087,9 +4238,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "27.0.3" +version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" +checksum = "1e80ac6cf1895df6342f87d975162108f9d98772a0d74bc404ab7304ac29469e" dependencies = [ "arrayvec", "bit-set", @@ -4113,32 +4264,33 @@ dependencies = [ "wgpu-core-deps-apple", "wgpu-core-deps-windows-linux-android", "wgpu-hal", + "wgpu-naga-bridge", "wgpu-types", ] [[package]] name = "wgpu-core-deps-apple" -version = "27.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0772ae958e9be0c729561d5e3fd9a19679bcdfb945b8b1a1969d9bfe8056d233" +checksum = "43acd053312501689cd92a01a9638d37f3e41a5fd9534875efa8917ee2d11ac0" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "27.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71197027d61a71748e4120f05a9242b2ad142e3c01f8c1b47707945a879a03c3" +checksum = "725d5c006a8c02967b6d93ef04f6537ec4593313e330cfe86d9d3f946eb90f28" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "27.0.4" +version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" +checksum = "89a47aef47636562f3937285af4c44b4b5b404b46577471411cc5313a921da7e" dependencies = [ "android_system_properties", "arrayvec", @@ -4147,37 +4299,49 @@ dependencies = [ "bytemuck", "cfg-if", "cfg_aliases", - "gpu-alloc", + "gpu-allocator", "gpu-descriptor", "hashbrown 0.16.1", "libc", "libloading", "log", "naga", - "ordered-float 5.1.0", + "ordered-float 5.3.0", "parking_lot", "portable-atomic", "portable-atomic-util", "profiling", "raw-window-handle", + "raw-window-metal 1.1.0", "renderdoc-sys", "smallvec", "thiserror 2.0.18", + "wgpu-naga-bridge", "wgpu-types", "windows", ] +[[package]] +name = "wgpu-naga-bridge" +version = "29.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4684f4410da0cf95a4cb63bb5edaac022461dedb6adf0b64d0d9b5f6890d51" +dependencies = [ + "naga", + "wgpu-types", +] + [[package]] name = "wgpu-types" -version = "27.0.1" +version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afdcf84c395990db737f2dd91628706cb31e86d72e53482320d368e52b5da5eb" +checksum = "ec2675540fb1a5cfa5ef122d3d5f390e2c75711a0b946410f2d6ac3a0f77d1f6" dependencies = [ "bitflags 2.11.0", "bytemuck", "js-sys", "log", - "thiserror 2.0.18", + "raw-window-handle", "web-sys", ] @@ -4214,32 +4378,54 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.58.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ "windows-core", - "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.58.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", + "windows-link", "windows-result", "windows-strings", - "windows-targets 0.52.6", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", ] [[package]] name = "windows-implement" -version = "0.58.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -4248,9 +4434,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.58.0" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -4264,31 +4450,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] -name = "windows-result" -version = "0.2.0" +name = "windows-numerics" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ - "windows-targets 0.52.6", + "windows-core", + "windows-link", ] [[package]] -name = "windows-strings" -version = "0.1.0" +name = "windows-result" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-result", - "windows-targets 0.52.6", + "windows-link", ] [[package]] -name = "windows-sys" -version = "0.45.0" +name = "windows-strings" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-targets 0.42.2", + "windows-link", ] [[package]] @@ -4327,21 +4513,6 @@ dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -4376,10 +4547,13 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" +name = "windows-threading" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] [[package]] name = "windows_aarch64_gnullvm" @@ -4393,12 +4567,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -4411,12 +4579,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" -[[package]] -name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -4441,12 +4603,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" -[[package]] -name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -4459,12 +4615,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -4477,12 +4627,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -4495,12 +4639,6 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -4515,9 +4653,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winit" -version = "0.30.12" +version = "0.30.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" +checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" dependencies = [ "ahash", "android-activity", @@ -4536,9 +4674,9 @@ dependencies = [ "libc", "memmap2", "ndk", - "objc2", + "objc2 0.5.2", "objc2-app-kit", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-ui-kit", "orbclient", "percent-encoding", @@ -4567,9 +4705,18 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" dependencies = [ "memchr", ] @@ -4664,9 +4811,9 @@ dependencies = [ [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "x11-dl" @@ -4690,7 +4837,7 @@ dependencies = [ "libc", "libloading", "once_cell", - "rustix 1.1.3", + "rustix 1.1.4", "x11rb-protocol", ] @@ -4741,9 +4888,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -4752,9 +4899,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", @@ -4764,18 +4911,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.39" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.39" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", @@ -4784,18 +4931,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", @@ -4811,9 +4958,9 @@ checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", @@ -4822,9 +4969,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", @@ -4833,9 +4980,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index dfd8fd0..a36916f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ repository = "" ash = "0.38" ash-window = "0.13" gpu-allocator = { version = "0.28.0", default-features = false, features = ["std", "vulkan"] } -wgpu = { version = "27.0.1", default-features = false, features = ["std", "parking_lot", "vulkan", "vulkan-portability", "spirv", "wgsl"] } +wgpu = { version = "29.0.1", default-features = false, features = ["std", "parking_lot", "vulkan", "vulkan-portability", "spirv", "wgsl"] } pollster = "0.4.0" # rust-gpu @@ -29,7 +29,7 @@ spirv-std = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "30896871ba00e glam = { version = "0.32.0", default-features = false } bytemuck = { version = "1.24.0", features = ["derive"] } raw-window-handle = "0.6.2" -winit = "0.30.0" +winit = "0.30.13" env_logger = "0.11.8" anyhow = "1.0.98" diff --git a/graphics/Cargo.toml.liquid b/graphics/Cargo.toml.liquid index 9be8257..11b0a7c 100644 --- a/graphics/Cargo.toml.liquid +++ b/graphics/Cargo.toml.liquid @@ -23,7 +23,7 @@ ash-window = "0.13" gpu-allocator = { version = "0.28.0", default-features = false, features = ["std", "vulkan"] } {%- endif -%} {%- if api == "wgpu" -%} -wgpu = { version = "27.0.1", default-features = false, features = ["std", "parking_lot", "vulkan", "vulkan-portability", "spirv", "wgsl"] } +wgpu = { version = "29.0.1", default-features = false, features = ["std", "parking_lot", "vulkan", "vulkan-portability", "spirv", "wgsl"] } pollster = "0.4.0" {%- endif %} @@ -41,7 +41,7 @@ spirv-std = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "30896871ba00e glam = { version = "0.32.0", default-features = false } bytemuck = { version = "1.24.0", features = ["derive"] } raw-window-handle = "0.6.2" -winit = "0.30.0" +winit = "0.30.13" env_logger = "0.11.8" anyhow = "1.0.98" diff --git a/graphics/mygraphics/src/wgpu_renderer/app.rs b/graphics/mygraphics/src/wgpu_renderer/app.rs new file mode 100644 index 0000000..292693e --- /dev/null +++ b/graphics/mygraphics/src/wgpu_renderer/app.rs @@ -0,0 +1,83 @@ +use std::{sync::Arc, time::Instant}; + +use winit::{ + application::ApplicationHandler, + dpi::LogicalSize, + event::{ElementState, KeyEvent, WindowEvent}, + event_loop::ActiveEventLoop, + keyboard::{Key, NamedKey}, + window::{Window, WindowId}, +}; + +use crate::wgpu_renderer::state::State; + +pub(crate) struct App { + start: Instant, + state: Option, +} + +impl App { + pub fn new() -> Self { + let start = std::time::Instant::now(); + + App { start, state: None } + } + + pub fn try_resume(&mut self, event_loop: &ActiveEventLoop) -> anyhow::Result<()> { + let attribs = Window::default_attributes() + .with_title("Rust GPU - wgpu") + .with_inner_size(LogicalSize::new(1280, 720)); + + let window = event_loop.create_window(attribs).map(Arc::new)?; + + let state = pollster::block_on(State::try_new( + event_loop.owned_display_handle(), + window.clone(), + ))?; + self.state = Some(state); + + window.request_redraw(); + + Ok(()) + } +} + +impl ApplicationHandler for App { + fn resumed(&mut self, event_loop: &ActiveEventLoop) { + if let Err(e) = self.try_resume(event_loop) { + eprintln!("Failed to resume: {e:?}"); + event_loop.exit(); + } + } + + fn window_event(&mut self, event_loop: &ActiveEventLoop, _id: WindowId, event: WindowEvent) { + let Some(state) = self.state.as_mut() else { + eprintln!("Failed to retrieve app state."); + event_loop.exit(); + return; + }; + + match event { + WindowEvent::CloseRequested + | WindowEvent::KeyboardInput { + event: + KeyEvent { + logical_key: Key::Named(NamedKey::Escape), + state: ElementState::Pressed, + .. + }, + .. + } => { + event_loop.exit(); + } + WindowEvent::RedrawRequested => { + state.render(self.start.elapsed().as_secs_f32()); + state.get_window().request_redraw(); + } + WindowEvent::Resized(size) => { + state.resize(size); + } + _ => (), + } + } +} diff --git a/graphics/mygraphics/src/wgpu_renderer/mod.rs b/graphics/mygraphics/src/wgpu_renderer/mod.rs index ab8e881..4a39e15 100644 --- a/graphics/mygraphics/src/wgpu_renderer/mod.rs +++ b/graphics/mygraphics/src/wgpu_renderer/mod.rs @@ -1,103 +1,19 @@ -use crate::wgpu_renderer::swapchain::MySwapchainManager; -use anyhow::Context; -use mygraphics_shaders::ShaderConstants; -use std::sync::Arc; -use winit::event::{Event, WindowEvent}; -use winit::event_loop::{ActiveEventLoop, ControlFlow, EventLoop}; +use crate::wgpu_renderer::app::App; +use winit::event_loop::{ControlFlow, EventLoop}; +mod app; mod render_pipeline; mod renderer; -mod swapchain; +mod state; pub fn main() -> anyhow::Result<()> { env_logger::init(); - pollster::block_on(main_inner()) -} -pub async fn main_inner() -> anyhow::Result<()> { - // env_logger::init(); let event_loop = EventLoop::new()?; - // FIXME(eddyb) incomplete `winit` upgrade, follow the guides in: - // https://github.com/rust-windowing/winit/releases/tag/v0.30.0 - #[allow(deprecated)] - let window = Arc::new( - event_loop.create_window( - winit::window::Window::default_attributes() - .with_title("Rust GPU - wgpu") - .with_inner_size(winit::dpi::LogicalSize::new( - f64::from(1280), - f64::from(720), - )), - )?, - ); - - let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::from_env_or_default()); - let surface = instance.create_surface(window.clone())?; - let adapter = - wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface)).await?; - - let required_features = wgpu::Features::PUSH_CONSTANTS; - let required_limits = wgpu::Limits { - max_push_constant_size: 128, - ..Default::default() - }; - let (device, queue) = adapter - .request_device(&wgpu::DeviceDescriptor { - label: None, - required_features, - required_limits, - experimental_features: wgpu::ExperimentalFeatures::disabled(), - memory_hints: wgpu::MemoryHints::Performance, - trace: Default::default(), - }) - .await - .context("Failed to create device")?; - - let mut swapchain = MySwapchainManager::new(adapter.clone(), device.clone(), window, surface); - let renderer = renderer::MyRenderer::new(device, queue, swapchain.format())?; + event_loop.set_control_flow(ControlFlow::Poll); - let start = std::time::Instant::now(); - let mut event_handler = - move |event: Event<_>, event_loop_window_target: &ActiveEventLoop| match event { - Event::AboutToWait => swapchain.render(|render_target| { - renderer.render( - &ShaderConstants { - time: start.elapsed().as_secs_f32(), - width: render_target.texture().width(), - height: render_target.texture().height(), - }, - render_target, - ); - }), - Event::WindowEvent { event, .. } => { - match event { - WindowEvent::KeyboardInput { - event: - winit::event::KeyEvent { - logical_key: - winit::keyboard::Key::Named(winit::keyboard::NamedKey::Escape), - state: winit::event::ElementState::Pressed, - .. - }, - .. - } - | WindowEvent::CloseRequested => event_loop_window_target.exit(), - WindowEvent::Resized(_) => swapchain.should_recreate(), - _ => {} - } - Ok(()) - } - _ => { - event_loop_window_target.set_control_flow(ControlFlow::Poll); - Ok(()) - } - }; + let mut app = App::new(); + event_loop.run_app(&mut app)?; - // FIXME(eddyb) incomplete `winit` upgrade, follow the guides in: - // https://github.com/rust-windowing/winit/releases/tag/v0.30.0 - #[allow(deprecated)] - event_loop.run(move |event, event_loop_window_target| { - event_handler(event, event_loop_window_target).unwrap(); - })?; Ok(()) } diff --git a/graphics/mygraphics/src/wgpu_renderer/render_pipeline.rs b/graphics/mygraphics/src/wgpu_renderer/render_pipeline.rs index ba1f793..3083ff1 100644 --- a/graphics/mygraphics/src/wgpu_renderer/render_pipeline.rs +++ b/graphics/mygraphics/src/wgpu_renderer/render_pipeline.rs @@ -2,9 +2,8 @@ use crate::wgpu_renderer::renderer::{GlobalBindGroup, GlobalBindGroupLayout}; use mygraphics_shaders::ShaderConstants; use wgpu::{ ColorTargetState, ColorWrites, Device, FragmentState, FrontFace, MultisampleState, - PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, PushConstantRange, - RenderPass, RenderPipeline, RenderPipelineDescriptor, ShaderStages, TextureFormat, VertexState, - include_spirv, + PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, RenderPass, + RenderPipeline, RenderPipelineDescriptor, TextureFormat, VertexState, include_spirv, }; #[derive(Debug, Clone)] @@ -22,11 +21,8 @@ impl MyRenderPipeline { let layout = device.create_pipeline_layout(&PipelineLayoutDescriptor { label: Some("MyRenderPipeline layout"), - bind_group_layouts: &[&global_bind_group_layout.0], - push_constant_ranges: &[PushConstantRange { - stages: ShaderStages::VERTEX_FRAGMENT, - range: 0..size_of::() as u32, - }], + bind_group_layouts: &[Some(&global_bind_group_layout.0)], + immediate_size: size_of::() as u32, }); Ok(Self { @@ -60,7 +56,7 @@ impl MyRenderPipeline { write_mask: ColorWrites::ALL, })], }), - multiview: None, + multiview_mask: None, cache: None, }), }) diff --git a/graphics/mygraphics/src/wgpu_renderer/renderer.rs b/graphics/mygraphics/src/wgpu_renderer/renderer.rs index 2b4349e..b056995 100644 --- a/graphics/mygraphics/src/wgpu_renderer/renderer.rs +++ b/graphics/mygraphics/src/wgpu_renderer/renderer.rs @@ -53,6 +53,7 @@ impl MyRenderer { depth_stencil_attachment: None, timestamp_writes: None, occlusion_query_set: None, + multiview_mask: None, }); self.pipeline.draw(&mut rpass, &global_bind_group); drop(rpass); diff --git a/graphics/mygraphics/src/wgpu_renderer/state.rs b/graphics/mygraphics/src/wgpu_renderer/state.rs new file mode 100644 index 0000000..412de26 --- /dev/null +++ b/graphics/mygraphics/src/wgpu_renderer/state.rs @@ -0,0 +1,139 @@ +use anyhow::Context; +use mygraphics_shaders::ShaderConstants; +use std::sync::Arc; +use wgpu::{ + CurrentSurfaceTexture, Features, Instance, InstanceDescriptor, Limits, Surface, TextureFormat, +}; +use winit::dpi::PhysicalSize; +use winit::event_loop::OwnedDisplayHandle; +use winit::window::Window; + +use crate::wgpu_renderer::renderer::MyRenderer; + +pub struct State { + instance: Instance, + + window: Arc, + + size: PhysicalSize, + surface: Surface<'static>, + surface_format: TextureFormat, + + renderer: MyRenderer, +} + +impl State { + pub async fn try_new( + display_handle: OwnedDisplayHandle, + window: Arc, + ) -> anyhow::Result { + let instance = Instance::new(InstanceDescriptor::new_with_display_handle_from_env( + Box::new(display_handle), + )); + let surface = instance.create_surface(window.clone())?; + let adapter = + wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface)).await?; + + let required_features = Features::IMMEDIATES; + let required_limits = Limits { + max_immediate_size: 128, + ..Default::default() + }; + + let (device, queue) = adapter + .request_device(&wgpu::DeviceDescriptor { + label: None, + required_features, + required_limits, + experimental_features: wgpu::ExperimentalFeatures::disabled(), + memory_hints: wgpu::MemoryHints::Performance, + trace: Default::default(), + }) + .await + .context("Failed to create device")?; + + let size = window.inner_size(); + let cap = surface.get_capabilities(&adapter); + let surface_format = cap.formats[0]; + + let renderer = MyRenderer::new(device, queue, surface_format.clone())?; + + let state = State { + instance, + window, + size, + surface, + surface_format, + renderer, + }; + state.configure_surface(); + + Ok(state) + } + + pub fn get_window(&self) -> &Window { + &self.window + } + + pub fn render(&mut self, time: f32) { + let surface_texture = match self.surface.get_current_texture() { + CurrentSurfaceTexture::Success(texture) => texture, + CurrentSurfaceTexture::Occluded | CurrentSurfaceTexture::Timeout => return, + CurrentSurfaceTexture::Suboptimal(_) | CurrentSurfaceTexture::Outdated => { + self.configure_surface(); + return; + } + CurrentSurfaceTexture::Validation => { + unreachable!("No error scope registered, so validation errors will panic") + } + CurrentSurfaceTexture::Lost => { + self.surface = self.instance.create_surface(self.window.clone()).unwrap(); + self.configure_surface(); + return; + } + }; + + let texture_view = surface_texture + .texture + .create_view(&wgpu::TextureViewDescriptor { + // Without add_srgb_suffix() the image we will be working with + // might not be "gamma correct". + format: Some(self.surface_format.add_srgb_suffix()), + ..Default::default() + }); + + let PhysicalSize { width, height } = self.size; + self.renderer.render( + &ShaderConstants { + width, + height, + time, + }, + texture_view, + ); + + self.window.pre_present_notify(); + surface_texture.present(); + } + + pub fn configure_surface(&self) { + let surface_config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: self.surface_format, + view_formats: vec![self.surface_format.add_srgb_suffix()], + alpha_mode: wgpu::CompositeAlphaMode::Auto, + width: self.size.width, + height: self.size.height, + desired_maximum_frame_latency: 2, + present_mode: wgpu::PresentMode::AutoVsync, + }; + + self.surface + .configure(&self.renderer.device, &surface_config); + } + + pub fn resize(&mut self, size: PhysicalSize) { + self.size = size; + self.configure_surface(); + } +} diff --git a/graphics/mygraphics/src/wgpu_renderer/swapchain.rs b/graphics/mygraphics/src/wgpu_renderer/swapchain.rs deleted file mode 100644 index ed1b8d1..0000000 --- a/graphics/mygraphics/src/wgpu_renderer/swapchain.rs +++ /dev/null @@ -1,117 +0,0 @@ -use anyhow::Context; -use std::sync::Arc; -use wgpu::{Adapter, Device, Surface, SurfaceError, TextureFormat, TextureView}; -use winit::dpi::PhysicalSize; -use winit::window::Window; - -pub struct MySwapchainManager<'a> { - adapter: Adapter, - device: Device, - window: Arc, - surface: Surface<'a>, - format: TextureFormat, - - // state below - active: Option, - should_recreate: bool, -} - -pub struct ActiveConfiguration { - size: PhysicalSize, -} - -impl<'a> MySwapchainManager<'a> { - pub fn new( - adapter: Adapter, - device: Device, - window: Arc, - surface: Surface<'a>, - ) -> Self { - let caps = surface.get_capabilities(&adapter); - Self { - adapter, - device, - window, - surface, - format: caps.formats[0], - active: None, - should_recreate: true, - } - } - - #[inline] - pub fn should_recreate(&mut self) { - self.should_recreate = true; - } - - pub fn format(&self) -> TextureFormat { - self.format - } - - pub fn render(&mut self, f: impl FnOnce(TextureView) -> R) -> anyhow::Result { - let size = self.window.inner_size(); - if let Some(active) = &self.active { - if active.size != size { - self.should_recreate(); - } - } else { - self.should_recreate(); - } - - const RECREATE_ATTEMPTS: u32 = 10; - for _ in 0..RECREATE_ATTEMPTS { - if self.should_recreate { - self.should_recreate = false; - self.configure_surface(size)?; - } - - match self.surface.get_current_texture() { - Ok(surface_texture) => { - if surface_texture.suboptimal { - self.should_recreate = true; - } - let output_view = - surface_texture - .texture - .create_view(&wgpu::TextureViewDescriptor { - format: Some(self.format), - ..wgpu::TextureViewDescriptor::default() - }); - let r = f(output_view); - surface_texture.present(); - return Ok(r); - } - Err(SurfaceError::Outdated | SurfaceError::Lost) => { - self.should_recreate = true; - } - Err(e) => { - anyhow::bail!("get_current_texture() failed: {e}") - } - }; - } - anyhow::bail!( - "looped {RECREATE_ATTEMPTS} times trying to acquire swapchain image and failed repeatedly!" - ); - } - - fn configure_surface(&mut self, size: PhysicalSize) -> anyhow::Result<()> { - let mut surface_config = self - .surface - .get_default_config(&self.adapter, size.width, size.height) - .with_context(|| { - format!( - "Incompatible adapter for surface, returned capabilities: {:?}", - self.surface.get_capabilities(&self.adapter) - ) - })?; - - // force srgb surface format - surface_config.view_formats.push(self.format); - // limit framerate to vsync - surface_config.present_mode = wgpu::PresentMode::AutoVsync; - self.surface.configure(&self.device, &surface_config); - - self.active = Some(ActiveConfiguration { size }); - Ok(()) - } -} From 669dec667a44529cee7b864801545eba4eca0afb Mon Sep 17 00:00:00 2001 From: Timo Sonnenschein Date: Sat, 11 Apr 2026 14:24:16 +0200 Subject: [PATCH 2/5] fix: cargo xtask generate --- generated/graphics/ash/cargo-gpu/Cargo.toml | 2 +- .../graphics/ash/spirv-builder/Cargo.toml | 2 +- generated/graphics/wgpu/cargo-gpu/Cargo.toml | 4 +- .../mygraphics/src/wgpu_renderer/app.rs | 83 +++++++++++ .../mygraphics/src/wgpu_renderer/mod.rs | 98 +----------- .../src/wgpu_renderer/render_pipeline.rs | 14 +- .../mygraphics/src/wgpu_renderer/renderer.rs | 1 + .../mygraphics/src/wgpu_renderer/state.rs | 139 ++++++++++++++++++ .../graphics/wgpu/spirv-builder/Cargo.toml | 4 +- .../mygraphics/src/wgpu_renderer/app.rs | 83 +++++++++++ .../mygraphics/src/wgpu_renderer/mod.rs | 98 +----------- .../src/wgpu_renderer/render_pipeline.rs | 14 +- .../mygraphics/src/wgpu_renderer/renderer.rs | 1 + .../mygraphics/src/wgpu_renderer/state.rs | 139 ++++++++++++++++++ 14 files changed, 476 insertions(+), 206 deletions(-) create mode 100644 generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/app.rs create mode 100644 generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs create mode 100644 generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/app.rs create mode 100644 generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs diff --git a/generated/graphics/ash/cargo-gpu/Cargo.toml b/generated/graphics/ash/cargo-gpu/Cargo.toml index d14c222..3907111 100644 --- a/generated/graphics/ash/cargo-gpu/Cargo.toml +++ b/generated/graphics/ash/cargo-gpu/Cargo.toml @@ -29,7 +29,7 @@ spirv-std = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "30896871ba00e glam = { version = "0.32.0", default-features = false } bytemuck = { version = "1.24.0", features = ["derive"] } raw-window-handle = "0.6.2" -winit = "0.30.0" +winit = "0.30.13" env_logger = "0.11.8" anyhow = "1.0.98" diff --git a/generated/graphics/ash/spirv-builder/Cargo.toml b/generated/graphics/ash/spirv-builder/Cargo.toml index 3e2d877..5a0243c 100644 --- a/generated/graphics/ash/spirv-builder/Cargo.toml +++ b/generated/graphics/ash/spirv-builder/Cargo.toml @@ -30,7 +30,7 @@ spirv-std = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "30896871ba00e glam = { version = "0.32.0", default-features = false } bytemuck = { version = "1.24.0", features = ["derive"] } raw-window-handle = "0.6.2" -winit = "0.30.0" +winit = "0.30.13" env_logger = "0.11.8" anyhow = "1.0.98" diff --git a/generated/graphics/wgpu/cargo-gpu/Cargo.toml b/generated/graphics/wgpu/cargo-gpu/Cargo.toml index d525049..3986ec2 100644 --- a/generated/graphics/wgpu/cargo-gpu/Cargo.toml +++ b/generated/graphics/wgpu/cargo-gpu/Cargo.toml @@ -17,7 +17,7 @@ unexpected_cfgs = { level = "allow", check-cfg = ['cfg(target_arch, values("spir [workspace.dependencies] # API -wgpu = { version = "27.0.1", default-features = false, features = ["std", "parking_lot", "vulkan", "vulkan-portability", "spirv", "wgsl"] } +wgpu = { version = "29.0.1", default-features = false, features = ["std", "parking_lot", "vulkan", "vulkan-portability", "spirv", "wgsl"] } pollster = "0.4.0" # rust-gpu @@ -28,7 +28,7 @@ spirv-std = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "30896871ba00e glam = { version = "0.32.0", default-features = false } bytemuck = { version = "1.24.0", features = ["derive"] } raw-window-handle = "0.6.2" -winit = "0.30.0" +winit = "0.30.13" env_logger = "0.11.8" anyhow = "1.0.98" diff --git a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/app.rs b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/app.rs new file mode 100644 index 0000000..292693e --- /dev/null +++ b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/app.rs @@ -0,0 +1,83 @@ +use std::{sync::Arc, time::Instant}; + +use winit::{ + application::ApplicationHandler, + dpi::LogicalSize, + event::{ElementState, KeyEvent, WindowEvent}, + event_loop::ActiveEventLoop, + keyboard::{Key, NamedKey}, + window::{Window, WindowId}, +}; + +use crate::wgpu_renderer::state::State; + +pub(crate) struct App { + start: Instant, + state: Option, +} + +impl App { + pub fn new() -> Self { + let start = std::time::Instant::now(); + + App { start, state: None } + } + + pub fn try_resume(&mut self, event_loop: &ActiveEventLoop) -> anyhow::Result<()> { + let attribs = Window::default_attributes() + .with_title("Rust GPU - wgpu") + .with_inner_size(LogicalSize::new(1280, 720)); + + let window = event_loop.create_window(attribs).map(Arc::new)?; + + let state = pollster::block_on(State::try_new( + event_loop.owned_display_handle(), + window.clone(), + ))?; + self.state = Some(state); + + window.request_redraw(); + + Ok(()) + } +} + +impl ApplicationHandler for App { + fn resumed(&mut self, event_loop: &ActiveEventLoop) { + if let Err(e) = self.try_resume(event_loop) { + eprintln!("Failed to resume: {e:?}"); + event_loop.exit(); + } + } + + fn window_event(&mut self, event_loop: &ActiveEventLoop, _id: WindowId, event: WindowEvent) { + let Some(state) = self.state.as_mut() else { + eprintln!("Failed to retrieve app state."); + event_loop.exit(); + return; + }; + + match event { + WindowEvent::CloseRequested + | WindowEvent::KeyboardInput { + event: + KeyEvent { + logical_key: Key::Named(NamedKey::Escape), + state: ElementState::Pressed, + .. + }, + .. + } => { + event_loop.exit(); + } + WindowEvent::RedrawRequested => { + state.render(self.start.elapsed().as_secs_f32()); + state.get_window().request_redraw(); + } + WindowEvent::Resized(size) => { + state.resize(size); + } + _ => (), + } + } +} diff --git a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/mod.rs b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/mod.rs index ab8e881..4a39e15 100644 --- a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/mod.rs +++ b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/mod.rs @@ -1,103 +1,19 @@ -use crate::wgpu_renderer::swapchain::MySwapchainManager; -use anyhow::Context; -use mygraphics_shaders::ShaderConstants; -use std::sync::Arc; -use winit::event::{Event, WindowEvent}; -use winit::event_loop::{ActiveEventLoop, ControlFlow, EventLoop}; +use crate::wgpu_renderer::app::App; +use winit::event_loop::{ControlFlow, EventLoop}; +mod app; mod render_pipeline; mod renderer; -mod swapchain; +mod state; pub fn main() -> anyhow::Result<()> { env_logger::init(); - pollster::block_on(main_inner()) -} -pub async fn main_inner() -> anyhow::Result<()> { - // env_logger::init(); let event_loop = EventLoop::new()?; - // FIXME(eddyb) incomplete `winit` upgrade, follow the guides in: - // https://github.com/rust-windowing/winit/releases/tag/v0.30.0 - #[allow(deprecated)] - let window = Arc::new( - event_loop.create_window( - winit::window::Window::default_attributes() - .with_title("Rust GPU - wgpu") - .with_inner_size(winit::dpi::LogicalSize::new( - f64::from(1280), - f64::from(720), - )), - )?, - ); - - let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::from_env_or_default()); - let surface = instance.create_surface(window.clone())?; - let adapter = - wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface)).await?; - - let required_features = wgpu::Features::PUSH_CONSTANTS; - let required_limits = wgpu::Limits { - max_push_constant_size: 128, - ..Default::default() - }; - let (device, queue) = adapter - .request_device(&wgpu::DeviceDescriptor { - label: None, - required_features, - required_limits, - experimental_features: wgpu::ExperimentalFeatures::disabled(), - memory_hints: wgpu::MemoryHints::Performance, - trace: Default::default(), - }) - .await - .context("Failed to create device")?; - - let mut swapchain = MySwapchainManager::new(adapter.clone(), device.clone(), window, surface); - let renderer = renderer::MyRenderer::new(device, queue, swapchain.format())?; + event_loop.set_control_flow(ControlFlow::Poll); - let start = std::time::Instant::now(); - let mut event_handler = - move |event: Event<_>, event_loop_window_target: &ActiveEventLoop| match event { - Event::AboutToWait => swapchain.render(|render_target| { - renderer.render( - &ShaderConstants { - time: start.elapsed().as_secs_f32(), - width: render_target.texture().width(), - height: render_target.texture().height(), - }, - render_target, - ); - }), - Event::WindowEvent { event, .. } => { - match event { - WindowEvent::KeyboardInput { - event: - winit::event::KeyEvent { - logical_key: - winit::keyboard::Key::Named(winit::keyboard::NamedKey::Escape), - state: winit::event::ElementState::Pressed, - .. - }, - .. - } - | WindowEvent::CloseRequested => event_loop_window_target.exit(), - WindowEvent::Resized(_) => swapchain.should_recreate(), - _ => {} - } - Ok(()) - } - _ => { - event_loop_window_target.set_control_flow(ControlFlow::Poll); - Ok(()) - } - }; + let mut app = App::new(); + event_loop.run_app(&mut app)?; - // FIXME(eddyb) incomplete `winit` upgrade, follow the guides in: - // https://github.com/rust-windowing/winit/releases/tag/v0.30.0 - #[allow(deprecated)] - event_loop.run(move |event, event_loop_window_target| { - event_handler(event, event_loop_window_target).unwrap(); - })?; Ok(()) } diff --git a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/render_pipeline.rs b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/render_pipeline.rs index ba1f793..3083ff1 100644 --- a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/render_pipeline.rs +++ b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/render_pipeline.rs @@ -2,9 +2,8 @@ use crate::wgpu_renderer::renderer::{GlobalBindGroup, GlobalBindGroupLayout}; use mygraphics_shaders::ShaderConstants; use wgpu::{ ColorTargetState, ColorWrites, Device, FragmentState, FrontFace, MultisampleState, - PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, PushConstantRange, - RenderPass, RenderPipeline, RenderPipelineDescriptor, ShaderStages, TextureFormat, VertexState, - include_spirv, + PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, RenderPass, + RenderPipeline, RenderPipelineDescriptor, TextureFormat, VertexState, include_spirv, }; #[derive(Debug, Clone)] @@ -22,11 +21,8 @@ impl MyRenderPipeline { let layout = device.create_pipeline_layout(&PipelineLayoutDescriptor { label: Some("MyRenderPipeline layout"), - bind_group_layouts: &[&global_bind_group_layout.0], - push_constant_ranges: &[PushConstantRange { - stages: ShaderStages::VERTEX_FRAGMENT, - range: 0..size_of::() as u32, - }], + bind_group_layouts: &[Some(&global_bind_group_layout.0)], + immediate_size: size_of::() as u32, }); Ok(Self { @@ -60,7 +56,7 @@ impl MyRenderPipeline { write_mask: ColorWrites::ALL, })], }), - multiview: None, + multiview_mask: None, cache: None, }), }) diff --git a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/renderer.rs b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/renderer.rs index 2b4349e..b056995 100644 --- a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/renderer.rs +++ b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/renderer.rs @@ -53,6 +53,7 @@ impl MyRenderer { depth_stencil_attachment: None, timestamp_writes: None, occlusion_query_set: None, + multiview_mask: None, }); self.pipeline.draw(&mut rpass, &global_bind_group); drop(rpass); diff --git a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs new file mode 100644 index 0000000..412de26 --- /dev/null +++ b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs @@ -0,0 +1,139 @@ +use anyhow::Context; +use mygraphics_shaders::ShaderConstants; +use std::sync::Arc; +use wgpu::{ + CurrentSurfaceTexture, Features, Instance, InstanceDescriptor, Limits, Surface, TextureFormat, +}; +use winit::dpi::PhysicalSize; +use winit::event_loop::OwnedDisplayHandle; +use winit::window::Window; + +use crate::wgpu_renderer::renderer::MyRenderer; + +pub struct State { + instance: Instance, + + window: Arc, + + size: PhysicalSize, + surface: Surface<'static>, + surface_format: TextureFormat, + + renderer: MyRenderer, +} + +impl State { + pub async fn try_new( + display_handle: OwnedDisplayHandle, + window: Arc, + ) -> anyhow::Result { + let instance = Instance::new(InstanceDescriptor::new_with_display_handle_from_env( + Box::new(display_handle), + )); + let surface = instance.create_surface(window.clone())?; + let adapter = + wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface)).await?; + + let required_features = Features::IMMEDIATES; + let required_limits = Limits { + max_immediate_size: 128, + ..Default::default() + }; + + let (device, queue) = adapter + .request_device(&wgpu::DeviceDescriptor { + label: None, + required_features, + required_limits, + experimental_features: wgpu::ExperimentalFeatures::disabled(), + memory_hints: wgpu::MemoryHints::Performance, + trace: Default::default(), + }) + .await + .context("Failed to create device")?; + + let size = window.inner_size(); + let cap = surface.get_capabilities(&adapter); + let surface_format = cap.formats[0]; + + let renderer = MyRenderer::new(device, queue, surface_format.clone())?; + + let state = State { + instance, + window, + size, + surface, + surface_format, + renderer, + }; + state.configure_surface(); + + Ok(state) + } + + pub fn get_window(&self) -> &Window { + &self.window + } + + pub fn render(&mut self, time: f32) { + let surface_texture = match self.surface.get_current_texture() { + CurrentSurfaceTexture::Success(texture) => texture, + CurrentSurfaceTexture::Occluded | CurrentSurfaceTexture::Timeout => return, + CurrentSurfaceTexture::Suboptimal(_) | CurrentSurfaceTexture::Outdated => { + self.configure_surface(); + return; + } + CurrentSurfaceTexture::Validation => { + unreachable!("No error scope registered, so validation errors will panic") + } + CurrentSurfaceTexture::Lost => { + self.surface = self.instance.create_surface(self.window.clone()).unwrap(); + self.configure_surface(); + return; + } + }; + + let texture_view = surface_texture + .texture + .create_view(&wgpu::TextureViewDescriptor { + // Without add_srgb_suffix() the image we will be working with + // might not be "gamma correct". + format: Some(self.surface_format.add_srgb_suffix()), + ..Default::default() + }); + + let PhysicalSize { width, height } = self.size; + self.renderer.render( + &ShaderConstants { + width, + height, + time, + }, + texture_view, + ); + + self.window.pre_present_notify(); + surface_texture.present(); + } + + pub fn configure_surface(&self) { + let surface_config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: self.surface_format, + view_formats: vec![self.surface_format.add_srgb_suffix()], + alpha_mode: wgpu::CompositeAlphaMode::Auto, + width: self.size.width, + height: self.size.height, + desired_maximum_frame_latency: 2, + present_mode: wgpu::PresentMode::AutoVsync, + }; + + self.surface + .configure(&self.renderer.device, &surface_config); + } + + pub fn resize(&mut self, size: PhysicalSize) { + self.size = size; + self.configure_surface(); + } +} diff --git a/generated/graphics/wgpu/spirv-builder/Cargo.toml b/generated/graphics/wgpu/spirv-builder/Cargo.toml index 6ec6efe..1beca89 100644 --- a/generated/graphics/wgpu/spirv-builder/Cargo.toml +++ b/generated/graphics/wgpu/spirv-builder/Cargo.toml @@ -17,7 +17,7 @@ unexpected_cfgs = { level = "allow", check-cfg = ['cfg(target_arch, values("spir [workspace.dependencies] # API -wgpu = { version = "27.0.1", default-features = false, features = ["std", "parking_lot", "vulkan", "vulkan-portability", "spirv", "wgsl"] } +wgpu = { version = "29.0.1", default-features = false, features = ["std", "parking_lot", "vulkan", "vulkan-portability", "spirv", "wgsl"] } pollster = "0.4.0" # rust-gpu @@ -29,7 +29,7 @@ spirv-std = { git = "https://github.com/Rust-GPU/rust-gpu", rev = "30896871ba00e glam = { version = "0.32.0", default-features = false } bytemuck = { version = "1.24.0", features = ["derive"] } raw-window-handle = "0.6.2" -winit = "0.30.0" +winit = "0.30.13" env_logger = "0.11.8" anyhow = "1.0.98" diff --git a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/app.rs b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/app.rs new file mode 100644 index 0000000..292693e --- /dev/null +++ b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/app.rs @@ -0,0 +1,83 @@ +use std::{sync::Arc, time::Instant}; + +use winit::{ + application::ApplicationHandler, + dpi::LogicalSize, + event::{ElementState, KeyEvent, WindowEvent}, + event_loop::ActiveEventLoop, + keyboard::{Key, NamedKey}, + window::{Window, WindowId}, +}; + +use crate::wgpu_renderer::state::State; + +pub(crate) struct App { + start: Instant, + state: Option, +} + +impl App { + pub fn new() -> Self { + let start = std::time::Instant::now(); + + App { start, state: None } + } + + pub fn try_resume(&mut self, event_loop: &ActiveEventLoop) -> anyhow::Result<()> { + let attribs = Window::default_attributes() + .with_title("Rust GPU - wgpu") + .with_inner_size(LogicalSize::new(1280, 720)); + + let window = event_loop.create_window(attribs).map(Arc::new)?; + + let state = pollster::block_on(State::try_new( + event_loop.owned_display_handle(), + window.clone(), + ))?; + self.state = Some(state); + + window.request_redraw(); + + Ok(()) + } +} + +impl ApplicationHandler for App { + fn resumed(&mut self, event_loop: &ActiveEventLoop) { + if let Err(e) = self.try_resume(event_loop) { + eprintln!("Failed to resume: {e:?}"); + event_loop.exit(); + } + } + + fn window_event(&mut self, event_loop: &ActiveEventLoop, _id: WindowId, event: WindowEvent) { + let Some(state) = self.state.as_mut() else { + eprintln!("Failed to retrieve app state."); + event_loop.exit(); + return; + }; + + match event { + WindowEvent::CloseRequested + | WindowEvent::KeyboardInput { + event: + KeyEvent { + logical_key: Key::Named(NamedKey::Escape), + state: ElementState::Pressed, + .. + }, + .. + } => { + event_loop.exit(); + } + WindowEvent::RedrawRequested => { + state.render(self.start.elapsed().as_secs_f32()); + state.get_window().request_redraw(); + } + WindowEvent::Resized(size) => { + state.resize(size); + } + _ => (), + } + } +} diff --git a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/mod.rs b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/mod.rs index ab8e881..4a39e15 100644 --- a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/mod.rs +++ b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/mod.rs @@ -1,103 +1,19 @@ -use crate::wgpu_renderer::swapchain::MySwapchainManager; -use anyhow::Context; -use mygraphics_shaders::ShaderConstants; -use std::sync::Arc; -use winit::event::{Event, WindowEvent}; -use winit::event_loop::{ActiveEventLoop, ControlFlow, EventLoop}; +use crate::wgpu_renderer::app::App; +use winit::event_loop::{ControlFlow, EventLoop}; +mod app; mod render_pipeline; mod renderer; -mod swapchain; +mod state; pub fn main() -> anyhow::Result<()> { env_logger::init(); - pollster::block_on(main_inner()) -} -pub async fn main_inner() -> anyhow::Result<()> { - // env_logger::init(); let event_loop = EventLoop::new()?; - // FIXME(eddyb) incomplete `winit` upgrade, follow the guides in: - // https://github.com/rust-windowing/winit/releases/tag/v0.30.0 - #[allow(deprecated)] - let window = Arc::new( - event_loop.create_window( - winit::window::Window::default_attributes() - .with_title("Rust GPU - wgpu") - .with_inner_size(winit::dpi::LogicalSize::new( - f64::from(1280), - f64::from(720), - )), - )?, - ); - - let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor::from_env_or_default()); - let surface = instance.create_surface(window.clone())?; - let adapter = - wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface)).await?; - - let required_features = wgpu::Features::PUSH_CONSTANTS; - let required_limits = wgpu::Limits { - max_push_constant_size: 128, - ..Default::default() - }; - let (device, queue) = adapter - .request_device(&wgpu::DeviceDescriptor { - label: None, - required_features, - required_limits, - experimental_features: wgpu::ExperimentalFeatures::disabled(), - memory_hints: wgpu::MemoryHints::Performance, - trace: Default::default(), - }) - .await - .context("Failed to create device")?; - - let mut swapchain = MySwapchainManager::new(adapter.clone(), device.clone(), window, surface); - let renderer = renderer::MyRenderer::new(device, queue, swapchain.format())?; + event_loop.set_control_flow(ControlFlow::Poll); - let start = std::time::Instant::now(); - let mut event_handler = - move |event: Event<_>, event_loop_window_target: &ActiveEventLoop| match event { - Event::AboutToWait => swapchain.render(|render_target| { - renderer.render( - &ShaderConstants { - time: start.elapsed().as_secs_f32(), - width: render_target.texture().width(), - height: render_target.texture().height(), - }, - render_target, - ); - }), - Event::WindowEvent { event, .. } => { - match event { - WindowEvent::KeyboardInput { - event: - winit::event::KeyEvent { - logical_key: - winit::keyboard::Key::Named(winit::keyboard::NamedKey::Escape), - state: winit::event::ElementState::Pressed, - .. - }, - .. - } - | WindowEvent::CloseRequested => event_loop_window_target.exit(), - WindowEvent::Resized(_) => swapchain.should_recreate(), - _ => {} - } - Ok(()) - } - _ => { - event_loop_window_target.set_control_flow(ControlFlow::Poll); - Ok(()) - } - }; + let mut app = App::new(); + event_loop.run_app(&mut app)?; - // FIXME(eddyb) incomplete `winit` upgrade, follow the guides in: - // https://github.com/rust-windowing/winit/releases/tag/v0.30.0 - #[allow(deprecated)] - event_loop.run(move |event, event_loop_window_target| { - event_handler(event, event_loop_window_target).unwrap(); - })?; Ok(()) } diff --git a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/render_pipeline.rs b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/render_pipeline.rs index ba1f793..3083ff1 100644 --- a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/render_pipeline.rs +++ b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/render_pipeline.rs @@ -2,9 +2,8 @@ use crate::wgpu_renderer::renderer::{GlobalBindGroup, GlobalBindGroupLayout}; use mygraphics_shaders::ShaderConstants; use wgpu::{ ColorTargetState, ColorWrites, Device, FragmentState, FrontFace, MultisampleState, - PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, PushConstantRange, - RenderPass, RenderPipeline, RenderPipelineDescriptor, ShaderStages, TextureFormat, VertexState, - include_spirv, + PipelineLayoutDescriptor, PolygonMode, PrimitiveState, PrimitiveTopology, RenderPass, + RenderPipeline, RenderPipelineDescriptor, TextureFormat, VertexState, include_spirv, }; #[derive(Debug, Clone)] @@ -22,11 +21,8 @@ impl MyRenderPipeline { let layout = device.create_pipeline_layout(&PipelineLayoutDescriptor { label: Some("MyRenderPipeline layout"), - bind_group_layouts: &[&global_bind_group_layout.0], - push_constant_ranges: &[PushConstantRange { - stages: ShaderStages::VERTEX_FRAGMENT, - range: 0..size_of::() as u32, - }], + bind_group_layouts: &[Some(&global_bind_group_layout.0)], + immediate_size: size_of::() as u32, }); Ok(Self { @@ -60,7 +56,7 @@ impl MyRenderPipeline { write_mask: ColorWrites::ALL, })], }), - multiview: None, + multiview_mask: None, cache: None, }), }) diff --git a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/renderer.rs b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/renderer.rs index 2b4349e..b056995 100644 --- a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/renderer.rs +++ b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/renderer.rs @@ -53,6 +53,7 @@ impl MyRenderer { depth_stencil_attachment: None, timestamp_writes: None, occlusion_query_set: None, + multiview_mask: None, }); self.pipeline.draw(&mut rpass, &global_bind_group); drop(rpass); diff --git a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs new file mode 100644 index 0000000..412de26 --- /dev/null +++ b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs @@ -0,0 +1,139 @@ +use anyhow::Context; +use mygraphics_shaders::ShaderConstants; +use std::sync::Arc; +use wgpu::{ + CurrentSurfaceTexture, Features, Instance, InstanceDescriptor, Limits, Surface, TextureFormat, +}; +use winit::dpi::PhysicalSize; +use winit::event_loop::OwnedDisplayHandle; +use winit::window::Window; + +use crate::wgpu_renderer::renderer::MyRenderer; + +pub struct State { + instance: Instance, + + window: Arc, + + size: PhysicalSize, + surface: Surface<'static>, + surface_format: TextureFormat, + + renderer: MyRenderer, +} + +impl State { + pub async fn try_new( + display_handle: OwnedDisplayHandle, + window: Arc, + ) -> anyhow::Result { + let instance = Instance::new(InstanceDescriptor::new_with_display_handle_from_env( + Box::new(display_handle), + )); + let surface = instance.create_surface(window.clone())?; + let adapter = + wgpu::util::initialize_adapter_from_env_or_default(&instance, Some(&surface)).await?; + + let required_features = Features::IMMEDIATES; + let required_limits = Limits { + max_immediate_size: 128, + ..Default::default() + }; + + let (device, queue) = adapter + .request_device(&wgpu::DeviceDescriptor { + label: None, + required_features, + required_limits, + experimental_features: wgpu::ExperimentalFeatures::disabled(), + memory_hints: wgpu::MemoryHints::Performance, + trace: Default::default(), + }) + .await + .context("Failed to create device")?; + + let size = window.inner_size(); + let cap = surface.get_capabilities(&adapter); + let surface_format = cap.formats[0]; + + let renderer = MyRenderer::new(device, queue, surface_format.clone())?; + + let state = State { + instance, + window, + size, + surface, + surface_format, + renderer, + }; + state.configure_surface(); + + Ok(state) + } + + pub fn get_window(&self) -> &Window { + &self.window + } + + pub fn render(&mut self, time: f32) { + let surface_texture = match self.surface.get_current_texture() { + CurrentSurfaceTexture::Success(texture) => texture, + CurrentSurfaceTexture::Occluded | CurrentSurfaceTexture::Timeout => return, + CurrentSurfaceTexture::Suboptimal(_) | CurrentSurfaceTexture::Outdated => { + self.configure_surface(); + return; + } + CurrentSurfaceTexture::Validation => { + unreachable!("No error scope registered, so validation errors will panic") + } + CurrentSurfaceTexture::Lost => { + self.surface = self.instance.create_surface(self.window.clone()).unwrap(); + self.configure_surface(); + return; + } + }; + + let texture_view = surface_texture + .texture + .create_view(&wgpu::TextureViewDescriptor { + // Without add_srgb_suffix() the image we will be working with + // might not be "gamma correct". + format: Some(self.surface_format.add_srgb_suffix()), + ..Default::default() + }); + + let PhysicalSize { width, height } = self.size; + self.renderer.render( + &ShaderConstants { + width, + height, + time, + }, + texture_view, + ); + + self.window.pre_present_notify(); + surface_texture.present(); + } + + pub fn configure_surface(&self) { + let surface_config = wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: self.surface_format, + view_formats: vec![self.surface_format.add_srgb_suffix()], + alpha_mode: wgpu::CompositeAlphaMode::Auto, + width: self.size.width, + height: self.size.height, + desired_maximum_frame_latency: 2, + present_mode: wgpu::PresentMode::AutoVsync, + }; + + self.surface + .configure(&self.renderer.device, &surface_config); + } + + pub fn resize(&mut self, size: PhysicalSize) { + self.size = size; + self.configure_surface(); + } +} From f91909b5f3f2a14f8569cc215c59aa4f3fe83c43 Mon Sep 17 00:00:00 2001 From: Timo Sonnenschein Date: Sat, 11 Apr 2026 15:01:09 +0200 Subject: [PATCH 3/5] fix: cargo xtask generate does not remove old files --- .../mygraphics/src/wgpu_renderer/swapchain.rs | 117 ------------------ .../mygraphics/src/wgpu_renderer/swapchain.rs | 117 ------------------ 2 files changed, 234 deletions(-) delete mode 100644 generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/swapchain.rs delete mode 100644 generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/swapchain.rs diff --git a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/swapchain.rs b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/swapchain.rs deleted file mode 100644 index ed1b8d1..0000000 --- a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/swapchain.rs +++ /dev/null @@ -1,117 +0,0 @@ -use anyhow::Context; -use std::sync::Arc; -use wgpu::{Adapter, Device, Surface, SurfaceError, TextureFormat, TextureView}; -use winit::dpi::PhysicalSize; -use winit::window::Window; - -pub struct MySwapchainManager<'a> { - adapter: Adapter, - device: Device, - window: Arc, - surface: Surface<'a>, - format: TextureFormat, - - // state below - active: Option, - should_recreate: bool, -} - -pub struct ActiveConfiguration { - size: PhysicalSize, -} - -impl<'a> MySwapchainManager<'a> { - pub fn new( - adapter: Adapter, - device: Device, - window: Arc, - surface: Surface<'a>, - ) -> Self { - let caps = surface.get_capabilities(&adapter); - Self { - adapter, - device, - window, - surface, - format: caps.formats[0], - active: None, - should_recreate: true, - } - } - - #[inline] - pub fn should_recreate(&mut self) { - self.should_recreate = true; - } - - pub fn format(&self) -> TextureFormat { - self.format - } - - pub fn render(&mut self, f: impl FnOnce(TextureView) -> R) -> anyhow::Result { - let size = self.window.inner_size(); - if let Some(active) = &self.active { - if active.size != size { - self.should_recreate(); - } - } else { - self.should_recreate(); - } - - const RECREATE_ATTEMPTS: u32 = 10; - for _ in 0..RECREATE_ATTEMPTS { - if self.should_recreate { - self.should_recreate = false; - self.configure_surface(size)?; - } - - match self.surface.get_current_texture() { - Ok(surface_texture) => { - if surface_texture.suboptimal { - self.should_recreate = true; - } - let output_view = - surface_texture - .texture - .create_view(&wgpu::TextureViewDescriptor { - format: Some(self.format), - ..wgpu::TextureViewDescriptor::default() - }); - let r = f(output_view); - surface_texture.present(); - return Ok(r); - } - Err(SurfaceError::Outdated | SurfaceError::Lost) => { - self.should_recreate = true; - } - Err(e) => { - anyhow::bail!("get_current_texture() failed: {e}") - } - }; - } - anyhow::bail!( - "looped {RECREATE_ATTEMPTS} times trying to acquire swapchain image and failed repeatedly!" - ); - } - - fn configure_surface(&mut self, size: PhysicalSize) -> anyhow::Result<()> { - let mut surface_config = self - .surface - .get_default_config(&self.adapter, size.width, size.height) - .with_context(|| { - format!( - "Incompatible adapter for surface, returned capabilities: {:?}", - self.surface.get_capabilities(&self.adapter) - ) - })?; - - // force srgb surface format - surface_config.view_formats.push(self.format); - // limit framerate to vsync - surface_config.present_mode = wgpu::PresentMode::AutoVsync; - self.surface.configure(&self.device, &surface_config); - - self.active = Some(ActiveConfiguration { size }); - Ok(()) - } -} diff --git a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/swapchain.rs b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/swapchain.rs deleted file mode 100644 index ed1b8d1..0000000 --- a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/swapchain.rs +++ /dev/null @@ -1,117 +0,0 @@ -use anyhow::Context; -use std::sync::Arc; -use wgpu::{Adapter, Device, Surface, SurfaceError, TextureFormat, TextureView}; -use winit::dpi::PhysicalSize; -use winit::window::Window; - -pub struct MySwapchainManager<'a> { - adapter: Adapter, - device: Device, - window: Arc, - surface: Surface<'a>, - format: TextureFormat, - - // state below - active: Option, - should_recreate: bool, -} - -pub struct ActiveConfiguration { - size: PhysicalSize, -} - -impl<'a> MySwapchainManager<'a> { - pub fn new( - adapter: Adapter, - device: Device, - window: Arc, - surface: Surface<'a>, - ) -> Self { - let caps = surface.get_capabilities(&adapter); - Self { - adapter, - device, - window, - surface, - format: caps.formats[0], - active: None, - should_recreate: true, - } - } - - #[inline] - pub fn should_recreate(&mut self) { - self.should_recreate = true; - } - - pub fn format(&self) -> TextureFormat { - self.format - } - - pub fn render(&mut self, f: impl FnOnce(TextureView) -> R) -> anyhow::Result { - let size = self.window.inner_size(); - if let Some(active) = &self.active { - if active.size != size { - self.should_recreate(); - } - } else { - self.should_recreate(); - } - - const RECREATE_ATTEMPTS: u32 = 10; - for _ in 0..RECREATE_ATTEMPTS { - if self.should_recreate { - self.should_recreate = false; - self.configure_surface(size)?; - } - - match self.surface.get_current_texture() { - Ok(surface_texture) => { - if surface_texture.suboptimal { - self.should_recreate = true; - } - let output_view = - surface_texture - .texture - .create_view(&wgpu::TextureViewDescriptor { - format: Some(self.format), - ..wgpu::TextureViewDescriptor::default() - }); - let r = f(output_view); - surface_texture.present(); - return Ok(r); - } - Err(SurfaceError::Outdated | SurfaceError::Lost) => { - self.should_recreate = true; - } - Err(e) => { - anyhow::bail!("get_current_texture() failed: {e}") - } - }; - } - anyhow::bail!( - "looped {RECREATE_ATTEMPTS} times trying to acquire swapchain image and failed repeatedly!" - ); - } - - fn configure_surface(&mut self, size: PhysicalSize) -> anyhow::Result<()> { - let mut surface_config = self - .surface - .get_default_config(&self.adapter, size.width, size.height) - .with_context(|| { - format!( - "Incompatible adapter for surface, returned capabilities: {:?}", - self.surface.get_capabilities(&self.adapter) - ) - })?; - - // force srgb surface format - surface_config.view_formats.push(self.format); - // limit framerate to vsync - surface_config.present_mode = wgpu::PresentMode::AutoVsync; - self.surface.configure(&self.device, &surface_config); - - self.active = Some(ActiveConfiguration { size }); - Ok(()) - } -} From 0ecdf9205594768437bedd45202b710efa74e819 Mon Sep 17 00:00:00 2001 From: Timo Sonnenschein Date: Sat, 11 Apr 2026 15:34:47 +0200 Subject: [PATCH 4/5] fix: clippy --- .../wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs | 4 ++-- .../wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs | 4 ++-- graphics/mygraphics/src/wgpu_renderer/state.rs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs index 412de26..ca7c0b1 100644 --- a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs +++ b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs @@ -56,8 +56,8 @@ impl State { let cap = surface.get_capabilities(&adapter); let surface_format = cap.formats[0]; - let renderer = MyRenderer::new(device, queue, surface_format.clone())?; - + let renderer = MyRenderer::new(device, queue, surface_format)?; + let state = State { instance, window, diff --git a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs index 412de26..ca7c0b1 100644 --- a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs +++ b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs @@ -56,8 +56,8 @@ impl State { let cap = surface.get_capabilities(&adapter); let surface_format = cap.formats[0]; - let renderer = MyRenderer::new(device, queue, surface_format.clone())?; - + let renderer = MyRenderer::new(device, queue, surface_format)?; + let state = State { instance, window, diff --git a/graphics/mygraphics/src/wgpu_renderer/state.rs b/graphics/mygraphics/src/wgpu_renderer/state.rs index 412de26..ca7c0b1 100644 --- a/graphics/mygraphics/src/wgpu_renderer/state.rs +++ b/graphics/mygraphics/src/wgpu_renderer/state.rs @@ -56,8 +56,8 @@ impl State { let cap = surface.get_capabilities(&adapter); let surface_format = cap.formats[0]; - let renderer = MyRenderer::new(device, queue, surface_format.clone())?; - + let renderer = MyRenderer::new(device, queue, surface_format)?; + let state = State { instance, window, From 4c5f2a432121ef49965fd329e67d9e12846a3352 Mon Sep 17 00:00:00 2001 From: Timo Sonnenschein Date: Sat, 11 Apr 2026 16:05:39 +0200 Subject: [PATCH 5/5] fix: cargo fmt --- .../wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs | 2 +- .../wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs | 2 +- graphics/mygraphics/src/wgpu_renderer/state.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs index ca7c0b1..95691d6 100644 --- a/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs +++ b/generated/graphics/wgpu/cargo-gpu/mygraphics/src/wgpu_renderer/state.rs @@ -57,7 +57,7 @@ impl State { let surface_format = cap.formats[0]; let renderer = MyRenderer::new(device, queue, surface_format)?; - + let state = State { instance, window, diff --git a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs index ca7c0b1..95691d6 100644 --- a/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs +++ b/generated/graphics/wgpu/spirv-builder/mygraphics/src/wgpu_renderer/state.rs @@ -57,7 +57,7 @@ impl State { let surface_format = cap.formats[0]; let renderer = MyRenderer::new(device, queue, surface_format)?; - + let state = State { instance, window, diff --git a/graphics/mygraphics/src/wgpu_renderer/state.rs b/graphics/mygraphics/src/wgpu_renderer/state.rs index ca7c0b1..95691d6 100644 --- a/graphics/mygraphics/src/wgpu_renderer/state.rs +++ b/graphics/mygraphics/src/wgpu_renderer/state.rs @@ -57,7 +57,7 @@ impl State { let surface_format = cap.formats[0]; let renderer = MyRenderer::new(device, queue, surface_format)?; - + let state = State { instance, window,