Commit graph

168 commits

Author SHA1 Message Date
Marijn Suijten 0ae6e49195
Mark all function pointer types as unsafe (#436)
Rusty wrappers are already marked `unsafe`, and by definition the raw
Vulkan function pointers used under the hood are `unsafe` too.  Not
needing `unsafe` when going directly through `self.fp_v1_x()` is odd at
best.
2021-05-18 23:50:30 +02:00
Marijn Suijten c50c47983c
generator: Small code cleanups (#439)
* generator: Simplify contains+insert pairs to just insert()

Insert returns true when the value was inserted, false when it was
already present in the set.

* generator: Strictify "Vk"/"vk" prefix stripping with strip_prefix+unwrap

This way we are sure only the expected prefix ("Vk" or "vk") is
stripped, anything else panics the generator.

* generator: `format_ident` can format strings directly
2021-05-18 23:30:28 +02:00
Marijn Suijten 4ba8637d01
generator: pSampleMask setter should write NULL if slice is empty (#432)
As per [1] no explicit length field is available for `pSampleMask`, this
is based on `ceil(rasterizationSamples/32)` instead.  It is valid to not
set an array for `pSampleMask` (under normal circumestances this is
signaled by setting the length to zero, and the array pointer is
ignored) but this has to happen by setting the pointer to `NULL`.

[1]: https://github.com/MaikKlein/ash/issues/256
2021-05-11 21:38:09 +02:00
Marijn Suijten 95f748fc3d
generator: Use stable vk-parse 0.6 release (#434)
Following [1] a stable release including the fixed commit has been made;
we can now depend on the released crate version again.  This also
includes support for all new fields up to Vulkan 1.2.176.

[1]: https://github.com/krolli/vk-parse/issues/18#issuecomment-837815599
2021-05-11 21:36:44 +02:00
Marijn Suijten 498b8d81a2
Update Vulkan-Headers to 1.2.174 (#429)
* 1.2.171 new types

* generator: Keep platform_types checked in to git only

This static content is better kept in the platform_types.rs file only,
where it can be edited directly.

(Perhaps we should be more clear about generated versus manual files
 within the ash crate, by storing generated outputs in an auto/
 module/subdirectory that is reexported, like glib and friends?)

* Update Vulkan-Headers to 12.171

* Update Vulkan-Headers to 12.172

* Update Vulkan-Headers to 12.173

* Update Vulkan-Headers to 12.174

* generator: Generalize C number parsing

Co-authored-by: caradhras11@gmail.com <caradhras11@gmail.com>
2021-05-11 00:00:55 +02:00
Marijn Suijten bc510f017d
generator: Add support for vkFlags64 and update to 1.2.170 (#411)
* Update Vulkan-Headers to 1.2.169

* generator: Add support for vkFlags64

Since Vulkan-Headers v1.2.170 with VK_KHR_synchronization2 there are now
bitmasks/enums using 64-bits instead of the default 32. vk-parse has
been updated to convey this info though the typedefs for these
enumerations could be parsed as well.

* generator: Insert underscores before trailing type number

Enum types like `VkAccessFlags2KHR` are turned into `VK_ACCESS2` after
demangling and `SHOUTY_SNAKE_CASE` conversion by Heck, but the enum
variants for the type start with `VK_ACCESS_2` (or similar) which fails
the `strip_suffix` and leads to long names to show up.

Inserting an underscore here makes sure the match succeeds.

* Update Vulkan-Headers to 12.170
2021-05-08 12:25:10 +02:00
Marijn Suijten f27b8e069b
generator: Fortify enum-variant type prefix stripping (#426)
* generator: Add Intel to the list of vendors for enum-postfix-stripping

* generator: Fortify enum-variant type prefix stripping

As brought up in [1] a new enum variant "pattern" not dealth with by our
type-prefix stripper went silently unnoticed.  Explicitly listing the
few misnamed enum variants and panicking otherwise makes sure this won't
happen again.

[1]: https://github.com/MaikKlein/ash/pull/411#issuecomment-826013950
2021-05-01 11:04:09 +02:00
Marijn Suijten 3fe13fafa6
generator: Remove deprecated description() impl for Error (#425)
The docs clearly state:

    #[rustc_deprecated(since = "1.42.0", reason = "use the Display impl or to_string()")]
    fn description(&self) -> &str {
        "description() is deprecated; use Display"
    }

We already have a `Display` implementation containing an identical
`match` block and has further improvements on the way in [1].

[1]: https://github.com/MaikKlein/ash/pull/424
2021-04-27 18:54:29 +02:00
Theo Bogusta d4f50bd350
Improve Result's Display impl for extension values (#424)
Previously, the `Display` impl for `vk::Result` did not include handling
for extension values. For example, `VK_ERROR_OUT_OF_DATE_KHR` would
display simply as `"-1000001004"`. Now, we fall back to the `Debug` impl
of the `Result` if the value is unknown (i.e. from an extension). This
preserves the current nice messages for non-extension values, and the
numeric output for truly unknown values, but displays the enum variant
name (e.g. `"ERROR_OUT_OF_DATE"`) for extension values.
2021-04-27 16:48:15 +02:00
Marijn Suijten 6a522c878a
generator: Use lifetime borrows instead of raw pointers in pp_geometries (#420)
Fixes #301
2021-04-25 09:58:12 +02:00
Marijn Suijten 46ed5158ab
generator: Generate enums from vk_parse representation (#410)
* generator: Generate enums from vk_parse representation

This change prepares for future additions in vk_parse fields ([1]) by
converting over the enum generation path from vkxml.  Most of the
conversion is easy by repurposing the existing `EnumSpec` parsing logic
from extension constants for all enumeration variants, with slight
modifications to not bail when `extends` is not set which is specific to
extension constants.

As an (unintended) added bonus this unification of the `EnumSpec`
codepath allows aliases (for backwards-compatible names) to be generated
as discussed earlier in [2].

[1]: https://github.com/krolli/vk-parse/pull/17
[2]: https://github.com/MaikKlein/ash/pull/384#discussion_r588693967

* generator: Turn "backwards"-mentioning docs into deprecation notices

All constant aliases for misspelled items (missing `_BIT` andsoforth)
contain the text "backwards compatibility" or "Backwards-compatible
alias".

* generator: Drop aliases whose name becomes identical after de-mangling

* generator: Remove aliases from const_debugs

These already have a match against the name they're aliasing, and some
of the aliases are "deprecated" (since they're just typo fixups for
backwards compatibility).
2021-04-18 21:58:40 +02:00
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 6b4e6c8166
Update Vulkan-Headers to 1.2.168 (#363) 2021-02-28 18:54:49 +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 0a378b8807
Update Vulkan-Headers to 1.2.166 (#355)
* Update Vulkan-Headers to 1.2.165

* Update Vulkan-Headers to 1.2.166

* generator: Update itertools to 0.10
2021-01-24 22:13:28 +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