blob: 2001fbe6ce71c0092d928eeb63ed1b3059e6aee2 [file] [log] [blame]
#![allow(dead_code)]
pub use drm::control::Device as ControlDevice;
pub use drm::Device;
#[derive(Debug)]
/// A simple wrapper for a device node.
pub struct Card(std::fs::File);
/// Implementing `AsFd` is a prerequisite to implementing the traits found
/// in this crate. Here, we are just calling `as_fd()` on the inner File.
impl std::os::unix::io::AsFd for Card {
fn as_fd(&self) -> std::os::unix::io::BorrowedFd<'_> {
self.0.as_fd()
}
}
/// With `AsFd` implemented, we can now implement `drm::Device`.
impl Device for Card {}
impl ControlDevice for Card {}
/// Simple helper methods for opening a `Card`.
impl Card {
pub fn open(path: &str) -> Self {
let mut options = std::fs::OpenOptions::new();
options.read(true);
options.write(true);
Card(options.open(path).unwrap())
}
pub fn open_global() -> Self {
Self::open("/dev/dri/card0")
}
}
pub mod capabilities {
use drm::ClientCapability as CC;
pub const CLIENT_CAP_ENUMS: &[CC] = &[CC::Stereo3D, CC::UniversalPlanes, CC::Atomic];
use drm::DriverCapability as DC;
pub const DRIVER_CAP_ENUMS: &[DC] = &[
DC::DumbBuffer,
DC::VBlankHighCRTC,
DC::DumbPreferredDepth,
DC::DumbPreferShadow,
DC::Prime,
DC::MonotonicTimestamp,
DC::ASyncPageFlip,
DC::CursorWidth,
DC::CursorHeight,
DC::AddFB2Modifiers,
DC::PageFlipTarget,
DC::CRTCInVBlankEvent,
DC::SyncObj,
DC::TimelineSyncObj,
];
}
pub mod images {
use image;
pub fn load_image(name: &str) -> image::RgbaImage {
let path = format!("examples/images/{}", name);
image::open(path).unwrap().to_rgba8()
}
}