diff --git a/src/backend/wayvr/egl_data.rs b/src/backend/wayvr/egl_data.rs index cffe0ff..aa29ce0 100644 --- a/src/backend/wayvr/egl_data.rs +++ b/src/backend/wayvr/egl_data.rs @@ -2,7 +2,6 @@ use std::sync::Arc; use super::egl_ex; use anyhow::anyhow; -use smithay::backend::egl::ffi::egl::types::EGLBoolean; #[derive(Debug)] pub struct EGLData { @@ -135,7 +134,7 @@ impl EGLData { &mut num_formats, ); - // Retrieve format list + // Retrieve formt list let mut formats: Vec = vec![0; num_formats as usize]; egl_query_dmabuf_formats_ext( self.display.as_ptr(), @@ -179,24 +178,23 @@ impl EGLData { } let mut mods: Vec = vec![0; num_mods as usize]; - let mut external: Vec = vec![2; num_mods as usize]; egl_query_dmabuf_modifiers_ext( self.display.as_ptr(), target_fourcc, num_mods, mods.as_mut_ptr(), - external.as_mut_ptr(), + std::ptr::null_mut(), &mut num_mods, ); - /*if mods[0] == 0xFFFF_FFFF_FFFF_FFFF { + if mods[0] == 0xFFFF_FFFF_FFFF_FFFF { anyhow::bail!("modifier is -1") } - /*log::error!("Modifier list:"); + log::trace!("Modifier list:"); for modifier in &mods { - log::error!("{modifier:#x}"); - }*/ + log::trace!("{modifier:#x}"); + } // We should not change these modifier values. Passing all of them to the Vulkan dmabuf // texture system causes significant graphical corruption due to invalid memory layout and @@ -215,19 +213,10 @@ impl EGLData { mods = vec![*modifier, 0x0 /* also important (???) */]; break; } - }*/ - - let mods_filtered: Vec = mods - .into_iter() - .zip(external) - .map(|(modifier, external)| { - log::info!("modifier {modifier}, external {external}"); - modifier - }) - .collect(); + } Ok(DMAbufModifierInfo { - modifiers: mods_filtered, + modifiers: mods, fourcc: target_fourcc as u32, }) } diff --git a/src/overlays/screen.rs b/src/overlays/screen.rs index 2a403d8..03c5ac7 100644 --- a/src/overlays/screen.rs +++ b/src/overlays/screen.rs @@ -537,7 +537,7 @@ impl OverlayRenderer for ScreenRenderer { }; self.capture - .init(&dmabuf_formats, user_data, receive_callback); + .init(dmabuf_formats, user_data, receive_callback); self.capture.request_new_frame(); return Ok(ShouldRender::Unable); } diff --git a/src/overlays/wayvr.rs b/src/overlays/wayvr.rs index 6538cfd..7f9e463 100644 --- a/src/overlays/wayvr.rs +++ b/src/overlays/wayvr.rs @@ -1,8 +1,11 @@ use glam::{vec3a, Affine2, Vec3, Vec3A}; use std::{cell::RefCell, collections::HashMap, rc::Rc, sync::Arc}; -use vulkano::{command_buffer::CommandBufferUsage, image::view::ImageView}; +use vulkano::{ + command_buffer::CommandBufferUsage, + image::{view::ImageView, SubresourceLayout}, +}; use wayvr_ipc::packet_server::{self, PacketServer, WvrStateChanged}; -use wlx_capture::frame::{DmabufFrame, FrameFormat, FramePlane}; +use wlx_capture::frame::{DmabufFrame, FourCC, FrameFormat, FramePlane}; use crate::{ backend::{ @@ -604,66 +607,26 @@ impl WayVRRenderer { anyhow::bail!("Failed to fetch WayVR display") }; - let drm_formats = &self.graphics.drm_formats; - - let mut drm_format = None; - for fmt in drm_formats { - if fmt.fourcc.value == 0x3432_4258 - /* XB24 */ - { - drm_format = Some(fmt); - log::info!("format fourcc {} mod {:?}", fmt.fourcc.value, fmt.modifiers); - break; - } - } - - let Some(drm_format) = drm_format else { - anyhow::bail!("Couldn't find XB24 dmabuf format"); - }; - - let tex = self.graphics.dmabuf_texture(DmabufFrame { - format: FrameFormat { - width: u32::from(disp.width), - height: u32::from(disp.height), - fourcc: drm_format.fourcc, - modifier: drm_format.modifiers[1], /* FIXME !!!!!!!!!!!!!!!!!!!!!!!!!!! */ - ..Default::default() - }, - num_planes: 1, - planes, - })?; - - /*let layouts: Vec = vec![SubresourceLayout { - offset: data.offset as _, - size: 0, - row_pitch: data.stride as _, - array_pitch: None, - depth_pitch: None, - }]; - let frame = DmabufFrame { format: FrameFormat { width: u32::from(disp.width), height: u32::from(disp.height), - fourcc: drm_format.fourcc, - modifier: DRM_FORMAT_MOD_INVALID, /* possibly not proper? */ + fourcc: FourCC { + value: data.mod_info.fourcc, + }, + modifier: data.mod_info.modifiers[0], /* possibly not proper? */ ..Default::default() }, num_planes: 1, planes, }; - let tex = self.graphics.dmabuf_texture_ex( - frame, - vulkano::image::ImageTiling::DrmFormatModifier, - layouts, - &data.mod_info.modifiers, - )?;*/ - drop(wayvr); + let tex = self.graphics.dmabuf_texture(frame)?; + self.vk_image = Some(tex.clone()); - self.vk_image_view = Some(vulkano::image::view::ImageView::new_default(tex)?); + self.vk_image_view = Some(vulkano::image::view::ImageView::new_default(tex).unwrap()); Ok(()) } }