From b98ca9c49323152b665787c413cbed6573ba3348 Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Tue, 18 Apr 2023 17:10:21 +0200 Subject: [PATCH] Update smithay for 10-bit color support --- Cargo.lock | 346 ++++++++++++++-------- Cargo.toml | 2 +- src/backend/kms/mod.rs | 22 +- src/backend/render/cursor.rs | 14 +- src/backend/render/mod.rs | 33 ++- src/backend/winit.rs | 10 +- src/backend/x11.rs | 12 +- src/shell/element/mod.rs | 2 +- src/utils/iced.rs | 20 +- src/wayland/handlers/data_device.rs | 3 +- src/wayland/handlers/primary_selection.rs | 5 +- src/wayland/handlers/screencopy.rs | 101 +++++-- 12 files changed, 384 insertions(+), 186 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 32b39461..2123f52d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -173,7 +173,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.6.2", "object", "rustc-demangle", ] @@ -252,13 +252,13 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" +checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] @@ -377,9 +377,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core-graphics" @@ -451,7 +451,7 @@ dependencies = [ [[package]] name = "cosmic-protocols" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-protocols?branch=main#e0e47f02ce07d9f6712f1e76057de3a59406ed40" +source = "git+https://github.com/pop-os/cosmic-protocols?branch=main#7d80b59afc464a8ecdb8001333f18de554f299f4" dependencies = [ "bitflags", "wayland-backend", @@ -495,9 +495,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -513,9 +513,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -985,6 +985,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "errno-dragonfly" version = "0.1.2" @@ -997,9 +1008,9 @@ dependencies = [ [[package]] name = "euclid" -version = "0.22.7" +version = "0.22.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" +checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" dependencies = [ "num-traits", ] @@ -1014,7 +1025,7 @@ dependencies = [ "flume", "half", "lebe", - "miniz_oxide", + "miniz_oxide 0.6.2", "rayon-core", "smallvec", "zune-inflate", @@ -1029,6 +1040,15 @@ dependencies = [ "instant", ] +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", +] + [[package]] name = "find-crate" version = "0.6.3" @@ -1045,7 +1065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.6.2", ] [[package]] @@ -1166,9 +1186,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -1181,9 +1201,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -1191,15 +1211,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -1209,38 +1229,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.15", ] [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -1289,9 +1309,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -1309,9 +1329,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "js-sys", @@ -1330,6 +1350,16 @@ dependencies = [ "weezl", ] +[[package]] +name = "gif" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +dependencies = [ + "color_quant", + "weezl", +] + [[package]] name = "gimli" version = "0.27.2" @@ -1550,7 +1580,7 @@ dependencies = [ "iced_softbuffer", "iced_wgpu", "log", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", ] [[package]] @@ -1592,7 +1622,7 @@ dependencies = [ "image", "kamadak-exif", "log", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "resvg 0.18.0", "thiserror", "tiny-skia", @@ -1632,7 +1662,7 @@ dependencies = [ "lazy_static", "log", "raqote", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "softbuffer", ] @@ -1661,7 +1691,7 @@ dependencies = [ "iced_graphics", "iced_native", "log", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "wgpu", "wgpu_glyph", ] @@ -1683,28 +1713,28 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "image" -version = "0.24.5" +version = "0.24.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" dependencies = [ "bytemuck", "byteorder", "color_quant", "exr", - "gif", + "gif 0.12.0", "jpeg-decoder 0.3.0", "num-rational", "num-traits", "png", - "scoped_threadpool", + "qoi", "tiff", ] [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -1747,13 +1777,13 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" dependencies = [ "hermit-abi 0.3.1", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -1856,9 +1886,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.140" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "libcosmic" @@ -1903,7 +1933,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "845e5c255462c9bc7c71c17b996766b76e3c66f2ddd5846bfbc83f18382aa648" dependencies = [ - "errno", + "errno 0.2.8", "libseat-sys", "slog", ] @@ -1953,9 +1983,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" [[package]] name = "lock_api" @@ -2101,6 +2131,16 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + [[package]] name = "mio" version = "0.8.6" @@ -2164,7 +2204,7 @@ dependencies = [ "jni-sys", "ndk-sys", "num_enum", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "thiserror", ] @@ -2685,14 +2725,15 @@ checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "png" -version = "0.17.7" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" dependencies = [ "bitflags", "crc32fast", + "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.7.1", ] [[package]] @@ -2737,18 +2778,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.53" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] [[package]] name = "profiling" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74605f360ce573babfe43964cbe520294dcb081afbf8c108fc6e23036b4da2df" +checksum = "332cd62e95873ea4f41f3dfd6bbbfc5b52aec892d7e8d534197c4720a0bbbab2" [[package]] name = "puffin" @@ -2783,6 +2824,15 @@ dependencies = [ "vec1", ] +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + [[package]] name = "quick-xml" version = "0.23.1" @@ -2866,9 +2916,9 @@ dependencies = [ [[package]] name = "raw-window-handle" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f851a03551ceefd30132e447f07f96cb7011d6b658374f3aed847333adb5559" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "rayon" @@ -2929,9 +2979,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.2" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce168fea28d3e05f158bda4576cf0c844d5045bc2cc3620fa0292ed5bb5814c" +checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" dependencies = [ "aho-corasick", "memchr", @@ -2996,7 +3046,7 @@ version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34489194784b86c03c3d688258e2ba73f3c82700ba4673ee2ecad5ae540b9438" dependencies = [ - "gif", + "gif 0.11.4", "jpeg-decoder 0.2.6", "log", "pico-args 0.5.0", @@ -3069,9 +3119,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -3081,16 +3131,16 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.36.11" +version = "0.37.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" +checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" dependencies = [ "bitflags", - "errno", + "errno 0.3.1", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -3180,12 +3230,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" -[[package]] -name = "scoped_threadpool" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" - [[package]] name = "scopeguard" version = "1.1.0" @@ -3203,29 +3247,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.158" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" +checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.158" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" +checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.15", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "itoa", "ryu", @@ -3306,7 +3350,7 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "smithay" version = "0.3.0" -source = "git+https://github.com/smithay//smithay?rev=a5a3c2bd4e#a5a3c2bd4e129e6895e1884b075a9994c9affe66" +source = "git+https://github.com/smithay//smithay?rev=729043da68#729043da68317d3fa13507c267c0f410925dcc23" dependencies = [ "appendlist", "ash", @@ -3405,7 +3449,7 @@ dependencies = [ "log", "nix 0.26.2", "objc", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "redox_syscall 0.3.5", "thiserror", "wasm-bindgen", @@ -3420,9 +3464,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.6" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ "lock_api", ] @@ -3500,9 +3544,9 @@ checksum = "9ac8fb7895b4afa060ad731a32860db8755da3449a47e796d5ecf758db2671d4" [[package]] name = "swash" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb18e5888a9b5f0a89ea3ebdf6883dc479347ca9183b6c51a8f9cf2041f23a0" +checksum = "fba6e16b35fe4f8b2020640610575827892b4e2db5d289b3b76ff4e1cfd38752" dependencies = [ "yazi", "zeno", @@ -3521,9 +3565,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.8" +version = "2.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc02725fd69ab9f26eab07fad303e2497fad6fb9eba4f96c4d1687bdf704ad9" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" dependencies = [ "proc-macro2", "quote", @@ -3545,15 +3589,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.2.16", + "redox_syscall 0.3.5", "rustix", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -3582,7 +3626,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.8", + "syn 2.0.15", ] [[package]] @@ -4268,7 +4312,7 @@ dependencies = [ "log", "naga", "parking_lot 0.12.1", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "smallvec", "static_assertions", "wasm-bindgen", @@ -4295,7 +4339,7 @@ dependencies = [ "naga", "parking_lot 0.12.1", "profiling", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "smallvec", "thiserror", "web-sys", @@ -4332,7 +4376,7 @@ dependencies = [ "parking_lot 0.12.1", "profiling", "range-alloc", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "renderdoc-sys", "smallvec", "thiserror", @@ -4422,12 +4466,12 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", + "windows_aarch64_gnullvm 0.42.2", "windows_aarch64_msvc 0.42.2", "windows_i686_gnu 0.42.2", "windows_i686_msvc 0.42.2", "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", + "windows_x86_64_gnullvm 0.42.2", "windows_x86_64_msvc 0.42.2", ] @@ -4437,7 +4481,16 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", ] [[package]] @@ -4446,21 +4499,42 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", + "windows_aarch64_gnullvm 0.42.2", "windows_aarch64_msvc 0.42.2", "windows_i686_gnu 0.42.2", "windows_i686_msvc 0.42.2", "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", + "windows_x86_64_gnullvm 0.42.2", "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + [[package]] name = "windows_aarch64_msvc" version = "0.36.1" @@ -4473,6 +4547,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + [[package]] name = "windows_i686_gnu" version = "0.36.1" @@ -4485,6 +4565,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + [[package]] name = "windows_i686_msvc" version = "0.36.1" @@ -4497,6 +4583,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + [[package]] name = "windows_x86_64_gnu" version = "0.36.1" @@ -4509,12 +4601,24 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + [[package]] name = "windows_x86_64_msvc" version = "0.36.1" @@ -4527,6 +4631,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + [[package]] name = "winit" version = "0.27.5" @@ -4549,7 +4659,7 @@ dependencies = [ "parking_lot 0.12.1", "percent-encoding", "raw-window-handle 0.4.3", - "raw-window-handle 0.5.1", + "raw-window-handle 0.5.2", "smithay-client-toolkit", "wasm-bindgen", "wayland-client 0.29.5", @@ -4561,9 +4671,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deac0939bd6e4f24ab5919fbf751c97a8cfc8543bb083a305ed5c0c10bb241d1" +checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28" dependencies = [ "memchr", ] @@ -4676,9 +4786,9 @@ checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" [[package]] name = "yazi" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03b3e19c937b5b9bd8e52b1c88f30cce5c0d33d676cf174866175bb794ff658" +checksum = "ec4882895da007f1fb0524971b07f60fc742f457996d970443affd44a48ce954" [[package]] name = "zeno" @@ -4707,9 +4817,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.7+zstd.1.5.4" +version = "2.0.8+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" +checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" dependencies = [ "cc", "libc", @@ -4718,9 +4828,9 @@ dependencies = [ [[package]] name = "zune-inflate" -version = "0.2.52" +version = "0.2.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10ca8ee3897e213bf74d46641942575fb9b4bd9933cbce0b40eb320836da67e0" +checksum = "440a08fd59c6442e4b846ea9b10386c38307eae728b216e1ab2c305d1c9daaf8" dependencies = [ "simd-adler32", ] diff --git a/Cargo.toml b/Cargo.toml index 7fde36f9..36894378 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,4 +70,4 @@ debug = true lto = "fat" [patch."https://github.com/Smithay/smithay.git"] -smithay = { git = "https://github.com/smithay//smithay", rev = "a5a3c2bd4e" } +smithay = { git = "https://github.com/smithay//smithay", rev = "729043da68" } diff --git a/src/backend/kms/mod.rs b/src/backend/kms/mod.rs index 30665f99..b0d36de2 100644 --- a/src/backend/kms/mod.rs +++ b/src/backend/kms/mod.rs @@ -34,7 +34,7 @@ use smithay::{ renderer::{ buffer_dimensions, damage::{Error as RenderError, OutputNoMode}, - gles2::Gles2Renderbuffer, + gles::GlesRenderbuffer, glow::GlowRenderer, multigpu::{gbm::GbmGlesBackend, Error as MultiError, GpuManager}, utils::draw_render_elements, @@ -69,6 +69,7 @@ use smithay::{ dmabuf::{get_dmabuf, DmabufFeedbackBuilder, DmabufGlobal}, relative_pointer::RelativePointerManagerState, seat::WaylandFocus, + shm::{shm_format_to_fourcc, with_buffer_contents}, }, xwayland::XWaylandClientData, }; @@ -1052,7 +1053,7 @@ impl Surface { })?; self.fps.elements(); - let res = compositor.render_frame::<_, _, Gles2Renderbuffer>( + let res = compositor.render_frame::<_, _, GlesRenderbuffer>( &mut renderer, &elements, CLEAR_COLOR, @@ -1083,9 +1084,13 @@ impl Surface { renderer.bind(dmabuf).map_err(RenderError::Rendering)?; } else { let size = buffer_dimensions(buffer).unwrap(); + let format = + with_buffer_contents(buffer, |_, _, data| shm_format_to_fourcc(data.format)) + .map_err(|_| OutputNoMode)? // eh, we have to do some error + .expect("We should be able to convert all hardcoded shm screencopy formats"); let render_buffer = - Offscreen::::create_buffer( - renderer, size, + Offscreen::::create_buffer( + renderer, format, size, ) .map_err(RenderError::Rendering)?; renderer @@ -1160,13 +1165,11 @@ impl Surface { .single_renderer(&source_node) .unwrap() .dmabuf_formats() - .copied() .collect::>(); let target_formats = api .single_renderer(target_node) .unwrap() .dmabuf_formats() - .copied() .collect::>(); get_surface_dmabuf_feedback( source_node, @@ -1293,7 +1296,12 @@ impl KmsState { GbmBufferFlags::RENDERING | GbmBufferFlags::SCANOUT, ), device.gbm.clone(), - &[Fourcc::Abgr8888, Fourcc::Argb8888], + &[ + Fourcc::Abgr2101010, + Fourcc::Argb2101010, + Fourcc::Abgr8888, + Fourcc::Argb8888, + ], device.formats.clone(), drm.cursor_size(), Some(device.gbm.clone()), diff --git a/src/backend/render/cursor.rs b/src/backend/render/cursor.rs index 4e430702..14765568 100644 --- a/src/backend/render/cursor.rs +++ b/src/backend/render/cursor.rs @@ -2,12 +2,15 @@ use crate::utils::prelude::*; use smithay::{ - backend::renderer::{ - element::{ - surface::{render_elements_from_surface_tree, WaylandSurfaceRenderElement}, - texture::{TextureBuffer, TextureRenderElement}, + backend::{ + allocator::Fourcc, + renderer::{ + element::{ + surface::{render_elements_from_surface_tree, WaylandSurfaceRenderElement}, + texture::{TextureBuffer, TextureRenderElement}, + }, + ImportAll, ImportMem, Renderer, }, - ImportAll, ImportMem, Renderer, }, input::{ pointer::{CursorImageAttributes, CursorImageStatus}, @@ -264,6 +267,7 @@ where let texture = TextureBuffer::from_memory( renderer, &frame.pixels_rgba, + Fourcc::Abgr8888, (frame.width as i32, frame.height as i32), false, integer_scale as i32, diff --git a/src/backend/render/mod.rs b/src/backend/render/mod.rs index 4798ccca..e48e86c4 100644 --- a/src/backend/render/mod.rs +++ b/src/backend/render/mod.rs @@ -37,8 +37,8 @@ use smithay::{ buffer_dimensions, damage::{Error as RenderError, OutputDamageTracker, OutputNoMode}, element::{Element, RenderElement, RenderElementStates}, - gles2::{ - element::PixelShaderElement, Gles2Error, Gles2PixelProgram, Gles2Renderer, Uniform, + gles::{ + element::PixelShaderElement, GlesError, GlesPixelProgram, GlesRenderer, Uniform, UniformName, UniformType, }, glow::GlowRenderer, @@ -48,7 +48,10 @@ use smithay::{ }, output::Output, utils::{Logical, Physical, Point, Rectangle, Size}, - wayland::dmabuf::get_dmabuf, + wayland::{ + dmabuf::get_dmabuf, + shm::{shm_format_to_fourcc, with_buffer_contents}, + }, }; use tracing::warn; @@ -66,12 +69,12 @@ pub static CLEAR_COLOR: [f32; 4] = [0.153, 0.161, 0.165, 1.0]; pub static FOCUS_INDICATOR_COLOR: [f32; 4] = [0.580, 0.921, 0.921, 1.0]; pub static FOCUS_INDICATOR_SHADER: &str = include_str!("./shaders/focus_indicator.frag"); -pub struct IndicatorShader(pub Gles2PixelProgram); +pub struct IndicatorShader(pub GlesPixelProgram); struct IndicatorElement(pub RefCell); impl IndicatorShader { - pub fn get(renderer: &R) -> Gles2PixelProgram { - Borrow::::borrow(renderer.glow_renderer()) + pub fn get(renderer: &R) -> GlesPixelProgram { + Borrow::::borrow(renderer.glow_renderer()) .egl_context() .user_data() .get::() @@ -93,7 +96,7 @@ impl IndicatorShader { geo.size + Size::from(thickness_size), ); - let user_data = Borrow::::borrow(renderer.glow_renderer()) + let user_data = Borrow::::borrow(renderer.glow_renderer()) .egl_context() .user_data(); @@ -129,9 +132,9 @@ impl IndicatorShader { } } -pub fn init_shaders(renderer: &mut R) -> Result<(), Gles2Error> { +pub fn init_shaders(renderer: &mut R) -> Result<(), GlesError> { let glow_renderer = renderer.glow_renderer_mut(); - let gles_renderer: &mut Gles2Renderer = glow_renderer.borrow_mut(); + let gles_renderer: &mut GlesRenderer = glow_renderer.borrow_mut(); let indicator_shader = gles_renderer.compile_custom_pixel_shader( FOCUS_INDICATOR_SHADER, @@ -234,7 +237,7 @@ pub fn workspace_elements( where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, ::TextureId: Clone + 'static, - ::Error: From, + ::Error: From, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, { @@ -333,7 +336,7 @@ where + Blit + AsGlowRenderer, ::TextureId: Clone + 'static, - ::Error: From, + ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, @@ -383,7 +386,7 @@ where + Blit + AsGlowRenderer, ::TextureId: Clone + 'static, - ::Error: From, + ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, @@ -456,8 +459,12 @@ where renderer.bind(dmabuf).map_err(RenderError::Rendering)?; } else { let size = buffer_dimensions(buffer).unwrap(); + let format = + with_buffer_contents(buffer, |_, _, data| shm_format_to_fourcc(data.format)) + .map_err(|_| OutputNoMode)? // eh, we have to do some error + .expect("We should be able to convert all hardcoded shm screencopy formats"); let render_buffer = renderer - .create_buffer(size) + .create_buffer(format, size) .map_err(RenderError::Rendering)?; renderer .bind(render_buffer) diff --git a/src/backend/winit.rs b/src/backend/winit.rs index 0fb26f6b..3bec32f6 100644 --- a/src/backend/winit.rs +++ b/src/backend/winit.rs @@ -13,7 +13,7 @@ use smithay::{ backend::{ egl::EGLDevice, renderer::{ - damage::OutputDamageTracker, gles2::Gles2Renderbuffer, glow::GlowRenderer, ImportDma, + damage::OutputDamageTracker, gles::GlesRenderbuffer, glow::GlowRenderer, ImportDma, ImportEgl, }, winit::{self, WinitEvent, WinitGraphicsBackend, WinitVirtualDevice}, @@ -54,7 +54,7 @@ impl WinitState { let age = self.backend.buffer_age().unwrap_or(0); let surface = self.backend.egl_surface(); - match render::render_output::<_, _, Gles2Renderbuffer, _>( + match render::render_output::<_, _, GlesRenderbuffer, _>( None, self.backend.renderer(), surface.clone(), @@ -273,11 +273,7 @@ fn init_egl_client_side( let render_node = EGLDevice::device_for_display(renderer.renderer().egl_context().display()) .and_then(|device| device.try_get_render_node()); - let dmabuf_formats = renderer - .renderer() - .dmabuf_formats() - .cloned() - .collect::>(); + let dmabuf_formats = renderer.renderer().dmabuf_formats().collect::>(); let dmabuf_default_feedback = match render_node { Ok(Some(node)) => { let dmabuf_default_feedback = diff --git a/src/backend/x11.rs b/src/backend/x11.rs index 60595d76..e63afe26 100644 --- a/src/backend/x11.rs +++ b/src/backend/x11.rs @@ -20,7 +20,7 @@ use smithay::{ egl::{EGLContext, EGLDevice, EGLDisplay}, input::{Event, InputEvent}, renderer::{ - damage::OutputDamageTracker, gles2::Gles2Renderbuffer, glow::GlowRenderer, Bind, + damage::OutputDamageTracker, gles::GlesRenderbuffer, glow::GlowRenderer, Bind, ImportDma, ImportEgl, }, vulkan::{version::Version, Instance, PhysicalDevice}, @@ -221,7 +221,7 @@ impl Surface { .surface .buffer() .with_context(|| "Failed to allocate buffer")?; - match render::render_output::<_, _, Gles2Renderbuffer, _>( + match render::render_output::<_, _, GlesRenderbuffer, _>( None, renderer, buffer.clone(), @@ -490,11 +490,11 @@ where "Unable to initialize bind display to EGL. Some older clients may not work correctly." ) } - let dmabuf_formats = renderer.dmabuf_formats().cloned().collect::>(); - let default_feedback = DmabufFeedbackBuilder::new(render_node.dev_id(), dmabuf_formats.clone()) - .build() - .unwrap(); + let default_feedback = + DmabufFeedbackBuilder::new(render_node.dev_id(), renderer.dmabuf_formats()) + .build() + .unwrap(); state .common .dmabuf_state diff --git a/src/shell/element/mod.rs b/src/shell/element/mod.rs index b66792e0..ff8c5021 100644 --- a/src/shell/element/mod.rs +++ b/src/shell/element/mod.rs @@ -12,7 +12,7 @@ use smithay::{ input::KeyState, renderer::{ element::{AsRenderElements, Element, RenderElement, UnderlyingStorage}, - gles2::element::PixelShaderElement, + gles::element::PixelShaderElement, glow::GlowRenderer, multigpu::Error as MultiError, ImportAll, ImportMem, Renderer, diff --git a/src/utils/iced.rs b/src/utils/iced.rs index f7ede6c8..901448fc 100644 --- a/src/utils/iced.rs +++ b/src/utils/iced.rs @@ -28,6 +28,7 @@ use iced_softbuffer::{ use ordered_float::OrderedFloat; use smithay::{ backend::{ + allocator::Fourcc, input::{ButtonState, KeyState}, renderer::{ element::{ @@ -222,7 +223,8 @@ impl IcedElement

{ .to_f64() .to_buffer(**scale, Transform::Normal) .to_i32_round(); - *buffer = MemoryRenderBuffer::new(buffer_size, 1, Transform::Normal, None); + *buffer = + MemoryRenderBuffer::new(Fourcc::Argb8888, buffer_size, 1, Transform::Normal, None); *needs_redraw = true; } internal_ref.update(true); @@ -488,7 +490,13 @@ impl SpaceElement for IcedElement

{ internal.buffers.insert( OrderedFloat(scale), ( - MemoryRenderBuffer::new(buffer_size, 1, Transform::Normal, None), + MemoryRenderBuffer::new( + Fourcc::Argb8888, + buffer_size, + 1, + Transform::Normal, + None, + ), true, ), ); @@ -532,7 +540,13 @@ impl SpaceElement for IcedElement

{ internal_ref.buffers.insert( scale, ( - MemoryRenderBuffer::new(buffer_size, 1, Transform::Normal, None), + MemoryRenderBuffer::new( + Fourcc::Argb8888, + buffer_size, + 1, + Transform::Normal, + None, + ), true, ), ); diff --git a/src/wayland/handlers/data_device.rs b/src/wayland/handlers/data_device.rs index 91519f02..24703327 100644 --- a/src/wayland/handlers/data_device.rs +++ b/src/wayland/handlers/data_device.rs @@ -57,7 +57,7 @@ impl DataDeviceHandler for State { &self.common.data_device_state } - fn new_selection(&mut self, source: Option) { + fn new_selection(&mut self, source: Option, _seat: Seat) { if let Some(state) = self.common.xwayland_state.as_mut() { if let Some(xwm) = state.xwm.as_mut() { if let Some(source) = &source { @@ -80,6 +80,7 @@ impl DataDeviceHandler for State { &mut self, mime_type: String, fd: OwnedFd, + _seat: Seat, _user_data: &Self::SelectionUserData, ) { if let Some(xwm) = self diff --git a/src/wayland/handlers/primary_selection.rs b/src/wayland/handlers/primary_selection.rs index 51a7d23e..763ead0c 100644 --- a/src/wayland/handlers/primary_selection.rs +++ b/src/wayland/handlers/primary_selection.rs @@ -3,7 +3,7 @@ use crate::state::State; use smithay::{ delegate_primary_selection, - wayland::primary_selection::{PrimarySelectionHandler, PrimarySelectionState, with_source_metadata}, xwayland::xwm::{XwmId, SelectionType}, reexports::wayland_protocols::wp::primary_selection::zv1::server::zwp_primary_selection_source_v1::ZwpPrimarySelectionSourceV1, + wayland::primary_selection::{PrimarySelectionHandler, PrimarySelectionState, with_source_metadata}, xwayland::xwm::{XwmId, SelectionType}, reexports::wayland_protocols::wp::primary_selection::zv1::server::zwp_primary_selection_source_v1::ZwpPrimarySelectionSourceV1, input::Seat, }; use tracing::warn; @@ -16,7 +16,7 @@ impl PrimarySelectionHandler for State { &self.common.primary_selection_state } - fn new_selection(&mut self, source: Option) { + fn new_selection(&mut self, source: Option, _seat: Seat) { if let Some(state) = self.common.xwayland_state.as_mut() { if let Some(xwm) = state.xwm.as_mut() { if let Some(source) = &source { @@ -36,6 +36,7 @@ impl PrimarySelectionHandler for State { &mut self, mime_type: String, fd: OwnedFd, + _seat: Seat, _user_data: &Self::SelectionUserData, ) { if let Some(xwm) = self diff --git a/src/wayland/handlers/screencopy.rs b/src/wayland/handlers/screencopy.rs index cbb7638d..8fffcfea 100644 --- a/src/wayland/handlers/screencopy.rs +++ b/src/wayland/handlers/screencopy.rs @@ -1,4 +1,5 @@ use std::{ + borrow::Borrow, cell::RefCell, collections::HashSet, ops::{Deref, DerefMut}, @@ -16,12 +17,12 @@ use smithay::{ egl::EGLDevice, renderer::{ buffer_dimensions, buffer_type, - damage::{Error as DTError, OutputDamageTracker}, + damage::{Error as DTError, OutputDamageTracker, OutputNoMode}, element::{ surface::WaylandSurfaceRenderElement, AsRenderElements, RenderElement, RenderElementStates, }, - gles2::{Gles2Error, Gles2Renderbuffer}, + gles::{Capability, GlesError, GlesRenderbuffer, GlesRenderer}, Bind, Blit, BufferType, ExportMem, ImportAll, ImportMem, Offscreen, Renderer, }, }, @@ -35,7 +36,7 @@ use smithay::{ wayland::{ dmabuf::get_dmabuf, seat::WaylandFocus, - shm::{with_buffer_contents, with_buffer_contents_mut}, + shm::{shm_format_to_fourcc, with_buffer_contents, with_buffer_contents_mut}, }, xwayland::XWaylandClientData, }; @@ -209,6 +210,24 @@ impl ScreencopyHandler for State { stride: size.w as u32 * 4, }, ]; + if (renderer as &dyn Borrow) + .borrow() + .capabilities() + .contains(&Capability::ColorTransformations) + { + formats.extend([ + BufferInfo::Shm { + format: ShmFormat::Abgr2101010, + size, + stride: size.w as u32 * 4, + }, + BufferInfo::Shm { + format: ShmFormat::Xbgr2101010, + size, + stride: size.w as u32 * 4, + }, + ]); + } if let Some(node) = EGLDevice::device_for_display(renderer.egl_context().display()) .ok() @@ -298,7 +317,10 @@ impl ScreencopyHandler for State { if let Some(BufferType::Shm) = buffer_type(¶ms.buffer) { if with_buffer_contents(¶ms.buffer, |_, _, info| { - info.format != ShmFormat::Abgr8888 && info.format != ShmFormat::Xbgr8888 + info.format != ShmFormat::Abgr8888 + && info.format != ShmFormat::Xbgr8888 + && info.format != ShmFormat::Abgr2101010 + && info.format != ShmFormat::Xbgr2101010 }) .unwrap() { @@ -449,6 +471,24 @@ fn formats_for_output( stride: mode.w as u32 * 4, }, ]; + if (renderer as &dyn Borrow) + .borrow() + .capabilities() + .contains(&Capability::ColorTransformations) + { + formats.extend([ + BufferInfo::Shm { + format: ShmFormat::Abgr2101010, + size: mode, + stride: mode.w as u32 * 4, + }, + BufferInfo::Shm { + format: ShmFormat::Xbgr2101010, + size: mode, + stride: mode.w as u32 * 4, + }, + ]); + } if let Some(node) = EGLDevice::device_for_display(renderer.egl_context().display()) .ok() @@ -509,6 +549,8 @@ where let width = data.width as i32; let height = data.height as i32; let stride = data.stride as i32; + let format = shm_format_to_fourcc(data.format) + .expect("We should be able to convert all hardcoded shm screencopy formats"); // number of bytes per pixel // TODO: compute from data.format @@ -517,8 +559,8 @@ where // ensure consistency, the SHM handler of smithay should ensure this assert!((offset + (height - 1) * stride + width * pixelsize) as usize <= len); - let mapping = - renderer.copy_framebuffer(Rectangle::from_loc_and_size((0, 0), buffer_size))?; + let mapping = renderer + .copy_framebuffer(Rectangle::from_loc_and_size((0, 0), buffer_size), format)?; let gl_data = renderer.map_texture(&mapping)?; assert!((width * height * pixelsize) as usize <= gl_data.len()); @@ -613,11 +655,11 @@ pub fn render_output_to_buffer( + ImportMem + ExportMem + Bind - + Offscreen + + Offscreen + Blit + AsGlowRenderer, ::TextureId: Clone + 'static, - ::Error: From, + ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, @@ -628,7 +670,7 @@ pub fn render_output_to_buffer( }; if let Ok(dmabuf) = get_dmabuf(buffer) { - render_output::<_, _, Gles2Renderbuffer, Dmabuf>( + render_output::<_, _, GlesRenderbuffer, Dmabuf>( node, renderer, dmabuf, @@ -642,9 +684,14 @@ pub fn render_output_to_buffer( ) } else { let size = buffer_dimensions(buffer).unwrap(); - let render_buffer = Offscreen::::create_buffer(renderer, size) - .map_err(DTError::Rendering)?; - render_output::<_, _, Gles2Renderbuffer, Dmabuf>( + let format = + with_buffer_contents(buffer, |_, _, data| shm_format_to_fourcc(data.format)) + .map_err(|_| DTError::OutputNoMode(OutputNoMode))? // eh, we have to do some error + .expect("We should be able to convert all hardcoded shm screencopy formats"); + let render_buffer = + Offscreen::::create_buffer(renderer, format, size) + .map_err(DTError::Rendering)?; + render_output::<_, _, GlesRenderbuffer, Dmabuf>( node, renderer, render_buffer, @@ -740,11 +787,11 @@ pub fn render_workspace_to_buffer( + ImportMem + ExportMem + Bind - + Offscreen + + Offscreen + Blit + AsGlowRenderer, ::TextureId: Clone + 'static, - ::Error: From, + ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, @@ -754,7 +801,7 @@ pub fn render_workspace_to_buffer( ScreencopyCursorMode::Captured(_) | ScreencopyCursorMode::None => CursorMode::None, }; if let Ok(dmabuf) = get_dmabuf(buffer) { - render_workspace::<_, _, Gles2Renderbuffer, Dmabuf>( + render_workspace::<_, _, GlesRenderbuffer, Dmabuf>( node, renderer, dmabuf, @@ -770,9 +817,14 @@ pub fn render_workspace_to_buffer( ) } else { let size = buffer_dimensions(buffer).unwrap(); - let render_buffer = Offscreen::::create_buffer(renderer, size) - .map_err(DTError::Rendering)?; - render_workspace::<_, _, Gles2Renderbuffer, Dmabuf>( + let format = + with_buffer_contents(buffer, |_, _, data| shm_format_to_fourcc(data.format)) + .map_err(|_| DTError::OutputNoMode(OutputNoMode))? // eh, we have to do some error + .expect("We should be able to convert all hardcoded shm screencopy formats"); + let render_buffer = + Offscreen::::create_buffer(renderer, format, size) + .map_err(DTError::Rendering)?; + render_workspace::<_, _, GlesRenderbuffer, Dmabuf>( node, renderer, render_buffer, @@ -881,11 +933,11 @@ pub fn render_window_to_buffer( + ImportMem + ExportMem + Bind - + Offscreen + + Offscreen + Blit + AsGlowRenderer, ::TextureId: Clone + 'static, - ::Error: From, + ::Error: From, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, { @@ -942,8 +994,13 @@ pub fn render_window_to_buffer( renderer.bind(dmabuf).map_err(DTError::Rendering)?; } else { let size = buffer_dimensions(buffer).unwrap(); - let render_buffer = Offscreen::::create_buffer(renderer, size) - .map_err(DTError::Rendering)?; + let format = + with_buffer_contents(buffer, |_, _, data| shm_format_to_fourcc(data.format)) + .map_err(|_| DTError::OutputNoMode(OutputNoMode))? // eh, we have to do some error + .expect("We should be able to convert all hardcoded shm screencopy formats"); + let render_buffer = + Offscreen::::create_buffer(renderer, format, size) + .map_err(DTError::Rendering)?; renderer.bind(render_buffer).map_err(DTError::Rendering)?; }