1
0
Fork 0
forked from wry/wry

video: prefer non-nvidia devices when selecting render device

This commit is contained in:
Julian Orth 2022-11-13 15:18:50 +01:00
parent 141997d9d6
commit 79ee6900fa
6 changed files with 107 additions and 11 deletions

View file

@ -34,7 +34,7 @@ use crate::{
utils::{errorfmt::ErrorFmt, stack::Stack, syncqueue::SyncQueue, vec_ext::VecExt},
video::{
dmabuf::DmaBuf,
drm::sys::{DRM_CAP_CURSOR_HEIGHT, DRM_CAP_CURSOR_WIDTH},
drm::sys::{get_version, DRM_CAP_CURSOR_HEIGHT, DRM_CAP_CURSOR_WIDTH},
INVALID_MODIFIER,
},
};
@ -103,6 +103,8 @@ pub enum DrmError {
ReadEvents(#[source] OsError),
#[error("Read invalid data from drm device")]
InvalidRead,
#[error("Could not determine the drm version")]
Version(#[source] OsError),
}
fn render_node_name(fd: c::c_int) -> Result<Ustring, DrmError> {
@ -165,6 +167,10 @@ impl Drm {
pub fn get_nodes(&self) -> Result<AHashMap<NodeType, CString>, DrmError> {
get_nodes(self.fd.raw()).map_err(DrmError::GetNodes)
}
pub fn version(&self) -> Result<DrmVersion, DrmError> {
get_version(self.fd.raw()).map_err(DrmError::Version)
}
}
pub struct DrmMaster {
@ -590,6 +596,16 @@ pub struct DrmModeInfo {
pub name: BString,
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct DrmVersion {
pub version_major: i32,
pub version_minor: i32,
pub version_patchlevel: i32,
pub name: BString,
pub date: BString,
pub desc: BString,
}
impl DrmModeInfo {
pub fn create_blob(&self, master: &Rc<DrmMaster>) -> Result<PropBlob, DrmError> {
let raw = self.to_raw();