diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d8a0bb4..4c3a6c1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -15,7 +15,6 @@ updates: - "rust" commit-message: prefix: "chore(deps)" - include: "scope" reviewers: - "doublegate" assignees: @@ -35,8 +34,18 @@ updates: # successor (e.g. bincode-next) is deliberately adopted with its own # migration. - dependency-name: "bincode" - # Group minor and patch updates together + # Group tightly coupled graphics/UI crates and minor/patch updates together groups: + egui-wgpu: + patterns: + - "egui" + - "egui-*" + - "wgpu" + - "naga" + update-types: + - "major" + - "minor" + - "patch" development-dependencies: dependency-type: "development" update-types: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f08935..f4ba5e5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,7 +87,7 @@ jobs: libasound2-dev libudev-dev \ libxkbcommon-dev libwayland-dev \ libx11-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev - - uses: dtolnay/rust-toolchain@1.96 + - uses: dtolnay/rust-toolchain@1.99 with: components: rustfmt, clippy targets: wasm32-unknown-unknown, thumbv7em-none-eabihf @@ -114,14 +114,14 @@ jobs: libasound2-dev libudev-dev \ libxkbcommon-dev libwayland-dev \ libx11-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev - - uses: dtolnay/rust-toolchain@1.96 + - uses: dtolnay/rust-toolchain@1.99 - run: cargo test --workspace --features test-roms no_std: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - uses: dtolnay/rust-toolchain@1.96 + - uses: dtolnay/rust-toolchain@1.99 with: targets: thumbv7em-none-eabihf - run: cargo build -p rusty2600-core --target thumbv7em-none-eabihf --no-default-features @@ -135,7 +135,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - uses: dtolnay/rust-toolchain@1.96 + - uses: dtolnay/rust-toolchain@1.99 # `bench_regression_check.sh` runs the whole-system frame bench # (`rusty2600-core`'s `system_full_ntsc_frame`) and fails the job if the # measured mean exceeds a fixed absolute ceiling -- see the script's own diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index f09a647..b723d71 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -62,7 +62,7 @@ jobs: libxkbcommon-dev libwayland-dev \ libx11-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev - - uses: dtolnay/rust-toolchain@1.96 + - uses: dtolnay/rust-toolchain@1.99 with: targets: wasm32-unknown-unknown diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4b25e26..8a63e86 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: libasound2-dev libudev-dev \ libxkbcommon-dev libwayland-dev \ libx11-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev - - uses: dtolnay/rust-toolchain@1.96 + - uses: dtolnay/rust-toolchain@1.99 with: targets: ${{ matrix.target }} - run: cargo build --release -p rusty2600-frontend --target ${{ matrix.target }} diff --git a/.github/workflows/singlestep-full.yml b/.github/workflows/singlestep-full.yml index 5741b83..237ec29 100644 --- a/.github/workflows/singlestep-full.yml +++ b/.github/workflows/singlestep-full.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - - uses: dtolnay/rust-toolchain@1.96 + - uses: dtolnay/rust-toolchain@1.99 - name: Fetch the full SingleStepTests corpus run: | mkdir -p /tmp/singlestep-full diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9a3769d..4076dee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Thanks for your interest in contributing to Rusty2600, a cycle-accurate Atari ## Development setup - Install [rustup](https://rustup.rs). -- The toolchain is pinned in `rust-toolchain.toml` (Rust 1.96); `rustup` +- The toolchain is pinned in `rust-toolchain.toml` (Rust 1.99); `rustup` auto-installs it, including the `wasm32-unknown-unknown` and `thumbv7em-none-eabihf` targets. - The `winit` + `wgpu` + `cpal` frontend needs the platform graphics/audio diff --git a/Cargo.lock b/Cargo.lock index 0d69370..c825e09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,13 +20,19 @@ checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" [[package]] name = "accesskit" -version = "0.24.1" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" +checksum = "ad442f58ee04714aaa0ba0a2768c1ea1935b29507bb22ddece8cbbc76db02932" dependencies = [ "uuid", ] +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "ahash" version = "0.8.12" @@ -191,6 +197,27 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arboard" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeb9553e62312c8756a5979254fc6d7da8bbeb5986a1e17037fab932f7037917" +dependencies = [ + "clipboard-win", + "image", + "log", + "objc2 0.6.5", + "objc2-app-kit 0.3.2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation 0.3.2", + "parking_lot", + "percent-encoding", + "windows-sys 0.61.2", + "wl-clipboard-rs", + "x11rb", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -246,7 +273,7 @@ dependencies = [ "rustc-hash 2.1.3", "serde", "serde_derive", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -333,9 +360,9 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" +checksum = "09ec2f926cc3060f09db9ebc5b52823d85268d24bb917e472c0c4bea35780a7d" dependencies = [ "bit-vec 0.9.1", ] @@ -453,7 +480,7 @@ checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -462,6 +489,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + [[package]] name = "bytes" version = "1.12.1" @@ -544,9 +577,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f74872d07caf508b30a21f6836e7d7016a2eaf7d9ff4f48deaa58cd8a0407630" +checksum = "877bf67ac8e52449eb2f9e98a344ea163beb70dd1f9eebe3cc5357dcfeaee4df" dependencies = [ "find-msvc-tools", "jobserver", @@ -633,7 +666,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -642,6 +675,15 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" +[[package]] +name = "clipboard-win" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" +dependencies = [ + "error-code", +] + [[package]] name = "cobs" version = "0.3.0" @@ -679,9 +721,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" -version = "4.6.8" +version = "4.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92" dependencies = [ "bytes", "memchr", @@ -1002,7 +1044,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1013,7 +1055,7 @@ checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" dependencies = [ "darling_core", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1030,9 +1072,9 @@ checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" [[package]] name = "deranged" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" [[package]] name = "derive_more" @@ -1114,7 +1156,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1149,9 +1191,9 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" [[package]] name = "ecolor" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6758be723a3f298bbfda4db75748bc2ba0abafe096b6383c7c32da264764fbc3" +checksum = "31bcbef0d4263a63eb32c4834e5d711613035ce1333468e107d928923e21e6e2" dependencies = [ "bytemuck", "emath", @@ -1159,16 +1201,16 @@ dependencies = [ [[package]] name = "egui" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2796c98d50b79631281d516343a6f6e93c0666462ca36e2c93b39f25d7793325" +checksum = "bec9144f49b7a28b5f395d3147e325b4fe3e77ba686eac11d1bdf0a7da3f375f" dependencies = [ "accesskit", "ahash", "bitflags 2.13.2", "emath", "epaint", - "itertools 0.14.0", + "itertools 0.15.0", "log", "nohash-hasher", "profiling", @@ -1178,9 +1220,9 @@ dependencies = [ [[package]] name = "egui-wgpu" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e6cfac0725563555fa4f91e9f799b9d7c6c5dd831fca6abc8234afc64b7a34" +checksum = "0309cbe1febed48af5b974e4bcc424b35e9664863a4d402697147b57a488c864" dependencies = [ "ahash", "bytemuck", @@ -1196,20 +1238,24 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea6bf3608db949588b95b8b341ee358d0c3f95cf4dc3f53d8d76717edee87db" +checksum = "e4e449f4c4a2a60c7ccb4ba7fa4078417bfe1f9ddc03b5e05ce75748e33a70de" dependencies = [ + "arboard", + "block2 0.6.2", "bytemuck", "egui", "log", "objc2 0.6.5", + "objc2-app-kit 0.3.2", "objc2-foundation 0.3.2", "objc2-ui-kit 0.3.2", "profiling", "raw-window-handle", "web-time", "webbrowser", + "windows-sys 0.61.2", "winit", ] @@ -1221,9 +1267,9 @@ checksum = "0e9c71c2167ca323c882b99918929403426e2373ea17242ff5653e0d5e1058be" [[package]] name = "emath" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd4ec073c9898516584d8c6cfdcee95b530b3d941cd5031ef4050aa36812308b" +checksum = "e73ce90f54750be8672c02be0743fe47530e6f251e066f0ee2869b59eb297af5" dependencies = [ "bytemuck", ] @@ -1248,9 +1294,9 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "epaint" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e60a8888b51da911df23918fd7301359b1d43a406a0ff3b8863af093dd7fc6c" +checksum = "97bac86ae3dde93fc3951e790951caea739ff39a6c89d909cdaf1d9278dbb1bd" dependencies = [ "ahash", "bytemuck", @@ -1267,21 +1313,22 @@ dependencies = [ "skrifa", "smallvec", "unicode-general-category", + "unicode-properties", "unicode-segmentation", "vello_cpu", ] [[package]] name = "epaint_default_fonts" -version = "0.35.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13ee4e1f553a3584c301f3a56ff1a775f1384781396cea301c8d952e9b93f560" +checksum = "cfc1cc505827f4c23eedc297975a0fd038268d41293f389dd8ff3b574aefab19" [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" [[package]] name = "errno" @@ -1293,6 +1340,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "error-code" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7" + [[package]] name = "euclid" version = "0.22.14" @@ -1318,6 +1371,21 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" +[[package]] +name = "fax" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + [[package]] name = "fearless_simd" version = "0.4.1" @@ -1337,9 +1405,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" [[package]] name = "finl_unicode" @@ -1353,12 +1421,20 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "flate2" version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e634e2e0ebac1ee034020da1ca582e17ffe4e0f5e985823721e168928136dcb" dependencies = [ + "crc32fast", + "miniz_oxide 0.9.1", "zlib-rs", ] @@ -1382,9 +1458,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "font-types" -version = "0.11.3" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" +checksum = "835ae9d781464a79026cde387f9cbc650c9a4909d7cf7e658b127e3c35d2f35d" dependencies = [ "bytemuck", ] @@ -1407,7 +1483,7 @@ checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1577,9 +1653,9 @@ dependencies = [ [[package]] name = "glifo" -version = "0.1.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d99fc21d493812643aae86d53b7bbd02f376434a90317e8a790bc209fdd6605e" +checksum = "282a26c1e23de04bdab3e34a21b6f877a479b96737792516b9b8b8f69b6661be" dependencies = [ "bytemuck", "foldhash 0.2.0", @@ -1643,26 +1719,6 @@ dependencies = [ "windows", ] -[[package]] -name = "gpu-descriptor" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" -dependencies = [ - "bitflags 2.13.2", - "gpu-descriptor-types", - "hashbrown 0.15.5", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" -dependencies = [ - "bitflags 2.13.2", -] - [[package]] name = "guillotiere" version = "0.7.0" @@ -1686,9 +1742,9 @@ dependencies = [ [[package]] name = "harfrust" -version = "0.7.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0431e8e389aa0f1e72bb9d1c2db8957a1a7a3580e8ed97db819c14837aac9b3e" +checksum = "c03d949a14aa089bbb282f7dd76a498a7f684428e4257202efc119ec010376f9" dependencies = [ "bitflags 2.13.2", "bytemuck", @@ -1745,12 +1801,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - [[package]] name = "hmac" version = "0.12.1" @@ -1886,6 +1936,20 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "moxcms", + "num-traits", + "png", + "tiff", +] + [[package]] name = "indexmap" version = "2.14.2" @@ -1949,7 +2013,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1985,6 +2049,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.18" @@ -2072,11 +2145,11 @@ dependencies = [ [[package]] name = "kasuari" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" +checksum = "72f14c90e40a6133f4805b83542a7ed7364f56070b447f56e7f4e90297122209" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.17.1", "portable-atomic", "thiserror 2.0.21", ] @@ -2124,9 +2197,9 @@ checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" [[package]] name = "libc" -version = "0.2.190" +version = "0.2.191" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" [[package]] name = "libloading" @@ -2153,7 +2226,7 @@ dependencies = [ "bitflags 2.13.2", "libc", "plain", - "redox_syscall 0.9.4", + "redox_syscall 0.9.5", ] [[package]] @@ -2201,9 +2274,9 @@ checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" +checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70" [[package]] name = "lock_api" @@ -2250,11 +2323,11 @@ dependencies = [ [[package]] name = "mac_address" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b367b50a9be9a5d3b5718c1da74e5d6b9c17647f89752ee2562a470cc3c4eb1a" +checksum = "f3d0581a75c45969c63afd2bb87b1d8b25cfcc556c7a918cf9bb13b0fe8d2381" dependencies = [ - "nix 0.30.1", + "nix 0.31.3", "windows-sys 0.61.2", ] @@ -2306,6 +2379,26 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c" +dependencies = [ + "adler2", + "simd-adler32", +] + [[package]] name = "mio" version = "1.2.4" @@ -2347,24 +2440,34 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "naga" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2bf919621e7975acb27d881bae2fb993e0d45c8e0446e85e6272971e00dc8df" +checksum = "a616d2fb8c89516ac2723a581f69d6c18576046bed761bd6b305e5618e6ae130" dependencies = [ "arrayvec", - "bit-set 0.9.1", + "bit-set 0.10.0", "bitflags 2.13.2", "cfg-if", "cfg_aliases", "codespan-reporting", "half", - "hashbrown 0.16.1", - "hexf-parse", + "hashbrown 0.17.1", "indexmap", "libm", "log", + "naga-types", "num-traits", "once_cell", "rustc-hash 1.1.0", @@ -2373,6 +2476,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "naga-types" +version = "30.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590afbf58a6f4f62873cd5cff4468061844bafa1cdf399cc954537c22d768d49" +dependencies = [ + "hashbrown 0.17.1", + "indexmap", + "rustc-hash 1.1.0", + "thiserror 2.0.21", +] + [[package]] name = "ndk" version = "0.9.0" @@ -2415,19 +2530,6 @@ dependencies = [ "libc", ] -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags 2.13.2", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - [[package]] name = "nix" version = "0.31.3" @@ -2438,6 +2540,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "libc", + "memoffset", ] [[package]] @@ -2456,6 +2559,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + [[package]] name = "num-conv" version = "0.2.2" @@ -2507,9 +2619,9 @@ dependencies = [ [[package]] name = "num_threads" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +checksum = "cabcc654086861f9e1bc5115258de62ef92c79b20f4615a1b0cc57c4e82027d4" dependencies = [ "libc", ] @@ -2564,6 +2676,7 @@ dependencies = [ "bitflags 2.13.2", "block2 0.6.2", "objc2 0.6.5", + "objc2-core-graphics", "objc2-foundation 0.3.2", ] @@ -2665,6 +2778,19 @@ dependencies = [ "objc2 0.6.5", ] +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.2", + "dispatch2", + "objc2 0.6.5", + "objc2-core-foundation", + "objc2-io-surface", +] + [[package]] name = "objc2-core-image" version = "0.2.2" @@ -2732,6 +2858,17 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.5", + "objc2-core-foundation", +] + [[package]] name = "objc2-link-presentation" version = "0.2.2" @@ -2790,6 +2927,7 @@ dependencies = [ "bitflags 2.13.2", "objc2 0.6.5", "objc2-core-foundation", + "objc2-core-graphics", "objc2-foundation 0.3.2", "objc2-metal 0.3.2", ] @@ -2913,6 +3051,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "owned_ttf_parser" version = "0.25.1" @@ -3009,9 +3157,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b568374ba38b33a6c627141f891faf16902b08d2db26b8ede1bcb0a15b1919fa" +checksum = "fd47a460a9cbc3b3429c7e22bf0d76653e779319bae45a499ca010c9a990bb23" dependencies = [ "memchr", "psm", @@ -3021,9 +3169,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66e184b924cebaaff20ab2256ca52f12332d528a39aa76553b5d96f92aacf7f" +checksum = "203e46697708f7519ab1608393cf89239cafb46b8e6d08a8ffe359359b11ef44" dependencies = [ "pest", "pest_generator", @@ -3031,26 +3179,37 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a87478d267e4de54a626af9754f2f0f58e927aac6ed0575fe89bc05ad6851694" +checksum = "e84ae6340a458d3d6cfc73cf328cf3cfe90b2484cd0de25eb66aa954615ed4d5" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] name = "pest_meta" -version = "2.9.3" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f986f248b4241ac359b831f6139aaa34e03b08a37b6caf7e201a33f95c869e1" +checksum = "b57f92f32b3dbce6598fd8f5cdf1f06a6072570b8103fa21728fa9036923e710" dependencies = [ "pest", ] +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +dependencies = [ + "fixedbitset 0.5.7", + "hashbrown 0.15.5", + "indexmap", +] + [[package]] name = "phf" version = "0.11.3" @@ -3169,6 +3328,19 @@ dependencies = [ "plotters-backend", ] +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.13.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide 0.8.9", +] + [[package]] name = "polling" version = "3.11.0" @@ -3294,6 +3466,18 @@ dependencies = [ "cc", ] +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + [[package]] name = "quick-xml" version = "0.41.0" @@ -3501,12 +3685,13 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.39.2" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" +checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", "font-types", + "once_cell", ] [[package]] @@ -3529,9 +3714,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "737970939a87c6fa31e7acad13307bccbb017a073b695b6089a2c484f929e20e" +checksum = "580c875845b41ecb1564ad1ae4703044cef774145e3d7a94dc2b3fa7c97868fd" dependencies = [ "bitflags 2.13.2", ] @@ -3671,9 +3856,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "log", "once_cell", @@ -3972,14 +4157,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ "itoa", "memchr", @@ -4092,9 +4277,9 @@ checksum = "33f4fe9184a62d842c9ef383018f3306d8ba224fd9d836f56d7288308847c256" [[package]] name = "skrifa" -version = "0.42.1" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" +checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" dependencies = [ "bytemuck", "read-fonts", @@ -4117,9 +4302,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.16.2" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" +checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b" [[package]] name = "smawk" @@ -4273,9 +4458,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.6" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" dependencies = [ "proc-macro2", "quote", @@ -4290,7 +4475,7 @@ checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -4335,7 +4520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" dependencies = [ "fnv", - "nom", + "nom 7.1.3", "phf", "phf_codegen", ] @@ -4361,7 +4546,7 @@ dependencies = [ "fancy-regex", "filedescriptor", "finl_unicode", - "fixedbitset", + "fixedbitset 0.4.2", "hex", "lazy_static", "libc", @@ -4438,7 +4623,21 @@ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", +] + +[[package]] +name = "tiff" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52" +dependencies = [ + "fax", + "flate2", + "half", + "quick-error", + "weezl", + "zune-jpeg", ] [[package]] @@ -4509,9 +4708,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.53.2" +version = "1.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044" +checksum = "a0c168a474b95bfecfe908a65d4bdffc523144b649a74c09c286afb35d53e0bc" dependencies = [ "pin-project-lite", ] @@ -4617,6 +4816,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "tree_magic_mini" +version = "3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" +dependencies = [ + "memchr", + "nom 8.0.0", + "petgraph", +] + [[package]] name = "ttf-parser" version = "0.25.1" @@ -4634,9 +4844,9 @@ dependencies = [ [[package]] name = "typed-path" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" +checksum = "54ec2755506471f54baf5e4bb5499d8e510cc1caf271270e778a736bd2d7336c" [[package]] name = "typenum" @@ -4658,9 +4868,15 @@ checksum = "0b993bddc193ae5bd0d623b49ec06ac3e9312875fdae725a975c51db1cc1677f" [[package]] name = "unicode-ident" -version = "1.0.26" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "unicode-properties" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" [[package]] name = "unicode-segmentation" @@ -4842,9 +5058,9 @@ dependencies = [ [[package]] name = "ureq-proto" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86fd172ccca569e458f61b6bdd6220965a9ef36e672a6852953b51a0e1583be" +checksum = "841583fc36089d7d59419568ae157f43a5a03a2e5a81ba87c77d1596ef46e922" dependencies = [ "base64 0.23.1", "http", @@ -4884,9 +5100,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.27.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97277d36b9c3ace13e58fa6e753f8b0bbbf302a18dd193240d70f9e29681059a" +checksum = "7cc1186384beb7dd8eedea376413fd654937285ea6c9cfbb928dc3043ea4b606" dependencies = [ "atomic", "getrandom 0.4.3", @@ -4908,14 +5124,13 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "vello_common" -version = "0.0.9" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d672facaa2d697285a786cd9d44d614cd2ce54cdc022504bf339f8fff3b750" +checksum = "bbb2141a2bca6e6d598e471fd4d1d7eed8e020aad6a28187edda07f091a325dd" dependencies = [ "bytemuck", "fearless_simd", "guillotiere", - "hashbrown 0.17.1", "log", "peniko", "smallvec", @@ -4924,9 +5139,9 @@ dependencies = [ [[package]] name = "vello_cpu" -version = "0.0.9" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588691169aed86b5c8fb487266afee01323234e6fd0a3f2aaec0eaa8e4007f23" +checksum = "ace506ca414548966fcf3c283be94eb1cad8254de488791ee698bf438b0890a9" dependencies = [ "bytemuck", "glifo", @@ -5017,7 +5232,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "wasm-bindgen-shared", ] @@ -5177,9 +5392,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +checksum = "1c1c8e20c8a38fc7d65abfe74eb7280e4aa667e8eec8bc84996d2874810748d9" dependencies = [ "rustls-pki-types", ] @@ -5190,9 +5405,15 @@ version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e" dependencies = [ - "nom", + "nom 7.1.3", ] +[[package]] +name = "weezl" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" + [[package]] name = "wezterm-bidi" version = "0.2.3" @@ -5267,9 +5488,9 @@ dependencies = [ [[package]] name = "wgpu" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e8840e1ba2881d4cbb18d2147627a56af426ff064c0401eb0c8410c6325d07" +checksum = "527ccdf43dd5b2e8676eed9984ce00e2bbb0a1b85b70c1969dcb6cd2eb55ab9e" dependencies = [ "arrayvec", "bitflags 2.13.2", @@ -5277,7 +5498,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "js-sys", "log", "naga", @@ -5297,21 +5518,22 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f519832254e56965a9940c4af57dcb75f702b6f6fa4a0b172f685395843a4d7" +checksum = "14c018fce9b6270aa203c2fdd56f3cce996713534bd757e4ea58c8560b121f14" dependencies = [ "arrayvec", - "bit-set 0.9.1", + "bit-set 0.10.0", "bit-vec 0.9.1", "bitflags 2.13.2", "bytemuck", "cfg_aliases", "document-features", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "indexmap", "log", "naga", + "naga-types", "once_cell", "parking_lot", "portable-atomic", @@ -5331,50 +5553,50 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5e39e26c4c0e07589e67d18546cf79ff45383659fc72fca4dd293358a0347f3" +checksum = "061f3d319a40d39d00b1ecc2c33b89fe21d4e6fe01859df3500a3a8ecccd6b68" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-emscripten" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e09be551dc939498bdd5f6b2c66e55ab275dad25825267a08605a80fc9f0af" +checksum = "d98b86cf4abf524a902dd35f18ca6a3f08fc2ae9847c8f10b48e30491b1f0b86" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-wasm" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1fb1798be2a912497d4c224f72d39bb0cb34af50e8bcc29865bc339c943059" +checksum = "d260ca2ca8adc654f513a869bf3cac0b47f5b8d3f87803d6942015f8de597aae" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-core-deps-windows-linux-android" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e592c1bbef6ad047647ae6e666ebd8cee7a32bb4544d9700ec96cbf73230257" +checksum = "7586165fd5f6d881cb9ce4bb71f40d6caab2c0f1837e3fc1d9788a197fb6004f" dependencies = [ "wgpu-hal", ] [[package]] name = "wgpu-hal" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ace1c17727311c22a46e4e3faf56ea6de81af99dcc839bdfb54857b94d448d" +checksum = "b6b7fb58561a792bc237628ba0792e332de418fefe145f13b5ed8201e6d52f58" dependencies = [ "android_system_properties", "arrayvec", "ash", - "bit-set 0.9.1", + "bit-set 0.10.0", "bitflags 2.13.2", "block2 0.6.2", "bytemuck", @@ -5383,17 +5605,18 @@ dependencies = [ "glow", "glutin_wgl_sys", "gpu-allocator", - "gpu-descriptor", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "js-sys", "khronos-egl", "libc", "libloading", "log", "naga", + "naga-types", "ndk-sys", "objc2 0.6.5", "objc2-core-foundation", + "objc2-core-graphics", "objc2-foundation 0.3.2", "objc2-metal 0.3.2", "objc2-quartz-core 0.3.2", @@ -5408,6 +5631,7 @@ dependencies = [ "raw-window-metal", "renderdoc-sys", "smallvec", + "static_assertions", "thiserror 2.0.21", "wasm-bindgen", "wayland-sys", @@ -5421,9 +5645,9 @@ dependencies = [ [[package]] name = "wgpu-naga-bridge" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95226013f547544b223281cd16a4fb549aa9dcb562adbda0faae4c73ffbbc161" +checksum = "d2f62e73117bb7a62bfd9c5a5841438a823f6566c6442a808ee269d2d055c081" dependencies = [ "naga", "wgpu-types", @@ -5431,15 +5655,17 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "29.0.4" +version = "30.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84bf84cd9ca8ca45e2b223a3868f1adf9bfc0c66aeac212e76ee7e40fdadf8f5" +checksum = "99dad6f1fbdbbdb4c278a6508b059d44688f5cebddf78d005a46a31340269286" dependencies = [ "bitflags 2.13.2", "bytemuck", "js-sys", "log", + "naga-types", "raw-window-handle", + "static_assertions", "web-sys", ] @@ -5751,6 +5977,24 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +[[package]] +name = "wl-clipboard-rs" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d7888ccd4896447b2d14d3a9350a85df2aeb6f181e2e7a31349d104ac46cac1" +dependencies = [ + "libc", + "log", + "os_pipe", + "rustix 1.1.5", + "thiserror 2.0.21", + "tree_magic_mini", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-wlr", +] + [[package]] name = "writeable" version = "0.6.4" @@ -5839,24 +6083,24 @@ checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.62" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86502bf56ac7c77571a32e2647bb2a15894565e981fb2a48d7bde2d91c965a9d" +checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.62" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5457206954b06561e2608c7e19cf58b1926586d999c246eebe4502f7e2039d1a" +checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f" dependencies = [ "proc-macro2", "quote", @@ -5880,7 +6124,7 @@ checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "synstructure", ] @@ -5920,19 +6164,20 @@ checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] name = "zip" -version = "8.6.0" +version = "9.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" +checksum = "6e04976da629d3b04204ba8105b396a193af8ad2583b2c79bfb3ab8af580a11e" dependencies = [ "crc32fast", "flate2", "indexmap", "memchr", + "nix 0.31.3", "typed-path", "zopfli", ] @@ -5951,12 +6196,27 @@ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zopfli" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" +checksum = "aaf7fc5d30c28483d93805c4a5e12b05bbb52407fa67c5f8bd552374cd01fb11" dependencies = [ "bumpalo", "crc32fast", "log", "simd-adler32", ] + +[[package]] +name = "zune-core" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" + +[[package]] +name = "zune-jpeg" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" +dependencies = [ + "zune-core", +] diff --git a/Cargo.toml b/Cargo.toml index 480f672..6e3a86d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ members = [ [workspace.package] version = "2.13.0" edition = "2024" -rust-version = "1.96" +rust-version = "1.99" license = "MIT OR Apache-2.0" authors = ["DoubleGate "] repository = "https://github.com/doublegate/Rusty2600" diff --git a/README.md b/README.md index 983b3cf..8774aef 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Build Status License: MIT OR Apache-2.0 Version - Rust: 1.96 + Rust: 1.99
Accuracy battery SingleStepTests diff --git a/crates/rusty2600-cheevos/src/lib.rs b/crates/rusty2600-cheevos/src/lib.rs index d484583..cfe60fd 100644 --- a/crates/rusty2600-cheevos/src/lib.rs +++ b/crates/rusty2600-cheevos/src/lib.rs @@ -90,8 +90,8 @@ mod smoke { ); // With no game loaded these are empty/zero but must not crash. - assert!(client.achievement_list().is_empty()); - assert!(client.leaderboard_list().is_empty()); + assert_eq!(client.achievement_list().as_slice(), &[]); + assert_eq!(client.leaderboard_list().as_slice(), &[]); assert_eq!(client.user_game_summary(), RaGameSummary::default()); assert!(client.user_info().is_none()); let _ = client.rich_presence(); diff --git a/crates/rusty2600-frontend/Cargo.toml b/crates/rusty2600-frontend/Cargo.toml index 365742f..c42b663 100644 --- a/crates/rusty2600-frontend/Cargo.toml +++ b/crates/rusty2600-frontend/Cargo.toml @@ -156,11 +156,11 @@ winit = "0.30" # per-crate feature unification across the whole dependency graph, regardless of what this # `Cargo.toml` requests. See the wasm32 `[target...]` block's comment for the full investigation # and its honest, unresolved conclusion. -wgpu = { version = "29", default-features = false, features = ["wgsl", "std"] } +wgpu = { version = "30", default-features = false, features = ["wgsl", "std"] } cpal = "0.18" -egui = "0.35" -egui-wgpu = "0.35" -egui-winit = { version = "0.35", default-features = false, features = ["links", "wayland", "x11"] } +egui = { version = "0.37", features = ["monochrome_emoji_fonts"] } +egui-wgpu = "0.37" +egui-winit = { version = "0.37", default-features = false, features = ["links", "wayland", "x11"] } thiserror = "2.0" log = "0.4" serde = { version = "1.0", features = ["derive"] } @@ -175,7 +175,7 @@ toml = "1.1" # bzip2/lzma/zstd/xz/aes-crypto (unneeded codecs/encryption that would only # bloat the native binary and the wasm bundle for no benefit — ROM zips are # plain Deflate or Store). -zip = { version = "8", default-features = false, features = ["deflate"] } +zip = { version = "9", default-features = false, features = ["deflate"] } # Already transitive deps of wgpu; direct here is free. pollster = "1.0" @@ -191,7 +191,7 @@ rfd = "0.17" directories = "6" # Real native GPU backends (unrelated to wasm32's `webgl`-only block below) — `parking_lot` is # wgpu's own default runtime-locking impl, not on by the bare `["wgsl", "std"]` base above. -wgpu = { version = "29", features = ["dx12", "metal", "vulkan", "gles", "parking_lot"] } +wgpu = { version = "30", features = ["dx12", "metal", "vulkan", "gles", "parking_lot"] } # clap 4 styled `--help` + `help ` + shell completions (unconditional); # the interactive ratatui TUI browser is behind the default-on `help-tui` feature. clap = { version = "4", features = ["derive", "color", "cargo"] } @@ -226,12 +226,12 @@ mlua = { version = "0.12", features = ["lua54", "vendored"], optional = true } # sandbox has none) — real end users likely fare better (real WebGPU support, or a real # hardware-accelerated GL backend, neither available here), but this is honestly NOT confirmed # working end-to-end. See `docs/frontend.md`'s wasm-winit status section. -wgpu = { version = "29", features = ["webgl"] } -wasm-bindgen = "0.2.126" -wasm-bindgen-futures = "0.4.50" +wgpu = { version = "30", features = ["webgl"] } +wasm-bindgen = "0.2.129" +wasm-bindgen-futures = "0.4.79" console_error_panic_hook = "0.1.7" -js-sys = "0.3.77" -web-sys = { version = "0.3.77", features = [ +js-sys = "0.3.106" +web-sys = { version = "0.3.106", features = [ "Document", "Window", "Element", "HtmlElement", "HtmlCanvasElement", "Event", "EventTarget", "KeyboardEvent", "HtmlInputElement", "FileReader", "FileList", "File", @@ -246,7 +246,7 @@ web-sys = { version = "0.3.77", features = [ [dev-dependencies] # Validate the embedded WGSL at test time with the same naga wgpu uses at run # time, so a shader error fails CI instead of aborting the app. -naga = { version = "29", features = ["wgsl-in"] } +naga = { version = "30", features = ["wgsl-in"] } [lints] workspace = true diff --git a/crates/rusty2600-frontend/examples/dump_frame.rs b/crates/rusty2600-frontend/examples/dump_frame.rs index 397f515..ea4f958 100644 --- a/crates/rusty2600-frontend/examples/dump_frame.rs +++ b/crates/rusty2600-frontend/examples/dump_frame.rs @@ -32,7 +32,7 @@ fn write_ppm(path: &str, w: u32, h: u32, rgba: &[u8]) { let mut f = fs::File::create(path).expect("create ppm"); write!(f, "P6\n{w} {h}\n255\n").unwrap(); let mut rgb = Vec::with_capacity((w * h * 3) as usize); - for px in rgba.chunks_exact(4) { + for px in rgba.as_chunks::<4>().0 { rgb.extend_from_slice(&px[0..3]); } f.write_all(&rgb).unwrap(); diff --git a/crates/rusty2600-frontend/src/app.rs b/crates/rusty2600-frontend/src/app.rs index b2ab548..e64ec53 100644 --- a/crates/rusty2600-frontend/src/app.rs +++ b/crates/rusty2600-frontend/src/app.rs @@ -1043,10 +1043,16 @@ impl App { size_in_pixels: [active.gfx.config.width, active.gfx.config.height], pixels_per_point: full_output.pixels_per_point, }; - for (id, delta) in &full_output.textures_delta.set { - active - .egui_renderer - .update_texture(&active.gfx.device, &active.gfx.queue, *id, delta); + let mut textures_delta = full_output.textures_delta; + for (id, deltas) in std::mem::take(&mut textures_delta.set) { + for delta in &deltas { + active.egui_renderer.update_texture( + &active.gfx.device, + &active.gfx.queue, + id, + delta, + ); + } } active.egui_renderer.update_buffers( &active.gfx.device, @@ -1076,13 +1082,13 @@ impl App { .forget_lifetime(); active.egui_renderer.render(&mut pass, &tris, &screen); } - for id in &full_output.textures_delta.free { - active.egui_renderer.free_texture(id); + for id in std::mem::take(&mut textures_delta.free) { + active.egui_renderer.free_texture(&id); } // --- (5) Submit + present. --- active.gfx.queue.submit(Some(encoder.finish())); - frame.present(); + active.gfx.queue.present(frame); actions } @@ -1710,7 +1716,7 @@ fn draw_script_overlay( let painter = ctx.layer_painter(egui::LayerId::new( egui::Order::Foreground, - egui::Id::new("rusty2600_script_overlay"), + egui::Id::unique("rusty2600_script_overlay"), )); for r in &overlay.rects { @@ -1881,6 +1887,7 @@ mod tests { has_text, "expected the drawText primitive to produce a text shape" ); + full_output.drop_without_applying_deltas(); } #[test] @@ -1894,6 +1901,7 @@ mod tests { full_output.shapes.is_empty(), "an empty Overlay must not add any shapes to the paint list" ); + full_output.drop_without_applying_deltas(); } } } diff --git a/crates/rusty2600-frontend/src/debugger/callstack.rs b/crates/rusty2600-frontend/src/debugger/callstack.rs index 7f5f983..38d66c1 100644 --- a/crates/rusty2600-frontend/src/debugger/callstack.rs +++ b/crates/rusty2600-frontend/src/debugger/callstack.rs @@ -58,14 +58,14 @@ mod tests { fn rts_pops_the_stack() { let mut stack = vec![0xF003]; track_instruction(&mut stack, RTS, 0xF010); - assert!(stack.is_empty()); + assert_eq!(stack, [0u16; 0]); } #[test] fn rts_with_empty_stack_does_not_panic() { let mut stack = Vec::new(); track_instruction(&mut stack, RTS, 0xF010); - assert!(stack.is_empty()); + assert_eq!(stack, [0u16; 0]); } #[test] diff --git a/crates/rusty2600-frontend/src/debugger/memory_compare_panel.rs b/crates/rusty2600-frontend/src/debugger/memory_compare_panel.rs index f141266..d1b7935 100644 --- a/crates/rusty2600-frontend/src/debugger/memory_compare_panel.rs +++ b/crates/rusty2600-frontend/src/debugger/memory_compare_panel.rs @@ -94,7 +94,7 @@ mod tests { #[test] fn identical_slices_diff_to_nothing() { let a = [1, 2, 3]; - assert!(diff(&a, &a).is_empty()); + assert_eq!(diff(&a, &a).as_slice(), &[]); } #[test] diff --git a/crates/rusty2600-frontend/src/emu_thread.rs b/crates/rusty2600-frontend/src/emu_thread.rs index 9d3f05e..88799f6 100644 --- a/crates/rusty2600-frontend/src/emu_thread.rs +++ b/crates/rusty2600-frontend/src/emu_thread.rs @@ -383,6 +383,7 @@ impl EmuCore { // 1-pole high-pass DC blocker: removes the massive -1.0 offset // during TIA silence (s = 0). let r = 0.995; + #[allow(clippy::suboptimal_flops)] let y = normalized - self.dc_blocker_x + r * self.dc_blocker_y; self.dc_blocker_x = normalized; self.dc_blocker_y = y; @@ -489,6 +490,7 @@ impl EmuCore { for s in samples { let normalized = (s as f32 / 15.0) - 1.0; let r = 0.995; + #[allow(clippy::suboptimal_flops)] let y = normalized - self.dc_blocker_x + r * self.dc_blocker_y; self.dc_blocker_x = normalized; self.dc_blocker_y = y; @@ -634,6 +636,7 @@ impl EmuCore { // DC blocker (1-pole high-pass filter) to remove the massive -1.0 DC offset // when TIA outputs silence (s = 0), preventing audio hums or clicks. let r = 0.995; + #[allow(clippy::suboptimal_flops)] let y = normalized - self.dc_blocker_x + r * self.dc_blocker_y; self.dc_blocker_x = normalized; self.dc_blocker_y = y; diff --git a/crates/rusty2600-frontend/src/gfx.rs b/crates/rusty2600-frontend/src/gfx.rs index 5e0fc9f..1085e9c 100644 --- a/crates/rusty2600-frontend/src/gfx.rs +++ b/crates/rusty2600-frontend/src/gfx.rs @@ -134,6 +134,7 @@ impl Gfx { power_preference: wgpu::PowerPreference::default(), force_fallback_adapter: false, compatible_surface: Some(&surface), + apply_limit_buckets: false, }) .await { @@ -143,6 +144,7 @@ impl Gfx { power_preference: wgpu::PowerPreference::default(), force_fallback_adapter: true, compatible_surface: Some(&surface), + apply_limit_buckets: false, }) .await .map_err(|e| GfxError::Adapter(e.to_string()))?, @@ -188,6 +190,7 @@ impl Gfx { desired_maximum_frame_latency: 2, alpha_mode, view_formats: vec![], + color_space: wgpu::SurfaceColorSpace::Auto, }; surface.configure(&device, &config); @@ -420,7 +423,7 @@ impl Gfx { /// Acquire the next surface texture for the frame, or `None` if the surface is lost (the /// caller reconfigures and retries next frame). /// - /// wgpu 29 returns the [`wgpu::CurrentSurfaceTexture`] enum (not a `Result`): use the texture + /// wgpu 29+ returns the [`wgpu::CurrentSurfaceTexture`] enum (not a `Result`): use the texture /// on `Success`/`Suboptimal`, reconfigure on `Lost`/`Outdated`, skip otherwise. pub fn acquire(&mut self) -> Option { match self.surface.get_current_texture() { diff --git a/crates/rusty2600-frontend/src/input.rs b/crates/rusty2600-frontend/src/input.rs index d2861b7..55dc9b6 100644 --- a/crates/rusty2600-frontend/src/input.rs +++ b/crates/rusty2600-frontend/src/input.rs @@ -477,7 +477,7 @@ mod tests { vec![(InputAction::JoyUp(0), true)] ); // Held another frame: no new edge (still down, nothing changed). - assert!(overlay.update(&[TouchButton::JoyUp]).is_empty()); + assert_eq!(overlay.update(&[TouchButton::JoyUp]).as_slice(), &[]); assert_eq!(overlay.update(&[]), vec![(InputAction::JoyUp(0), false)]); } @@ -489,10 +489,10 @@ mod tests { vec![(InputAction::SwitchColor, true)] ); // Held across several more frames: must not re-toggle. - assert!(overlay.update(&[TouchButton::Color]).is_empty()); - assert!(overlay.update(&[TouchButton::Color]).is_empty()); + assert_eq!(overlay.update(&[TouchButton::Color]).as_slice(), &[]); + assert_eq!(overlay.update(&[TouchButton::Color]).as_slice(), &[]); // Release produces no momentary-release edge for a latch. - assert!(overlay.update(&[]).is_empty()); + assert_eq!(overlay.update(&[]).as_slice(), &[]); // A fresh press fires exactly one more toggle. assert_eq!( overlay.update(&[TouchButton::Color]), @@ -516,7 +516,7 @@ mod tests { #[test] fn touch_default_overlay_state_starts_with_nothing_held() { let mut overlay = TouchOverlayState::default(); - assert!(overlay.update(&[]).is_empty()); + assert_eq!(overlay.update(&[]).as_slice(), &[]); } #[test] diff --git a/crates/rusty2600-frontend/src/rom_archive.rs b/crates/rusty2600-frontend/src/rom_archive.rs index e3dda37..4475134 100644 --- a/crates/rusty2600-frontend/src/rom_archive.rs +++ b/crates/rusty2600-frontend/src/rom_archive.rs @@ -102,10 +102,13 @@ pub fn extract_first_rom(bytes: &[u8]) -> Result<(Vec, String), RomArchiveEr if entry.is_dir() { continue; } - let name = entry.name().to_string(); - if !ROM_EXTENSIONS.contains(&extension_of(&name).as_str()) { + let Ok(name) = entry.name() else { + continue; + }; + if !ROM_EXTENSIONS.contains(&extension_of(name.as_ref()).as_str()) { continue; } + let name = name.into_owned(); // The entry's own declared size, used only as a pre-allocation hint // below — captured BEFORE the mutable `by_ref()` borrow, and capped diff --git a/crates/rusty2600-frontend/src/shell.rs b/crates/rusty2600-frontend/src/shell.rs index cdde591..f8ed0fe 100644 --- a/crates/rusty2600-frontend/src/shell.rs +++ b/crates/rusty2600-frontend/src/shell.rs @@ -453,7 +453,7 @@ impl ShellState { /// and collect any requested [`MenuAction`]s. Returns the actions for the app to dispatch AFTER /// this pass — this function NEVER touches the emulator. /// - /// Uses the egui 0.35 panel API: the caller passes the root `Ui` from `Context::run_ui`, into + /// Uses the egui 0.35+ panel API: the caller passes the root `Ui` from `Context::run_ui`, into /// which the top/bottom panels are nested with `Panel::show` (egui 0.34's `show_inside` was /// renamed `show` in 0.35; this crate's own `.show_inside()` call sites were updated to match). // One straight-line immediate-mode egui pass (menu bar + status bar + windows); the line count @@ -921,7 +921,7 @@ impl ShellState { let mut held: Vec = Vec::new(); let dpad_btn = egui::vec2(48.0, 40.0); - egui::Area::new(egui::Id::new("rusty2600_touch_dpad")) + egui::Area::new(egui::Id::unique("rusty2600_touch_dpad")) .anchor(egui::Align2::LEFT_BOTTOM, egui::vec2(16.0, -16.0)) .movable(false) .show(ctx, |ui| { @@ -942,7 +942,7 @@ impl ShellState { }); }); - egui::Area::new(egui::Id::new("rusty2600_touch_fire")) + egui::Area::new(egui::Id::unique("rusty2600_touch_fire")) .anchor(egui::Align2::RIGHT_BOTTOM, egui::vec2(-16.0, -16.0)) .movable(false) .show(ctx, |ui| { @@ -955,7 +955,7 @@ impl ShellState { ); }); - egui::Area::new(egui::Id::new("rusty2600_touch_switches")) + egui::Area::new(egui::Id::unique("rusty2600_touch_switches")) .anchor(egui::Align2::CENTER_TOP, egui::vec2(0.0, 28.0)) .movable(false) .show(ctx, |ui| { diff --git a/crates/rusty2600-frontend/src/wasm.rs b/crates/rusty2600-frontend/src/wasm.rs index 86328c1..f0aee3c 100644 --- a/crates/rusty2600-frontend/src/wasm.rs +++ b/crates/rusty2600-frontend/src/wasm.rs @@ -31,7 +31,7 @@ use rusty2600_core::System; use wasm_bindgen::JsCast; use wasm_bindgen::prelude::*; #[cfg(feature = "wasm-canvas")] -#[allow(unused_imports)] +#[allow(unused_imports, clippy::wildcard_imports)] use web_sys::*; /// The `#[wasm_bindgen(start)]` entry point. @@ -50,6 +50,9 @@ pub fn start() -> Result<(), JsValue> { } /// See the `wasm-winit` `start()` above — this is the `wasm-canvas`-only variant. +/// +/// # Errors +/// Propagates [`run_canvas`]'s error if the DOM or canvas context cannot be initialized. #[cfg(all(feature = "wasm-canvas", not(feature = "wasm-winit")))] #[wasm_bindgen(start)] pub fn start() -> Result<(), JsValue> { @@ -423,9 +426,12 @@ fn start_raf_loop(canvas: &HtmlCanvasElement) -> Result<(), JsValue> { let rgb = crate::palette::Region::Ntsc.table()[(color_idx >> 1) as usize]; let off = (y * ATARI_W as usize + x) * 4; if off + 3 < framebuffer.len() { - framebuffer[off] = (rgb >> 16) as u8; - framebuffer[off + 1] = (rgb >> 8) as u8; - framebuffer[off + 2] = rgb as u8; + #[allow(clippy::cast_possible_truncation)] + { + framebuffer[off] = (rgb >> 16) as u8; + framebuffer[off + 1] = (rgb >> 8) as u8; + framebuffer[off + 2] = rgb as u8; + } framebuffer[off + 3] = 255; } } @@ -440,6 +446,7 @@ fn start_raf_loop(canvas: &HtmlCanvasElement) -> Result<(), JsValue> { for s in samples { let normalized = (f32::from(s) / 15.0) - 1.0; let r = 0.995; + #[allow(clippy::suboptimal_flops)] let y = normalized - dc_x + r * dc_y; dc_x = normalized; dc_y = y; diff --git a/crates/rusty2600-frontend/tests/hd_pack_splice.rs b/crates/rusty2600-frontend/tests/hd_pack_splice.rs index c287421..bb93a72 100644 --- a/crates/rusty2600-frontend/tests/hd_pack_splice.rs +++ b/crates/rusty2600-frontend/tests/hd_pack_splice.rs @@ -94,7 +94,12 @@ fn hd_pack_splice_replaces_player0_footprint_with_replacement_bitmap() { emu.step_frame(&tx, None); let spliced = rx.take().expect("frame published"); - let spliced_has_magenta = spliced.pixels.chunks_exact(4).any(|p| p == MAGENTA); + let spliced_has_magenta = spliced + .pixels + .as_chunks::<4>() + .0 + .iter() + .any(|p| p == &MAGENTA); assert!( spliced_has_magenta, "expected the HD-pack replacement magenta pixel to appear in player 0's footprint" @@ -111,7 +116,12 @@ fn hd_pack_splice_replaces_player0_footprint_with_replacement_bitmap() { control.step_frame(&ctrl_tx, None); let unspliced = ctrl_rx.take().expect("control frame published"); - let control_has_magenta = unspliced.pixels.chunks_exact(4).any(|p| p == MAGENTA); + let control_has_magenta = unspliced + .pixels + .as_chunks::<4>() + .0 + .iter() + .any(|p| p == &MAGENTA); assert!( !control_has_magenta, "the placeholder magenta must never appear without the HD-pack splice active" diff --git a/crates/rusty2600-mobile/src/lib.rs b/crates/rusty2600-mobile/src/lib.rs index c769239..4969201 100644 --- a/crates/rusty2600-mobile/src/lib.rs +++ b/crates/rusty2600-mobile/src/lib.rs @@ -179,6 +179,7 @@ struct DcBlocker { } impl DcBlocker { + #[allow(clippy::suboptimal_flops)] fn process(&mut self, raw_samples: Vec) -> Vec { let mut out = Vec::with_capacity(raw_samples.len()); for s in raw_samples { diff --git a/crates/rusty2600-netplay/Cargo.toml b/crates/rusty2600-netplay/Cargo.toml index 35a9782..784a925 100644 --- a/crates/rusty2600-netplay/Cargo.toml +++ b/crates/rusty2600-netplay/Cargo.toml @@ -52,16 +52,16 @@ bincode = "1.3" # (avoids a resolver-driven version drift between the two crates' wasm # builds). [target.'cfg(target_arch = "wasm32")'.dependencies] -wasm-bindgen = "0.2.126" -wasm-bindgen-futures = "0.4.50" -js-sys = "0.3.77" +wasm-bindgen = "0.2.129" +wasm-bindgen-futures = "0.4.79" +js-sys = "0.3.106" # `ggrs` -> `rand` -> `getrandom` 0.2 needs its `js` feature explicitly # enabled to build for wasm32 at all (a transitive dependency, not # something this crate calls directly — `getrandom` refuses to compile for # `wasm32-unknown-unknown` without it, a well-known requirement for any # crate pulling `rand`/`getrandom` 0.2.x onto this target). getrandom = { version = "0.2", features = ["js"] } -web-sys = { version = "0.3.77", features = [ +web-sys = { version = "0.3.106", features = [ "RtcPeerConnection", "RtcConfiguration", "RtcIceServer", "RtcSessionDescriptionInit", "RtcSdpType", "RtcSessionDescription", "RtcDataChannel", "RtcDataChannelInit", "RtcDataChannelType", diff --git a/crates/rusty2600-script/src/engine.rs b/crates/rusty2600-script/src/engine.rs index cdc9457..9197f71 100644 --- a/crates/rusty2600-script/src/engine.rs +++ b/crates/rusty2600-script/src/engine.rs @@ -520,7 +520,7 @@ mod tests { .load(r#"emu.setJoystick(0, "up", true)"#) .unwrap_err(); assert!(err.to_string().contains("locked")); - assert!(engine.bus().borrow().joystick_log.is_empty()); + assert_eq!(engine.bus().borrow().joystick_log.as_slice(), &[]); } #[test] diff --git a/docs/frontend.md b/docs/frontend.md index 2a13cd4..574d8f6 100644 --- a/docs/frontend.md +++ b/docs/frontend.md @@ -440,7 +440,7 @@ see its module doc and `Cargo.toml`'s `[features]` doc comment): executes and logs correctly — but the `Gfx::new_async` adapter-request step could NOT be verified rendering an actual frame in this sandbox: the available headless-Chromium-with-SwiftShader environment has no - `navigator.gpu` (no real WebGPU) and, in this specific setup, wgpu 29's + `navigator.gpu` (no real WebGPU) and, in this specific setup, wgpu 29/30's adapter request also failed to fall back to the compiled-in GL/WebGL2 backend (`wgpu-hal`'s `gles` feature, confirmed present via `cargo tree -e features`) — see `Cargo.toml`'s wasm32 `wgpu` dependency comment for the diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 17b46bc..e8dcb3d 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.96" +channel = "1.99" components = ["rustfmt", "clippy"] targets = ["wasm32-unknown-unknown", "thumbv7em-none-eabihf"]