Commit graph

1057 commits

Author SHA1 Message Date
Marijn Suijten 6640ecb200 instance: Make enumerate_physical_device_groups unsafe
All Vulkan functions are marked `unsafe` and
`enumerate_physical_device_groups` should not be an exception to that.
2021-11-11 10:35:09 -08: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 6857f7b4d3
extensions/khr: Add VK_KHR_dynamic_rendering wrapper (#488) 2021-11-09 22:49:41 +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 527b542c69
ash: Regenerate negative constants with syn 1.0.81 (#486)
`syn` has been updated to not remove the `_` again from negative
numbers, which previously disappeared in the 1.0 upgrade in 43b5058
("Upgrade proc_macro2/syn/quote to v1.0 (#351)").

See also https://github.com/dtolnay/syn/releases/tag/1.0.81:

    Support arbitrary precision negative literal tokens on rustc 1.56+
2021-10-30 11:52:23 +02: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
Benjamin Saunders aa7b429f4f
Support linking Vulkan directly (#457)
* Mark EntryCustom::new_custom as unsafe

Passing a badly-behaved `load` function can invoke undefined behavior.

* Document required feature for Entry

* Support linking Vulkan directly

This is the preferred pattern in most environments when an application
cannot function without Vulkan, as it saves the libloading dependency,
eliminates an error case, and makes the Vulkan dependency visible to
the OS.

* Rename libloading feature to "loaded"

* Link by default

* Guide users towards linking the loader directly

* Remove unnecessary error type

InstanceError::LoadError was never constructed.

* Unify entry types

Simplifies the interface and allows a bunch of code to become
monomorphic.
2021-09-09 22:50:34 +02:00
Marijn Suijten 1b4c82e1d6 Release ash 0.33.3 with Vulkan-Headers 1.2.191 2021-09-08 11:31:45 +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
Kane Rogers 56bbf839a4
Bump version in README.md (#473) 2021-09-03 10:15:16 +02:00
Marijn Suijten 7ad19290d8 Release ash 0.33.2 with repeated reads if Vulkan returns VK_INCOMPLETE 2021-08-26 21:54:56 +02:00
Marijn Suijten 00abdfc17d tooling_info: Initialize sType/pNext in get_physical_device_tool_properties
The type and next-pointer of output structures must always be
initialized.

Fixes: ac4d046 ("Added `VK_EXT_tooling_info` extension support (#310)")
2021-08-24 17:16:19 -07:00
Marijn Suijten 6fa57a4269 ash: Repeatedly call enumeration functions when INCOMPLETE is returned 2021-08-24 17:16:19 -07:00
Marijn Suijten c6842949de Release ash 0.33.1 with read_spv UB fix 2021-08-23 12:46:38 +02:00
Marijn Suijten 2c98b6f384
util: Zero-initialize result to prevent possible uninit memory read (#470)
Fixes https://github.com/MaikKlein/ash/issues/354

`io::Read::read_exact` does not receive `MaybeUninit` memory and a trait
implementation can possibly read from our uninitialized vector without
`unsafe`, which is UB.  As there is no proper solution to this problem
yet (see linked issue), our safest bet is to just take the perf-hit and
zero-initialize this vector.
2021-08-23 12:44:17 +02:00
Marijn Suijten 17149bd791
Update changelog and prepare for ash-0.33 and ash-window-0.7 release (#460)
* changelog: Add all entries for 0.33

* Prepare for ash-0.33 and ash-window-0.7 release
2021-07-30 15:22:29 +02:00
Marijn Suijten de8ff6b5dc
Unify readme between Ash and Ash-window (#455) 2021-07-30 12:32:52 +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 8a1e4a3eba
ash/extensions: Fix missing and broken autolinks to Vulkan docs (#459) 2021-07-30 12:01:18 +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
Jason Macnak ed351996e5
Adds LICENSE-* files to crate subdirectories (#452)
... so that the license files appear in downloaded crates.
2021-07-09 12:21:15 +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 d6e049f340 Use intradoc-links and explain the various loading methods 2021-06-07 09:54:11 -07: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
Marijn Suijten b81b19a735
generator: Parse and autogenerate version-related defines (#431)
* generator: Emit deprecation warnings and documentation link for defines

* generator: Parse and autogenerate version-related defines

With more and more version-related defines showing up this saves us a
bunch of time.
2021-05-30 13:59:18 +02:00
Marijn Suijten 9d6bf63b4e
generator: Use PFN_ types for struct members instead of repeating sig (#438)
Following the fixes in #437 this actually puts those function pointer
typedefs to use, slimming down the code by a large margin at the same
time.
2021-05-24 00:39:07 +02:00
Marijn Suijten 82ca24663f
generator: Untangle mismatched parameter/return fn signatures in types (#437)
* generator: Untangle mismatched parameter/return fn signatures in types

With function typedefs for commands having some elements filtered out
(by name) if they were previously defined already, combined with
unfiltered arrays containing the parameter sets and return type for
_all_ commands expanded together in `quote!` macros the wrong array
elements get combined resulting in incorrect signatures.  No-one seems
to use function pointer types (but we should!) which is why this has
gone unnoticed for some time.

* generator: Derive clone for function pointers instead of generating it

* generator: Regroup token generation per command instead of across arrays

This complements the previous commit by avoiding mismatches in array
content altogether, instead of expanding multiple arrays within a single
`#()*` quote expression and assuming they all contain the same data in
the same order, reducing cognitive overhead while reading this code.
2021-05-24 00:13:29 +02:00
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 3152f4ac96
vk/platform_types: Mark SECURITY_ATTRIBUTES as a true ffi::c_void (#433)
`()` is an empty tuple which can be constructed, while `ffi::c_void`
cannot.  This is only ever used as an opaque pointer anyway and not used
by Ash; those wishing to access members directly should cast it to a
struct representation of choice (`winapi`, `windows-rs` or something
custom).

Fixes #156
2021-05-11 00:53:19 +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 28b6253748
Globally remove all allow(dead_code) exceptions and make extensions public (#430)
* GetPhysicalDeviceProperties2: Make API functions public

Fixes: 5eb39fe ("Add VK_KHR_get_physical_device_properties2 extension (#400)")

* BufferDeviceAddress: Make API functions public

Fixes: 98d66c6 ("Add VK_KHR/EXT_buffer_device_address extension (#405)")

* GetMemoryRequirements2: Make API functions public

Fixes: d8d7423 ("Add VK_KHR_get_memory_requirements2 extension (#401)")

* Maintenance1/Maintenance3: Make API functions public

Fixes: a0a1f5d ("Add VK_KHR_maintenance extensions (#406)")

* Globally remove all `allow(dead_code)` exceptions

This is hiding the fact that some extension functions are inadvertently
not public and hence unusable by crate users, nor does it enforce clean
coding practices.

In addition remove `ash/src/allocator.rs` which does not appear to be
used (anymore?) and isn't in a working state anyway.
2021-05-08 21:04:31 +02:00
Jakob Loth c7216f1c1e
Add extension wrapper for VK_KHR_synchronization2 (#403)
* Add extension wrapper for VK_KHR_synchronization2

* synchronization2: Add missing slice length assert

* fmt

Co-authored-by: Marijn Suijten <marijn@traverseresearch.nl>
2021-05-08 12:54:43 +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 efdb337eca
Do not initialize simple integer types with mem::zeroed() (#427)
Following our little discussion in [1] to just use `0` instead.

This also renames the remaining few `num` variables to `count` to more
closely match the rest of the codebase and the name of the parameter in
Vulkan [2].

[1]: https://github.com/MaikKlein/ash/pull/416#discussion_r604260529
[2]: https://github.com/MaikKlein/ash/pull/416#discussion_r604258864
2021-05-01 11:03:44 +02:00
alpacahaircut 940f84e04a
added missing functions to V1_0 traits (#416) 2021-04-30 17:21:41 +02:00
Rua f5e7cfe896
Impl trait functions directly on EntryCustom/Instance/Device (#412)
* Implement EntryV1_x, InstanceV1_x, DeviceV1_x functions directly
2021-04-30 17:13:23 +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
Philippe Renon 788fda074e
Add VK_EXT_extended_dynamic_state extension (#421) 2021-04-27 15:15:54 +02:00
Philippe Renon 434330ca3a
Fix clippy::use_self in extension modules (#423)
* Fix clippy::use_self warnings in extension modules

* Deny clippy::use_self in extension modules

Note that clippy::use_self generates some false positives that must be ignored
2021-04-27 12:12:38 +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
Rua 90b0531474
Entry::new returns Err when entry point isn't found (#390)
* Check for entry point in EntryCustom::new and return error

* Split off into load_checked

* Remove string from MissingEntryPoint

* Change MissingEntryPoint error message
2021-04-18 21:53:56 +02:00