blob: 01b7f0b72dc9aae28c494ebb783fb8ee5616526c [file] [log] [blame] [edit]
//!
//! Bindings to the Graphics Execution Manager
//!
use crate::ioctl;
use drm_sys::*;
use std::{
io,
os::unix::io::{AsRawFd, BorrowedFd},
};
/// Open a GEM object given it's 32-bit name, returning the handle.
pub fn open(fd: BorrowedFd<'_>, name: u32) -> io::Result<drm_gem_open> {
let mut gem = drm_gem_open {
name,
..Default::default()
};
unsafe {
ioctl::gem::open(fd, &mut gem)?;
}
Ok(gem)
}
/// Closes a GEM object given it's handle.
pub fn close(fd: BorrowedFd<'_>, handle: u32) -> io::Result<drm_gem_close> {
let gem = drm_gem_close {
handle,
..Default::default()
};
unsafe {
ioctl::gem::close(fd, &gem)?;
}
Ok(gem)
}
/// Converts a GEM object's handle to a PRIME file descriptor.
pub fn handle_to_fd(fd: BorrowedFd<'_>, handle: u32, flags: u32) -> io::Result<drm_prime_handle> {
let mut prime = drm_prime_handle {
handle,
flags,
..Default::default()
};
unsafe {
ioctl::gem::prime_handle_to_fd(fd, &mut prime)?;
}
Ok(prime)
}
/// Converts a PRIME file descriptor to a GEM object's handle.
pub fn fd_to_handle(fd: BorrowedFd<'_>, primefd: BorrowedFd<'_>) -> io::Result<drm_prime_handle> {
let mut prime = drm_prime_handle {
fd: primefd.as_raw_fd(),
..Default::default()
};
unsafe {
ioctl::gem::prime_fd_to_handle(fd, &mut prime)?;
}
Ok(prime)
}