autocommit 2022-04-04 23:09:39 CEST
This commit is contained in:
parent
e897d271af
commit
5f79aab15f
21 changed files with 870 additions and 731 deletions
158
build/enums.rs
158
build/enums.rs
|
|
@ -1,7 +1,6 @@
|
|||
use crate::open;
|
||||
use repc::layout::{Type, TypeVariant};
|
||||
use std::env;
|
||||
use std::fmt::Write as FmtWrite;
|
||||
use std::io::Write;
|
||||
|
||||
#[allow(unused_macros)]
|
||||
|
|
@ -9,9 +8,6 @@ use std::io::Write;
|
|||
#[path = "../src/macros.rs"]
|
||||
mod macros;
|
||||
|
||||
#[path = "../src/pixman/consts.rs"]
|
||||
mod pixman;
|
||||
|
||||
#[path = "../src/xkbcommon/consts.rs"]
|
||||
mod xkbcommon;
|
||||
|
||||
|
|
@ -51,153 +47,6 @@ fn write_ty<W: Write>(f: &mut W, vals: &[i32], ty: &str) -> anyhow::Result<()> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn write_egl_procs<W: Write>(f: &mut W) -> anyhow::Result<()> {
|
||||
let map = [
|
||||
(
|
||||
"eglGetPlatformDisplayEXT",
|
||||
"EGLDisplay",
|
||||
&[
|
||||
("platform", "EGLenum"),
|
||||
("native_display", "*mut u8"),
|
||||
("attrib_list", "*const EGLint"),
|
||||
][..],
|
||||
),
|
||||
(
|
||||
"eglCreateImageKHR",
|
||||
"EGLImageKHR",
|
||||
&[
|
||||
("dpy", "EGLDisplay"),
|
||||
("ctx", "EGLContext"),
|
||||
("target", "EGLenum"),
|
||||
("buffer", "EGLClientBuffer"),
|
||||
("attrib_list", "*const EGLint"),
|
||||
][..],
|
||||
),
|
||||
(
|
||||
"eglDestroyImageKHR",
|
||||
"EGLBoolean",
|
||||
&[("dpy", "EGLDisplay"), ("image", "EGLImageKHR")][..],
|
||||
),
|
||||
(
|
||||
"eglQueryDmaBufFormatsEXT",
|
||||
"EGLBoolean",
|
||||
&[
|
||||
("dpy", "EGLDisplay"),
|
||||
("max_formats", "EGLint"),
|
||||
("formats", "*mut EGLint"),
|
||||
("num_formats", "*mut EGLint"),
|
||||
][..],
|
||||
),
|
||||
(
|
||||
"eglQueryDmaBufModifiersEXT",
|
||||
"EGLBoolean",
|
||||
&[
|
||||
("dpy", "EGLDisplay"),
|
||||
("format", "EGLint"),
|
||||
("max_modifiers", "EGLint"),
|
||||
("modifiers", "*mut EGLuint64KHR"),
|
||||
("external_only", "*mut EGLBoolean"),
|
||||
("num_modifiers", "*mut EGLint"),
|
||||
][..],
|
||||
),
|
||||
(
|
||||
"eglDebugMessageControlKHR",
|
||||
"EGLint",
|
||||
&[
|
||||
("callback", "EGLDEBUGPROCKHR"),
|
||||
("attrib_list", "*const EGLAttrib"),
|
||||
][..],
|
||||
),
|
||||
(
|
||||
"eglQueryDisplayAttribEXT",
|
||||
"EGLBoolean",
|
||||
&[
|
||||
("dpy", "EGLDisplay"),
|
||||
("attribute", "EGLint"),
|
||||
("value", "*mut EGLAttrib"),
|
||||
][..],
|
||||
),
|
||||
(
|
||||
"eglQueryDeviceStringEXT",
|
||||
"*const c::c_char",
|
||||
&[("device", "EGLDeviceEXT"), ("name", "EGLint")][..],
|
||||
),
|
||||
(
|
||||
"eglQueryDevicesEXT",
|
||||
"EGLBoolean",
|
||||
&[
|
||||
("max_devices", "EGLint"),
|
||||
("devices", "*mut EGLDeviceEXT"),
|
||||
("num_devices", "*mut EGLint"),
|
||||
][..],
|
||||
),
|
||||
(
|
||||
"glEGLImageTargetRenderbufferStorageOES",
|
||||
"()",
|
||||
&[("target", "GLenum"), ("image", "GLeglImageOES")][..],
|
||||
),
|
||||
(
|
||||
"glEGLImageTargetTexture2DOES",
|
||||
"()",
|
||||
&[("target", "GLenum"), ("image", "GLeglImageOES")][..],
|
||||
),
|
||||
];
|
||||
|
||||
writeln!(f, "use std::ptr;")?;
|
||||
writeln!(f, "use super::gl::sys::*;")?;
|
||||
writeln!(f, "use super::egl::sys::*;")?;
|
||||
writeln!(f)?;
|
||||
writeln!(f, "#[derive(Copy, Clone, Debug)]")?;
|
||||
writeln!(f, "pub struct ExtProc {{")?;
|
||||
for (name, _, _) in map.iter() {
|
||||
writeln!(f, " {}: *mut u8,", name)?;
|
||||
}
|
||||
writeln!(f, "}}")?;
|
||||
writeln!(f)?;
|
||||
writeln!(f, "unsafe impl Sync for ExtProc {{ }}")?;
|
||||
writeln!(f, "unsafe impl Send for ExtProc {{ }}")?;
|
||||
writeln!(f)?;
|
||||
writeln!(f, "impl ExtProc {{")?;
|
||||
writeln!(f, " pub fn load() -> Self {{")?;
|
||||
writeln!(f, " Self {{")?;
|
||||
for (name, _, _) in map.iter().copied() {
|
||||
writeln!(
|
||||
f,
|
||||
" {}: unsafe {{ eglGetProcAddress(\"{}\\0\".as_ptr() as _) }},",
|
||||
name, name
|
||||
)?;
|
||||
}
|
||||
writeln!(f, " }}")?;
|
||||
writeln!(f, " }}")?;
|
||||
for (name, ret, args) in map.iter().copied() {
|
||||
let mut args_names = String::new();
|
||||
let mut args_full = String::new();
|
||||
let mut args_tys = String::new();
|
||||
for (name, ty) in args.iter().copied() {
|
||||
write!(args_full, "{}: {}, ", name, ty)?;
|
||||
write!(args_names, "{}, ", name)?;
|
||||
write!(args_tys, "{}, ", ty)?;
|
||||
}
|
||||
writeln!(f)?;
|
||||
writeln!(
|
||||
f,
|
||||
" pub(super) unsafe fn {}(&self, {}) -> {} {{",
|
||||
name, args_full, ret
|
||||
)?;
|
||||
writeln!(f, " if self.{}.is_null() {{", name)?;
|
||||
writeln!(f, " panic!(\"Could not load `{}`\");", name)?;
|
||||
writeln!(f, " }}")?;
|
||||
writeln!(
|
||||
f,
|
||||
" ptr::read(&self.{} as *const *mut u8 as *const unsafe extern fn({}) -> {})({})",
|
||||
name, args_tys, ret, args_names
|
||||
)?;
|
||||
writeln!(f, " }}")?;
|
||||
}
|
||||
writeln!(f, "}}")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn main() -> anyhow::Result<()> {
|
||||
let mut f = open("libinput_tys.rs")?;
|
||||
write_ty(
|
||||
|
|
@ -270,10 +119,6 @@ pub fn main() -> anyhow::Result<()> {
|
|||
"libinput_config_accel_profile",
|
||||
)?;
|
||||
|
||||
let mut f = open("pixman_tys.rs")?;
|
||||
write_ty(&mut f, pixman::FORMATS, "PixmanFormat")?;
|
||||
write_ty(&mut f, pixman::OPS, "PixmanOp")?;
|
||||
|
||||
let mut f = open("pango_tys.rs")?;
|
||||
write_ty(&mut f, pango::CAIRO_FORMATS, "cairo_format_t")?;
|
||||
write_ty(&mut f, pango::CAIRO_STATUSES, "cairo_status_t")?;
|
||||
|
|
@ -296,8 +141,5 @@ pub fn main() -> anyhow::Result<()> {
|
|||
)?;
|
||||
write_ty(&mut f, xkbcommon::XKB_KEY_DIRECTION, "xkb_key_direction")?;
|
||||
|
||||
let mut f = open("egl_procs.rs")?;
|
||||
write_egl_procs(&mut f)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue