drm_ffi/
gem.rs

1//!
2//! Bindings to the Graphics Execution Manager
3//!
4
5use crate::ioctl;
6use drm_sys::*;
7
8use std::{
9    io,
10    os::unix::io::{AsRawFd, BorrowedFd},
11};
12
13/// Open a GEM object given it's 32-bit name, returning the handle.
14pub fn open(fd: BorrowedFd<'_>, name: u32) -> io::Result<drm_gem_open> {
15    let mut gem = drm_gem_open {
16        name,
17        ..Default::default()
18    };
19
20    unsafe {
21        ioctl::gem::open(fd, &mut gem)?;
22    }
23
24    Ok(gem)
25}
26
27/// Closes a GEM object given it's handle.
28pub fn close(fd: BorrowedFd<'_>, handle: u32) -> io::Result<drm_gem_close> {
29    let gem = drm_gem_close {
30        handle,
31        ..Default::default()
32    };
33
34    unsafe {
35        ioctl::gem::close(fd, &gem)?;
36    }
37
38    Ok(gem)
39}
40
41/// Converts a GEM object's handle to a PRIME file descriptor.
42pub fn handle_to_fd(fd: BorrowedFd<'_>, handle: u32, flags: u32) -> io::Result<drm_prime_handle> {
43    let mut prime = drm_prime_handle {
44        handle,
45        flags,
46        ..Default::default()
47    };
48
49    unsafe {
50        ioctl::gem::prime_handle_to_fd(fd, &mut prime)?;
51    }
52
53    Ok(prime)
54}
55
56/// Converts a PRIME file descriptor to a GEM object's handle.
57pub fn fd_to_handle(fd: BorrowedFd<'_>, primefd: BorrowedFd<'_>) -> io::Result<drm_prime_handle> {
58    let mut prime = drm_prime_handle {
59        fd: primefd.as_raw_fd(),
60        ..Default::default()
61    };
62
63    unsafe {
64        ioctl::gem::prime_fd_to_handle(fd, &mut prime)?;
65    }
66
67    Ok(prime)
68}