diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 6b4ee383f2..bddfffaf1f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -23,7 +23,6 @@ "streetsidesoftware.code-spell-checker", // Helpful "mhutchie.git-graph", - "waderyan.gitblame", "qezhu.gitlink", "wmaurer.change-case" ] diff --git a/.github/workflows/comment-profiling-changes.yaml b/.github/workflows/comment-profiling-changes.yaml index e51341538c..4fe552cf12 100644 --- a/.github/workflows/comment-profiling-changes.yaml +++ b/.github/workflows/comment-profiling-changes.yaml @@ -1,7 +1,7 @@ name: Profiling Changes on: - pull_request: + pull_request: {} env: CARGO_TERM_COLOR: always @@ -9,6 +9,7 @@ env: jobs: profile: runs-on: ubuntu-latest + continue-on-error: true steps: - uses: actions/checkout@v4 with: @@ -33,12 +34,12 @@ jobs: uses: actions/cache@v4 with: path: ~/.cargo/bin/iai-callgrind-runner - key: ${{ runner.os }}-iai-callgrind-runner-0.12.3 + key: ${{ runner.os }}-iai-callgrind-runner-0.16.1 - name: Install iai-callgrind if: steps.cache-iai.outputs.cache-hit != 'true' run: | - cargo install iai-callgrind-runner@0.12.3 + cargo install iai-callgrind-runner@0.16.1 - name: Checkout master branch run: | @@ -63,7 +64,7 @@ jobs: run: | # Compile benchmarks cargo bench --bench compile_demo_art_iai -- --save-baseline=master - + # Runtime benchmarks cargo bench --bench update_executor_iai -- --save-baseline=master cargo bench --bench run_once_iai -- --save-baseline=master @@ -74,32 +75,14 @@ jobs: git checkout ${{ github.event.pull_request.head.sha }} - name: Run PR benchmarks - id: benchmark run: | # Compile benchmarks - COMPILE_OUTPUT=$(cargo bench --bench compile_demo_art_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') - - # Runtime benchmarks - UPDATE_OUTPUT=$(cargo bench --bench update_executor_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') - RUN_ONCE_OUTPUT=$(cargo bench --bench run_once_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') - RUN_CACHED_OUTPUT=$(cargo bench --bench run_cached_iai -- --baseline=master --output-format=json | jq -sc | sed 's/\\"//g') - - # Store outputs - echo "COMPILE_OUTPUT<> $GITHUB_OUTPUT - echo "$COMPILE_OUTPUT" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - echo "UPDATE_OUTPUT<> $GITHUB_OUTPUT - echo "$UPDATE_OUTPUT" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - echo "RUN_ONCE_OUTPUT<> $GITHUB_OUTPUT - echo "$RUN_ONCE_OUTPUT" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - echo "RUN_CACHED_OUTPUT<> $GITHUB_OUTPUT - echo "$RUN_CACHED_OUTPUT" >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT + cargo bench --bench compile_demo_art_iai -- --baseline=master --output-format=json | jq -sc > /tmp/compile_output.json + + # Runtime benchmarks + cargo bench --bench update_executor_iai -- --baseline=master --output-format=json | jq -sc > /tmp/update_output.json + cargo bench --bench run_once_iai -- --baseline=master --output-format=json | jq -sc > /tmp/run_once_output.json + cargo bench --bench run_cached_iai -- --baseline=master --output-format=json | jq -sc > /tmp/run_cached_output.json - name: Make old comments collapsed by default uses: actions/github-script@v7 @@ -131,11 +114,13 @@ jobs: with: github-token: ${{secrets.GITHUB_TOKEN}} script: | - const compileOutput = JSON.parse(`${{ steps.benchmark.outputs.COMPILE_OUTPUT }}`); - const updateOutput = JSON.parse(`${{ steps.benchmark.outputs.UPDATE_OUTPUT }}`); - const runOnceOutput = JSON.parse(`${{ steps.benchmark.outputs.RUN_ONCE_OUTPUT }}`); - const runCachedOutput = JSON.parse(`${{ steps.benchmark.outputs.RUN_CACHED_OUTPUT }}`); - + const fs = require('fs'); + + const compileOutput = JSON.parse(fs.readFileSync('/tmp/compile_output.json', 'utf8')); + const updateOutput = JSON.parse(fs.readFileSync('/tmp/update_output.json', 'utf8')); + const runOnceOutput = JSON.parse(fs.readFileSync('/tmp/run_once_output.json', 'utf8')); + const runCachedOutput = JSON.parse(fs.readFileSync('/tmp/run_cached_output.json', 'utf8')); + let significantChanges = false; let commentBody = ""; diff --git a/.vscode/extensions.json b/.vscode/extensions.json index e37a0efd11..25148f729c 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -13,7 +13,6 @@ "streetsidesoftware.code-spell-checker", // Helpful "mhutchie.git-graph", - "waderyan.gitblame", "qezhu.gitlink", "wmaurer.change-case" ] diff --git a/Cargo.lock b/Cargo.lock index 37c248252d..97edb1e0c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -637,6 +637,75 @@ dependencies = [ "wayland-client", ] +[[package]] +name = "camino" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-gpu" +version = "0.1.0" +source = "git+https://github.com/rust-gpu/cargo-gpu?rev=f969528e87baa17a7d48eecf4a6fcfdcaaf30566#f969528e87baa17a7d48eecf4a6fcfdcaaf30566" +dependencies = [ + "anyhow", + "cargo_metadata", + "clap", + "crossterm", + "directories", + "env_logger", + "log", + "relative-path", + "rustc_codegen_spirv-target-specs 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "semver", + "serde", + "serde_json", + "spirv-builder", +] + +[[package]] +name = "cargo-platform" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84982c6c0ae343635a3a4ee6dedef965513735c8b183caa7289fa6e27399ebd4" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-util-schemas" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dc1a6f7b5651af85774ae5a34b4e8be397d9cf4bc063b7e6dbd99a841837830" +dependencies = [ + "semver", + "serde", + "serde-untagged", + "serde-value", + "thiserror 2.0.16", + "toml", + "unicode-xid", + "url", +] + +[[package]] +name = "cargo_metadata" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cfca2aaa699835ba88faf58a06342a314a950d2b9686165e038286c30316868" +dependencies = [ + "camino", + "cargo-platform", + "cargo-util-schemas", + "semver", + "serde", + "serde_json", + "thiserror 2.0.16", +] + [[package]] name = "cast" version = "0.3.0" @@ -656,9 +725,9 @@ dependencies = [ [[package]] name = "cef" -version = "139.6.0+139.0.37" +version = "139.0.1+139.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92479592f7519e5843f711b07aa2194021259a5e8301ddc1ce1ac2bee5cf1575" +checksum = "39b749cfc4124f9505b3fbe32279c0e93f30831f1ecf3c2cf85863179319cd7b" dependencies = [ "cef-dll-sys", "libloading", @@ -667,9 +736,9 @@ dependencies = [ [[package]] name = "cef-dll-sys" -version = "139.6.0+139.0.37" +version = "139.0.1+139.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de4c379eb16bafc1fe3f40f9635827d2c5dcef44bb703245ce08c2086dfaa0f3" +checksum = "fc42adb0adc477860b705e967d9f899be05ba3775fe4d6dc4d844a1391ffa3dd" dependencies = [ "anyhow", "cmake", @@ -866,6 +935,15 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "convert_case" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb402b8d4c85569410425650ce3eddc7d698ed96d39a73f941b08fb63082f1e7" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "convert_case" version = "0.8.0" @@ -1029,6 +1107,33 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crossterm" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" +dependencies = [ + "bitflags 2.9.3", + "crossterm_winapi", + "derive_more", + "document-features", + "mio", + "parking_lot", + "rustix 1.0.8", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + [[package]] name = "crunchy" version = "0.2.4" @@ -1105,6 +1210,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ + "convert_case 0.7.1", "proc-macro2", "quote", "syn 2.0.106", @@ -1126,6 +1232,15 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "directories" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs" version = "6.0.0" @@ -1344,6 +1459,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-serde" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "errno" version = "0.3.13" @@ -1609,6 +1734,15 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + [[package]] name = "futures" version = "0.3.31" @@ -2045,6 +2179,7 @@ dependencies = [ "glam", "graphene-core", "graphene-core-shaders", + "graphene-raster-nodes-shaders", "image", "kurbo", "ndarray", @@ -2054,9 +2189,18 @@ dependencies = [ "rand_chacha 0.9.0", "serde", "specta", + "spirv-std", "tokio", ] +[[package]] +name = "graphene-raster-nodes-shaders" +version = "0.1.0" +dependencies = [ + "cargo-gpu", + "env_logger", +] + [[package]] name = "graphene-std" version = "0.1.0" @@ -2107,6 +2251,7 @@ dependencies = [ "ash", "bytemuck", "cef", + "cef-dll-sys", "core-foundation", "derivative", "dirs", @@ -2698,6 +2843,26 @@ version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +[[package]] +name = "inotify" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" +dependencies = [ + "bitflags 2.9.3", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + [[package]] name = "interpolate_name" version = "0.2.4" @@ -2893,6 +3058,26 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "kqueue" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" +dependencies = [ + "bitflags 1.3.2", + "libc", +] + [[package]] name = "kurbo" version = "0.11.3" @@ -3156,6 +3341,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", + "log", "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.59.0", ] @@ -3280,7 +3466,7 @@ dependencies = [ name = "node-macro" version = "0.0.0" dependencies = [ - "convert_case", + "convert_case 0.8.0", "graphene-core", "indoc", "proc-macro-crate", @@ -3307,6 +3493,30 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" +[[package]] +name = "notify" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" +dependencies = [ + "bitflags 2.9.3", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "log", + "mio", + "notify-types", + "walkdir", + "windows-sys 0.60.2", +] + +[[package]] +name = "notify-types" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" + [[package]] name = "nu-ansi-term" version = "0.50.1" @@ -3793,6 +4003,15 @@ dependencies = [ "libredox", ] +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + [[package]] name = "ordered-float" version = "4.6.0" @@ -4434,6 +4653,12 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-string" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0501e134c6905fee1f10fed25b0a7e1261bf676cffac9543a7d0730dec01af2" + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -4544,6 +4769,15 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +[[package]] +name = "relative-path" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca40a312222d8ba74837cb474edef44b37f561da5f773981007a10bbaa992b0" +dependencies = [ + "serde", +] + [[package]] name = "renderdoc-sys" version = "1.1.0" @@ -4685,6 +4919,16 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" +[[package]] +name = "rspirv" +version = "0.12.0+sdk-1.3.268.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cf3a93856b6e5946537278df0d3075596371b1950ccff012f02b0f7eafec8d" +dependencies = [ + "rustc-hash 1.1.0", + "spirv", +] + [[package]] name = "rustc-demangle" version = "0.1.26" @@ -4703,6 +4947,33 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustc_codegen_spirv-target-specs" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c89eaf493b3dfc730cda42a77014aad65e03213992c7afe0dff60a9f7d3dd94" + +[[package]] +name = "rustc_codegen_spirv-target-specs" +version = "0.9.0" +source = "git+https://github.com/rust-gpu/rust-gpu?rev=c12f216121820580731440ee79ebc7403d6ea04f#c12f216121820580731440ee79ebc7403d6ea04f" +dependencies = [ + "serde", + "strum 0.27.2", + "thiserror 2.0.16", +] + +[[package]] +name = "rustc_codegen_spirv-types" +version = "0.9.0" +source = "git+https://github.com/rust-gpu/rust-gpu?rev=c12f216121820580731440ee79ebc7403d6ea04f#c12f216121820580731440ee79ebc7403d6ea04f" +dependencies = [ + "rspirv", + "serde", + "serde_json", + "spirv", +] + [[package]] name = "rustix" version = "0.38.44" @@ -4893,6 +5164,9 @@ name = "semver" version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] [[package]] name = "serde" @@ -4903,6 +5177,27 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-untagged" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3" +dependencies = [ + "erased-serde", + "serde", + "typeid", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float 2.10.1", + "serde", +] + [[package]] name = "serde-wasm-bindgen" version = "0.6.5" @@ -5001,6 +5296,27 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + [[package]] name = "signal-hook-registry" version = "1.4.6" @@ -5178,8 +5494,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ "bitflags 2.9.3", + "serde", ] +[[package]] +name = "spirv-builder" +version = "0.9.0" +source = "git+https://github.com/rust-gpu/rust-gpu?rev=c12f216121820580731440ee79ebc7403d6ea04f#c12f216121820580731440ee79ebc7403d6ea04f" +dependencies = [ + "cargo_metadata", + "clap", + "log", + "memchr", + "notify", + "raw-string", + "rustc_codegen_spirv-target-specs 0.9.0 (git+https://github.com/rust-gpu/rust-gpu?rev=c12f216121820580731440ee79ebc7403d6ea04f)", + "rustc_codegen_spirv-types", + "semver", + "serde", + "serde_json", + "thiserror 2.0.16", +] + +[[package]] +name = "spirv-std" +version = "0.9.0" +source = "git+https://github.com/rust-gpu/rust-gpu?rev=c12f216121820580731440ee79ebc7403d6ea04f#c12f216121820580731440ee79ebc7403d6ea04f" +dependencies = [ + "bitflags 1.3.2", + "glam", + "libm", + "num-traits", + "spirv-std-macros", + "spirv-std-types", +] + +[[package]] +name = "spirv-std-macros" +version = "0.9.0" +source = "git+https://github.com/rust-gpu/rust-gpu?rev=c12f216121820580731440ee79ebc7403d6ea04f#c12f216121820580731440ee79ebc7403d6ea04f" +dependencies = [ + "proc-macro2", + "quote", + "spirv-std-types", + "syn 2.0.106", +] + +[[package]] +name = "spirv-std-types" +version = "0.9.0" +source = "git+https://github.com/rust-gpu/rust-gpu?rev=c12f216121820580731440ee79ebc7403d6ea04f#c12f216121820580731440ee79ebc7403d6ea04f" + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -5658,9 +6023,16 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", + "toml_write", "winnow", ] +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + [[package]] name = "tower" version = "0.5.2" @@ -5791,6 +6163,12 @@ dependencies = [ "core_maths", ] +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.18.0" @@ -5880,6 +6258,12 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "unit-prefix" version = "0.5.1" @@ -6479,7 +6863,7 @@ dependencies = [ "naga", "ndk-sys 0.5.0+25.2.9519653", "objc", - "ordered-float", + "ordered-float 4.6.0", "parking_lot", "portable-atomic", "profiling", diff --git a/Cargo.toml b/Cargo.toml index 874f3a2b88..ca1a6ed5df 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ members = [ "node-graph/graph-craft", "node-graph/graphene-cli", "node-graph/graster-nodes", + "node-graph/graster-nodes/shaders", "node-graph/gstd", "node-graph/gsvg-renderer", "node-graph/interpreted-executor", @@ -37,6 +38,7 @@ default-members = [ "node-graph/gbrush", "node-graph/gcore", "node-graph/gcore-shaders", + "node-graph/graster-nodes/shaders", "node-graph/gmath-nodes", "node-graph/gpath-bool", "node-graph/graph-craft", @@ -181,7 +183,8 @@ iai-callgrind = { version = "0.16" } ndarray = "0.16" strum = { version = "0.27", features = ["derive"] } dirs = "6.0" -cef = "139.0" +cef = "=139.0.1" +cef-dll-sys = "=139.0.1" include_dir = "0.7" tracing-subscriber = { version = "0.3", features = ["env-filter"] } tracing = "0.1" @@ -190,6 +193,11 @@ open = "5.3" poly-cool = "0.3" spin = "0.10" clap = "4.5" +spirv-std = { git = "https://github.com/rust-gpu/rust-gpu", rev = "c12f216121820580731440ee79ebc7403d6ea04f" } +cargo-gpu = { git = "https://github.com/rust-gpu/cargo-gpu", rev = "f969528e87baa17a7d48eecf4a6fcfdcaaf30566" } + +[workspace.lints.rust] +unexpected_cfgs = { level = "allow", check-cfg = ['cfg(target_arch, values("spirv"))'] } [profile.dev] opt-level = 1 diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index fe97a9d1fa..0ed348e82b 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -30,6 +30,7 @@ winit = { workspace = true, features = ["serde"] } thiserror = { workspace = true } futures = { workspace = true } cef = { workspace = true } +cef-dll-sys = { workspace = true } tracing-subscriber = { workspace = true } tracing = { workspace = true } dirs = { workspace = true } diff --git a/editor/src/messages/frontend/frontend_message.rs b/editor/src/messages/frontend/frontend_message.rs index 4a63e1a859..bbba55c57a 100644 --- a/editor/src/messages/frontend/frontend_message.rs +++ b/editor/src/messages/frontend/frontend_message.rs @@ -1,4 +1,4 @@ -use super::utility_types::{FrontendDocumentDetails, MouseCursorIcon}; +use super::utility_types::{DocumentDetails, MouseCursorIcon, OpenDocument}; use crate::messages::app_window::app_window_message_handler::AppWindowPlatform; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::node_graph::utility_types::{ @@ -90,13 +90,15 @@ pub enum FrontendMessage { font: Font, }, TriggerImport, - TriggerIndexedDbRemoveDocument { + TriggerPersistenceRemoveDocument { #[serde(rename = "documentId")] document_id: DocumentId, }, - TriggerIndexedDbWriteDocument { + TriggerPersistenceWriteDocument { + #[serde(rename = "documentId")] + document_id: DocumentId, document: String, - details: FrontendDocumentDetails, + details: DocumentDetails, }, TriggerLoadFirstAutoSaveDocument, TriggerLoadRestAutoSaveDocuments, @@ -308,7 +310,7 @@ pub enum FrontendMessage { }, UpdateOpenDocumentsList { #[serde(rename = "openDocuments")] - open_documents: Vec, + open_documents: Vec, }, UpdatePropertiesPanelLayout { #[serde(rename = "layoutTarget")] diff --git a/editor/src/messages/frontend/utility_types.rs b/editor/src/messages/frontend/utility_types.rs index cb55047daa..7f9873403b 100644 --- a/editor/src/messages/frontend/utility_types.rs +++ b/editor/src/messages/frontend/utility_types.rs @@ -2,13 +2,18 @@ use crate::messages::portfolio::document::utility_types::document_metadata::Laye use crate::messages::prelude::*; #[derive(PartialEq, Eq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] -pub struct FrontendDocumentDetails { - #[serde(rename = "isAutoSaved")] - pub is_auto_saved: bool, +pub struct OpenDocument { + pub id: DocumentId, + pub details: DocumentDetails, +} + +#[derive(PartialEq, Eq, Clone, Debug, serde::Serialize, serde::Deserialize, specta::Type)] +pub struct DocumentDetails { + pub name: String, #[serde(rename = "isSaved")] pub is_saved: bool, - pub name: String, - pub id: DocumentId, + #[serde(rename = "isAutoSaved")] + pub is_auto_saved: bool, } #[derive(Clone, Copy, Debug, Default, Eq, PartialEq, serde::Serialize, serde::Deserialize, specta::Type)] diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index aec19541a2..87e3c6ce36 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -952,6 +952,7 @@ impl MessageHandler> for DocumentMes self.path = None; self.set_save_state(false); + self.set_auto_save_state(false); responses.add(PortfolioMessage::UpdateOpenDocumentsList); responses.add(NodeGraphMessage::UpdateNewNodeGraph); @@ -1301,6 +1302,7 @@ impl MessageHandler> for DocumentMes } self.network_interface.finish_transaction(); self.document_redo_history.clear(); + responses.add(PortfolioMessage::UpdateOpenDocumentsList); } DocumentMessage::AbortTransaction => { responses.add(DocumentMessage::RepeatedAbortTransaction { undo_count: 1 }); @@ -1316,6 +1318,7 @@ impl MessageHandler> for DocumentMes self.network_interface.finish_transaction(); responses.add(OverlaysMessage::Draw); + responses.add(PortfolioMessage::UpdateOpenDocumentsList); } DocumentMessage::ToggleLayerExpansion { id, recursive } => { let layer = LayerNodeIdentifier::new(id, &self.network_interface); @@ -1975,16 +1978,16 @@ impl DocumentMessageHandler { Some(previous_network) } - pub fn current_hash(&self) -> Option { - self.document_undo_history.iter().last().map(|network| network.document_network().current_hash()) + pub fn current_hash(&self) -> u64 { + self.network_interface.document_network().current_hash() } pub fn is_auto_saved(&self) -> bool { - self.current_hash() == self.auto_saved_hash + Some(self.current_hash()) == self.auto_saved_hash } pub fn is_saved(&self) -> bool { - self.current_hash() == self.saved_hash + Some(self.current_hash()) == self.saved_hash } pub fn is_graph_overlay_open(&self) -> bool { @@ -1993,7 +1996,7 @@ impl DocumentMessageHandler { pub fn set_auto_save_state(&mut self, is_saved: bool) { if is_saved { - self.auto_saved_hash = self.current_hash(); + self.auto_saved_hash = Some(self.current_hash()); } else { self.auto_saved_hash = None; } @@ -2001,7 +2004,7 @@ impl DocumentMessageHandler { pub fn set_save_state(&mut self, is_saved: bool) { if is_saved { - self.saved_hash = self.current_hash(); + self.saved_hash = Some(self.current_hash()); } else { self.saved_hash = None; } diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index f11cc39427..5fd1a89849 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -6,7 +6,7 @@ use crate::consts::{DEFAULT_DOCUMENT_NAME, DEFAULT_STROKE_WIDTH, FILE_EXTENSION} use crate::messages::animation::TimingInformation; use crate::messages::debug::utility_types::MessageLoggingVerbosity; use crate::messages::dialog::simple_dialogs; -use crate::messages::frontend::utility_types::FrontendDocumentDetails; +use crate::messages::frontend::utility_types::{DocumentDetails, OpenDocument}; use crate::messages::layout::utility_types::widget_prelude::*; use crate::messages::portfolio::document::DocumentMessageContext; use crate::messages::portfolio::document::graph_operation::utility_types::TransformIn; @@ -187,13 +187,13 @@ impl MessageHandler> for Portfolio } PortfolioMessage::AutoSaveDocument { document_id } => { let document = self.documents.get(&document_id).unwrap(); - responses.add(FrontendMessage::TriggerIndexedDbWriteDocument { + responses.add(FrontendMessage::TriggerPersistenceWriteDocument { + document_id, document: document.serialize_document(), - details: FrontendDocumentDetails { - is_auto_saved: document.is_auto_saved(), - is_saved: document.is_saved(), - id: document_id, + details: DocumentDetails { name: document.name.clone(), + is_saved: document.is_saved(), + is_auto_saved: document.is_auto_saved(), }, }) } @@ -216,7 +216,7 @@ impl MessageHandler> for Portfolio } for document_id in &self.document_ids { - responses.add(FrontendMessage::TriggerIndexedDbRemoveDocument { document_id: *document_id }); + responses.add(FrontendMessage::TriggerPersistenceRemoveDocument { document_id: *document_id }); } responses.add(PortfolioMessage::DestroyAllDocuments); @@ -242,7 +242,7 @@ impl MessageHandler> for Portfolio // Actually delete the document (delay to delete document is required to let the document and properties panel messages above get processed) responses.add(PortfolioMessage::DeleteDocument { document_id }); - responses.add(FrontendMessage::TriggerIndexedDbRemoveDocument { document_id }); + responses.add(FrontendMessage::TriggerPersistenceRemoveDocument { document_id }); // Send the new list of document tab names responses.add(PortfolioMessage::UpdateOpenDocumentsList); @@ -1044,11 +1044,13 @@ impl MessageHandler> for Portfolio .document_ids .iter() .filter_map(|id| { - self.documents.get(id).map(|document| FrontendDocumentDetails { - is_auto_saved: document.is_auto_saved(), - is_saved: document.is_saved(), + self.documents.get(id).map(|document| OpenDocument { id: *id, - name: document.name.clone(), + details: DocumentDetails { + is_auto_saved: document.is_auto_saved(), + is_saved: document.is_saved(), + name: document.name.clone(), + }, }) }) .collect::>(); diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs deleted file mode 100644 index c71b3ff332..0000000000 --- a/frontend/.eslintrc.cjs +++ /dev/null @@ -1,109 +0,0 @@ -module.exports = { - root: true, - env: { browser: true, node: true }, - extends: [ - "eslint:recommended", - "plugin:import/recommended", - "plugin:@typescript-eslint/recommended", - "plugin:import/typescript", - "plugin:svelte/recommended", - "plugin:svelte/prettier", - "prettier", - ], - plugins: ["import", "@typescript-eslint", "prettier"], - settings: { - "import/parsers": { "@typescript-eslint/parser": [".ts"] }, - "import/resolver": { typescript: true, node: true }, - }, - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaVersion: "latest", - project: "./tsconfig.json", - extraFileExtensions: [".svelte"], - }, - ignorePatterns: [ - // Ignore generated directories - "node_modules/", - "dist/", - "pkg/", - "wasm/pkg/", - // Don't ignore JS and TS dotfiles in this folder - "!.*.js", - "!.*.ts", - ], - overrides: [ - { - files: ["*.svelte"], - parser: "svelte-eslint-parser", - // Parse the ` - {#each widgetData.tableWidgets as row} - - {#each row as cell} - - {/each} - - {/each} + + {#each widgetData.tableWidgets as row} + + {#each row as cell} + + {/each} + + {/each} +
- -
+ +