//! //! 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 { 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 { 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 { 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 { 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) }