Commit graph

966 commits

Author SHA1 Message Date
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
Rua 5eb39fed85
Add VK_KHR_get_physical_device_properties2 extension (#400)
* Add VK_KHR_get_physical_device_properties2 extension

* Use &mut for output instead, per PR comment
2021-04-18 21:34:28 +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 14d69087cb changelog: Curate 0.32.0 release notes 2021-04-15 11:47:36 +02:00
Marijn Suijten c942328cab changelog: Add missing link for 0.32.1, document changes to ash-window 2021-04-15 11:39:35 +02:00
Marijn Suijten fc1430ff0a changelog: Document 0.32.1 crate release 2021-04-15 11:24:11 +02:00
Marijn Suijten 2eebf989b2 changelog: Release date for 0.32.0 is 2021-03-07 2021-04-15 11:17:02 +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 8d60a7eec2
extensions/khr: Add VK_KHR_external_fence_fd wrapper (#413)
This extension wrapper is identical to the one for
VK_KHR_external_semaphore_fd introduced in #395 with 'semaphore'
substitued for 'fence'.
2021-03-26 20:11:35 +01:00
Henrik Rydgård 14136e5e96
Add high-level extension wrapper for the 1.1 extension VK_KHR_create_renderpass2 (#414)
* Add high-level extension wrapper for the 1.1 extension VK_KHR_create_renderpass2

https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_create_renderpass2.html

* Fixes

* fmt
2021-03-26 16:57:30 +01:00
Maik Klein 983a981a02
Allow upper case acronyms for now (#415)
* Allow upper case acronyms for now

* Fmt
2021-03-26 16:44:31 +01:00
Marijn Suijten 1cea46359f
extensions/khr: Add ExternalSemaphoreFd safe wrapper (#395)
* extensions/khr: Add ExternalSemaphoreFd safe wrapper

Implement the two small import and export and functions, part of the
VK_KHR_external_semaphore_fd extension.

* device: Pass ImageSubresource by immutable reference

It is only used as pointer by the native function, and should not (need
to) be moved.
2021-03-20 15:37:51 +01:00
Rua d8d742348e
Add VK_KHR_get_memory_requirements2 extension (#401) 2021-03-20 14:12:09 +01:00
Rua bbbcd037a9
Add VK_EXT_full_screen_exclusive extension (#399) 2021-03-20 14:08:00 +01:00
Rua 3094084c1f
Add VK_NN_vi_surface extension (#398) 2021-03-20 14:00:16 +01:00
Rua 81b8e3a24a
Add merge_pipeline_caches, queue_bind_sparse, get_render_area_granularity to DeviceV1_0 (#397) 2021-03-20 13:56:41 +01:00
Rua 98d66c6b7d
Add VK_KHR/EXT_buffer_device_address extension (#405) 2021-03-20 13:55:46 +01:00
Rua a2a26fd1e7
Remove the _mvk suffix from the two extensions' functions (#407) 2021-03-20 13:52:25 +01:00
Rua a0a1f5d135
Add VK_KHR_maintenance extensions (#406) 2021-03-20 13:52:10 +01:00
Marijn Suijten 8444db4fb2
ci: Test docs in addition to cargo t --all-targets (#392)
* ci: Test docs in addition to `cargo t --all-targets`

Unfortunately docs are not explicitly (build-)tested as part of
`--all-targets` allowing broken code to slip in as shown by #390.

Also remove the `rust` listing type which is the default, leaving only
`no_run` (until the CI has a loadable Vulkan library).

* ash: Fix errors and warnings in (now tested) documentation comments
2021-03-14 11:31:17 +01:00
Marijn Suijten dba9e6b691
ci: Run the generator and fail if output is different (#393)
Make sure the submodule hash, state of the generator and resulting
source files in ash are in sync for every submission.
2021-03-14 11:29:49 +01:00
Marijn Suijten 7e9abd2913 external_memory_fd: Initialize output struct with proper sType
MemoryFdPropertiesKHR is a struct that, despite being used as output,
hsa to be initialized properly with a valid sType set, otherwise:

    Validation Error: [ VUID-VkMemoryFdPropertiesKHR-sType-sType ] Object 0: handle = 0x7f035464d648, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xdc6b3a0d | vkGetMemoryFdPropertiesKHR: parameter pMemoryFdProperties->sType must be VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR. The Vulkan spec states: sType must be VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkMemoryFdPropertiesKHR-sType-sType)
2021-03-12 10:59:28 -08:00
Marijn Suijten b3a010a315
entry_libloading: Do not pass AsRef implementation by reference (#389)
All type parameters are implicitly bound by `Sized`; matching the `&`
out of `&str` implies that `str` must be bound by `Sized` which is not
true, resulting in:

    18 |         let entry = ash::Entry::with_library("foo")?;
       |                                              ^^^^^ doesn't have a size known at compile-time
       |
      ::: /home/marijn/Code/TraverseResearch/ash/ash/src/entry_libloading.rs:73:39
       |
    73 |     pub unsafe fn with_library(path: &impl AsRef<OsStr>) -> Result<Entry, LoadingError> {
       |                                       ----------------- required by this bound in `ash::entry_libloading::<impl EntryCustom<Arc<libloading::Library>>>::with_library`

After all `Library::new` accepts an `impl AsRef<OsStr>` without borrow,
which is what this function is modeled after to pass the same parameter
on directly.

Fixes: c6d5d66 ("entry_libloading: Provide Vulkan library loader from custom path (#319)")
2021-03-08 19:32:43 +01:00
Maik Klein 9662364c8b Bump version of ash-window 2021-03-07 20:17:48 +01:00
Maik Klein 41ff55d0ca Prepare 0.32.0 release 2021-03-07 20:12:35 +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
Philippe Renon c554da6321
Add VK_NV_device_diagnostics_config device extension (#385) 2021-03-06 21:16:17 +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 eb75ded793
README: Add lifetime-preserving builder example using slice::from_ref (#381)
It isn't too uncommon to pass a single builder element into another
builder, and `slice::from_ref` fits perfectly while preserving lifetime
of the builder without calling `.build()`. We have used this
successfully in our codebase to uncover and prevent numerous
use-after-free bugs, and thought it's worth to share on the front page.
2021-03-02 18:22:04 +01:00
Marijn Suijten 00e7bbd8f3
Fix safe CmdBuildAccelerationStructuresIndirect signature and add extra length validation (#365)
* khr/acceleration_structure: Fix fn signature of indirect build cmd

max_primitive_counts is an array of arrays, not an array of references
to single u32's.

* khr/acceleration_structure: Validate array length against geometry_count

This is a safe wrapper that already iterates over all the slice
references (fat pointers) to collect just the pointers for use in the
Vulkan API. It can and should at the same time make sure these slices
are of the specified length to prevent accidental out-of-bounds reads.
2021-03-01 10:07:27 +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 9881d98182
Remove device argument from acceleration structure and RT pipeline fns (#378)
This handle is already held onto when creating the safe wrapper object,
but is inconsistently required again in some but not all functions.
Remove it from every function and use the internal handle instead.

Closes: #377
Fixes: 05747b2 ("Update Vulkan-Headers to 1.2.162 with stable ray-tracing spec (#341)")
2021-02-28 19:01:24 +01:00
Marijn Suijten 6b4e6c8166
Update Vulkan-Headers to 1.2.168 (#363) 2021-02-28 18:54:49 +01:00
Marijn Suijten 7523d0be0f
ash: Update libloading from 0.6 to 0.7 (#374)
This new version marks `Library::new` as unsafe, because loading a
library invokes the libraries' entrypoint which may or may not have
certain preconditions and perform unsafe/undefined operations, just like
any other native function loaded through `libloading`.
2021-02-28 18:53:59 +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
Drodofsky dd2849450f
rename parameter of get_physical_device_surface_support (#370)
* rename parameter of get_physical_device_surface_support

* fix fmt

Co-authored-by: Felix <f.drodofsky@gmail.com>
2021-02-11 20:24:49 +01:00
Marijn Suijten abc1f80d65
extensions/khr: Remove empty "safe wrapper" for RayQuery (#364)
The `VK_KHR_ray_query` extension has no functions and this safe wrapper
(specifically to re-wrap functions) was added by accident (by me).
To prevent confusion, remove it before a new crate version is released.
Applications can easily access the name (which is the only useful thing
reexported here) from `ash::vk::extensions:KhrRayQueryFn::name()`.
2021-01-27 17:31:04 +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
Michael Tang 3703e73d30
Add VK_KHR_deferred_host_operations extension support. (#348)
* Add DeferredHostOperations extension

* Add missing `name`, `fp`, and `device` functions.

* Add missing using
2020-12-29 12:10:56 +01:00
Marijn Suijten 84624fddd8
ray_tracing_pipeline: Pass SBT regions as reference instead of slice (#350)
The API for vkCmdTraceRaysKHR mandates a single non-null pointer per SBT
region to a VkStridedDeviceAddressRegionKHR. While providing more than
one such region isn't harmful, passing a slice of length 0 will cause
reads in uninitialized memory and undefined behaviour.

Converting these parameters from slices to references rids the
unnecessary confusion and prevents zero regions from being passed.
2020-12-29 12:09:46 +01:00