x11: add option to make extensions optional
This commit is contained in:
parent
0d2c3acdc7
commit
d00197052c
|
@ -129,7 +129,7 @@ where
|
|||
}
|
||||
|
||||
// We need dri3 >= 1.2 in order to use the enhanced dri3_pixmap_from_buffers function.
|
||||
let xid = if window_inner.extensions.dri3 >= (1, 2) {
|
||||
let xid = if window_inner.extensions.dri3 >= Some((1, 2)) {
|
||||
if dmabuf.num_planes() > 4 {
|
||||
return Err(CreatePixmapError::TooManyPlanes);
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ macro_rules! extensions {
|
|||
$(
|
||||
$extension:ident { // Extension name for path lookup
|
||||
$extension_fn:ident, // Function used to look up the version of the extension
|
||||
required: $required:expr,
|
||||
minimum: ($min_major:expr, $min_minor:expr),
|
||||
request: ($req_major:expr, $req_minor:expr),
|
||||
},
|
||||
|
@ -34,7 +35,7 @@ macro_rules! extensions {
|
|||
pub struct Extensions {
|
||||
$(
|
||||
#[doc = concat!(" The version of the `", stringify!($extension), "` extension.")]
|
||||
pub $extension: (u32, u32),
|
||||
pub $extension: Option<(u32, u32)>,
|
||||
)*
|
||||
}
|
||||
|
||||
|
@ -59,11 +60,12 @@ macro_rules! extensions {
|
|||
version.minor_version,
|
||||
);
|
||||
|
||||
(version.major_version, version.minor_version)
|
||||
Some((version.major_version, version.minor_version))
|
||||
} else {
|
||||
if $required {
|
||||
slog::error!(
|
||||
logger,
|
||||
"{} extension version is too low (have {}.{}, expected {}.{})",
|
||||
"required extension {} version is too low (have {}.{}, expected {}.{})",
|
||||
X11_EXTENSION_NAME,
|
||||
version.major_version,
|
||||
version.minor_version,
|
||||
|
@ -78,9 +80,13 @@ macro_rules! extensions {
|
|||
available_major: version.major_version,
|
||||
available_minor: version.minor_version,
|
||||
}.into());
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
} else {
|
||||
slog::error!(logger, "{} extension not found", X11_EXTENSION_NAME);
|
||||
if $required {
|
||||
slog::error!(logger, "required extension {} not found", X11_EXTENSION_NAME);
|
||||
|
||||
return Err(MissingExtensionError::NotFound {
|
||||
name: X11_EXTENSION_NAME,
|
||||
|
@ -88,6 +94,9 @@ macro_rules! extensions {
|
|||
minor: $min_minor,
|
||||
}
|
||||
.into());
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
};
|
||||
)*
|
||||
|
@ -105,18 +114,21 @@ macro_rules! extensions {
|
|||
extensions! {
|
||||
present {
|
||||
present_query_version,
|
||||
required: true,
|
||||
minimum: (1, 0),
|
||||
request: (1, 0),
|
||||
},
|
||||
|
||||
xfixes {
|
||||
xfixes_query_version,
|
||||
required: true,
|
||||
minimum: (4, 0),
|
||||
request: (4, 0),
|
||||
},
|
||||
|
||||
dri3 {
|
||||
dri3_query_version,
|
||||
required: true,
|
||||
minimum: (1, 0),
|
||||
request: (1, 2),
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue