Commit graph

146 commits

Author SHA1 Message Date
Marijn Suijten 9dcfbd2bf1
generator: Use Self as return type in builder functions (#418)
Do not Repeat Yourself in `impl` blocks, especially with the extra
lifetime these are unnecessarily verbose.
2021-04-17 22:25:06 +02:00
Marijn Suijten 5bc52dcd0a
generator: Improve alias readability by using Self:: as type (#409)
All enumeration aliases already extend the base type by being placed in
its `impl` block. Use `Self::` instead of repeating the type name. DRY.
2021-03-26 20:13:16 +01:00
Marijn Suijten 8605a34273
generator: Only replace "VK_" at the start of enum variant names (#384)
* generator: Only replace "VK_" at the start of enum variant names

Replacing the occurence of "VK" is dangerous as shown by this diff; MVK
shorthands for MoltenVK are accidentally mangled. Using
strip_prefix/suffix is not only more correct and performs more runtime
checks, it is also more performant by returning a slice into the string.

* generator: Correct duplicate suffix stripping

The original `.replace(vendor, "")` operation and `.trim_end_matches`
replace every (trailing) occurence of the vendor, causing
DEBUG_REPORT_CALLBACK_EXT_EXT to end up without `_EXT` at all. This name
is also provided by vk.xml as fallback alias because it is used but
technically incorrect; the current generator can however not generate it
(limitation in vkxml representation).
2021-03-07 16:21:05 +01:00
Marijn Suijten 057fd76be1
generator: Only expect vendor name at the end of constants (#383)
Constants (enumeration bitflags) containing the word `external` were not
stripped of their common typename, and quick debugging showed the word
`VKTERNAL_...` in `struct_name`. `_EXT` would be the first extension to
match in `VK_EXTERNAL_...` messing up `struct_name` with a global
`.replace`, in turn not removing it from the variant name.
2021-03-05 20:51:11 +01:00
Marijn Suijten a053c6aecc
Remove unnecessary CString allocation when loading functions (#379)
CString::new needs to perform an allocation to own the `&'static str`
and append a NULL byte to it. We can instead perform this "allocation"
in the generator and emit a byte-string literal with trailing NULL byte
that can immediately be used by the function loader.
2021-03-01 10:05:13 +01:00
Marijn Suijten e8b369db7d
generator: Turn c_void-returning functions into Rust () (#362)
`c_void` is not the same as Rust's void type, `()`, making function
pointers like `PFN_vkFreeFunction` pretty much impossible to implement
without casting. Instead of just turning this into `-> ()`, remove the
return type altogether, and add some asserts to prevent types of this
kind from being accidentally generated.
2021-02-28 16:50:24 +01:00
Marijn Suijten 7fa182cc43
Use raw pointers to static-sized arrays in FFI signatures (#353)
In rust references to DSTs (Dynamically Sized Types) like slices and
trait objects are 16-bytes instead of 8 (leaking into the next parameter
of a function call). The static-sized array generated here has its size
known beforehand and will not suffer from this issue [1], but might be
confusing for future readers/authors: convert it to a raw pointer just
to be safe.

[1]: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=88acb9736455f7262ecf4af2077f3a59
2021-01-02 15:08:10 +01:00
Marijn Suijten 43b5058e36
Upgrade proc_macro2/syn/quote to v1.0 (#351)
* generator: Mark IDirectFB and IDirectFBSurface as opaque

* Upgrade proc_macro2/syn/quote to v1.0

* Regenerate with quote/syn/proc_macro2 v1.0
2021-01-02 14:37:10 +01:00
Marijn Suijten 05747b25aa
Update Vulkan-Headers to 1.2.162 with stable ray-tracing spec (#341)
* Update Vulkan-Headers subproject to 1.2.162 (ray tracing)

* Generate against vk.xml 1.2.162

* generator: Shim IDirectFB and IDirectFBSurface to c_void

* generator: Edgecase for name-clash in p_geometries and pp_geometries

* extensions: Migrate acceleration structure to separate extension

* extensions: Migrate RT safe wrapper functions to ray_tracing_pipeline

* Add high level wrapper for currently-empty RayQuery extension

* vk: definition: Turn host/device AS handle into type safe union

Co-authored-by: Marijn Suijten <marijn@traverseresearch.nl>

Co-authored-by: Darius Bouma <darius1@live.nl>
2020-12-13 18:30:42 +01:00
Marijn Suijten bfa0309c97
Preliminary cleanup pass (#339)
* Fix clippy::manual_strip

* Fix clippy::comparison_to_empty

* Fix clippy::needless_lifetimes

* generator: Drop unnecessary edgecase for charptr array in builder

* generator: Make array type handling more linear

* prelude: Provide Result -> VkResult<()> conversion

* Add #[must_use] to Result type

* Fix all unchecked vk::Result cases

* generator: Fix typos

* generator: Assert char ptrs have `"null-terminated"` len attribute

* prelude: Provide result_with_success helper for Result -> VKresult

* Cleanup match{success} blocks with SSR

    {let $p = $f; match $q { vk::Result::SUCCESS => Ok($r), _ => Err($z), }} ==>> {$f.result_with_success($r)}

* Simplify matching on Result::SUCCESS

Using the following regex replacement:

    let err_code =\s*(.*\((\n|[^;])*?\));\s*match err_code \{\s*vk::Result::SUCCESS => Ok\((.*)\),\s*_ => Err\(err_code\),\s*\}

    $1.result_with_success($3)

* Simplify intermediate error return

    let err_code =\s*(.*\((\n|[^;])*?\));\s*if err_code != vk::Result::SUCCESS \{\s*return Err\(err_code\);\s*\}

    $1.result()?;

* Simplify error checking with .result()? and .result_with_success()

* generator: Ignore empty basetype in typedef (forward declaration)

ANativeWindow and AHardwareBuffer were [recently changed] to the
basetype category, but without an actual basetype, consequently failing
the Ident constructor with an empty name.

Since these types are already dealt with in platform_types, and there
doesn't seem to be anything sensical to define them to right now, just
ignore these cases.

[recently changed]: 0c5351f5e9 (diff-0ff049f722e55de41ee15b2c91ef380fL179-R180)

* Suggestion: Allocate data in get_ray_tracing_shader_group_handles

* generator: Update nom to 6.0

* generator: Generalize C expression conversion to TokenStream

* generator: Simplify ReferenceType::to_tokens with quote!

* generator: Refactor to not parse our own stringified token stream

* generator: Deal with pointers to static-sized arrays

* generator: Apply static-sized array pointer to size containing `*`

* generator: setter: Interpret all references as ptr, not just p_/pp_

* generator: quote::* is already imported

* generator: Replace manual fn to_tokens with quote::ToTokens trait impl

* generator: Return str reference from constant_name

* generator: Replace unused to_type_tokens with name_to_tokens

The reference argument was always None; replace it with a direct call to
name_to_tokens.

* generator: setters: Use safe mutable references instead of raw ptrs
2020-12-12 20:56:43 +01:00
Maik Klein 648c4a5019
Use best guess for ggp extension types (#333) 2020-10-25 22:22:21 +01:00
Steve Wooster ef8b5490c5 Appease clippy by using matches!() where appropriate 2020-10-17 00:47:39 -07:00
Marijn Suijten 6f488cd3db
Expose header version and extension spec version constants (#322)
* Generate constants for value defines

* Expose versioning constants containing macros

* Expose extension SPEC_VERSION constant
2020-09-10 20:46:42 +02:00
Marijn Suijten 2ae160cfc4 generator: Switch #[macro_use] to use and exclude nom::dbg
This avoids an obnoxious error when attemting to use `dbg!()` while
debugging the generator.

Unfortunately there seems to be no way to import * except `dbg`, or
shadow `dbg` (using eg. `use nom::{dbg as _nom_dbg, *};`).
2020-09-02 17:08:20 -07:00
zedrian ac4d046d4b
Added VK_EXT_tooling_info extension support (#310)
* Added `VK_EXT_tooling_info` extension support.

* Formatting applied.

* cargo-clippy suggestions satisfied.

* cargo-clippy suggestions satisfied.
2020-07-02 12:10:05 +02:00
Maik Klein 4d6bb3949d
Fix clippy lints for 1.43 (#298) 2020-05-10 13:42:07 +02:00
Martin Krošlák e378a85c78 Update vk-parse to 0.5.0 2020-05-08 10:45:14 -07:00
aloucks bd6515ced8
Split vk.rs into multiple files (#286)
* Allow the generator to be run from project root dir

* Split vk.rs into multiple files

* Breakup and remove generated vk/prelude.rs

Generator changes:

- No longer convert current dir to a string when checking if the
  path ends with 'generator'
- Pass the 'ash/src' dir instead of the 'vk.rs' path

Generated and generated output changes:

- The majority of prelude.rs has been moved to macros.rs
- The pointer chain and Handle are now included in vk.rs
- Platform types has been moved to its own file.
2020-04-19 19:12:17 +02:00
TheEdward162 a5e5e375b1 add const qualifier to as_raw and from_raw fns on enums 2020-04-11 11:39:22 -07:00
Jasper Bekkers 6bdc403330
[WIP] Khr Ray Tracing (#278)
* Fix incorrect generation of commands with aliases

* Use alias name instead of the actual cmd name

* Generate vulkan ray-tracing bindings

* Add ray-tracing khr

* High level ray tracing support

* Re-enable nv ray tracing extension (this will break the build)

* Generate aliases for extension enums

* Add missing alias because the parser doesn't provide alias information here

* Fix 'unreachable pattern' warnings

* Fix clippy warning

Co-authored-by: Maik Klein <maikklein@googlemail.com>
2020-03-22 16:05:30 +01:00
Maik Klein af6acb93e5
Fix incorrect generation of commands with aliases (#279)
* Fix incorrect generation of commands with aliases

* Use alias name instead of the actual cmd name
2020-03-22 13:56:01 +01:00
Maik Klein c32f0dd739 Clippy lints for 1.42 2020-03-15 00:55:26 +01:00
Benjamin Saunders 651462a342
Fix XCB types (#267) 2020-02-02 10:42:59 +01:00
Alexander Ekdahl 00f52cc5ad 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
2020-01-19 09:56:12 +01:00
Maik Klein 17edc8c13c Disable missing_safety_doc 2020-01-18 14:32:56 +01:00
Steve Wooster 54e7097dc7 Make more structs derive PartialEq/Eq/Hash (#248)
Adds equality-related traits to VkClearRect, VkOffset2D, VkOffset3D,
VkRect2D and VkSurfaceFormatKHR. Fixes a typo preventing said traits
from being applied to VkExtent2D.
2019-11-17 11:49:09 +01:00
Maik Klein e67df2650a
Update VulkanHeaders to 1.1.117 (#222)
* Update VulkanHeaders to 1.1.117

* Mark Ggp definitions as experimental

* Fix is_version

* Switch to 1.1.117
2019-10-20 18:11:13 +02:00
Maik Klein 855068323d
Address all the clippy lints (#233)
* Fix literals in vk.rs

* Address all the other clippy lints in ash

* Module level clippy lint

* More lints

* Make hashmaps generic for clippy

* Remove unused macro import
2019-10-20 17:18:40 +02:00
Benjamin Saunders 4e8090f0bb Replace version macros with const fns 2019-10-05 11:16:35 -07:00
bors[bot] 455adc6c1a Merge #216 #217
216: Update to 2018 edition r=MaikKlein a=aloucks

Fixes #204 

217: Make handle and bitflags constructor functions const r=MaikKlein a=aloucks

Fixes #187

Co-authored-by: Aaron Loucks <aloucks@cofront.net>
2019-05-26 21:21:57 +00:00
Aaron Loucks fb982fe419 Make handle and bitflags constructors functions const
Fixes #187
2019-05-25 16:00:15 -04:00
Aaron Loucks 634b618852 Run cargo fmt 2019-05-25 15:38:28 -04:00
Aaron Loucks 1ba1d46eb2 Update generator and examples to edition 2018 2019-05-25 15:34:18 -04:00
Aaron Loucks 284043b605 Update to 2018 edition 2019-05-25 15:25:00 -04:00
Benjamin Saunders bb6427d693 Idiomatic Debug impls for enums and bitflags
Improves consistency with Rust idioms. In particular, readability of
panic messages arising from unwrapped `VkResult`s is vastly improved.
2019-04-23 19:41:17 -07:00
bors[bot] 775a7d035d Merge #196
196: Rewrite builder in the readme r=MaikKlein a=MaikKlein



Co-authored-by: Maik Klein <maikklein@googlemail.com>
Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
2019-03-22 12:03:11 +00:00
Aaron Loucks d52f2c9b3e Reverting changes to Result's Display impl 2019-03-20 21:19:49 -04:00
Maik Klein 90538a05c0 Add docs to the build method 2019-03-20 10:45:17 +01:00
Aaron Loucks 584a3bb5da The doc parameter of define_handle is now optional 2019-03-17 12:54:26 -04:00
Aaron Loucks ac4e38a3d9 Remove deprecated method impls for std Error 2019-03-16 13:25:21 -04:00
Aaron Loucks f1fd35350c Convert khronos_link! into a function 2019-03-16 13:22:25 -04:00
Aaron Loucks adb194891f Add Khronos doc links and other ergonomic cleanup
* Khronos doc links are now automatically generated in vk.rs
* Added doc links to all other non-generated functions
* Implemented std::error::Error for LoadingError
* Made EntryCustom public in addition to the Entry typedef so that
  rustdoc no longer ignores it
* Moved Entry::new into EntryCustom (non-breaking)
* Added EntryCustom::try_enumerate_instance_version. The EntryV1_1 trait
  is not implemented for any type. Even if it were, the function would
  panic for Vulkan 1.0 implementations
* Added entry and instance creation example to lib docs
* Updated the Display impl for vk::Result so that it matches
  other bitmask and enum conventions
* Removed lazy_static dependency because it was no longer being
  referenced
2019-03-16 13:22:24 -04:00
Aaron Loucks b570edcee2 Add doc links for all non-generated files 2019-03-16 13:22:24 -04:00
Aaron Loucks 7555816b58 Generate doc links for all structs and functions 2019-03-16 13:22:24 -04:00
Aaron Loucks 23cbec85e9 Use BTreeMap only where absolutely necessary 2019-03-14 19:22:52 -04:00
Aaron Loucks 71ab88531e Fix struct generation with constant sized arrays 2019-03-13 17:50:04 -04:00
Aaron Loucks 659b10c5ae Make vk.rs generation idempotent and regenerate
All instances of HashMap and HashSet have been replaced with
BTreeMap and BTreeSet. Repeated generation of vk.rs results
in the same output given the same vk.xml and generator.

Note that this commit still contains the struct generation bug
introduced in PR #191. All structs with fixed sized arrays
are currently generated as slices.
2019-03-13 17:25:29 -04:00
bors[bot] 6672f53ee8 Merge #183
183: [WIP] Implement extension chaining r=MaikKlein a=MaikKlein

This is only a proof on concept right now. I'll finish it up next week.

What are your thoughts? Right now this requires a cast from `*const` to `*mut`.

Co-authored-by: Maik Klein <maikklein@googlemail.com>
2019-03-10 19:07:54 +00:00
Maik Klein 7d5d20017b Move external tests to lib.rs 2019-03-10 12:56:51 +01:00
Maik Klein 1744159dfd Move ptr chain tests out of the generator 2019-03-09 19:51:23 +01:00