Commit graph

221 commits

Author SHA1 Message Date
Marijn Suijten e400f5150c generator: Upgrade to bindgen 0.61.0 (#673)
Seems to mostly result in less unused type aliases being generated, and
improved/reworked testing infrastructure.
2022-11-18 10:21:34 +01:00
Marijn Suijten 812b9bb214 generator: Support nested arrays in builders without hardcoding (#666)
Prepare the generator for more struct fields that have nested "dynamic
arrays" with a hardcoded size of `1` (effectively arrays with pointers
to single objects) in `vk.xml`s `len` attribute.  These structs are
introduced by `VK_EXT_opacity_micromap` in 1.3.230.
2022-10-03 12:02:49 +02:00
Marijn Suijten 6a7303271a Update Vulkan-Headers to 1.3.228 (#655)
* Update Vulkan-Headers to 1.3.220
* Update Vulkan-Headers to 1.3.221
* Update Vulkan-Headers to 1.3.222
* Update Vulkan-Headers to 1.3.223
* Update Vulkan-Headers to 1.3.224
* Update Vulkan-Headers to 1.3.225
* Update Vulkan-Headers to 1.3.226
* Update Vulkan-Headers to 1.3.227
* Update Vulkan-Headers to 1.3.228
2022-09-21 16:10:22 +02:00
Marijn Suijten 21bbc79188 ash: Add const STRUCTURE_TYPE to all Vulkan structures for matching with match_struct! macro (#614)
* ash: Add `const STRUCTURE_TYPE` to all Vulkan structures for matching with `match_struct!` macro

In Vulkan layers extracing a structure based on its `s_type` is a common
operation, but comparing against an enum value and subsequently casting
to the right type is verbose and error-prone.

By generating a `const STRUCTURE_TYPE` with the given value for every
Vulkan structure it becomes possible to implement a macro that abstracts
this logic away in a safer way.

* generator: Reuse `HasStructureType::STRUCTURE_TYPE` in `s_type` initializer
2022-09-21 15:58:21 +02:00
Marijn Suijten f5e1f93d01 generator: Upgrade bindgen, heck and vk-parse
`heck` got its API slightly renamed, and `bindgen` fixed all code-smell
linter warnings in its output (except naming style, which is inherent).
2022-07-29 17:26:56 +02:00
Marijn Suijten 62960ad680 extensions: Inline all trivial functions (#638)
* extensions: Inline simple getter functions

* extensions: Inline all `unsafe fn` helper functions

* instance: Inline "skipped" `read_into_uninitialized_vector()` functions

* enums: Inline `from_raw`/`as_raw` functions
2022-07-07 17:28:10 +02:00
Marijn Suijten 85b2696a1f Update Vulkan-Headers to 1.3.219 (#619)
* Update Vulkan-Headers to 1.3.212

* Update Vulkan-Headers to 1.3.213

* Update Vulkan-Headers to 1.3.214

* Update Vulkan-Headers to 1.3.215

* Update Vulkan-Headers to 1.3.216

* Update Vulkan-Headers to 1.3.217

* Update Vulkan-Headers to 1.3.218

* Update Vulkan-Headers to 1.3.219

* Changelog: reorder entries chronologically based on PR ID
2022-07-06 13:24:26 +02:00
Marijn Suijten 3fafe975e0 generator: Fix clippy::is_digit_ascii_radix (#637) 2022-07-01 22:22:54 +02:00
Benjamin Saunders a6336a5b7b Inline builder setters 2022-06-05 12:55:04 +02:00
Michael Pollind 28a4868dc3 generator: Upgrade nom to 0.7 where parser macros have been removed (#610) 2022-05-11 11:23:20 +02:00
Marijn Suijten cc0e70e8e4 generator: Use _ as suffix instead of prefix to mask keywords (#613)
`_` as prefix is intended for unused variables and bindings; it should
be used in suffix position when intending to prevent a clash with a
keyword instead.
2022-04-15 23:38:38 +02:00
Marijn Suijten 529d20c832 Update Vulkan-Headers to 1.3.211 (#608) 2022-04-08 11:44:10 +02:00
Marijn Suijten 2a452909ae Update Vulkan-Headers to 1.3.210 (#605) 2022-04-01 09:52:06 +02:00
Benjamin Saunders 29cf7c2a4c Inline Default impls and trivial instance/device wrapper methods (#606) 2022-04-01 09:51:09 +02:00
Marijn Suijten 8ae0312f03
Update Vulkan-Headers to 1.3.209 (#601) 2022-03-23 21:52:28 +01:00
Benjamin Saunders 84cddb7383
Omit wrapper functions on Fp structs (#599)
* Omit wrapper functions on Fp structs

These wrappers contributed thousands of lines of code but offered
insignificant ergonomic benefit as the same functions are also wrapped
at a higher level and, if necessary, wrapper functions can be called
directly.

* Standardize on direct fp table access in wrapper functions
2022-03-22 23:50:18 +01:00
Steve Wooster 1cd810653c
ash-window: Make enumerate_required_extensions return &[*const c_char] (#590)
* Constify generated extension names

* Constify hand-written extension names

* Make ash-window list extensions as &[*const c_char]

This alters enumerate_required_extensions() to return the same type that
is expected by vk::InstanceCreateInfoBuilder::enabled_extension_names(),
allowing simple Vulkan apps to omit the boilerplate of mapping to an
intermediate Vec<*const c_char>.

Co-authored-by: Steve Wooster <s.f.m.wooster@gmail.com>
2022-03-22 23:47:26 +01:00
Marijn Suijten fde6f92c70
Update Vulkan-Headers to 1.3.207 (#597)
* Update Vulkan-Headers to 1.3.207

* Update Vulkan-Headers to 1.3.208
2022-03-22 23:30:41 +01:00
Steve Wooster 3c7615b3bb
Iterator simplification (#565)
* Unnest iterators

This hopefully makes the iterator definitions better resemble paths into
the XML tree.

* Use for-loop instead of .for_each()

* Use elems.contains(x) instead of elems.iter().any(...)

* Shrink commands-related .fold()

Co-authored-by: Steve Wooster <s.f.m.wooster@gmail.com>
2022-02-26 15:03:54 -08:00
Steve Wooster b16bb4e62c
Appease clippy (#591)
* Simplify .map().flatten().next() and .filter_map().next() to .find_map()

* Avoid unnecessary closures for cheap expressions

* Use character instead of string for replacement pattern

Co-authored-by: Steve Wooster <s.f.m.wooster@gmail.com>
2022-02-26 13:01:28 -08:00
Marijn Suijten 955cb28d12
Update Vulkan-Headers to 1.3.206 (#563)
* Update Vulkan-Headers to 1.3.205

* Update Vulkan-Headers to 1.3.206
2022-02-19 10:18:21 +01:00
Marijn Suijten e18e0243ef
ash: Remove unnecessary trivial_casts and trivial_numeric_casts (#564)
While making the code only marginally harder to read such casts can also
introduce subtle bugs when used incorrectly, and are best omitted
whenever unnecessary: Rust already coerces borrows into raw pointers
when the types on both ends are clear, and even then there remain many
casts that are identical to the source type.

In addition these errors show up when using a local crate reference to
`ash` in a workspace that uses "the `.cargo/config.toml` setup" from
[EmbarkStudios/rust-ecosystem#68] to configure linter warnings
project-wide instead of for all crates in that workspace individually.
In our case aforementioned linter warnings are enabled on top of
Embark's configuration, leading to a lot of these warnings in our build
process.

[EmbarkStudios/rust-ecosystem#68]: https://github.com/EmbarkStudios/rust-ecosystem/pull/68
2022-02-18 16:01:46 -08:00
Marijn Suijten bb02b20339
Replace 1.2-extensions documentation links with 1.3-extensions (#569)
All these 1.2 links redirect to the 1.3 pages: spare the redirects by
specifying the right - latest - version directly.
2022-01-28 17:10:52 -08:00
Marijn Suijten 405449901c
generator: Exclude static macro code (macros.rs) from the generator (#552)
Much like `platform_types.rs` and `vk.rs` before, there is no need to
generate this file as its contents are completely static.  This allows
direct editing of the file without realizing that a copy lives in the
generator - and will overwrite `macros.rs` when the generator is being
run.
2022-01-10 12:07:54 -08:00
Benjamin Saunders 45301fffa4 Optional flag/bitfield Debug impls 2021-12-21 17:01:35 -08:00
Benjamin Saunders 1700dcdf05 Make Debug impls optional
When disabled, this buys us a 12% reduction in buildtime.
2021-12-21 17:01:35 -08:00
Benjamin Saunders e34f755ece Move debug_flags definition out of the generator 2021-12-21 17:01:35 -08:00
Marijn Suijten 0ae56a0961
extensions: Don't check extension names for interior nuls at runtime (#522)
This name is emitted by the generator and already known to not contain
any null-characters: replace the runtime iteration+comparison (hidden
behind `from_bytes_with_nul`) and `.expect()` panic with an `unsafe`
"cast" through `from_bytes_with_nul_unchecked`, just like the
function-pointer loaders.
2021-12-22 01:38:48 +01:00
Marijn Suijten a7d5c49029 Update Vulkan-Headers to 1.2.203 2021-12-20 15:51:08 -08:00
Marijn Suijten 87b00568a6 extensions: Group enum extension variants together per impl T block
Instead of generating an impl block - together with "Generated from XXX"
doc - for every single item that extends an enum type, group all these
extensions together in a single `impl` block per extension per type.

This cuts down a couple thousand lines of repeated `impl T` and `#[doc]`
annotations, and makes the code more readable at the same time: it is
now possible to immediately see exactly all the constants that a certain
extension extends a type with.
2021-12-20 15:16:44 -08:00
Marijn Suijten 8f4709e70d generator: Remove now-unnecessary alias-identical check
Back when we were still trying to come up with sensible names for
"deprecated" aliases (initially introduced as self-supporting constants)
that don't adhere to the naming standard but only remain to exist for
backwards compatibility, some of these aliases would get the same name
as the enum constant they were aliasing, resulting in (compile-time)
conflicts.

Now that all those aliases are simply not generated anymore (end-users
should just pick the properly named variant) it is not necessary to
check for and prevent these conflicts on the generator side anymore.
2021-12-20 15:13:23 -08:00
Marijn Suijten fe55ad73bd generator: Don't zip the same iterator with and without filter
`constants` is iterated twice here: once with a filter, the other time
without, and the results are zipped together.  Besides being able to
simplify the entire execution to just one `iter()` without intermediary
iterators, removing `.zip()` makes it impossible for the results in both
iterators to get mismatched when the `filter` inevitably skips elements.
Fortunately no such cases seem to exist, or at least not that effect the
resulting generated code.
2021-12-20 15:07:27 -08:00
Marijn Suijten ac94739e11 generator: Remove unnecessary impl BuildHasher from HashMap types
Some clippy lint long ago apparently suggested to explicitly specify a
type for all random generators in 8550683 ("Address all the clippy lints
(#233)"), so the `impl BuildHasher` trait was apparently passed as a
placeholder for the `RandomState` default that's selected.

This does not serve any purpose and that (likely bogus) clippy warning
no longer shows up, making it safe to remove the trait.
2021-12-20 15:05:57 -08:00
Marijn Suijten 428830ad4f Update Vulkan-Headers to 1.2.202 2021-12-11 11:03:45 -08:00
Marijn Suijten f0c743a636
Fix new clippy warnings since Rust 1.57 (#507) 2021-12-11 13:25:19 +01:00
Marijn Suijten 0cddbad618
Update Vulkan-Headers to 1.2.201 (#504) 2021-12-01 20:17:19 +01:00
Marijn Suijten 4424efeef1 generator: Use "Backwards-compatible" comment to omit deprecated aliases
vk.xml now contains the comment text "Backwards-compatible alias
containing a typo" which we can use to detect intentional renames,
without needing to specify explicit overrides/exceptions in the
generator anymore.

These deprecated constants exist for the sole reason of backwards
compatibility which Vulkan cannot permit itself to remove in the C
headers, but are unreasonable for crate authors to use anyway due to
their `#[deprecated]` annotation whose cargo-check warnings are easy to
fix by just using the non-deprecated variant instead.  Furthermore, Ash
is still allowing itself to perform breaking changes in its releases
making this the perfect time to get rid of all these useless variants
and the generator support code that comes with it.  No need to come up
with a "more proper" variant name if we don't generate those that
"intentionally" fail to adhere to the "enum variant name" specification
in the first place.
2021-11-26 11:13:22 -08:00
Marijn Suijten 64f3de38ab
generator: Add missing documentation to bitflag extension variants (#501) 2021-11-23 20:11:42 +01:00
Marijn Suijten 9a35cff373
Update Vulkan-Headers to 1.2.200 (#497)
* Update Vulkan-Headers to 1.2.199

* Update Vulkan-Headers to 1.2.200
2021-11-23 20:00:46 +01:00
Marijn Suijten c4dd1d6040
vk: Remove misleading all()/-/-= function/ops from bitflags (#478)
The `all()` function only represents bitflags known in the core of
Vulkan; it omits all bits added by extensions making this function
unrepresentative and has hence been scheduled for removal for quite some
time to get rid of the confusion it causes.

Alternatively the generator could be taught to collect bitflags added by
extensions, but new extensions get added over time skewing available
values in ash versus the current driver/environment.  This makes the
value from `all()` unreliable and fragile at best.

`-` and `-=` (`sub()` and `sub_assign()`) are also controversial by
nature since the underlying value represents an integer but the
implemented math uses bitwise operators.  This is a confusing design
pattern and the caller better replaces their uses - if any at all - with
`foo &= !BAR`.
2021-11-10 00:35:35 +01:00
Marijn Suijten 3947675aaa
Update Vulkan-Headers to 1.2.198 (#477)
* Update Vulkan-Headers to 1.2.192

* Update Vulkan-Headers to 1.2.193

* Update Vulkan-Headers to 1.2.194

* Update Vulkan-Headers to 1.2.195

Includes the new VK_EXT_rgba10x6_formats, VK_KHR_format_feature_flags2
and VK_KHR_maintenance4 extensions.

* Update Vulkan-Headers to 1.2.196

Includes Vulkan-Headers fixup commit with the missing h265 encode
header.

* Update Vulkan-Headers to 1.2.197

* Update Vulkan-Headers to 1.2.198
2021-11-09 22:42:14 +01:00
Marijn Suijten e78a52a258
generator: Use Self instead of $name in macros (#479)
* generator: Use `Self` instead of `$name` in macros

Saves a bit of unnecessary expansion inside the macro.

* Fix remaining violations of clippy::use_self in generated code

* generator: Remove unnecessary match on reference type
2021-10-30 11:26:30 +02:00
Marijn Suijten e10bbf3063
Add Packed24_8 helper-type for constructing AS Instance bitfields (#476)
* ash: Exclude static `vk.rs` from the generator

Much like `platform_types.rs` `vk.rs` does not contain any generated
code that depends on `Vulkan-Headers`' `vk.xml`, making it easier to
just keep this file manually editable.

* Add Packed24_8 helper-type for constructing AS Instance bitfields
2021-10-02 12:37:52 +02:00
Marijn Suijten 19c5d453a9
Update Vulkan-Headers to 1.2.191; drop Video enum-variant edgecases (#463)
* Update Vulkan-Headers to 1.2.187; drop Video enum-variant edgecases

* Update Vulkan-Headers to 1.2.188

* generator: Improve support for pointers to static-sized arrays

Vulkan 1.2.188 removed the only occurence of `ename:`, which was our
heuristic to find a type that's a pointer to a static-sized array.  It
is now replaced with a "normal" `latexmath:` expression, but should
still be dealt with appropriately.

Note that all `latexmath:` conditions have been removed, as these fields
should not be silently omitted.  As of this Vulkan version only 3 exist,
and all have their own edge-case.

* Revert "Remove upstream-fixed vk_platform.h header path fallback"

This reverts commit 43dee26ec04dfd3871da8a11b624eaf9fbd16f3a.

Upstream is reverting back to inconsistent paths in [this commit] to
counter unintentional header `#include` changes on the C-side:
https://github.com/KhronosGroup/Vulkan-Docs/issues/1573

[this commit]: 8bde11cbd7

* generator: Remove unnecessary `-Iinclude/vulkan` directory

Every `#include` path (except `"vk_platform.h"`, see previous commit) is
relative to the `include/` directory or the current file, and does not
look for a path relative to `include/vulkan/`.

* Update Vulkan-Headers to 1.2.189

* Update Vulkan-Headers to 1.2.190

* Update Vulkan-Headers to 1.2.191
2021-09-08 11:26:58 +02:00
Marijn Suijten 9c1abcd9ca
Fix clippy lints on Rust 1.54 and beyond (#458)
Using `cargo +nightly clippy --fix --all` on `clippy 0.1.56 (4927238
2021-07-29)`.
2021-07-30 12:01:55 +02:00
Marijn Suijten c091482389
Update Vulkan-Headers to 1.2.185 (#456)
* Update Vulkan-Headers to 1.2.185

* Update Vulkan-Headers to 1.2.186
2021-07-28 13:07:53 +02:00
Marijn Suijten 2045e38e84
Update Vulkan-Headers to 1.2.184 (#454)
* generator: Fix Rust 1.53 clippy lints

* temporary: Allow bindgen nullptr dereference in layout tests

* Update Vulkan-Headers to 1.2.182

* extensions/ext: Add properties-getter for PhysicalDeviceDrmPropertiesEXT

* Update Vulkan-Headers to 1.2.183

* Remove upstream-fixed vk_platform.h header path fallback

Fixed in https://github.com/KhronosGroup/Vulkan-Docs/pull/1538

* Update Vulkan-Headers to 1.2.184
2021-07-09 11:55:20 +02:00
Marijn Suijten a75d8e7e88
Update Vulkan-Headers to 1.2.181 (#446)
* Update Vulkan-Headers to 1.2.176

* Update Vulkan-Headers to 1.2.177

* Update Vulkan-Headers to 1.2.178

This requires `len="null-terminated"` to be added to
`VkCuFunctionCreateInfoNVX::pName` in `vk.xml`.

* Update Vulkan-Headers to 1.2.179

* Update Vulkan-Headers to 1.2.181

Skipping 1.2.180 due to missing VkPipelineLayoutCreateFlagBits, which is
defined now.
2021-06-17 10:48:32 +02:00
Philippe Renon a0b9eddd0d
generator: Generate push_next function for all extended structs (#305)
* push_next and Extends traits are generated for all root structs.
root structs are now all structs that are extended by other structs!
root structs used to be all structs that don't extend any other structs.

* the root_structs local variable that is passed around is now a set of Ident (and no String).

fixes https://github.com/MaikKlein/ash/issues/229
2021-06-16 23:44:51 +02:00
Marijn Suijten 06b4f8ef35
Vulkan 1.2.175: Provisional Video Extensions (#417)
* generator: Add edegecases for broken Video extension enum variants

* Replace deprecated `make_version()` with `make_api_version()`

* generator: Use the same predicate for push_next and its traits

Some structs turn out to be root structs when their name is not in the
`root_structs` set, even when they themselves extend another struct.
This was already taken care of for `push_next` which is emitted in this
situation, but the trait referenced by `push_next`'s `T` bound is still
relying on the `extends` field to not exist in `vk.xml` at all, leading
to it not being generated despite `push_next` needing it.

Fixes: 215511f ("Implement ExtendXXX for multiple root create infos if
there are more than 1")

* Update Vulkan-Headers to 12.175

* generator: Generate low-level structs with bindgen (for vk_video)
2021-06-06 11:00:29 +02:00