Commit graph

522 commits

Author SHA1 Message Date
Marijn Suijten
9881d98182
Remove device argument from acceleration structure and RT pipeline fns ()
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: 
Fixes: 05747b2 ("Update Vulkan-Headers to 1.2.162 with stable ray-tracing spec ()")
2021-02-28 19:01:24 +01:00
Marijn Suijten
6b4e6c8166
Update Vulkan-Headers to 1.2.168 () 2021-02-28 18:54:49 +01:00
Marijn Suijten
7523d0be0f
ash: Update libloading from 0.6 to 0.7 ()
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 () ()
`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 ()
* 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 ()
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 ()
* 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 ()
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 ()
* 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. ()
* 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 ()
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
Michael Tang
1661b37cd2
Add missing doc link for AccelerationStructure::get_device_acceleration_structure_compatibility () 2020-12-20 20:30:43 +01:00
Marijn Suijten
05747b25aa
Update Vulkan-Headers to 1.2.162 with stable ray-tracing spec ()
* 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 ()
* 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
Philippe Renon
29cab9e9b4
remove erroneous assert in get_query_pool_results ()
the stride can be bigger than a u64
for example when querying more than one pipeline statistic
2020-12-07 23:31:06 +01:00
Maik Klein
648c4a5019
Use best guess for ggp extension types () 2020-10-25 22:22:21 +01:00
Marijn Suijten
6f488cd3db
Expose header version and extension spec version constants ()
* 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
5cb696beb0 tests: Fix clippy::single-component-path-imports 2020-09-02 17:08:20 -07:00
MarijnS95
c6d5d66142
entry_libloading: Provide Vulkan library loader from custom path ()
It is in some cases necessary to load a specific Vulkan dll/so with a
different name and/or from a different location.

Instead of copying this function to a downstream project (and making the
LoadingError constructor public to retain the same interface), split
Entry::new() such that downstream projects can easily specify and use an
alternate Vulkan implementation.
2020-08-03 11:19:42 +02:00
Apoorva Joshi
31bd928c4b
Deprecate the DebugMarker and DebugReport extension modules ()
* Deprecate the DebugMarker and DebugReport extension modules

* Allow deprecated modules only in mod.rs, to suppress clippy warning

Co-authored-by: Apoorva Joshi <apoorva.ramesh.joshi@gmail.com>
2020-07-24 16:21:40 +02:00
zedrian
b6d9a40b0b
Added VK_KHR_pipeline_executable_properties extension support. ()
* Added `VK_KHR_pipeline_executable_properties` extension support.

* Unused import removed.

* Cargo-fmt requirements satisfied.

* Specification requirements satisfied.

* Cargo-fmt requirements satisfied.

* Recommended fixes applied.
2020-07-20 21:48:53 +02:00
zedrian
ac4d046d4b
Added VK_EXT_tooling_info extension support ()
* 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
8d7dfee763 Release 0.31.0 2020-05-10 21:14:01 +02:00
Steven Le Rouzic
ce1d3a1195
Make libloading an optional dependency ()
* Make libloading an optional dependency

* Move all libloading stuff to a specific module
2020-05-10 13:55:19 +02:00
Maik Klein
4d6bb3949d
Fix clippy lints for 1.43 () 2020-05-10 13:42:07 +02:00
Friz64
37a701ad3f
Move lib creation out of EntryCustom::new_custom ()
* Update libloading to `0.6.1`

* Update Error type

* Make `LoadingError` a newtype

* Move lib creation out of `new_custom`
2020-05-07 18:14:24 +02:00
Friz64
3eeb78f214 Initialize MemoryRequirements with Default 2020-04-21 11:36:23 -07:00
aloucks
bd6515ced8
Split vk.rs into multiple files ()
* 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
msiglreith
bb720dd726
Add metal surface extension () 2020-04-15 22:35:48 +02:00
TheEdward162
a5e5e375b1 add const qualifier to as_raw and from_raw fns on enums 2020-04-11 11:39:22 -07:00
Gabriel Dube
1f7dd9114d
Implement VK_KHR_draw_indirect_count 2020-04-11 12:19:22 +02:00
Maik Klein
e575b233e5
Remove incorrect device params ()
* Remove incorrect device params

* Fmt
2020-04-11 12:18:31 +02:00
Aaron Loucks
3c62d50ea0 Link to the individual man page instead of vkspec.html 2020-03-22 20:10:32 -07:00
Maik Klein
c45112b5c8 Bump version to 0.30.0 2020-03-22 20:28:03 +01:00
zedrian
e84c1c4e2d
Add VK_KHR_timeline_semaphore extension support ()
* TimelineSemaphore struct added presenting `VK_KHR_timeline_semaphore` extension.

* Unused import removed.

* Empty newline added.

* TimelineSemaphore extension object now provides functions for work with timeline semaphores.

* Function pointers removed from TimelineSemaphore as no longer needed.
*_khr postfix removed from TimelineSemaphore functions to follow the same code style as in other extensions.

* Tiny code reformatting to fit Rustfmt requirements.

* Another attempt to fit Rustfmt requirements.
2020-03-22 16:06:56 +01:00
Jasper Bekkers
6bdc403330
[WIP] Khr Ray Tracing ()
* 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 ()
* 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
de05ff6702
Switch to libloading () 2020-03-15 00:48:24 +01:00
aloucks
25628402f9
Adjust doc link rendering () 2020-03-15 00:47:58 +01:00
Friz64
7789163507 Switch to libloading 2020-03-14 01:10:03 +01:00
Joshua Suskalo
39a6a8552a
Add a Safety section to the documentation of create_instance and create_device ()
* Add a Safety section to the documentation of `create_instance` and `create_device`

* Change doc links back to original format
2020-02-29 21:24:39 +01:00
IntrepidPig
98def0a4e3
Add VK_KHR_external_memory_fd extension support () 2020-02-18 22:58:36 +01:00
Benjamin Saunders
651462a342
Fix XCB types () 2020-02-02 10:42:59 +01:00
Friz64
594b184c38 Add high level wrappers for Vulkan 1.2 ()
* Update doc links

* Added `EntryV1_1` impl and notice about compatibility

* Add missing `InstanceV1_1::get_physical_device_features2` function

* Add Vulkan 1.2 wrapper for `Entry`

* Add Vulkan 1.2 wrapper for `Instance`

* Add Vulkan 1.2 wrapper for `Device`

* Mark `enumerate_instance_version` as deprecated
2020-01-26 09:27:26 +01:00
Alexander Ekdahl
00f52cc5ad Vulkan 1.2 Support ()
* 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
aloucks
31d14486e5 Use the individual man page doc links for the push_descriptor extension ()
The `vkspec.html` page is rather large and slow to load and navigate.
This change is consistent with all other doc links.
2019-12-04 23:48:05 +01:00
Maksym Pavlenko
0b689273c6 Support VK_KHR_push_descriptor ()
* Support VK_KHR_push_descriptor

* Accept slice in cmd_push_descriptor_set
2019-12-01 11:09:21 +01:00
Steve Wooster
54e7097dc7 Make more structs derive PartialEq/Eq/Hash ()
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
Benjamin Saunders
21c65096e0 Return VkResult<bool> from get_fence_status ()
Makes it easier not to ignore actual errors.
2019-11-03 19:18:14 +01:00