deps: Update smithay
This commit is contained in:
parent
f9d50e77a5
commit
bce88d2514
9 changed files with 126 additions and 170 deletions
90
Cargo.lock
generated
90
Cargo.lock
generated
|
|
@ -341,7 +341,7 @@ dependencies = [
|
||||||
"smithay-egui",
|
"smithay-egui",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"wayland-backend",
|
"wayland-backend",
|
||||||
"wayland-scanner 0.30.0-beta.13",
|
"wayland-scanner 0.30.0-beta.15",
|
||||||
"xcursor",
|
"xcursor",
|
||||||
"xdg",
|
"xdg",
|
||||||
"xkbcommon 0.4.1",
|
"xkbcommon 0.4.1",
|
||||||
|
|
@ -354,8 +354,8 @@ source = "git+https://github.com/pop-os/cosmic-protocols?branch=main#a3e0aa740a3
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"wayland-backend",
|
"wayland-backend",
|
||||||
"wayland-protocols 0.30.0-beta.13",
|
"wayland-protocols 0.30.0-beta.15",
|
||||||
"wayland-scanner 0.30.0-beta.13",
|
"wayland-scanner 0.30.0-beta.15",
|
||||||
"wayland-server",
|
"wayland-server",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -605,7 +605,7 @@ dependencies = [
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"egui",
|
"egui",
|
||||||
"glow",
|
"glow",
|
||||||
"memoffset",
|
"memoffset 0.6.5",
|
||||||
"tracing",
|
"tracing",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"web-sys",
|
"web-sys",
|
||||||
|
|
@ -921,12 +921,12 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "io-lifetimes"
|
name = "io-lifetimes"
|
||||||
version = "1.0.0-rc1"
|
version = "1.0.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6f65dae1d3aa98e6877917ab4e6fdbfdfb00e95885ea7c4f4f29e3a5dfc08fdf"
|
checksum = "46112a93252b123d31a119a8d1a1ac19deac4fac6e0e8b0df58f0d4e5870e63c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.36.1",
|
"windows-sys 0.42.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -1101,6 +1101,15 @@ dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memoffset"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "minimal-lexical"
|
name = "minimal-lexical"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
|
|
@ -1205,7 +1214,7 @@ dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"memoffset",
|
"memoffset 0.6.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -1217,7 +1226,7 @@ dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"memoffset",
|
"memoffset 0.6.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -1230,7 +1239,7 @@ dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"memoffset",
|
"memoffset 0.6.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -1820,7 +1829,7 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smithay"
|
name = "smithay"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
source = "git+https://github.com/pop-os/smithay?rev=8f6261bbf6#8f6261bbf6b2158e5cb451c6537378772eae7fe2"
|
source = "git+https://github.com/pop-os/smithay?rev=51368f56bc#51368f56bc459c7dc5b9eff0385cd0bc49db53b2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"appendlist",
|
"appendlist",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
|
|
@ -1852,11 +1861,11 @@ dependencies = [
|
||||||
"udev",
|
"udev",
|
||||||
"wayland-backend",
|
"wayland-backend",
|
||||||
"wayland-egl",
|
"wayland-egl",
|
||||||
"wayland-protocols 0.30.0-beta.13",
|
"wayland-protocols 0.30.0-beta.15",
|
||||||
"wayland-protocols-misc",
|
"wayland-protocols-misc",
|
||||||
"wayland-protocols-wlr",
|
"wayland-protocols-wlr",
|
||||||
"wayland-server",
|
"wayland-server",
|
||||||
"wayland-sys 0.30.0-beta.13",
|
"wayland-sys 0.30.1",
|
||||||
"winit",
|
"winit",
|
||||||
"x11rb",
|
"x11rb",
|
||||||
"xkbcommon 0.5.0",
|
"xkbcommon 0.5.0",
|
||||||
|
|
@ -1884,14 +1893,14 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smithay-egui"
|
name = "smithay-egui"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/Smithay/smithay-egui.git?rev=13626ad3f4#13626ad3f41a6f877929802eb645a10e5bd1abae"
|
source = "git+https://github.com/Smithay/smithay-egui.git?rev=b2be360015#b2be360015aac0a4f0ed934d7ac3df72aced8f2a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cgmath",
|
"cgmath",
|
||||||
"egui",
|
"egui",
|
||||||
"egui_extras",
|
"egui_extras",
|
||||||
"egui_glow",
|
"egui_glow",
|
||||||
"image",
|
"image",
|
||||||
"memoffset",
|
"memoffset 0.6.5",
|
||||||
"smithay",
|
"smithay",
|
||||||
"xkbcommon 0.4.1",
|
"xkbcommon 0.4.1",
|
||||||
]
|
]
|
||||||
|
|
@ -2257,9 +2266,9 @@ checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wayland-backend"
|
name = "wayland-backend"
|
||||||
version = "0.1.0-beta.13"
|
version = "0.1.0-beta.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f3f96c52ca34b33e6bb55497327428be54dad648973aa5d3d1e02982d2fcc298"
|
checksum = "5fd01ec68102e595371e585da12bb7d2785b93639a1b3a9f99f1030634c526ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"downcast-rs",
|
"downcast-rs",
|
||||||
|
|
@ -2267,7 +2276,7 @@ dependencies = [
|
||||||
"nix 0.25.0",
|
"nix 0.25.0",
|
||||||
"scoped-tls",
|
"scoped-tls",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"wayland-sys 0.30.0-beta.13",
|
"wayland-sys 0.30.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -2311,13 +2320,13 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wayland-egl"
|
name = "wayland-egl"
|
||||||
version = "0.30.0-beta.13"
|
version = "0.30.0-beta.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "da29b4a38d5cd89b90786305b62c21889d7d97bb1e2ccf46a94906832898e20e"
|
checksum = "7bee5cad71e703c1cda119cd614ef8c8f1c6c5d04927c33f3485bdf22bef00db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"wayland-backend",
|
"wayland-backend",
|
||||||
"wayland-sys 0.30.0-beta.13",
|
"wayland-sys 0.30.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -2334,39 +2343,39 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wayland-protocols"
|
name = "wayland-protocols"
|
||||||
version = "0.30.0-beta.13"
|
version = "0.30.0-beta.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e32104ba51988754f4429dbb59c7b7fd2ccf1feaa0009bb59e49a5e2f91e985d"
|
checksum = "89c142821785f87f5c0c14d29b37b05b458a76f88f5b86d24e7be259e5659f48"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"wayland-backend",
|
"wayland-backend",
|
||||||
"wayland-scanner 0.30.0-beta.13",
|
"wayland-scanner 0.30.0-beta.15",
|
||||||
"wayland-server",
|
"wayland-server",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wayland-protocols-misc"
|
name = "wayland-protocols-misc"
|
||||||
version = "0.1.0-beta.13"
|
version = "0.1.0-beta.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d6d0be545a3b35869060efa6e19622f6b071a9ee8d09da5ffa48f072524fddaa"
|
checksum = "ba9acd1d036b489da5036c257fe0b8bb815a202a35e6e7455f1262e2b6af0fc6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"wayland-backend",
|
"wayland-backend",
|
||||||
"wayland-protocols 0.30.0-beta.13",
|
"wayland-protocols 0.30.0-beta.15",
|
||||||
"wayland-scanner 0.30.0-beta.13",
|
"wayland-scanner 0.30.0-beta.15",
|
||||||
"wayland-server",
|
"wayland-server",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wayland-protocols-wlr"
|
name = "wayland-protocols-wlr"
|
||||||
version = "0.1.0-beta.13"
|
version = "0.1.0-beta.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "130613a48629204e4ab50ea4b5de2efa2e17c58f71a5af15b39535f99421f8c3"
|
checksum = "f3fb9e3d2d11e195572835a6a447ed98a5201f461f32ebcf3e8d3ec9a0502cfd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"wayland-backend",
|
"wayland-backend",
|
||||||
"wayland-protocols 0.30.0-beta.13",
|
"wayland-protocols 0.30.0-beta.15",
|
||||||
"wayland-scanner 0.30.0-beta.13",
|
"wayland-scanner 0.30.0-beta.15",
|
||||||
"wayland-server",
|
"wayland-server",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -2383,9 +2392,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wayland-scanner"
|
name = "wayland-scanner"
|
||||||
version = "0.30.0-beta.13"
|
version = "0.30.0-beta.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1fb55ca28710dcc155078db4e2bd29aacf24bd311261c48750f38c6c5430bf1f"
|
checksum = "528e351affadac21fa63ac149e68747a43500bd93d742c42b5b22473890fbfbb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quick-xml",
|
"quick-xml",
|
||||||
|
|
@ -2395,16 +2404,17 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wayland-server"
|
name = "wayland-server"
|
||||||
version = "0.30.0-beta.13"
|
version = "0.30.0-beta.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ba5ed6de3d02e0bcfee03cf23b8f8e923fb3707d826bcb1ef10ef34647778e20"
|
checksum = "ee9869ba2ca46e6689ef235a44ef1c452d7d7a89a3bc076411acf524ddf73bfa"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"downcast-rs",
|
"downcast-rs",
|
||||||
|
"io-lifetimes",
|
||||||
"nix 0.25.0",
|
"nix 0.25.0",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"wayland-backend",
|
"wayland-backend",
|
||||||
"wayland-scanner 0.30.0-beta.13",
|
"wayland-scanner 0.30.0-beta.15",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -2420,14 +2430,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wayland-sys"
|
name = "wayland-sys"
|
||||||
version = "0.30.0-beta.13"
|
version = "0.30.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "882bda56e8397384ad66ec0ebe763e0b3b53153a6327344f7d74b85981a271e1"
|
checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dlib",
|
"dlib",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"memoffset",
|
"memoffset 0.7.1",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ indexmap = "1.8.0"
|
||||||
xdg = "^2.1"
|
xdg = "^2.1"
|
||||||
ron = "0.7"
|
ron = "0.7"
|
||||||
libsystemd = "0.5"
|
libsystemd = "0.5"
|
||||||
wayland-backend = "=0.1.0-beta.13"
|
wayland-backend = "=0.1.0-beta.15"
|
||||||
wayland-scanner = "=0.30.0-beta.13"
|
wayland-scanner = "=0.30.0-beta.15"
|
||||||
cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols", branch = "main", default-features = false, features = ["server"] }
|
cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols", branch = "main", default-features = false, features = ["server"] }
|
||||||
|
|
||||||
[dependencies.smithay]
|
[dependencies.smithay]
|
||||||
|
|
@ -43,7 +43,7 @@ features = ["backend_drm", "backend_gbm", "backend_egl", "backend_libinput", "ba
|
||||||
|
|
||||||
[dependencies.smithay-egui]
|
[dependencies.smithay-egui]
|
||||||
git = "https://github.com/Smithay/smithay-egui.git"
|
git = "https://github.com/Smithay/smithay-egui.git"
|
||||||
rev = "13626ad3f4"
|
rev = "b2be360015"
|
||||||
features = ["svg"]
|
features = ["svg"]
|
||||||
optional = true
|
optional = true
|
||||||
|
|
||||||
|
|
@ -62,4 +62,4 @@ debug = true
|
||||||
lto = "fat"
|
lto = "fat"
|
||||||
|
|
||||||
[patch."https://github.com/Smithay/smithay.git"]
|
[patch."https://github.com/Smithay/smithay.git"]
|
||||||
smithay = { git = "https://github.com/pop-os/smithay", rev = "8f6261bbf6" }
|
smithay = { git = "https://github.com/pop-os/smithay", rev = "51368f56bc" }
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,9 @@ use anyhow::{Context, Result};
|
||||||
use smithay::{
|
use smithay::{
|
||||||
backend::{
|
backend::{
|
||||||
allocator::{dmabuf::Dmabuf, gbm::GbmDevice, Format},
|
allocator::{dmabuf::Dmabuf, gbm::GbmDevice, Format},
|
||||||
drm::{DrmDevice, DrmEvent, DrmEventTime, DrmNode, GbmBufferedSurface, NodeType},
|
drm::{
|
||||||
|
DrmDevice, DrmDeviceFd, DrmEvent, DrmEventTime, DrmNode, GbmBufferedSurface, NodeType,
|
||||||
|
},
|
||||||
egl::{EGLContext, EGLDevice, EGLDisplay},
|
egl::{EGLContext, EGLDevice, EGLDisplay},
|
||||||
input::InputEvent,
|
input::InputEvent,
|
||||||
libinput::{LibinputInputBackend, LibinputSessionInterface},
|
libinput::{LibinputInputBackend, LibinputSessionInterface},
|
||||||
|
|
@ -45,7 +47,7 @@ use smithay::{
|
||||||
},
|
},
|
||||||
utils::{
|
utils::{
|
||||||
signaling::{Linkable, SignalToken, Signaler},
|
signaling::{Linkable, SignalToken, Signaler},
|
||||||
Size, Transform,
|
DeviceFd, Size, Transform,
|
||||||
},
|
},
|
||||||
wayland::dmabuf::DmabufGlobal,
|
wayland::dmabuf::DmabufGlobal,
|
||||||
};
|
};
|
||||||
|
|
@ -53,16 +55,13 @@ use smithay::{
|
||||||
use std::{
|
use std::{
|
||||||
cell::RefCell,
|
cell::RefCell,
|
||||||
collections::{HashMap, HashSet},
|
collections::{HashMap, HashSet},
|
||||||
os::unix::io::{FromRawFd, OwnedFd},
|
os::unix::io::FromRawFd,
|
||||||
path::PathBuf,
|
path::PathBuf,
|
||||||
rc::Rc,
|
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
mod drm_helpers;
|
mod drm_helpers;
|
||||||
mod session_fd;
|
|
||||||
mod socket;
|
mod socket;
|
||||||
use session_fd::*;
|
|
||||||
use socket::*;
|
use socket::*;
|
||||||
|
|
||||||
use super::render::{CursorMode, GlMultiRenderer};
|
use super::render::{CursorMode, GlMultiRenderer};
|
||||||
|
|
@ -82,8 +81,8 @@ pub struct KmsState {
|
||||||
pub struct Device {
|
pub struct Device {
|
||||||
render_node: DrmNode,
|
render_node: DrmNode,
|
||||||
surfaces: HashMap<crtc::Handle, Surface>,
|
surfaces: HashMap<crtc::Handle, Surface>,
|
||||||
allocator: Rc<RefCell<GbmDevice<SessionFd>>>,
|
allocator: GbmDevice<DrmDeviceFd>,
|
||||||
drm: Dispatcher<'static, DrmDevice<SessionFd>, Data>,
|
drm: Dispatcher<'static, DrmDevice, Data>,
|
||||||
formats: HashSet<Format>,
|
formats: HashSet<Format>,
|
||||||
supports_atomic: bool,
|
supports_atomic: bool,
|
||||||
event_token: Option<RegistrationToken>,
|
event_token: Option<RegistrationToken>,
|
||||||
|
|
@ -91,13 +90,7 @@ pub struct Device {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Surface {
|
pub struct Surface {
|
||||||
surface: Option<
|
surface: Option<GbmBufferedSurface<GbmDevice<DrmDeviceFd>, Option<OutputPresentationFeedback>>>,
|
||||||
GbmBufferedSurface<
|
|
||||||
Rc<RefCell<GbmDevice<SessionFd>>>,
|
|
||||||
SessionFd,
|
|
||||||
Option<OutputPresentationFeedback>,
|
|
||||||
>,
|
|
||||||
>,
|
|
||||||
damage_tracker: DamageTrackedRenderer,
|
damage_tracker: DamageTrackedRenderer,
|
||||||
connector: connector::Handle,
|
connector: connector::Handle,
|
||||||
output: Output,
|
output: Output,
|
||||||
|
|
@ -324,23 +317,26 @@ impl State {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let fd = SessionFd::new(unsafe {
|
let fd = DrmDeviceFd::new(
|
||||||
OwnedFd::from_raw_fd(
|
unsafe {
|
||||||
self.backend
|
DeviceFd::from_raw_fd(
|
||||||
.kms()
|
self.backend
|
||||||
.session
|
.kms()
|
||||||
.open(
|
.session
|
||||||
&path,
|
.open(
|
||||||
OFlag::O_RDWR | OFlag::O_CLOEXEC | OFlag::O_NOCTTY | OFlag::O_NONBLOCK,
|
&path,
|
||||||
)
|
OFlag::O_RDWR | OFlag::O_CLOEXEC | OFlag::O_NOCTTY | OFlag::O_NONBLOCK,
|
||||||
.with_context(|| {
|
|
||||||
format!(
|
|
||||||
"Failed to optain file descriptor for drm device: {}",
|
|
||||||
path.display()
|
|
||||||
)
|
)
|
||||||
})?,
|
.with_context(|| {
|
||||||
)
|
format!(
|
||||||
});
|
"Failed to optain file descriptor for drm device: {}",
|
||||||
|
path.display()
|
||||||
|
)
|
||||||
|
})?,
|
||||||
|
)
|
||||||
|
},
|
||||||
|
None,
|
||||||
|
);
|
||||||
let mut drm = DrmDevice::new(fd.clone(), false, None)
|
let mut drm = DrmDevice::new(fd.clone(), false, None)
|
||||||
.with_context(|| format!("Failed to initialize drm device for: {}", path.display()))?;
|
.with_context(|| format!("Failed to initialize drm device for: {}", path.display()))?;
|
||||||
let drm_node = DrmNode::from_dev_id(dev)?;
|
let drm_node = DrmNode::from_dev_id(dev)?;
|
||||||
|
|
@ -348,11 +344,9 @@ impl State {
|
||||||
|
|
||||||
let gbm = GbmDevice::new(fd)
|
let gbm = GbmDevice::new(fd)
|
||||||
.with_context(|| format!("Failed to initialize GBM device for {}", path.display()))?;
|
.with_context(|| format!("Failed to initialize GBM device for {}", path.display()))?;
|
||||||
let egl_display = unsafe {
|
let egl_display = EGLDisplay::new(gbm.clone(), None).with_context(|| {
|
||||||
EGLDisplay::new(&gbm, None).with_context(|| {
|
format!("Failed to create EGLDisplay for device: {}", path.display())
|
||||||
format!("Failed to create EGLDisplay for device: {}", path.display())
|
})?;
|
||||||
})?
|
|
||||||
};
|
|
||||||
let egl_device = EGLDevice::device_for_display(&egl_display).with_context(|| {
|
let egl_device = EGLDevice::device_for_display(&egl_display).with_context(|| {
|
||||||
format!("Unable to find matching egl device for {}", path.display())
|
format!("Unable to find matching egl device for {}", path.display())
|
||||||
})?;
|
})?;
|
||||||
|
|
@ -488,7 +482,7 @@ impl State {
|
||||||
let mut device = Device {
|
let mut device = Device {
|
||||||
render_node,
|
render_node,
|
||||||
surfaces: HashMap::new(),
|
surfaces: HashMap::new(),
|
||||||
allocator: Rc::new(RefCell::new(gbm)),
|
allocator: gbm,
|
||||||
drm: dispatcher,
|
drm: dispatcher,
|
||||||
formats,
|
formats,
|
||||||
supports_atomic,
|
supports_atomic,
|
||||||
|
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-only
|
|
||||||
|
|
||||||
use std::{
|
|
||||||
fmt,
|
|
||||||
os::unix::io::{AsFd, AsRawFd, BorrowedFd, OwnedFd, RawFd},
|
|
||||||
sync::Arc,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct SessionFd(Arc<OwnedFd>);
|
|
||||||
|
|
||||||
impl SessionFd {
|
|
||||||
pub fn new(fd: OwnedFd) -> SessionFd {
|
|
||||||
SessionFd(Arc::new(fd))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Debug for SessionFd {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
write!(
|
|
||||||
f,
|
|
||||||
"Session-provided File Descriptor [{}]",
|
|
||||||
self.0.as_raw_fd()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AsFd for SessionFd {
|
|
||||||
fn as_fd(&self) -> BorrowedFd<'_> {
|
|
||||||
self.0.as_fd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AsRawFd for SessionFd {
|
|
||||||
fn as_raw_fd(&self) -> RawFd {
|
|
||||||
self.0.as_raw_fd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -6,7 +6,7 @@ use smithay::{
|
||||||
glow::{GlowFrame, GlowRenderer},
|
glow::{GlowFrame, GlowRenderer},
|
||||||
Frame, ImportAll, Renderer,
|
Frame, ImportAll, Renderer,
|
||||||
},
|
},
|
||||||
utils::{Physical, Point, Rectangle, Scale},
|
utils::{Buffer as BufferCoords, Physical, Point, Rectangle, Scale},
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
|
|
@ -124,18 +124,18 @@ impl RenderElement<GlowRenderer> for CosmicElement<GlowRenderer> {
|
||||||
fn draw<'frame>(
|
fn draw<'frame>(
|
||||||
&self,
|
&self,
|
||||||
frame: &mut <GlowRenderer as Renderer>::Frame<'frame>,
|
frame: &mut <GlowRenderer as Renderer>::Frame<'frame>,
|
||||||
location: Point<i32, Physical>,
|
src: Rectangle<f64, BufferCoords>,
|
||||||
scale: Scale<f64>,
|
dst: Rectangle<i32, Physical>,
|
||||||
damage: &[Rectangle<i32, Physical>],
|
damage: &[Rectangle<i32, Physical>],
|
||||||
log: &slog::Logger,
|
log: &slog::Logger,
|
||||||
) -> Result<(), <GlowRenderer as Renderer>::Error> {
|
) -> Result<(), <GlowRenderer as Renderer>::Error> {
|
||||||
match self {
|
match self {
|
||||||
CosmicElement::Workspace(elem) => elem.draw(frame, location, scale, damage, log),
|
CosmicElement::Workspace(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
CosmicElement::Cursor(elem) => elem.draw(frame, location, scale, damage, log),
|
CosmicElement::Cursor(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
CosmicElement::MoveGrab(elem) => elem.draw(frame, location, scale, damage, log),
|
CosmicElement::MoveGrab(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
CosmicElement::Egui(elem) => {
|
CosmicElement::Egui(elem) => {
|
||||||
RenderElement::<GlowRenderer>::draw(elem, frame, location, scale, damage, log)
|
RenderElement::<GlowRenderer>::draw(elem, frame, src, dst, damage, log)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -158,23 +158,21 @@ impl<'a> RenderElement<GlMultiRenderer<'a>> for CosmicElement<GlMultiRenderer<'a
|
||||||
fn draw<'frame>(
|
fn draw<'frame>(
|
||||||
&self,
|
&self,
|
||||||
frame: &mut GlMultiFrame<'a, 'frame>,
|
frame: &mut GlMultiFrame<'a, 'frame>,
|
||||||
location: Point<i32, Physical>,
|
src: Rectangle<f64, BufferCoords>,
|
||||||
scale: Scale<f64>,
|
dst: Rectangle<i32, Physical>,
|
||||||
damage: &[Rectangle<i32, Physical>],
|
damage: &[Rectangle<i32, Physical>],
|
||||||
log: &slog::Logger,
|
log: &slog::Logger,
|
||||||
) -> Result<(), <GlMultiRenderer<'_> as Renderer>::Error> {
|
) -> Result<(), <GlMultiRenderer<'_> as Renderer>::Error> {
|
||||||
match self {
|
match self {
|
||||||
CosmicElement::Workspace(elem) => elem.draw(frame, location, scale, damage, log),
|
CosmicElement::Workspace(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
CosmicElement::Cursor(elem) => elem.draw(frame, location, scale, damage, log),
|
CosmicElement::Cursor(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
CosmicElement::MoveGrab(elem) => elem.draw(frame, location, scale, damage, log),
|
CosmicElement::MoveGrab(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
CosmicElement::Egui(elem) => {
|
CosmicElement::Egui(elem) => {
|
||||||
let elem = {
|
let elem = {
|
||||||
let glow_frame = frame.glow_frame_mut();
|
let glow_frame = frame.glow_frame_mut();
|
||||||
RenderElement::<GlowRenderer>::draw(
|
RenderElement::<GlowRenderer>::draw(elem, glow_frame, src, dst, damage, log)
|
||||||
elem, glow_frame, location, scale, damage, log,
|
.map_err(|err| MultiError::Render(err))
|
||||||
)
|
|
||||||
.map_err(|err| MultiError::Render(err))
|
|
||||||
};
|
};
|
||||||
elem
|
elem
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ use anyhow::{Context, Result};
|
||||||
use smithay::{
|
use smithay::{
|
||||||
backend::{
|
backend::{
|
||||||
allocator::dmabuf::Dmabuf,
|
allocator::dmabuf::Dmabuf,
|
||||||
|
drm::DrmDeviceFd,
|
||||||
egl::{EGLContext, EGLDisplay},
|
egl::{EGLContext, EGLDisplay},
|
||||||
input::{Event, InputEvent},
|
input::{Event, InputEvent},
|
||||||
renderer::{
|
renderer::{
|
||||||
|
|
@ -24,22 +25,19 @@ use smithay::{
|
||||||
output::{Mode, Output, PhysicalProperties, Scale, Subpixel},
|
output::{Mode, Output, PhysicalProperties, Scale, Subpixel},
|
||||||
reexports::{
|
reexports::{
|
||||||
calloop::{ping, EventLoop, LoopHandle},
|
calloop::{ping, EventLoop, LoopHandle},
|
||||||
gbm::{Device as GbmDevice, FdWrapper},
|
gbm::Device as GbmDevice,
|
||||||
wayland_protocols::wp::presentation_time::server::wp_presentation_feedback,
|
wayland_protocols::wp::presentation_time::server::wp_presentation_feedback,
|
||||||
wayland_server::DisplayHandle,
|
wayland_server::DisplayHandle,
|
||||||
},
|
},
|
||||||
utils::Transform,
|
utils::{DeviceFd, Transform},
|
||||||
};
|
|
||||||
use std::{
|
|
||||||
cell::RefCell,
|
|
||||||
sync::{Arc, Mutex},
|
|
||||||
};
|
};
|
||||||
|
use std::cell::RefCell;
|
||||||
|
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
use crate::state::Fps;
|
use crate::state::Fps;
|
||||||
|
|
||||||
pub struct X11State {
|
pub struct X11State {
|
||||||
allocator: Arc<Mutex<GbmDevice<FdWrapper>>>,
|
allocator: GbmDevice<DrmDeviceFd>,
|
||||||
_egl: EGLDisplay,
|
_egl: EGLDisplay,
|
||||||
pub renderer: GlowRenderer,
|
pub renderer: GlowRenderer,
|
||||||
surfaces: Vec<Surface>,
|
surfaces: Vec<Surface>,
|
||||||
|
|
@ -267,11 +265,11 @@ pub fn init_backend(
|
||||||
.with_context(|| "Could not get DRM node used by X server")?;
|
.with_context(|| "Could not get DRM node used by X server")?;
|
||||||
|
|
||||||
// Create the gbm device for buffer allocation.
|
// Create the gbm device for buffer allocation.
|
||||||
let device =
|
let device = GbmDevice::new(DrmDeviceFd::new(DeviceFd::from(fd), None))
|
||||||
unsafe { GbmDevice::new_from_fd(fd) }.with_context(|| "Failed to create GBM device")?;
|
.with_context(|| "Failed to create GBM device")?;
|
||||||
// Initialize EGL using the GBM device.
|
// Initialize EGL using the GBM device.
|
||||||
let egl =
|
let egl =
|
||||||
unsafe { EGLDisplay::new(&device, None).with_context(|| "Failed to create EGL display")? };
|
EGLDisplay::new(device.clone(), None).with_context(|| "Failed to create EGL display")?;
|
||||||
// Create the OpenGL context
|
// Create the OpenGL context
|
||||||
let context = EGLContext::new(&egl, None).with_context(|| "Failed to create EGL context")?;
|
let context = EGLContext::new(&egl, None).with_context(|| "Failed to create EGL context")?;
|
||||||
// Create a renderer
|
// Create a renderer
|
||||||
|
|
@ -282,7 +280,7 @@ pub fn init_backend(
|
||||||
|
|
||||||
state.backend = BackendData::X11(X11State {
|
state.backend = BackendData::X11(X11State {
|
||||||
handle,
|
handle,
|
||||||
allocator: Arc::new(Mutex::new(device)),
|
allocator: device,
|
||||||
_egl: egl,
|
_egl: egl,
|
||||||
renderer,
|
renderer,
|
||||||
surfaces: Vec::new(),
|
surfaces: Vec::new(),
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,9 @@ use smithay::{
|
||||||
wayland_server::{backend::ObjectId, protocol::wl_surface::WlSurface},
|
wayland_server::{backend::ObjectId, protocol::wl_surface::WlSurface},
|
||||||
},
|
},
|
||||||
space_elements,
|
space_elements,
|
||||||
utils::{IsAlive, Logical, Physical, Point, Rectangle, Scale, Serial, Size},
|
utils::{
|
||||||
|
Buffer as BufferCoords, IsAlive, Logical, Physical, Point, Rectangle, Scale, Serial, Size,
|
||||||
|
},
|
||||||
wayland::{
|
wayland::{
|
||||||
compositor::{with_states, with_surface_tree_downward, TraversalAction},
|
compositor::{with_states, with_surface_tree_downward, TraversalAction},
|
||||||
seat::WaylandFocus,
|
seat::WaylandFocus,
|
||||||
|
|
@ -850,18 +852,14 @@ impl RenderElement<GlowRenderer> for CosmicMappedRenderElement<GlowRenderer> {
|
||||||
fn draw<'frame>(
|
fn draw<'frame>(
|
||||||
&self,
|
&self,
|
||||||
frame: &mut <GlowRenderer as Renderer>::Frame<'frame>,
|
frame: &mut <GlowRenderer as Renderer>::Frame<'frame>,
|
||||||
location: Point<i32, Physical>,
|
src: Rectangle<f64, BufferCoords>,
|
||||||
scale: Scale<f64>,
|
dst: Rectangle<i32, Physical>,
|
||||||
damage: &[Rectangle<i32, Physical>],
|
damage: &[Rectangle<i32, Physical>],
|
||||||
log: &slog::Logger,
|
log: &slog::Logger,
|
||||||
) -> Result<(), <GlowRenderer as Renderer>::Error> {
|
) -> Result<(), <GlowRenderer as Renderer>::Error> {
|
||||||
match self {
|
match self {
|
||||||
CosmicMappedRenderElement::Stack(elem) => {
|
CosmicMappedRenderElement::Stack(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
elem.draw(frame, location, scale, damage, log)
|
CosmicMappedRenderElement::Window(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
}
|
|
||||||
CosmicMappedRenderElement::Window(elem) => {
|
|
||||||
elem.draw(frame, location, scale, damage, log)
|
|
||||||
}
|
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
CosmicMappedRenderElement::Egui(elem) => {
|
CosmicMappedRenderElement::Egui(elem) => {
|
||||||
RenderElement::<GlowRenderer>::draw(elem, frame, location, scale, damage, log)
|
RenderElement::<GlowRenderer>::draw(elem, frame, location, scale, damage, log)
|
||||||
|
|
@ -886,18 +884,14 @@ impl<'a> RenderElement<GlMultiRenderer<'a>> for CosmicMappedRenderElement<GlMult
|
||||||
fn draw<'frame>(
|
fn draw<'frame>(
|
||||||
&self,
|
&self,
|
||||||
frame: &mut GlMultiFrame<'a, 'frame>,
|
frame: &mut GlMultiFrame<'a, 'frame>,
|
||||||
location: Point<i32, Physical>,
|
src: Rectangle<f64, BufferCoords>,
|
||||||
scale: Scale<f64>,
|
dst: Rectangle<i32, Physical>,
|
||||||
damage: &[Rectangle<i32, Physical>],
|
damage: &[Rectangle<i32, Physical>],
|
||||||
log: &slog::Logger,
|
log: &slog::Logger,
|
||||||
) -> Result<(), <GlMultiRenderer<'_> as Renderer>::Error> {
|
) -> Result<(), <GlMultiRenderer<'_> as Renderer>::Error> {
|
||||||
match self {
|
match self {
|
||||||
CosmicMappedRenderElement::Stack(elem) => {
|
CosmicMappedRenderElement::Stack(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
elem.draw(frame, location, scale, damage, log)
|
CosmicMappedRenderElement::Window(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
}
|
|
||||||
CosmicMappedRenderElement::Window(elem) => {
|
|
||||||
elem.draw(frame, location, scale, damage, log)
|
|
||||||
}
|
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
CosmicMappedRenderElement::Egui(elem) => {
|
CosmicMappedRenderElement::Egui(elem) => {
|
||||||
let glow_frame = frame.glow_frame_mut();
|
let glow_frame = frame.glow_frame_mut();
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ use smithay::{
|
||||||
wayland_protocols::xdg::shell::server::xdg_toplevel::{self, ResizeEdge},
|
wayland_protocols::xdg::shell::server::xdg_toplevel::{self, ResizeEdge},
|
||||||
wayland_server::protocol::wl_surface::WlSurface,
|
wayland_server::protocol::wl_surface::WlSurface,
|
||||||
},
|
},
|
||||||
utils::{IsAlive, Logical, Point, Rectangle, Scale, Serial},
|
utils::{Buffer as BufferCoords, IsAlive, Logical, Physical, Point, Rectangle, Scale, Serial},
|
||||||
wayland::shell::wlr_layer::Layer,
|
wayland::shell::wlr_layer::Layer,
|
||||||
};
|
};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
@ -630,14 +630,14 @@ where
|
||||||
fn draw<'frame>(
|
fn draw<'frame>(
|
||||||
&self,
|
&self,
|
||||||
frame: &mut <R as Renderer>::Frame<'frame>,
|
frame: &mut <R as Renderer>::Frame<'frame>,
|
||||||
location: Point<i32, smithay::utils::Physical>,
|
src: Rectangle<f64, BufferCoords>,
|
||||||
scale: Scale<f64>,
|
dst: Rectangle<i32, Physical>,
|
||||||
damage: &[Rectangle<i32, smithay::utils::Physical>],
|
damage: &[Rectangle<i32, smithay::utils::Physical>],
|
||||||
log: &slog::Logger,
|
log: &slog::Logger,
|
||||||
) -> Result<(), <R as Renderer>::Error> {
|
) -> Result<(), <R as Renderer>::Error> {
|
||||||
match self {
|
match self {
|
||||||
WorkspaceRenderElement::Wayland(elem) => elem.draw(frame, location, scale, damage, log),
|
WorkspaceRenderElement::Wayland(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
WorkspaceRenderElement::Window(elem) => elem.draw(frame, location, scale, damage, log),
|
WorkspaceRenderElement::Window(elem) => elem.draw(frame, src, dst, damage, log),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -351,7 +351,7 @@ impl Common {
|
||||||
states,
|
states,
|
||||||
render_element_states,
|
render_element_states,
|
||||||
default_primary_scanout_output_compare,
|
default_primary_scanout_output_compare,
|
||||||
)
|
);
|
||||||
});
|
});
|
||||||
window.send_frame(output, time, throttle, surface_primary_scanout_output);
|
window.send_frame(output, time, throttle, surface_primary_scanout_output);
|
||||||
}
|
}
|
||||||
|
|
@ -380,7 +380,7 @@ impl Common {
|
||||||
states,
|
states,
|
||||||
render_element_states,
|
render_element_states,
|
||||||
default_primary_scanout_output_compare,
|
default_primary_scanout_output_compare,
|
||||||
)
|
);
|
||||||
});
|
});
|
||||||
layer_surface.send_frame(output, time, throttle, surface_primary_scanout_output);
|
layer_surface.send_frame(output, time, throttle, surface_primary_scanout_output);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue