pub struct Device<T: AsFd> { /* private fields */ }
Expand description
An open GBM device
Implementations§
Source§impl<T: AsFd> Device<T>
impl<T: AsFd> Device<T>
Sourcepub fn new(fd: T) -> IoResult<Device<T>>
pub fn new(fd: T) -> IoResult<Device<T>>
Open a GBM device from a given open DRM device.
The underlying file descriptor passed in is used by the backend to communicate with
platform for allocating the memory. For allocations using DRI this would be
the file descriptor returned when opening a device such as /dev/dri/card0
.
Sourcepub fn backend_name(&self) -> &str
pub fn backend_name(&self) -> &str
Get the backend name
Sourcepub fn is_format_supported(
&self,
format: Format,
usage: BufferObjectFlags,
) -> bool
pub fn is_format_supported( &self, format: Format, usage: BufferObjectFlags, ) -> bool
Test if a format is supported for a given set of usage flags
Sourcepub fn format_modifier_plane_count(
&self,
format: Format,
modifier: Modifier,
) -> Option<u32>
pub fn format_modifier_plane_count( &self, format: Format, modifier: Modifier, ) -> Option<u32>
Get the required number of planes for a given format and modifier
Some combination (e.g. when using a Modifier::Invalid
) might not
have a defined/fixed number of planes. In these cases the function
might return Option::None
.
Sourcepub fn create_surface<U: 'static>(
&self,
width: u32,
height: u32,
format: Format,
usage: BufferObjectFlags,
) -> IoResult<Surface<U>>
pub fn create_surface<U: 'static>( &self, width: u32, height: u32, format: Format, usage: BufferObjectFlags, ) -> IoResult<Surface<U>>
Allocate a new surface object
Sourcepub fn create_surface_with_modifiers<U: 'static>(
&self,
width: u32,
height: u32,
format: Format,
modifiers: impl Iterator<Item = Modifier>,
) -> IoResult<Surface<U>>
pub fn create_surface_with_modifiers<U: 'static>( &self, width: u32, height: u32, format: Format, modifiers: impl Iterator<Item = Modifier>, ) -> IoResult<Surface<U>>
Allocate a new surface object with explicit modifiers
Sourcepub fn create_surface_with_modifiers2<U: 'static>(
&self,
width: u32,
height: u32,
format: Format,
modifiers: impl Iterator<Item = Modifier>,
usage: BufferObjectFlags,
) -> IoResult<Surface<U>>
pub fn create_surface_with_modifiers2<U: 'static>( &self, width: u32, height: u32, format: Format, modifiers: impl Iterator<Item = Modifier>, usage: BufferObjectFlags, ) -> IoResult<Surface<U>>
Allocate a new surface object with explicit modifiers and flags
Sourcepub fn create_buffer_object<U: 'static>(
&self,
width: u32,
height: u32,
format: Format,
usage: BufferObjectFlags,
) -> IoResult<BufferObject<U>>
pub fn create_buffer_object<U: 'static>( &self, width: u32, height: u32, format: Format, usage: BufferObjectFlags, ) -> IoResult<BufferObject<U>>
Allocate a buffer object for the given dimensions
Sourcepub fn create_buffer_object_with_modifiers<U: 'static>(
&self,
width: u32,
height: u32,
format: Format,
modifiers: impl Iterator<Item = Modifier>,
) -> IoResult<BufferObject<U>>
pub fn create_buffer_object_with_modifiers<U: 'static>( &self, width: u32, height: u32, format: Format, modifiers: impl Iterator<Item = Modifier>, ) -> IoResult<BufferObject<U>>
Allocate a buffer object for the given dimensions with explicit modifiers
Sourcepub fn create_buffer_object_with_modifiers2<U: 'static>(
&self,
width: u32,
height: u32,
format: Format,
modifiers: impl Iterator<Item = Modifier>,
usage: BufferObjectFlags,
) -> IoResult<BufferObject<U>>
pub fn create_buffer_object_with_modifiers2<U: 'static>( &self, width: u32, height: u32, format: Format, modifiers: impl Iterator<Item = Modifier>, usage: BufferObjectFlags, ) -> IoResult<BufferObject<U>>
Allocate a buffer object for the given dimensions with explicit modifiers and flags
Sourcepub fn import_buffer_object_from_wayland<U: 'static>(
&self,
buffer: &WlBuffer,
usage: BufferObjectFlags,
) -> IoResult<BufferObject<U>>
pub fn import_buffer_object_from_wayland<U: 'static>( &self, buffer: &WlBuffer, usage: BufferObjectFlags, ) -> IoResult<BufferObject<U>>
Create a GBM buffer object from a wayland buffer
This function imports a foreign [WlBuffer
] object and creates a new GBM
buffer object for it.
This enables using the foreign object with a display API such as KMS.
The GBM bo shares the underlying pixels but its life-time is independent of the foreign object.
Sourcepub fn import_buffer_object_from_dma_buf<U: 'static>(
&self,
buffer: BorrowedFd<'_>,
width: u32,
height: u32,
stride: u32,
format: Format,
usage: BufferObjectFlags,
) -> IoResult<BufferObject<U>>
pub fn import_buffer_object_from_dma_buf<U: 'static>( &self, buffer: BorrowedFd<'_>, width: u32, height: u32, stride: u32, format: Format, usage: BufferObjectFlags, ) -> IoResult<BufferObject<U>>
Create a GBM buffer object from a dma buffer
This function imports a foreign dma buffer from an open file descriptor and creates a new GBM buffer object for it. This enables using the foreign object with a display API such as KMS.
The GBM bo shares the underlying pixels but its life-time is independent of the foreign object.
Sourcepub fn import_buffer_object_from_dma_buf_with_modifiers<U: 'static>(
&self,
len: u32,
buffers: [Option<BorrowedFd<'_>>; 4],
width: u32,
height: u32,
format: Format,
usage: BufferObjectFlags,
strides: [i32; 4],
offsets: [i32; 4],
modifier: Modifier,
) -> IoResult<BufferObject<U>>
pub fn import_buffer_object_from_dma_buf_with_modifiers<U: 'static>( &self, len: u32, buffers: [Option<BorrowedFd<'_>>; 4], width: u32, height: u32, format: Format, usage: BufferObjectFlags, strides: [i32; 4], offsets: [i32; 4], modifier: Modifier, ) -> IoResult<BufferObject<U>>
Create a GBM buffer object from a dma buffer with explicit modifiers
This function imports a foreign dma buffer from an open file descriptor and creates a new GBM buffer object for it. This enables using the foreign object with a display API such as KMS.
The GBM bo shares the underlying pixels but its life-time is independent of the foreign object.
Trait Implementations§
Source§impl<T: AsFd> AsFd for Device<T>
impl<T: AsFd> AsFd for Device<T>
Source§fn as_fd(&self) -> BorrowedFd<'_>
fn as_fd(&self) -> BorrowedFd<'_>
Source§impl<T: DrmDevice + AsFd> Device for Device<T>
impl<T: DrmDevice + AsFd> Device for Device<T>
§fn acquire_master_lock(&self) -> Result<(), Error>
fn acquire_master_lock(&self) -> Result<(), Error>
§fn release_master_lock(&self) -> Result<(), Error>
fn release_master_lock(&self) -> Result<(), Error>
§fn generate_auth_token(&self) -> Result<AuthToken, Error>
fn generate_auth_token(&self) -> Result<AuthToken, Error>
AuthToken
] for this process.§fn authenticate_auth_token(&self, token: AuthToken) -> Result<(), Error>
fn authenticate_auth_token(&self, token: AuthToken) -> Result<(), Error>
AuthToken
] from another process.§fn set_client_capability(
&self,
cap: ClientCapability,
enable: bool,
) -> Result<(), Error>
fn set_client_capability( &self, cap: ClientCapability, enable: bool, ) -> Result<(), Error>
ClientCapability
] for more information.§fn get_bus_id(&self) -> Result<OsString, Error>
fn get_bus_id(&self) -> Result<OsString, Error>
§fn authenticated(&self) -> Result<bool, Error>
fn authenticated(&self) -> Result<bool, Error>
AuthToken
] has been authenticated
by the DRM Master§fn get_driver_capability(&self, cap: DriverCapability) -> Result<u64, Error>
fn get_driver_capability(&self, cap: DriverCapability) -> Result<u64, Error>
§fn get_driver(&self) -> Result<Driver, Error>
fn get_driver(&self) -> Result<Driver, Error>
Source§impl<T: DrmControlDevice + AsFd> Device for Device<T>
impl<T: DrmControlDevice + AsFd> Device for Device<T>
§fn resource_handles(&self) -> Result<ResourceHandles, Error>
fn resource_handles(&self) -> Result<ResourceHandles, Error>
§fn plane_handles(&self) -> Result<Vec<Handle>, Error>
fn plane_handles(&self) -> Result<Vec<Handle>, Error>
§fn get_connector(
&self,
handle: Handle,
force_probe: bool,
) -> Result<Info, Error>
fn get_connector( &self, handle: Handle, force_probe: bool, ) -> Result<Info, Error>
§fn get_encoder(&self, handle: Handle) -> Result<Info, Error>
fn get_encoder(&self, handle: Handle) -> Result<Info, Error>
§fn set_crtc(
&self,
handle: Handle,
framebuffer: Option<Handle>,
pos: (u32, u32),
conns: &[Handle],
mode: Option<Mode>,
) -> Result<(), Error>
fn set_crtc( &self, handle: Handle, framebuffer: Option<Handle>, pos: (u32, u32), conns: &[Handle], mode: Option<Mode>, ) -> Result<(), Error>
§fn get_framebuffer(&self, handle: Handle) -> Result<Info, Error>
fn get_framebuffer(&self, handle: Handle) -> Result<Info, Error>
§fn get_planar_framebuffer(
&self,
handle: Handle,
) -> Result<PlanarInfo, GetPlanarFramebufferError>
fn get_planar_framebuffer( &self, handle: Handle, ) -> Result<PlanarInfo, GetPlanarFramebufferError>
§fn add_framebuffer<B>(
&self,
buffer: &B,
depth: u32,
bpp: u32,
) -> Result<Handle, Error>where
B: Buffer + ?Sized,
fn add_framebuffer<B>(
&self,
buffer: &B,
depth: u32,
bpp: u32,
) -> Result<Handle, Error>where
B: Buffer + ?Sized,
§fn add_planar_framebuffer<B>(
&self,
planar_buffer: &B,
flags: FbCmd2Flags,
) -> Result<Handle, Error>where
B: PlanarBuffer + ?Sized,
fn add_planar_framebuffer<B>(
&self,
planar_buffer: &B,
flags: FbCmd2Flags,
) -> Result<Handle, Error>where
B: PlanarBuffer + ?Sized,
§fn dirty_framebuffer(
&self,
handle: Handle,
clips: &[ClipRect],
) -> Result<(), Error>
fn dirty_framebuffer( &self, handle: Handle, clips: &[ClipRect], ) -> Result<(), Error>
§fn destroy_framebuffer(&self, handle: Handle) -> Result<(), Error>
fn destroy_framebuffer(&self, handle: Handle) -> Result<(), Error>
§fn get_plane(&self, handle: Handle) -> Result<Info, Error>
fn get_plane(&self, handle: Handle) -> Result<Info, Error>
§fn set_plane(
&self,
handle: Handle,
crtc: Handle,
framebuffer: Option<Handle>,
flags: u32,
crtc_rect: (i32, i32, u32, u32),
src_rect: (u32, u32, u32, u32),
) -> Result<(), Error>
fn set_plane( &self, handle: Handle, crtc: Handle, framebuffer: Option<Handle>, flags: u32, crtc_rect: (i32, i32, u32, u32), src_rect: (u32, u32, u32, u32), ) -> Result<(), Error>
§fn get_property(&self, handle: Handle) -> Result<Info, Error>
fn get_property(&self, handle: Handle) -> Result<Info, Error>
§fn set_property<T>(
&self,
handle: T,
prop: Handle,
value: u64,
) -> Result<(), Error>where
T: ResourceHandle,
fn set_property<T>(
&self,
handle: T,
prop: Handle,
value: u64,
) -> Result<(), Error>where
T: ResourceHandle,
§fn create_property_blob<T>(&self, data: &T) -> Result<Value<'static>, Error>
fn create_property_blob<T>(&self, data: &T) -> Result<Value<'static>, Error>
§fn get_modes(&self, handle: Handle) -> Result<Vec<Mode>, Error>
fn get_modes(&self, handle: Handle) -> Result<Vec<Mode>, Error>
Mode
]s that a particular connector supports.§fn get_properties<T>(&self, handle: T) -> Result<PropertyValueSet, Error>where
T: ResourceHandle,
fn get_properties<T>(&self, handle: T) -> Result<PropertyValueSet, Error>where
T: ResourceHandle,
§fn get_gamma(
&self,
crtc: Handle,
red: &mut [u16],
green: &mut [u16],
blue: &mut [u16],
) -> Result<(), Error>
fn get_gamma( &self, crtc: Handle, red: &mut [u16], green: &mut [u16], blue: &mut [u16], ) -> Result<(), Error>
§fn set_gamma(
&self,
crtc: Handle,
red: &[u16],
green: &[u16],
blue: &[u16],
) -> Result<(), Error>
fn set_gamma( &self, crtc: Handle, red: &[u16], green: &[u16], blue: &[u16], ) -> Result<(), Error>
§fn open_buffer(&self, name: Name) -> Result<Handle, Error>
fn open_buffer(&self, name: Name) -> Result<Handle, Error>
§fn close_buffer(&self, handle: Handle) -> Result<(), Error>
fn close_buffer(&self, handle: Handle) -> Result<(), Error>
§fn create_dumb_buffer(
&self,
size: (u32, u32),
format: DrmFourcc,
bpp: u32,
) -> Result<DumbBuffer, Error>
fn create_dumb_buffer( &self, size: (u32, u32), format: DrmFourcc, bpp: u32, ) -> Result<DumbBuffer, Error>
§fn map_dumb_buffer<'a>(
&self,
buffer: &'a mut DumbBuffer,
) -> Result<DumbMapping<'a>, Error>
fn map_dumb_buffer<'a>( &self, buffer: &'a mut DumbBuffer, ) -> Result<DumbMapping<'a>, Error>
§fn destroy_dumb_buffer(&self, buffer: DumbBuffer) -> Result<(), Error>
fn destroy_dumb_buffer(&self, buffer: DumbBuffer) -> Result<(), Error>
§fn set_cursor<B>(&self, crtc: Handle, buffer: Option<&B>) -> Result<(), Error>where
B: Buffer + ?Sized,
fn set_cursor<B>(&self, crtc: Handle, buffer: Option<&B>) -> Result<(), Error>where
B: Buffer + ?Sized,
§fn set_cursor2<B>(
&self,
crtc: Handle,
buffer: Option<&B>,
hotspot: (i32, i32),
) -> Result<(), Error>where
B: Buffer + ?Sized,
fn set_cursor2<B>(
&self,
crtc: Handle,
buffer: Option<&B>,
hotspot: (i32, i32),
) -> Result<(), Error>where
B: Buffer + ?Sized,
§fn move_cursor(&self, crtc: Handle, pos: (i32, i32)) -> Result<(), Error>
fn move_cursor(&self, crtc: Handle, pos: (i32, i32)) -> Result<(), Error>
§fn atomic_commit(
&self,
flags: AtomicCommitFlags,
req: AtomicModeReq,
) -> Result<(), Error>
fn atomic_commit( &self, flags: AtomicCommitFlags, req: AtomicModeReq, ) -> Result<(), Error>
§fn prime_fd_to_buffer(&self, fd: BorrowedFd<'_>) -> Result<Handle, Error>
fn prime_fd_to_buffer(&self, fd: BorrowedFd<'_>) -> Result<Handle, Error>
§fn buffer_to_prime_fd(
&self,
handle: Handle,
flags: u32,
) -> Result<OwnedFd, Error>
fn buffer_to_prime_fd( &self, handle: Handle, flags: u32, ) -> Result<OwnedFd, Error>
§fn page_flip(
&self,
handle: Handle,
framebuffer: Handle,
flags: PageFlipFlags,
target_sequence: Option<PageFlipTarget>,
) -> Result<(), Error>
fn page_flip( &self, handle: Handle, framebuffer: Handle, flags: PageFlipFlags, target_sequence: Option<PageFlipTarget>, ) -> Result<(), Error>
§fn create_syncobj(&self, signalled: bool) -> Result<Handle, Error>
fn create_syncobj(&self, signalled: bool) -> Result<Handle, Error>
§fn destroy_syncobj(&self, handle: Handle) -> Result<(), Error>
fn destroy_syncobj(&self, handle: Handle) -> Result<(), Error>
§fn syncobj_to_fd(
&self,
handle: Handle,
export_sync_file: bool,
) -> Result<OwnedFd, Error>
fn syncobj_to_fd( &self, handle: Handle, export_sync_file: bool, ) -> Result<OwnedFd, Error>
§fn fd_to_syncobj(
&self,
fd: BorrowedFd<'_>,
import_sync_file: bool,
) -> Result<Handle, Error>
fn fd_to_syncobj( &self, fd: BorrowedFd<'_>, import_sync_file: bool, ) -> Result<Handle, Error>
Self::syncobj_to_fd
] back into a process-local handle.§fn syncobj_wait(
&self,
handles: &[Handle],
timeout_nsec: i64,
wait_all: bool,
wait_for_submit: bool,
) -> Result<u32, Error>
fn syncobj_wait( &self, handles: &[Handle], timeout_nsec: i64, wait_all: bool, wait_for_submit: bool, ) -> Result<u32, Error>
§fn syncobj_reset(&self, handles: &[Handle]) -> Result<(), Error>
fn syncobj_reset(&self, handles: &[Handle]) -> Result<(), Error>
§fn syncobj_signal(&self, handles: &[Handle]) -> Result<(), Error>
fn syncobj_signal(&self, handles: &[Handle]) -> Result<(), Error>
§fn syncobj_timeline_wait(
&self,
handles: &[Handle],
points: &[u64],
timeout_nsec: i64,
wait_all: bool,
wait_for_submit: bool,
wait_available: bool,
) -> Result<u32, Error>
fn syncobj_timeline_wait( &self, handles: &[Handle], points: &[u64], timeout_nsec: i64, wait_all: bool, wait_for_submit: bool, wait_available: bool, ) -> Result<u32, Error>
§fn syncobj_timeline_query(
&self,
handles: &[Handle],
points: &mut [u64],
last_submitted: bool,
) -> Result<(), Error>
fn syncobj_timeline_query( &self, handles: &[Handle], points: &mut [u64], last_submitted: bool, ) -> Result<(), Error>
§fn syncobj_timeline_transfer(
&self,
src_handle: Handle,
dst_handle: Handle,
src_point: u64,
dst_point: u64,
) -> Result<(), Error>
fn syncobj_timeline_transfer( &self, src_handle: Handle, dst_handle: Handle, src_point: u64, dst_point: u64, ) -> Result<(), Error>
§fn syncobj_timeline_signal(
&self,
handles: &[Handle],
points: &[u64],
) -> Result<(), Error>
fn syncobj_timeline_signal( &self, handles: &[Handle], points: &[u64], ) -> Result<(), Error>
§fn syncobj_eventfd(
&self,
handle: Handle,
point: u64,
eventfd: BorrowedFd<'_>,
wait_available: bool,
) -> Result<(), Error>
fn syncobj_eventfd( &self, handle: Handle, point: u64, eventfd: BorrowedFd<'_>, wait_available: bool, ) -> Result<(), Error>
§fn create_lease(
&self,
objects: &[NonZero<u32>],
flags: u32,
) -> Result<(NonZero<u32>, OwnedFd), Error>
fn create_lease( &self, objects: &[NonZero<u32>], flags: u32, ) -> Result<(NonZero<u32>, OwnedFd), Error>
§fn revoke_lease(&self, lessee_id: NonZero<u32>) -> Result<(), Error>
fn revoke_lease(&self, lessee_id: NonZero<u32>) -> Result<(), Error>
§fn receive_events(&self) -> Result<Events, Error>where
Self: Sized,
fn receive_events(&self) -> Result<Events, Error>where
Self: Sized,
Auto Trait Implementations§
impl<T> Freeze for Device<T>where
T: Freeze,
impl<T> !RefUnwindSafe for Device<T>
impl<T> Send for Device<T>where
T: Send,
impl<T> Sync for Device<T>where
T: Sync,
impl<T> Unpin for Device<T>where
T: Unpin,
impl<T> !UnwindSafe for Device<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.