Vulkan 1.2 Support (#264)

* Updated vk-parse and Vulkan-Headers to Vulkan 1.2

* First pass at generating vk.rs

* Support double

* Generate from EnumSpec::Value

* Remove println

* Fix mutable pointer bug

* cargo fmt

* Update document link

* Remove mention of Vulkan 1.2 support for now

* Add clippy::wrong_self_convention
This commit is contained in:
Alexander Ekdahl 2020-01-19 03:56:12 -05:00 committed by Maik Klein
parent 17edc8c13c
commit 00f52cc5ad
4 changed files with 8710 additions and 2719 deletions

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@ authors = ["Maik Klein <maikklein@googlemail.com>"]
edition = "2018"
[dependencies]
vk-parse = "0.2"
vk-parse = "0.3.0"
vkxml = "0.3"
nom = "4.0"
heck = "0.3"
@ -18,4 +18,3 @@ version = "0.4.2"
[dependencies.syn]
version = "0.12.14"
features = ["full", "extra-traits"]

@ -1 +1 @@
Subproject commit fd568d51ed3d9bc6132e1639d7492453a08fe1bc
Subproject commit 881bbb347a08d1b5aa77f61a52a30b506de9f2bf

View file

@ -89,7 +89,7 @@ named!(cfloat<&str, f32>,
fn khronos_link<S: Display>(name: &S) -> Literal {
Literal::string(&format!(
"<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/{name}.html>",
"<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/{name}.html>",
name = name
))
}
@ -185,22 +185,22 @@ pub fn handle_nondispatchable_macro() -> Tokens {
}
pub fn vk_version_macros() -> Tokens {
quote! {
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_MAKE_VERSION.html>"]
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_MAKE_VERSION.html>"]
pub const fn make_version(major: u32, minor: u32, patch: u32) -> u32 {
(major << 22) | (minor << 12) | patch
}
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_VERSION_MAJOR.html>"]
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_MAJOR.html>"]
pub const fn version_major(version: u32) -> u32 {
version >> 22
}
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_VERSION_MINOR.html>"]
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_MINOR.html>"]
pub const fn version_minor(version: u32) -> u32 {
(version >> 12) & 0x3ff
}
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_VERSION_PATCH.html>"]
#[doc = "<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_VERSION_PATCH.html>"]
pub const fn version_patch(version: u32) -> u32 {
version & 0xfff
}
@ -648,6 +648,7 @@ fn name_to_tokens(type_name: &str) -> Ident {
"void" => "c_void",
"char" => "c_char",
"float" => "f32",
"double" => "f64",
"long" => "c_ulong",
_ => {
if type_name.starts_with("Vk") {
@ -945,6 +946,13 @@ pub fn generate_extension_constants<'a>(
let value = if *positive { value } else { -value };
Some((Constant::Number(value as i32), Some(extends.clone())))
}
EnumSpec::Value { value, extends } => {
if let (Some(extends), Ok(value)) = (extends, value.parse::<i32>()) {
Some((Constant::Number(value), Some(extends.clone())))
} else {
None
}
}
_ => None,
}?;
let extends = extends?;
@ -1587,7 +1595,7 @@ pub fn derive_setters(
// *mut
let slice_type = &param_ty_string[5..];
if slice_type == "c_void" {
slice_param_ty_tokens = "&mut 'a [u8]".to_string();
slice_param_ty_tokens = "&'a mut [u8]".to_string();
ptr = ".as_mut_ptr() as *mut c_void";
} else {
slice_param_ty_tokens = "&'a mut [".to_string() + slice_type + "]";
@ -2273,7 +2281,7 @@ pub fn write_source_code(path: &Path) {
let version_macros = vk_version_macros();
let platform_specific_types = platform_specific_types();
let source_code = quote! {
#![allow(clippy::too_many_arguments, clippy::cognitive_complexity)]
#![allow(clippy::too_many_arguments, clippy::cognitive_complexity, clippy::wrong_self_convention)]
use std::fmt;
use std::os::raw::*;
/// Iterates through the pointer chain. Includes the item that is passed into the function.