Commit graph

883 commits

Author SHA1 Message Date
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
Michael Tang 1661b37cd2
Add missing doc link for AccelerationStructure::get_device_acceleration_structure_compatibility (#347) 2020-12-20 20:30:43 +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
Philippe Renon 29cab9e9b4
remove erroneous assert in get_query_pool_results (#335)
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 683a065ed6
Add gpu-alloactor to the readme 2020-11-11 14:40:21 +01:00
Steve Wooster cb2d94c3c7 Only scan memory_type_count memory types in examples
The example code originally checked all 32 memory types even if the
instance returned fewer memory types.
2020-10-29 12:17:08 -07:00
Maik Klein 648c4a5019
Use best guess for ggp extension types (#333) 2020-10-25 22:22:21 +01:00
Steve Wooster 61476184e0
Simplify example memory selection (#329)
According to specs for Device Memory (section 10.2), memory types are
topologically sorted by their property flags so the two-pass memory
type selection is unnecessary.

Co-authored-by: Steve Wooster <s.f.m.wooster@gmail.com>
2020-10-19 12:11:57 +02:00
Steve Wooster ef8b5490c5 Appease clippy by using matches!() where appropriate 2020-10-17 00:47:39 -07:00
Steve Wooster 5d5fc57746 Simplify example surface format selection
According to specs for vkGetPhysicalDeviceSurfaceFormatsKHR(), at least
one surface format must be returned, and returned formats must not be
VK_FORMAT_UNDEFINED.
2020-10-14 16:58:55 -07:00
Sebastian Aaltonen 64d1705730
Optimized example fences. Waited immediately. Now waits before reuse (next frame) (#327)
* Optimized example fences. Waited immediately. Now waits before reuse (next frame).

* rust fmt + clippy warning silenced

* Add comments for record_submit_commandbuffer

Co-authored-by: Sebastian Aaltonen <sebastian.aaltonen@unity3d.com>
Co-authored-by: Maik Klein <maikklein@googlemail.com>
2020-10-03 00:08:42 +02: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
Adrien Bennadji df504f8121 Update example to use ash-window 2020-09-04 14:05:16 -07:00
Marijn Suijten 00c7eea860 ash-winow: Fix clippy::single-match 2020-09-02 17:08:20 -07:00
Marijn Suijten 5cb696beb0 tests: Fix clippy::single-component-path-imports 2020-09-02 17:08:20 -07:00
Marijn Suijten 8a46286005 CI: Test/check/lint all targets in all workspaces 2020-09-02 17:08:20 -07: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
RustyNixieTube b9ac0c3892
Fix syntax highlighting on crates.io
Co-authored-by: RustyNixieTube <RustyNixieTube@users.noreply.github.com>
2020-08-14 13:40:06 -07:00
MarijnS95 c6d5d66142
entry_libloading: Provide Vulkan library loader from custom path (#319)
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 (#317)
* 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. (#313)
* 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
Maik Klein 9aae30ecc2 Add version to ash 2020-07-14 16:54:40 +02:00
Maik Klein 99d81ca90a Bump ash-window to 0.5.0 2020-07-14 16:48:28 +02:00
msiglreith a1a42c067a
Add interoperability functions for raw-window-handle (#308)
* Add ash-window as workspace member

* ash-window: fix repository link

* ash-window: Address CI fmt&clippy issues

* ash-window: Try fix SDL2 CI issues

* ash-window: Remove beryllium example
2020-07-04 15:21:39 +02: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 8d7dfee763 Release 0.31.0 2020-05-10 21:14:01 +02:00
Steven Le Rouzic ce1d3a1195
Make libloading an optional dependency (#296)
* 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 (#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
Friz64 37a701ad3f
Move lib creation out of EntryCustom::new_custom (#292)
* 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
Brian Merchant 93238e093b Use DebugUtils instead of DebugReport in example. 2020-04-29 12:20:54 -07:00
Friz64 3eeb78f214 Initialize MemoryRequirements with Default 2020-04-21 11:36:23 -07:00
Friz64 da5de66ba4
Switch to VK_LAYER_KHRONOS_validation (#290) 2020-04-19 19:12:43 +02:00