From 96e910c450637da9ee36193b0e53b838f371831c Mon Sep 17 00:00:00 2001 From: Nova Date: Tue, 23 Sep 2025 14:08:52 -0700 Subject: [PATCH] update: stardust-xr core --- Cargo.lock | 152 ++++++++----------------- Cargo.toml | 4 +- codegen/src/lib.rs | 4 +- src/core/scenegraph.rs | 126 +++++++++++--------- src/main.rs | 14 +-- src/nodes/alias.rs | 6 +- src/nodes/items/camera.rs | 4 +- src/nodes/mod.rs | 6 +- src/wayland/core/shm_buffer_backing.rs | 11 +- src/wayland/dmabuf/buffer_backing.rs | 5 +- 10 files changed, 156 insertions(+), 176 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 591fbed..644364a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -384,25 +384,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-process" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde3f4e40e6021d7acffc90095cbd6dc54cb593903d1de5832f435eb274b85dc" -dependencies = [ - "async-channel", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener", - "futures-lite", - "rustix 1.1.2", - "tracing", -] - [[package]] name = "async-recursion" version = "1.1.1" @@ -414,24 +395,6 @@ dependencies = [ "syn 2.0.104", ] -[[package]] -name = "async-signal" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7605a4e50d4b06df3898d5a70bf5fde51ed9059b0434b73105193bc27acce0d" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix 1.1.2", - "signal-hook-registry", - "slab", - "windows-sys 0.59.0", -] - [[package]] name = "async-stream" version = "0.3.6" @@ -592,7 +555,7 @@ dependencies = [ [[package]] name = "bevy-dmabuf" version = "0.2.0" -source = "git+https://github.com/Schmarni-Dev/bevy-dmabuf#038d7481bf1f19a73db48129d78e918a6fd8d8b8" +source = "git+https://github.com/Schmarni-Dev/bevy-dmabuf#7d36003a86686bae8c76c13e9cb2f6a7988fcf47" dependencies = [ "ash", "bevy", @@ -602,7 +565,7 @@ dependencies = [ "thiserror 2.0.16", "tracing", "wgpu", - "zbus", + "zvariant", ] [[package]] @@ -1899,16 +1862,6 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" -[[package]] -name = "cluFlock" -version = "1.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5c0fabbd86438044c17b633a514a4e5512f356ee114d7378665d24212462f88" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "cmake" version = "0.1.54" @@ -2311,18 +2264,18 @@ dependencies = [ [[package]] name = "directories" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" dependencies = [ "dirs-sys", ] [[package]] name = "dirs" -version = "5.0.1" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" dependencies = [ "dirs-sys", ] @@ -2339,14 +2292,14 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" dependencies = [ "libc", "option-ext", - "redox_users", - "windows-sys 0.48.0", + "redox_users 0.5.2", + "windows-sys 0.60.2", ] [[package]] @@ -2356,7 +2309,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users", + "redox_users 0.4.6", "winapi", ] @@ -2541,7 +2494,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -2613,11 +2566,11 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flatbuffers" -version = "24.12.23" +version = "25.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1baf0dbf96932ec9a3038d57900329c015b0bfb7b63d904f3bc27e2b02a096" +checksum = "1045398c1bfd89168b5fd3f1fc11f6e70b34f6f66300c87d44d3de849463abf1" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.9.4", "rustc_version", ] @@ -2633,9 +2586,9 @@ dependencies = [ [[package]] name = "flexbuffers" -version = "2.0.0" +version = "25.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15d14128f06405808ce75bfebe11e9b0f9da18719ede6d7bdb1702d6bfe0f7e8" +checksum = "935627e7bc8f083035d9faad09ffaed9128f73fb1f74a8798f115749c43378e8" dependencies = [ "bitflags 1.3.2", "byteorder", @@ -3506,7 +3459,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.2", + "windows-targets 0.48.5", ] [[package]] @@ -4992,6 +4945,17 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.16", +] + [[package]] name = "regex" version = "1.11.1" @@ -5108,7 +5072,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -5121,7 +5085,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -5456,20 +5420,18 @@ checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2" [[package]] name = "stardust-xr" version = "0.45.0" -source = "git+https://github.com/StardustXR/core.git?branch=dev#bce6ec660f026c577156b3cff41f9312c1caa1d3" +source = "git+https://github.com/StardustXR/core.git?branch=dev#7514f132772e81aed1add2a172869e7887697746" dependencies = [ - "cluFlock", "color-eyre", "dirs", "global_counter", "mint", "nix 0.27.1", - "parking_lot 0.12.4", "rustc-hash 2.1.1", "serde", "shiva-color-rs", "stardust-xr-schemas", - "thiserror 1.0.69", + "thiserror 2.0.16", "tokio", "tracing", ] @@ -5477,7 +5439,7 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git?branch=dev#bce6ec660f026c577156b3cff41f9312c1caa1d3" +source = "git+https://github.com/StardustXR/core.git?branch=dev#7514f132772e81aed1add2a172869e7887697746" dependencies = [ "flatbuffers", "flexbuffers", @@ -5488,7 +5450,7 @@ dependencies = [ "nanoid", "serde", "serde_repr", - "thiserror 1.0.69", + "thiserror 2.0.16", "tokio", "zbus", ] @@ -5732,7 +5694,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix 1.1.2", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -6178,7 +6140,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" dependencies = [ "cc", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -6757,7 +6719,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -6970,15 +6932,6 @@ dependencies = [ "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.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -7443,19 +7396,13 @@ checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" [[package]] name = "zbus" -version = "5.9.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb4f9a464286d42851d18a605f7193b8febaf5b0919d71c6399b7b26e5b0aad" +checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" dependencies = [ "async-broadcast", - "async-executor", - "async-io", - "async-lock", - "async-process", "async-recursion", - "async-task", "async-trait", - "blocking", "enumflags2", "event-listener", "futures-core", @@ -7468,7 +7415,7 @@ dependencies = [ "tokio", "tracing", "uds_windows", - "windows-sys 0.59.0", + "windows-sys 0.60.2", "winnow 0.7.13", "zbus_macros", "zbus_names", @@ -7477,9 +7424,9 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.9.0" +version = "5.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef9859f68ee0c4ee2e8cde84737c78e3f4c54f946f2a38645d0d4c7a95327659" +checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", @@ -7545,9 +7492,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91b3680bb339216abd84714172b5138a4edac677e641ef17e1d8cb1b3ca6e6f" +checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" dependencies = [ "endi", "enumflags2", @@ -7559,9 +7506,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "5.6.0" +version = "5.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8c68501be459a8dbfffbe5d792acdd23b4959940fc87785fb013b32edbc208" +checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", @@ -7572,14 +7519,13 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16edfee43e5d7b553b77872d99bc36afdda75c223ca7ad5e3fbecd82ca5fc34" +checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599" dependencies = [ "proc-macro2", "quote", "serde", - "static_assertions", "syn 2.0.104", "winnow 0.7.13", ] diff --git a/Cargo.toml b/Cargo.toml index dc5c7c1..353a8dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -139,8 +139,8 @@ openxr = "0.19" # linux stuffs input-event-codes = "6.2.0" -zbus = { version = "5.0.0", default-features = false, features = ["tokio"] } -directories = "5.0.1" +zbus = { version = "5.11.0", features = ["blocking-api", "tokio"], default-features = false } +directories = "6.0.0" xkbcommon-rs = "0.1.0" cosmic-text = "0.14.2" diff --git a/codegen/src/lib.rs b/codegen/src/lib.rs index bfd640b..6caeb9a 100644 --- a/codegen/src/lib.rs +++ b/codegen/src/lib.rs @@ -305,12 +305,12 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { _node: std::sync::Arc, _method: u64, _message: crate::nodes::Message, - _method_response: crate::nodes::MethodResponseSender, + _method_response: crate::core::scenegraph::MethodResponseSender, ) { match _method { #run_methods _ => { - let _ = _method_response.send(Err(stardust_xr::scenegraph::ScenegraphError::MemberNotFound)); + let _ = _method_response.send_err(stardust_xr::scenegraph::ScenegraphError::MemberNotFound); } } } diff --git a/src/core/scenegraph.rs b/src/core/scenegraph.rs index d51d4c4..5df4cc7 100644 --- a/src/core/scenegraph.rs +++ b/src/core/scenegraph.rs @@ -1,19 +1,80 @@ -use crate::core::error::Result; -use crate::nodes::Node; -use crate::nodes::alias::get_original; -use crate::{core::client::Client, nodes::Message}; +use crate::{ + core::{ + client::Client, + error::{Result, ServerError}, + }, + nodes::{Message, Node, alias::get_original}, +}; use parking_lot::Mutex; use rustc_hash::FxHashMap; use serde::Serialize; -use stardust_xr::scenegraph; -use stardust_xr::scenegraph::ScenegraphError; -use stardust_xr::schemas::flex::serialize; -use std::future::Future; -use std::os::fd::OwnedFd; -use std::sync::{Arc, OnceLock, Weak}; -use tokio::sync::oneshot; +use stardust_xr::{ + messenger::MethodResponse, + scenegraph::{self, ScenegraphError}, + schemas::flex::serialize, +}; +use std::{ + os::fd::OwnedFd, + sync::{Arc, OnceLock, Weak}, +}; use tracing::{debug, debug_span}; +pub struct MethodResponseSender(pub(crate) MethodResponse); +impl MethodResponseSender { + pub fn send_err(self, error: ScenegraphError) { + self.0.send(Err(error)); + } + pub fn send(self, result: Result) { + let data = match result { + Ok(d) => d, + Err(e) => { + self.0.send(Err(ScenegraphError::MemberError { + error: e.to_string(), + })); + return; + } + }; + let Ok(serialized) = stardust_xr::schemas::flex::serialize(data) else { + self.0.send(Err(ScenegraphError::MemberError { + error: "Internal: Failed to serialize".to_string(), + })); + return; + }; + self.0.send(Ok((&serialized, Vec::::new()))); + } + pub fn wrap Result>(self, f: F) { + self.send(f()) + } + pub fn wrap_async( + self, + f: impl Future)>> + Send + 'static, + ) { + tokio::task::spawn(async move { + let (value, fds) = match f.await { + Ok(d) => d, + Err(e) => { + self.0.send(Err(ScenegraphError::MemberError { + error: e.to_string(), + })); + return; + } + }; + let Ok(serialized) = serialize(value) else { + self.0.send(Err(ScenegraphError::MemberError { + error: "Internal: Failed to serialize".to_string(), + })); + return; + }; + self.0.send(Ok((&serialized, fds))); + }); + } +} +impl std::fmt::Debug for MethodResponseSender { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("TypedMethodResponse").finish() + } +} + #[derive(Default)] pub struct Scenegraph { pub(super) client: OnceLock>, @@ -45,43 +106,6 @@ impl Scenegraph { self.nodes.lock().remove(&node) } } - -pub type MethodResponse = Result<(Vec, Vec), ScenegraphError>; -pub struct MethodResponseSender(oneshot::Sender); -impl MethodResponseSender { - pub fn send(self, t: Result) { - let _ = self.0.send(t.map(|m| (m.data, m.fds))); - } - // pub fn send_method_return( - // self, - // result: color_eyre::eyre::Result<(T, Vec)>, - // ) { - // let _ = self.0.send(map_method_return(result)); - // } - pub fn wrap_sync crate::core::error::Result>(self, f: F) { - self.send(f().map_err(|e| ScenegraphError::MemberError { - error: e.to_string(), - })) - } - pub fn wrap_async( - self, - f: impl Future)>> + Send + 'static, - ) { - tokio::task::spawn(async move { self.0.send(map_method_return(f.await)) }); - } -} -fn map_method_return( - result: Result<(T, Vec)>, -) -> Result<(Vec, Vec), ScenegraphError> { - let (value, fds) = result.map_err(|e| ScenegraphError::MemberError { - error: e.to_string(), - })?; - - let serialized_value = serialize(value).map_err(|e| ScenegraphError::MemberError { - error: format!("Internal: Serialization failed: {e}"), - })?; - Ok((serialized_value, fds)) -} impl scenegraph::Scenegraph for Scenegraph { fn send_signal( &self, @@ -115,15 +139,15 @@ impl scenegraph::Scenegraph for Scenegraph { method: u64, data: &[u8], fds: Vec, - response: oneshot::Sender, Vec), ScenegraphError>>, + response: MethodResponse, ) { let Some(client) = self.get_client() else { - let _ = response.send(Err(ScenegraphError::NodeNotFound)); + response.send(Err(ScenegraphError::NodeNotFound)); return; }; debug!(aspect_id, node_id, method, "Handle method"); let Some(node) = self.get_node(node_id) else { - let _ = response.send(Err(ScenegraphError::NodeNotFound)); + response.send(Err(ScenegraphError::NodeNotFound)); return; }; node.execute_local_method( diff --git a/src/main.rs b/src/main.rs index 6c76726..2761f7b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -67,7 +67,7 @@ use objects::play_space::PlaySpacePlugin; use openxr::{EnvironmentBlendMode, ReferenceSpaceType}; use session::{launch_start, save_session}; use stardust_xr::schemas::dbus::object_registry::ObjectRegistry; -use stardust_xr::server; +use stardust_xr::server::LockedSocket; use std::ops::DerefMut as _; use std::path::PathBuf; use std::str::FromStr; @@ -161,15 +161,15 @@ async fn main() -> Result { let cli_args = CliArgs::parse(); - let socket_path = - server::get_free_socket_path().expect("Unable to find a free stardust socket path"); - STARDUST_INSTANCE.set(socket_path.file_name().unwrap().to_string_lossy().into_owned()).expect("Someone hasn't done their job, yell at Nova because how is this set multiple times what the hell"); + let locked_socket = + LockedSocket::get_free().expect("Unable to find a free stardust socket path"); + STARDUST_INSTANCE.set(locked_socket.socket_path.file_name().unwrap().to_string_lossy().into_owned()).expect("Someone hasn't done their job, yell at Nova because how is this set multiple times what the hell"); info!( - socket_path = ?socket_path.display(), + socket_path = ?locked_socket.socket_path.display(), "Stardust socket created" ); - let socket = - UnixListener::bind(socket_path).expect("Couldn't spawn stardust server at {socket_path}"); + let socket = UnixListener::bind(locked_socket.socket_path) + .expect("Couldn't spawn stardust server at {socket_path}"); task::new(|| "client join loop", async move { loop { let Ok((stream, _)) = socket.accept().await else { diff --git a/src/nodes/alias.rs b/src/nodes/alias.rs index 82f3a50..519e775 100644 --- a/src/nodes/alias.rs +++ b/src/nodes/alias.rs @@ -1,5 +1,7 @@ use super::{Aspect, AspectIdentifier, Node}; -use crate::core::{client::Client, error::Result, registry::Registry}; +use crate::core::{ + client::Client, error::Result, registry::Registry, scenegraph::MethodResponseSender, +}; use std::{ ops::Add, sync::{Arc, Weak}, @@ -86,7 +88,7 @@ impl Aspect for Alias { _node: Arc, _method: u64, _message: super::Message, - _response: crate::core::scenegraph::MethodResponseSender, + _response: MethodResponseSender, ) { } } diff --git a/src/nodes/items/camera.rs b/src/nodes/items/camera.rs index d374c6a..3be25a0 100644 --- a/src/nodes/items/camera.rs +++ b/src/nodes/items/camera.rs @@ -77,12 +77,12 @@ impl CameraItem { _message: Message, response: MethodResponseSender, ) { - response.wrap_sync(move || { + response.wrap(move || { let ItemType::Camera(_camera) = &node.get_aspect::().unwrap().specialization else { bail!("Wrong item type?"); }; - Ok(serialize(())?.into()) + Ok(serialize(())?) }); } diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index acddf66..0cca21f 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -204,11 +204,11 @@ impl Node { ) { if let Ok(alias) = self.get_aspect::() { if !alias.info.server_methods.contains(&method) { - response.send(Err(ScenegraphError::MemberNotFound)); + response.send_err(ScenegraphError::MemberNotFound); return; } let Some(alias) = alias.original.upgrade() else { - response.send(Err(ScenegraphError::BrokenAlias)); + response.send_err(ScenegraphError::BrokenAlias); return; }; alias.execute_local_method( @@ -223,7 +223,7 @@ impl Node { ) } else { let Some(aspect) = self.aspects.0.get(&aspect_id).map(|v| v.clone()) else { - response.send(Err(ScenegraphError::AspectNotFound)); + response.send_err(ScenegraphError::AspectNotFound); return; }; aspect.run_method(calling_client, self.clone(), method, message, response); diff --git a/src/wayland/core/shm_buffer_backing.rs b/src/wayland/core/shm_buffer_backing.rs index 4825cd9..2641809 100644 --- a/src/wayland/core/shm_buffer_backing.rs +++ b/src/wayland/core/shm_buffer_backing.rs @@ -6,7 +6,7 @@ use bevy::{ }; use bevy_dmabuf::{ dmatex::{Dmatex, DmatexPlane, Resolution}, - import::{DropCallback, ImportedDmatexs, ImportedTexture, import_texture}, + import::{DmatexUsage, DropCallback, ImportedDmatexs, ImportedTexture, import_texture}, }; use drm_fourcc::DrmFourcc; use mint::Vector2; @@ -176,8 +176,13 @@ impl ShmBufferBacking { flip_y: false, srgb: true, }; - let imported_dmatex = - import_texture(RENDER_DEVICE.wait(), dmatex, DropCallback(None)).unwrap(); + let imported_dmatex = import_texture( + RENDER_DEVICE.wait(), + dmatex, + DropCallback(None), + DmatexUsage::Sampling, + ) + .unwrap(); Self { pool, offset, diff --git a/src/wayland/dmabuf/buffer_backing.rs b/src/wayland/dmabuf/buffer_backing.rs index 8229e87..08ff23c 100644 --- a/src/wayland/dmabuf/buffer_backing.rs +++ b/src/wayland/dmabuf/buffer_backing.rs @@ -6,7 +6,9 @@ use bevy::{ }; use bevy_dmabuf::{ dmatex::{Dmatex, Resolution}, - import::{DropCallback, ImportError, ImportedDmatexs, ImportedTexture, import_texture}, + import::{ + DmatexUsage, DropCallback, ImportError, ImportedDmatexs, ImportedTexture, import_texture, + }, }; use drm_fourcc::DrmFourcc; use mint::Vector2; @@ -45,6 +47,7 @@ impl DmabufBacking { dev, dmatex, DropCallback(None), + DmatexUsage::Sampling, )?)), }) }