diff --git a/Cargo.lock b/Cargo.lock index 3dbf20999..7253e1a01 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,18 +2,23 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler32" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom 0.2.8", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "0.7.20" @@ -23,6 +28,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.66" @@ -44,17 +58,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "ash-window" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b912285a7c29f3a8f87ca6f55afc48768624e5e33ec17dbd2f2075903f5e35ab" -dependencies = [ - "ash", - "raw-window-handle 0.5.0", - "raw-window-metal", -] - [[package]] name = "ashpd" version = "0.3.2" @@ -107,13 +110,13 @@ dependencies = [ [[package]] name = "async-io" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8121296a9f05be7f34aa4196b1747243b3b62e048bb7906f644f3fbfc490cf7" +checksum = "6fe557ebe0829511ddff4ad3011d159c0e6f144e05e3e8c3ab5095a131900a7b" dependencies = [ "async-lock", "autocfg", - "concurrent-queue 1.2.4", + "concurrent-queue 2.0.0", "futures-lite", "libc", "log", @@ -227,6 +230,21 @@ dependencies = [ "which", ] +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitflags" version = "1.3.2" @@ -326,19 +344,6 @@ dependencies = [ "nix 0.19.1", ] -[[package]] -name = "calloop" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bcf530afb40e45e14440701e5e996d7fd139e84a912a4d83a8d6a0fb3e58663" -dependencies = [ - "log", - "nix 0.25.0", - "slotmap", - "thiserror", - "vec_map", -] - [[package]] name = "cc" version = "1.0.77" @@ -369,6 +374,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "clang-sys" version = "1.4.0" @@ -390,7 +401,7 @@ dependencies = [ "bitflags", "clap_lex", "indexmap", - "strsim 0.10.0", + "strsim", "termcolor", "textwrap", ] @@ -435,6 +446,16 @@ dependencies = [ "objc", ] +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "concurrent-queue" version = "1.2.4" @@ -519,73 +540,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" [[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core 0.10.2", - "darling_macro 0.10.2", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.9.3", - "syn", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core 0.10.2", - "quote", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" +name = "d3d12" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759" dependencies = [ - "darling_core 0.13.4", - "quote", - "syn", + "bitflags", + "libloading", + "winapi", ] [[package]] @@ -629,21 +591,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dlib" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" -dependencies = [ - "libloading", -] - [[package]] name = "downcast-rs" version = "1.2.0" @@ -715,22 +662,6 @@ dependencies = [ "rustc_version", ] -[[package]] -name = "flate2" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" -dependencies = [ - "crc32fast", - "miniz_oxide 0.5.4", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - [[package]] name = "foreign-types" version = "0.3.2" @@ -796,6 +727,17 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + [[package]] name = "futures-io" version = "0.3.25" @@ -858,6 +800,15 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "gdk" version = "0.15.4" @@ -991,7 +942,7 @@ dependencies = [ "block", "cairo-rs", "cairo-sys-rs", - "calloop 0.7.2", + "calloop", "cfg-if", "cocoa", "core-graphics", @@ -1012,7 +963,7 @@ dependencies = [ "objc", "pkg-config", "rand 0.8.5", - "raw-window-handle 0.5.0", + "raw-window-handle", "scopeguard", "time", "tracing", @@ -1054,7 +1005,7 @@ checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64" dependencies = [ "anyhow", "heck", - "proc-macro-crate 1.2.1", + "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", @@ -1077,6 +1028,18 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +[[package]] +name = "glow" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "gobject-sys" version = "0.15.10" @@ -1088,6 +1051,45 @@ dependencies = [ "system-deps", ] +[[package]] +name = "gpu-alloc" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc59e5f710e310e76e6707f86c561dd646f69a8876da9131703b2f717de818d" +dependencies = [ + "bitflags", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5" +dependencies = [ + "bitflags", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a" +dependencies = [ + "bitflags", + "gpu-descriptor-types", + "hashbrown", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126" +dependencies = [ + "bitflags", +] + [[package]] name = "gtk" version = "0.15.5" @@ -1136,24 +1138,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9" dependencies = [ "anyhow", - "proc-macro-crate 1.2.1", + "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", "syn", ] -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] [[package]] name = "heck" @@ -1177,16 +1176,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "humantime" -version = "2.1.0" +name = "hexf-parse" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] -name = "ident_case" -version = "1.0.1" +name = "humantime" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "im" @@ -1224,12 +1223,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - [[package]] name = "js-sys" version = "0.3.60" @@ -1248,6 +1241,17 @@ dependencies = [ "bitflags", ] +[[package]] +name = "khronos-egl" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + [[package]] name = "kurbo" version = "0.9.0" @@ -1319,15 +1323,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" -[[package]] -name = "memmap2" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" -dependencies = [ - "libc", -] - [[package]] name = "memoffset" version = "0.6.5" @@ -1366,24 +1361,6 @@ dependencies = [ "adler32", ] -[[package]] -name = "miniz_oxide" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - [[package]] name = "mio" version = "0.8.5" @@ -1393,7 +1370,7 @@ dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys", ] [[package]] @@ -1405,148 +1382,64 @@ dependencies = [ ] [[package]] -name = "ndk" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8794322172319b972f528bf90c6b467be0079f1fa82780ffb431088e741a73ab" +name = "naga" +version = "0.10.0" +source = "git+https://github.com/gfx-rs/naga?rev=ddcd5d3121150b2b1beee6e54e9125ff31aaa9a2#ddcd5d3121150b2b1beee6e54e9125ff31aaa9a2" dependencies = [ - "jni-sys", - "ndk-sys 0.2.2", - "num_enum", + "bit-set", + "bitflags", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "num-traits", + "rustc-hash", + "spirv", + "termcolor", "thiserror", + "unicode-xid", ] [[package]] -name = "ndk" -version = "0.7.0" +name = "nix" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2" dependencies = [ "bitflags", - "jni-sys", - "ndk-sys 0.4.1+23.1.7779620", - "num_enum", - "raw-window-handle 0.5.0", - "thiserror", + "cc", + "cfg-if", + "libc", ] [[package]] -name = "ndk-context" -version = "0.1.1" +name = "nix" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" +checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +dependencies = [ + "bitflags", + "cc", + "cfg-if", + "libc", + "memoffset", +] [[package]] -name = "ndk-glue" -version = "0.3.0" +name = "nix" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf0c24d51ac1c905c27d4eda4fa0635bbe0de596b8f79235e0b17a4d29385" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" dependencies = [ - "lazy_static", + "bitflags", + "cfg-if", "libc", - "log", - "ndk 0.3.0", - "ndk-macro 0.2.0", - "ndk-sys 0.2.2", + "memoffset", ] [[package]] -name = "ndk-glue" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0434fabdd2c15e0aab768ca31d5b7b333717f03cf02037d5a0a3ff3c278ed67f" -dependencies = [ - "libc", - "log", - "ndk 0.7.0", - "ndk-context", - "ndk-macro 0.3.0", - "ndk-sys 0.4.1+23.1.7779620", - "once_cell", - "parking_lot", -] - -[[package]] -name = "ndk-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" -dependencies = [ - "darling 0.10.2", - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ndk-macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" -dependencies = [ - "darling 0.13.4", - "proc-macro-crate 1.2.1", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ndk-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" - -[[package]] -name = "ndk-sys" -version = "0.4.1+23.1.7779620" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" -dependencies = [ - "jni-sys", -] - -[[package]] -name = "nix" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2" -dependencies = [ - "bitflags", - "cc", - "cfg-if", - "libc", -] - -[[package]] -name = "nix" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" -dependencies = [ - "bitflags", - "cc", - "cfg-if", - "libc", - "memoffset", -] - -[[package]] -name = "nix" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" -dependencies = [ - "bitflags", - "cfg-if", - "libc", - "memoffset", -] - -[[package]] -name = "nix" -version = "0.25.0" +name = "nix" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb" dependencies = [ @@ -1569,34 +1462,22 @@ dependencies = [ ] [[package]] -name = "num_cpus" -version = "1.14.0" +name = "num-traits" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" -dependencies = [ - "num_enum_derive", + "autocfg", ] [[package]] -name = "num_enum_derive" -version = "0.5.7" +name = "num_cpus" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" dependencies = [ - "proc-macro-crate 1.2.1", - "proc-macro2", - "quote", - "syn", + "hermit-abi", + "libc", ] [[package]] @@ -1691,7 +1572,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-sys 0.42.0", + "windows-sys", ] [[package]] @@ -1718,92 +1599,38 @@ dependencies = [ "smallvec", ] -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - [[package]] name = "pest" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a528564cc62c19a7acac4d81e01f39e53e25e17b934878f4c6d25cc2836e62f8" +checksum = "5f400b0f7905bf702f9f3dc3df5a121b16c54e9e8012c082905fdf09a931861a" dependencies = [ "thiserror", "ucd-trie", ] [[package]] -name = "piet-gpu" -version = "0.1.0" -source = "git+https://github.com/linebender/piet-gpu#018bb34e41afd6813a698705cd10d000ece8d814" -dependencies = [ - "bytemuck", - "clap", - "ndk 0.3.0", - "ndk-glue 0.3.0", - "ndk-sys 0.2.2", - "piet-gpu-hal", - "piet-gpu-types", - "piet-scene", - "png 0.17.7", - "rand 0.8.5", - "raw-window-handle 0.3.4", - "raw-window-handle 0.5.0", - "roxmltree", - "winit", -] - -[[package]] -name = "piet-gpu-derive" -version = "0.0.0" -source = "git+https://github.com/linebender/piet-gpu#018bb34e41afd6813a698705cd10d000ece8d814" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "piet-gpu-hal" +name = "piet-scene" version = "0.1.0" -source = "git+https://github.com/linebender/piet-gpu#018bb34e41afd6813a698705cd10d000ece8d814" +source = "git+https://github.com/linebender/piet-gpu#5882fbf4af41d3b506f733bc65f62cc23eaa315c" dependencies = [ - "ash", - "ash-window", - "bitflags", - "block", "bytemuck", - "cocoa-foundation", - "core-graphics-types", - "foreign-types", - "metal", - "objc", - "raw-window-handle 0.5.0", + "moscato", + "peniko", "smallvec", - "winapi", - "wio", ] [[package]] -name = "piet-gpu-types" -version = "0.0.0" -source = "git+https://github.com/linebender/piet-gpu#018bb34e41afd6813a698705cd10d000ece8d814" -dependencies = [ - "half", - "piet-gpu-derive", -] - -[[package]] -name = "piet-scene" +name = "piet-wgsl" version = "0.1.0" -source = "git+https://github.com/linebender/piet-gpu#018bb34e41afd6813a698705cd10d000ece8d814" +source = "git+https://github.com/linebender/piet-gpu#5882fbf4af41d3b506f733bc65f62cc23eaa315c" dependencies = [ "bytemuck", - "moscato", - "peniko", - "smallvec", + "futures-intrusive", + "parking_lot", + "piet-scene", + "raw-window-handle", + "wgpu", ] [[package]] @@ -1839,19 +1666,7 @@ dependencies = [ "bitflags", "crc32fast", "deflate", - "miniz_oxide 0.3.7", -] - -[[package]] -name = "png" -version = "0.17.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" -dependencies = [ - "bitflags", - "crc32fast", - "flate2", - "miniz_oxide 0.6.2", + "miniz_oxide", ] [[package]] @@ -1874,15 +1689,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - [[package]] name = "proc-macro-crate" version = "1.2.1" @@ -1927,6 +1733,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74605f360ce573babfe43964cbe520294dcb081afbf8c108fc6e23036b4da2df" + [[package]] name = "quote" version = "1.0.21" @@ -2017,23 +1829,10 @@ dependencies = [ ] [[package]] -name = "raw-window-handle" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76" -dependencies = [ - "libc", - "raw-window-handle 0.4.3", -] - -[[package]] -name = "raw-window-handle" -version = "0.4.3" +name = "range-alloc" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" -dependencies = [ - "cty", -] +checksum = "63e935c45e09cc6dcf00d2f0b2d630a58f4095320223d47fc68918722f0538b6" [[package]] name = "raw-window-handle" @@ -2044,18 +1843,6 @@ dependencies = [ "cty", ] -[[package]] -name = "raw-window-metal" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d18241d631f19847a5f4cc0a3f81d978202c375573ab7d90ab14dcf0a9262ec" -dependencies = [ - "cocoa", - "core-graphics", - "objc", - "raw-window-handle 0.5.0", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -2102,6 +1889,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "renderdoc-sys" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157" + [[package]] name = "roxmltree" version = "0.13.1" @@ -2126,12 +1919,6 @@ dependencies = [ "semver", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.1.0" @@ -2251,25 +2038,6 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" -[[package]] -name = "smithay-client-toolkit" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" -dependencies = [ - "bitflags", - "calloop 0.10.3", - "dlib", - "lazy_static", - "log", - "memmap2", - "nix 0.24.2", - "pkg-config", - "wayland-client", - "wayland-cursor", - "wayland-protocols", -] - [[package]] name = "socket2" version = "0.4.7" @@ -2281,16 +2049,20 @@ dependencies = [ ] [[package]] -name = "static_assertions" -version = "1.1.0" +name = "spirv" +version = "0.2.0+1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +dependencies = [ + "bitflags", + "num-traits", +] [[package]] -name = "strsim" -version = "0.9.3" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strsim" @@ -2507,10 +2279,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] -name = "vec_map" -version = "0.8.2" +name = "unicode-width" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "version-compare" @@ -2567,6 +2345,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.83" @@ -2606,7 +2396,6 @@ dependencies = [ "downcast-rs", "libc", "nix 0.24.2", - "scoped-tls", "wayland-commons", "wayland-scanner", "wayland-sys", @@ -2664,8 +2453,6 @@ version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" dependencies = [ - "dlib", - "lazy_static", "pkg-config", ] @@ -2688,6 +2475,100 @@ dependencies = [ "cc", ] +[[package]] +name = "wgpu" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2272b17bffc8a0c7d53897435da7c1db587c87d3a14e8dae9cdb8d1d210fc0f" +dependencies = [ + "arrayvec", + "js-sys", + "log", + "naga", + "parking_lot", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73d14cad393054caf992ee02b7da6a372245d39a484f7461c1f44f6f6359bd28" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags", + "cfg_aliases", + "codespan-reporting", + "fxhash", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cc320a61acb26be4f549c9b1b53405c10a223fbfea363ec39474c32c348d12f" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags", + "block", + "core-graphics-types", + "d3d12", + "foreign-types", + "fxhash", + "glow", + "gpu-alloc", + "gpu-descriptor", + "js-sys", + "khronos-egl", + "libloading", + "log", + "metal", + "naga", + "objc", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb6b28ef22cac17b9109b25b3bf8c9a103eeb293d7c5f78653979b09140375f6" +dependencies = [ + "bitflags", +] + [[package]] name = "which" version = "4.3.0" @@ -2739,19 +2620,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - [[package]] name = "windows-sys" version = "0.42.0" @@ -2759,12 +2627,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_x86_64_msvc", ] [[package]] @@ -2773,48 +2641,24 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - [[package]] name = "windows_aarch64_msvc" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - [[package]] name = "windows_i686_gnu" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - [[package]] name = "windows_i686_msvc" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - [[package]] name = "windows_x86_64_gnu" version = "0.42.0" @@ -2827,50 +2671,12 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - [[package]] name = "windows_x86_64_msvc" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" -[[package]] -name = "winit" -version = "0.27.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c" -dependencies = [ - "bitflags", - "cocoa", - "core-foundation", - "core-graphics", - "dispatch", - "instant", - "libc", - "log", - "mio", - "ndk 0.7.0", - "ndk-glue 0.7.0", - "objc", - "once_cell", - "parking_lot", - "percent-encoding", - "raw-window-handle 0.4.3", - "raw-window-handle 0.5.0", - "smithay-client-toolkit", - "wasm-bindgen", - "wayland-client", - "wayland-protocols", - "web-sys", - "windows-sys 0.36.1", - "x11-dl", -] - [[package]] name = "wio" version = "0.2.2" @@ -2880,17 +2686,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "x11-dl" -version = "2.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c83627bc137605acc00bb399c7b908ef460b621fc37c953db2b09f88c449ea6" -dependencies = [ - "lazy_static", - "libc", - "pkg-config", -] - [[package]] name = "x11rb" version = "0.10.1" @@ -2932,15 +2727,15 @@ dependencies = [ "futures-task", "glazier", "parley", - "piet-gpu", - "piet-gpu-hal", "piet-scene", - "png 0.16.8", + "piet-wgsl", + "png", "rand 0.7.3", - "raw-window-handle 0.5.0", + "raw-window-handle", "roxmltree", "swash 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "tokio", + "wgpu", ] [[package]] @@ -3007,7 +2802,7 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f8fb5186d1c87ae88cf234974c240671238b4a679158ad3b94ec465237349a6" dependencies = [ - "proc-macro-crate 1.2.1", + "proc-macro-crate", "proc-macro2", "quote", "regex", @@ -3051,7 +2846,7 @@ version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdd24fffd02794a76eb10109de463444064c88f5adb9e9d1a78488adc332bfef" dependencies = [ - "proc-macro-crate 1.2.1", + "proc-macro-crate", "proc-macro2", "quote", "syn", diff --git a/Cargo.toml b/Cargo.toml index 6ac2a4000..76592d97f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,9 +14,9 @@ wayland = ["glazier/wayland"] [dependencies] glazier = { git = "https://github.com/linebender/glazier", default-features = false } -piet-gpu-hal = { git = "https://github.com/linebender/piet-gpu" } -piet-gpu = { git = "https://github.com/linebender/piet-gpu" } +piet-wgsl = { git = "https://github.com/linebender/piet-gpu" } piet-scene = { git = "https://github.com/linebender/piet-gpu" } +wgpu = "0.14" raw-window-handle = "0.5" png = "0.16.2" rand = "0.7.3" @@ -30,3 +30,8 @@ bitflags = "1.3.2" [patch."https://github.com/dfrg/fount"] fount = { git = "https://github.com/jneem/fount" } + +[patch.crates-io] +# Required for metal support to work on wgpu +# TODO: remove when wgpu is upgraded to 0.15 +naga = { git = "https://github.com/gfx-rs/naga", rev="ddcd5d3121150b2b1beee6e54e9125ff31aaa9a2" } diff --git a/src/app_main.rs b/src/app_main.rs index c516b960c..c5a31ba8e 100644 --- a/src/app_main.rs +++ b/src/app_main.rs @@ -21,6 +21,10 @@ use glazier::{ }; use parley::FontContext; use piet_scene::{Scene, SceneBuilder, SceneFragment}; +use piet_wgsl::{ + util::{RenderContext, RenderSurface}, + Renderer, +}; use crate::{app::App, widget::RawEvent, View, Widget}; @@ -38,7 +42,9 @@ where { handle: WindowHandle, app: App, - pgpu_state: Option, + render_cx: RenderContext, + surface: Option, + renderer: Renderer, font_context: FontContext, scene: Scene, counter: u64, @@ -163,11 +169,17 @@ where T: Send, { fn new(app: App) -> Self { + let render_cx = tokio::runtime::Handle::current() + .block_on(RenderContext::new()) + .expect("failed to create render context"); + let renderer = Renderer::new(&render_cx.device).expect("failed to create renderer"); let state = MainState { handle: Default::default(), app, + render_cx, + surface: None, + renderer, font_context: FontContext::new(), - pgpu_state: None, scene: Scene::default(), counter: 0, }; @@ -189,38 +201,47 @@ where fn render(&mut self) { let fragment = self.app.fragment(); - if self.pgpu_state.is_none() { - let handle = &self.handle; - let scale = handle.get_scale().unwrap(); - let insets = handle.content_insets().to_px(scale); - let mut size = handle.get_size().to_px(scale); - size.width -= insets.x_value(); - size.height -= insets.y_value(); + let handle = &self.handle; + let scale = handle.get_scale().unwrap_or_default(); + let insets = handle.content_insets().to_px(scale); + let mut size = handle.get_size().to_px(scale); + size.width -= insets.x_value(); + size.height -= insets.y_value(); + let width = size.width as u32; + let height = size.height as u32; + if self.surface.is_none() { println!("render size: {:?}", size); - self.pgpu_state = Some( - crate::render::PgpuState::new( - handle, - handle, - size.width as usize, - size.height as usize, - ) - .unwrap(), - ); + self.surface = Some(self.render_cx.create_surface(handle, width, height)); } - if let Some(pgpu_state) = self.pgpu_state.as_mut() { - let scale = self.handle.get_scale().unwrap_or_default(); + if let Some(surface) = self.surface.as_mut() { + if surface.config.width != width || surface.config.height != height { + self.render_cx.resize_surface(surface, width, height); + } let (scale_x, scale_y) = (scale.x(), scale.y()); let transform = if scale_x != 1.0 || scale_y != 1.0 { Some(Affine::scale_non_uniform(scale_x, scale_y)) } else { None }; - if let Some(_timestamps) = pgpu_state.pre_render() {} let mut builder = SceneBuilder::for_scene(&mut self.scene); builder.append(&fragment, transform); - //crate::test_scenes::render(&mut self.font_context, &mut self.scene, 0, self.counter); self.counter += 1; - pgpu_state.render(&self.scene); + let surface_texture = surface + .surface + .get_current_texture() + .expect("failed to acquire next swapchain texture"); + self.renderer + .render_to_surface( + &self.render_cx.device, + &self.render_cx.queue, + &self.scene, + &surface_texture, + width, + height, + ) + .expect("failed to render to surface"); + surface_texture.present(); + self.render_cx.device.poll(wgpu::Maintain::Wait); } } } diff --git a/src/lib.rs b/src/lib.rs index 2fcad0ad8..432ccef2b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,6 @@ mod app; mod app_main; mod event; mod id; -mod render; mod test_scenes; mod text; mod view; @@ -26,7 +25,6 @@ use std::any::Any; pub struct WindowState { handle: WindowHandle, - pgpu_state: Option, scene: Scene, font_context: FontContext, counter: u64, @@ -36,7 +34,6 @@ impl WindowState { pub fn new() -> Self { Self { handle: Default::default(), - pgpu_state: None, scene: Default::default(), font_context: FontContext::new(), counter: 0, @@ -56,27 +53,7 @@ impl WindowState { self.handle.invalidate(); } - fn render(&mut self) { - if self.pgpu_state.is_none() { - let handle = &self.handle; - let scale = handle.get_scale().unwrap(); - let insets = handle.content_insets().to_px(scale); - let mut size = handle.get_size().to_px(scale); - size.width -= insets.x_value(); - size.height -= insets.y_value(); - println!("render size: {:?}", size); - self.pgpu_state = Some( - render::PgpuState::new(handle, handle, size.width as usize, size.height as usize) - .unwrap(), - ); - } - if let Some(pgpu_state) = self.pgpu_state.as_mut() { - if let Some(_timestamps) = pgpu_state.pre_render() {} - test_scenes::render(&mut self.font_context, &mut self.scene, 0, self.counter); - self.counter += 1; - pgpu_state.render(&self.scene); - } - } + fn render(&mut self) {} } impl WinHandler for WindowState { diff --git a/src/render.rs b/src/render.rs deleted file mode 100644 index d9b28cb64..000000000 --- a/src/render.rs +++ /dev/null @@ -1,123 +0,0 @@ -use piet_gpu::Renderer; -use piet_gpu_hal::{ - CmdBuf, Error, ImageLayout, Instance, QueryPool, Semaphore, Session, SubmittedCmdBuf, Surface, - Swapchain, -}; -use piet_scene::Scene; - -pub const NUM_FRAMES: usize = 2; - -pub struct PgpuState { - #[allow(unused)] - instance: Instance, - #[allow(unused)] - surface: Option, - swapchain: Swapchain, - session: Session, - present_semaphores: Vec, - query_pools: Vec, - cmd_bufs: [Option; NUM_FRAMES], - submitted: [Option; NUM_FRAMES], - renderer: Renderer, - current_frame: usize, -} - -impl PgpuState { - pub fn new( - window: &dyn raw_window_handle::HasRawWindowHandle, - display: &dyn raw_window_handle::HasRawDisplayHandle, - width: usize, - height: usize, - ) -> Result { - println!("size: {}, {}", width, height); - let instance = Instance::new(Default::default())?; - let surface = unsafe { - instance - .surface(display.raw_display_handle(), window.raw_window_handle()) - .ok() - }; - unsafe { - let device = instance.device()?; - let swapchain = - instance.swapchain(width, height, &device, surface.as_ref().unwrap())?; - let session = Session::new(device); - let present_semaphores = (0..NUM_FRAMES) - .map(|_| session.create_semaphore()) - .collect::, Error>>()?; - let query_pools = (0..NUM_FRAMES) - .map(|_| session.create_query_pool(Renderer::QUERY_POOL_SIZE)) - .collect::, Error>>()?; - let cmd_bufs: [Option; NUM_FRAMES] = Default::default(); - let submitted: [Option; NUM_FRAMES] = Default::default(); - let renderer = Renderer::new(&session, width, height, NUM_FRAMES)?; - let current_frame = 0; - Ok(Self { - instance, - surface, - swapchain, - session, - present_semaphores, - query_pools, - cmd_bufs, - submitted, - renderer, - current_frame, - }) - } - } - - pub fn frame_index(&self) -> usize { - self.current_frame % NUM_FRAMES - } - - pub fn pre_render(&mut self) -> Option> { - let frame_idx = self.frame_index(); - if let Some(submitted) = self.submitted[frame_idx].take() { - self.cmd_bufs[frame_idx] = submitted.wait().unwrap(); - Some(unsafe { - self.session - .fetch_query_pool(&self.query_pools[frame_idx]) - .unwrap() - }) - } else { - None - } - } - - pub fn render(&mut self, scene: &Scene) { - let frame_idx = self.frame_index(); - self.renderer.upload_scene(&scene, frame_idx).unwrap(); - unsafe { - let (image_idx, acquisition_semaphore) = self.swapchain.next().unwrap(); - let swap_image = self.swapchain.image(image_idx); - let query_pool = &self.query_pools[frame_idx]; - let mut cmd_buf = self.cmd_bufs[frame_idx] - .take() - .unwrap_or_else(|| self.session.cmd_buf().unwrap()); - cmd_buf.begin(); - self.renderer.record(&mut cmd_buf, &query_pool, frame_idx); - - // Image -> Swapchain - cmd_buf.image_barrier(&swap_image, ImageLayout::Undefined, ImageLayout::BlitDst); - cmd_buf.blit_image(&self.renderer.image_dev, &swap_image); - cmd_buf.image_barrier(&swap_image, ImageLayout::BlitDst, ImageLayout::Present); - cmd_buf.finish(); - - self.submitted[frame_idx] = Some( - self.session - .run_cmd_buf( - cmd_buf, - &[&acquisition_semaphore], - &[&self.present_semaphores[frame_idx]], - ) - .unwrap(), - ); - - self.swapchain - .present(image_idx, &[&self.present_semaphores[frame_idx]]) - .unwrap(); - } - - self.current_frame += 1; - } -}