1 //!
2 //! Bindings to the Graphics Execution Manager
3 //!
4
5 use crate::ioctl;
6 use drm_sys::*;
7
8 use 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.
open(fd: BorrowedFd<'_>, name: u32) -> io::Result<drm_gem_open>14 pub 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.
close(fd: BorrowedFd<'_>, handle: u32) -> io::Result<drm_gem_close>28 pub 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.
handle_to_fd(fd: BorrowedFd<'_>, handle: u32, flags: u32) -> io::Result<drm_prime_handle>42 pub 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.
fd_to_handle(fd: BorrowedFd<'_>, primefd: BorrowedFd<'_>) -> io::Result<drm_prime_handle>57 pub 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 }
69