1
0
Fork 0
forked from wry/wry

video: move drm object ids into type crate

This commit is contained in:
kossLAN 2026-05-29 13:01:44 -04:00
parent 524836bef3
commit 902853955b
No known key found for this signature in database
5 changed files with 82 additions and 65 deletions

View file

@ -8,8 +8,9 @@ use {
drm_feedback::DrmFeedback, drm_feedback::DrmFeedback,
format::Format, format::Format,
gfx_api::{FdSync, GfxApi, GfxFramebuffer}, gfx_api::{FdSync, GfxApi, GfxFramebuffer},
video::drm::{ConnectorType, DrmConnector, DrmError, DrmVersion}, video::drm::{ConnectorType, DrmError, DrmVersion},
}, },
jay_video_types::drm::DrmConnector,
std::{ std::{
any::Any, any::Any,
error::Error, error::Error,

View file

@ -21,17 +21,15 @@ use {
drm::sys::{ drm::sys::{
DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP, DRM_CAP_CURSOR_HEIGHT, DRM_CAP_CURSOR_WIDTH, DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP, DRM_CAP_CURSOR_HEIGHT, DRM_CAP_CURSOR_WIDTH,
DRM_DISPLAY_MODE_LEN, DRM_MODE_ATOMIC_TEST_ONLY, DRM_MODE_FB_MODIFIERS, DRM_DISPLAY_MODE_LEN, DRM_MODE_ATOMIC_TEST_ONLY, DRM_MODE_FB_MODIFIERS,
DRM_MODE_OBJECT_BLOB, DRM_MODE_OBJECT_CONNECTOR, DRM_MODE_OBJECT_CRTC, FORMAT_BLOB_CURRENT, auth_magic, create_lease, drm_event,
DRM_MODE_OBJECT_ENCODER, DRM_MODE_OBJECT_FB, DRM_MODE_OBJECT_PLANE,
DRM_MODE_OBJECT_PROPERTY, FORMAT_BLOB_CURRENT, auth_magic, create_lease, drm_event,
drm_event_crtc_sequence, drm_event_vblank, drm_format_modifier, drm_event_crtc_sequence, drm_event_vblank, drm_format_modifier,
drm_format_modifier_blob, drop_master, gem_close, get_cap, drm_format_modifier_blob, drop_master, gem_close, get_cap, get_device_name_from_fd2,
get_device_name_from_fd2, get_minor_name_from_fd, get_node_type_from_fd, get_nodes, get_minor_name_from_fd, get_node_type_from_fd, get_nodes, get_version, mode_addfb2,
get_version, mode_addfb2, mode_atomic, mode_create_blob, mode_destroy_blob, mode_atomic, mode_create_blob, mode_destroy_blob, mode_get_resources,
mode_get_resources, mode_getconnector, mode_getencoder, mode_getplane, mode_getconnector, mode_getencoder, mode_getplane, mode_getplaneresources,
mode_getplaneresources, mode_getprobblob, mode_getproperty, mode_obj_getproperties, mode_getprobblob, mode_getproperty, mode_obj_getproperties, mode_rmfb,
mode_rmfb, mode_supports_get_resources, prime_fd_to_handle, queue_sequence, mode_supports_get_resources, prime_fd_to_handle, queue_sequence, revoke_lease,
revoke_lease, set_client_cap, set_client_cap,
}, },
}, },
}, },
@ -51,6 +49,9 @@ use {
}; };
pub use { pub use {
consts::*, consts::*,
jay_video_types::drm::{
DrmBlob, DrmConnector, DrmCrtc, DrmEncoder, DrmFb, DrmObject, DrmPlane, DrmProperty,
},
sys::{ sys::{
DRM_CLIENT_CAP_ATOMIC, DRM_MODE_ATOMIC_ALLOW_MODESET, DRM_MODE_ATOMIC_NONBLOCK, DRM_CLIENT_CAP_ATOMIC, DRM_MODE_ATOMIC_ALLOW_MODESET, DRM_MODE_ATOMIC_NONBLOCK,
DRM_MODE_PAGE_FLIP_ASYNC, DRM_MODE_PAGE_FLIP_EVENT, drm_mode_modeinfo, DRM_MODE_PAGE_FLIP_ASYNC, DRM_MODE_PAGE_FLIP_EVENT, drm_mode_modeinfo,
@ -719,46 +720,6 @@ pub struct DrmPropertyValue {
pub value: u64, pub value: u64,
} }
pub trait DrmObject {
const TYPE: u32;
const NONE: Self;
fn id(&self) -> u32;
fn is_some(&self) -> bool;
fn is_none(&self) -> bool;
}
macro_rules! drm_obj {
($name:ident, $ty:expr) => {
#[repr(transparent)]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Ord, PartialOrd)]
pub struct $name(pub u32);
impl DrmObject for $name {
const TYPE: u32 = $ty;
const NONE: Self = Self(0);
fn id(&self) -> u32 {
self.0
}
fn is_some(&self) -> bool {
self.0 != 0
}
fn is_none(&self) -> bool {
self.0 == 0
}
}
};
}
drm_obj!(DrmCrtc, DRM_MODE_OBJECT_CRTC);
drm_obj!(DrmConnector, DRM_MODE_OBJECT_CONNECTOR);
drm_obj!(DrmEncoder, DRM_MODE_OBJECT_ENCODER);
drm_obj!(DrmProperty, DRM_MODE_OBJECT_PROPERTY);
drm_obj!(DrmFb, DRM_MODE_OBJECT_FB);
drm_obj!(DrmBlob, DRM_MODE_OBJECT_BLOB);
drm_obj!(DrmPlane, DRM_MODE_OBJECT_PLANE);
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct DrmCardResources { pub struct DrmCardResources {
pub _min_width: u32, pub _min_width: u32,
@ -1115,15 +1076,28 @@ num!(i64);
num!(u64); num!(u64);
num!(bool); num!(bool);
impl<T> ObjectChangeValue for T macro_rules! drm_object_value {
where ($($ty:ty,)*) => {
T: DrmObject, $(
{ impl ObjectChangeValue for $ty {
fn into_u64(self) -> u64 { fn into_u64(self) -> u64 {
self.id() as u64 self.id() as u64
} }
}
)*
};
} }
drm_object_value!(
DrmBlob,
DrmConnector,
DrmCrtc,
DrmEncoder,
DrmFb,
DrmPlane,
DrmProperty,
);
#[expect(non_camel_case_types)] #[expect(non_camel_case_types)]
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
pub enum ConnectorType { pub enum ConnectorType {

View file

@ -408,13 +408,6 @@ pub fn mode_obj_getproperties(
Ok(props) Ok(props)
} }
pub const DRM_MODE_OBJECT_CRTC: u32 = 0xcccccccc;
pub const DRM_MODE_OBJECT_CONNECTOR: u32 = 0xc0c0c0c0;
pub const DRM_MODE_OBJECT_ENCODER: u32 = 0xe0e0e0e0;
pub const DRM_MODE_OBJECT_PROPERTY: u32 = 0xb0b0b0b0;
pub const DRM_MODE_OBJECT_FB: u32 = 0xfbfbfbfb;
pub const DRM_MODE_OBJECT_BLOB: u32 = 0xbbbbbbbb;
pub const DRM_MODE_OBJECT_PLANE: u32 = 0xeeeeeeee;
#[expect(dead_code)] #[expect(dead_code)]
pub const DRM_MODE_OBJECT_ANY: u32 = 0; pub const DRM_MODE_OBJECT_ANY: u32 = 0;

48
video-types/src/drm.rs Normal file
View file

@ -0,0 +1,48 @@
pub const DRM_MODE_OBJECT_CRTC: u32 = 0xcccccccc;
pub const DRM_MODE_OBJECT_CONNECTOR: u32 = 0xc0c0c0c0;
pub const DRM_MODE_OBJECT_ENCODER: u32 = 0xe0e0e0e0;
pub const DRM_MODE_OBJECT_PROPERTY: u32 = 0xb0b0b0b0;
pub const DRM_MODE_OBJECT_FB: u32 = 0xfbfbfbfb;
pub const DRM_MODE_OBJECT_BLOB: u32 = 0xbbbbbbbb;
pub const DRM_MODE_OBJECT_PLANE: u32 = 0xeeeeeeee;
pub trait DrmObject {
const TYPE: u32;
const NONE: Self;
fn id(&self) -> u32;
fn is_some(&self) -> bool;
fn is_none(&self) -> bool;
}
macro_rules! drm_obj {
($name:ident, $ty:expr) => {
#[repr(transparent)]
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default, Ord, PartialOrd)]
pub struct $name(pub u32);
impl DrmObject for $name {
const TYPE: u32 = $ty;
const NONE: Self = Self(0);
fn id(&self) -> u32 {
self.0
}
fn is_some(&self) -> bool {
self.0 != 0
}
fn is_none(&self) -> bool {
self.0 == 0
}
}
};
}
drm_obj!(DrmCrtc, DRM_MODE_OBJECT_CRTC);
drm_obj!(DrmConnector, DRM_MODE_OBJECT_CONNECTOR);
drm_obj!(DrmEncoder, DRM_MODE_OBJECT_ENCODER);
drm_obj!(DrmProperty, DRM_MODE_OBJECT_PROPERTY);
drm_obj!(DrmFb, DRM_MODE_OBJECT_FB);
drm_obj!(DrmBlob, DRM_MODE_OBJECT_BLOB);
drm_obj!(DrmPlane, DRM_MODE_OBJECT_PLANE);

View file

@ -1,3 +1,4 @@
pub mod drm;
pub mod dmabuf; pub mod dmabuf;
pub type Modifier = u64; pub type Modifier = u64;