All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased - ReleaseDate
- Added
Handle::is_null()
to allow checking if a handle is aNULL
value (#694) - Allow building
Entry
/Instance
/Device
from handle+fns (see theirfrom_parts_1_x()
associated functions) (#748) - Update Vulkan-Headers to 1.3.260 (#760, #763)
- Added
VK_NV_memory_decompression
device extension (#761) - Added
VK_GOOGLE_display_timing
device extension (#765) - Added
VK_ANDROID_external_memory_android_hardware_buffer
device extension (#769) - Added
VK_AMD_buffer_marker
device extension (#772) - Added
VK_AMD_shader_info
device extension (#773) - Added
VK_AMDX_shader_enqueue
device extension (#776) - Added
VK_EXT_host_image_copy
device extension (#779) - Added
VK_KHR_maintenance5
device extension (#780) - Added
VK_NV_device_generated_commands_compute
device extension (#781) - Added
VK_KHR_cooperative_matrix
instance extension (#782) - Added
VK_EXT_vertex_input_dynamic_state
device extension (#784)
- Replaced builders with lifetimes/setters directly on Vulkan structs (#602)
- Inlined struct setters (#602)
- Bumped MSRV from 1.59 to 1.60 (#709)
- Replaced
const fn name()
with associatedNAME
constants (#715) - Generic builders now automatically set
objecttype
to<T as Handle>::ObjectType
(#724) get_calibrated_timestamps()
now returns a single value formax_deviation
(#738)- extensions/khr: Take the remaining
p_next
-containing structs as&mut
to allow chains (#744)AccelerationStructure::get_acceleration_structure_build_sizes()
ExternalMemoryFd::get_memory_fd_properties()
ExternalMemoryWin32::get_memory_win32_handle_properties()
GetSurfaceCapabilities2::get_physical_device_surface_capabilities2()
- Define
Display
asc_void
instead of*mut c_void
to match Xlib (#751) VK_KHR_device_group_creation
: Take borrow ofEntry
infn new()
(#753)VK_KHR_device_group_creation
: Renamevk::Instance
-returning function fromdevice()
toinstance()
(#759)
- Removed all code generated for
"disabled"
extensions, typically with a number rather than a descriptive name (#448) - Removed experimental AMD extensions (#607)
- Removed
query_count
parameter fromget_query_pool_results()
in favour ofdata.len()
(#644) - Removed misnamed, deprecated
debug_utils_set_object_name()
anddebug_utils_set_object_tag()
entirely, useset_debug_utils_object_name()
andset_debug_utils_object_tag()
instead (#661) - Removed
get_properties
helper from extension wrappers (andext::PhysicalDeviceDrm
). Directly callget_physical_device_properties2()
with a possible chain of multiple structs instead (#728) - Removed
fn load()
from empty features and extensions (#752)- Removed empty
entry_fn_1_2
/entry_fn_1_3
and getters fromEntry
- Removed empty
instance_fn_1_2:
and getters fromInstance
- Removed empty
VK_KHR_device_group_creation
: Replaceddevice()
withinstance()
(via deprecation) because it is returningvk::Instance
(#754)
- Added
VK_EXT_pipeline_properties
device extension (#622) - Update Vulkan-Headers to 1.3.251 (#697, #723, #741)
- Added
VK_KHR_performance_query
device extension (#726) - Added
VK_EXT_shader_object
device extension (#732) - Added missing
Device::get_device_queue2()
wrapper (#736) - Added with
new_with_instance()
on the following extensions to allow loading the listedInstance
functions: (#754)VK_KHR_swapchain
:get_physical_device_present_rectangles()
VK_KHR_device_group
:get_physical_device_present_rectangles()
VK_EXT_full_screen_exclusive
:get_physical_device_surface_present_modes2()
- Exposed
FramebufferCreateInfoBuilder::attachment_count()
builder forvk::FramebufferCreateFlags::IMAGELESS
(#747)
0.37.2 - 2022-01-11
- Update Vulkan-Headers to 1.3.238 (#688)
VK_KHR_draw_indirect_count
: usecmd_draw_indirect_count_khr
instead ofcmd_draw_indexed_indirect_count_khr
for non-indexed draw call (#695)
0.37.1 - 2022-11-23
- Inlined builder setters (partial backport from #602)
- Inlined
Default
impls and trivialInstance
/Device
/Entry
wrapper methods (#606, #632) - Renamed
debug_utils_set_object_name()
toset_debug_utils_object_name()
anddebug_utils_set_object_tag()
toset_debug_utils_object_tag()
for consistency and deprecated old ones (#661)
- Added
VK_EXT_image_drm_format_modifier
device extension (#603) - Set MSRV (Minimum Supported Rust Version) in
Cargo.toml
for clearer errors (#604) - Update Vulkan-Headers to 1.3.235 (#605, #608, #619, #655, #667)
- Added
const STRUCTURE_TYPE
to all Vulkan structures for matching withmatch_struct!
macro (#614) - Added
VK_EXT_sample_locations
device extension (#616) - Added
VK_NV_coverage_reduction_mode
device extension (#617) - Added
VK_KHR_ray_tracing_maintenance1
device extension (#620) - Added
VK_EXT_image_compression_control
device extension (#621) - Added new functions to
VK_KHR_swapchain
, available since Vulkan 1.1 (#629) - Added
VK_KHR_device_group_creation
instance extension (#630) - Added
VK_KHR_device_group
device extension (#631) - Added
VK_EXT_mesh_shader
device extension (#657) - Added
VK_EXT_acquire_drm_display
instance extension (#668) - Added
VK_EXT_extended_dynamic_state3
device extension (#671) - Added
VK_EXT_descriptor_buffer
instance extension (#679)
VK_KHR_ray_tracing_pipeline
: Set the buffer length inget_ray_tracing_capture_replay_shader_group_handles
so it no longer always returns an emptyVec
(#658)
0.37.0 - 2022-03-23
- Dropped auto-generated wrapper methods from function pointer structs in favor of direct invocation of function pointers (#599)
- Constified extension names (#590)
VK_NV_device_diagnostic_checkpoints
: Enable passingpNext
-initialized structs toget_queue_checkpoint_data
(#588)
- Update Vulkan-Headers to 1.3.209 (#597, #601)
- Added
VK_EXT_headless_surface
instance extension (#589)
0.36.0 - 2022-02-21
VK_KHR_external_memory_fd
: Drop_khr
suffix fromget_memory_fd_properties_khr
(#580)- entry: Allow querying
enumerate_instance_extension_properties()
by layer name (#574)
- Add helper wrappers for Vulkan core 1.3
Instance
andDevice
functions (#568) - Update Vulkan-Headers to 1.3.206 (#563)
0.35.2 - 2022-02-19
- Replace
1.2-extensions
documentation links with1.3-extensions
(#569) - Fixed broken (intradoc) links in the prelude and
VK_KHR_get_surface_capabilities2
extension (#559)
- Added
VK_KHR_external_fence_win32
device extension (#582) - Added
VK_KHR_external_semaphore_win32
device extension (#581) - Added
VK_KHR_external_memory_win32
device extension (#579) - Added
VK_EXT_extended_dynamic_state2
device extension (#572) - Added
VK_KHR_copy_commands2
device extension (#571) - Added
VK_EXT_private_data
device extension (#570) - Added conversions from
Extent2D
toExtent3D
andRect2D
(#557)
0.35.1 - 2022-01-18
- Added
VK_EXT_calibrated_timestamps
device extension (#556) - Added
VK_KHR_get_surface_capabilities2
device extension (#530)
- Convert
vk_bitflags_wrapped!
methods toconst fn
(#549) - examples: Update winit to 0.26 and image to 0.23 (#551)
- ash-window: Require at least
raw-window-handle 0.3.4
for 0.4 interop (#553) - Assert that Vulkan array-getters return the same length (#534)
- README: Correct documentation for
Entry
functions and related crate features (#545) - example: Refactor event loop handling for continuous redraw (#542)
- Generate
RGBA=R|G|B|A
helper constant forColorComponentFlags
(#537) - Remove remaining
CString
allocations on string literals in examples and hand-written AMD extension (#533)
0.35.0 - 2021-12-27
loaded
feature enabled by default in place oflinked
to relax default constraints on the build environmentEntry::new
renamed toEntry::linked
0.34.0 - 2021-12-22
- Update Vulkan-Headers to 1.2.203 (#477, #497, #504, #509, #514)
- Add missing documentation to bitflag extension variants (#501)
- Added
VK_KHR_present_wait
device extension (#493) - Added
VK_KHR_maintenance4
device extension (#489, #498) - Link
_len()
functions to their array-getter using intradoc-links (#490) - Added
VK_KHR_dynamic_rendering
device extension (#488)
- Extension names from
fn name()
will not be checked for interior nuls anymore at runtime (#522) - examples: Use
c_char
for pointer to raw string (#521) - Group enum extension variants together per
impl T
block (#519) - examples: Use
slice::from_ref
to not loose lifetime on nested slices (#513) - Simplify triangle example's vertex input state (#512)
- Device extension
khr::PipelineExecutableProperties
andkhr::TimelineSemaphore
now exposefn device()
instead offn instance()
(#499) - Changed
khr::PipelineExecutableProperties::new()
andkhr::TimelineSemaphore::new()
to takeinstance
anddevice
as arguments (#499) - Fix broken vulkan-tutorial link in README.md (#492)
- Make
enumerate_physical_device_groups
unsafe (#491) - Added
Packed24_8
helper-type for constructing AS Instance bitfields, used inAccelerationStructureInstanceKHR
,AccelerationStructureSRTMotionInstanceNV
andAccelerationStructureMatrixMotionInstanceNV
(#476)s (#490) - examples: Upgrade to winit 0.25 (#487)
- To allow faster builds, Vulkan structures only implement
Debug
if thedebug
feature is enabled, which is the default (#482) - Use
Self
in macros (instead of$name
) andimpl
blocks (#479) - Link Vulkan directly under the default
linked
feature. Disable default features and enable theloaded
feature for the oldlibloading
behaviour (#457)
- Deprecated aliases for wrongly-named enum constants (containing
"Backwards-compatible"
in the Vulkan spec comment) are removed: switch to the version that it aliased (#502) - Removed
device()
function fromkhr::Synchronization2
device extension (#494) - Removed
instance()
function fromext::ExtendedDynamicState
,khr::PushDescriptor
,ext::ToolingInfo
andkhr::GetPhysicalDeviceProperties2
instance extensions (#494) - Removed
device
argument fromext::DebugMarkers::debug_marker_set_object_name
function,khr::PipelineExecutableProperties
andkhr::TimelineSemaphore
functions (#494, #499) - Removed
From<vk::Result>
trait forVkResult
(#495) - Removed
instance
argument fromext::DebugUtils::submit_debug_utils_message
function (#499) - Removed misleading
all()
/-
/-=
function/ops from bitflags (#478)
0.33.3 - 2021-09-08
- Regenerated with Vulkan-Headers 1.2.191 (#463)
0.33.2 - 2021-08-26
tooling_info
: InitializesType
/pNext
inget_physical_device_tool_properties
(#465)- Repeatedly call enumeration functions when
VK_INCOMPLETE
is returned (#465)
0.33.1 - 2021-08-23
- util: Zero-initialize result to prevent possible uninit memory read (#470)
0.33.0 - 2021-07-30
- Regenerated with Vulkan-Headers 1.2.186 (#456, #454, #446, #429)
- Generate
push_next
function for all extended structs (#305) - Vulkan 1.2.175: Provisional Video Extensions (#417)
- Globally remove all
allow(dead_code)
exceptions and make extensions public (#430) - Add extension wrapper for
VK_KHR_synchronization2
(#403) - added missing functions to
V1_0
traits (#416) - extensions/khr: Add
VK_KHR_external_fence_fd
wrapper (#413) - Add
VK_EXT_extended_dynamic_state
extension (#421) - Add
VK_KHR_get_physical_device_properties2
extension (#400) - extensions/khr: Add
ExternalSemaphoreFd
safe wrapper (#395) - Add
VK_KHR_get_memory_requirements2
extension (#401) - Add
VK_EXT_full_screen_exclusive
extension (#399) - Add
VK_NN_vi_surface
extension (#398) - Add
merge_pipeline_caches
,queue_bind_sparse
,get_render_area_granularity
toDeviceV1_0
(#397) - Add
VK_KHR
/EXT_buffer_device_address
extension (#405) - Add
VK_KHR_maintenance
extensions (#406)
- Use
PFN_
types for struct members instead of repeating function signature (#438) - Untangle mismatched parameter/return
fn
signatures in types (#437) - Mark all function pointer types as
unsafe
(#436) pSampleMask
setter should writeNULL
if slice is empty (#432)- vk/platform_types: Mark
SECURITY_ATTRIBUTES
as a trueffi::c_void
(#433) - Impl trait functions directly on
EntryCustom
/Instance
/Device
(#412) - Improve
Result
'sDisplay
impl for extension values (#424) - Use lifetime borrows instead of raw pointers in
pp_geometries
(#420) Entry::new
returnsErr
when entry point isn't found (#390)- Remove the
_mvk
suffix from the two extensions' functions (#407)
- ash/extensions: Fix missing and broken autolinks to Vulkan docs (#459)
- Adds
LICENSE-*
files to crate subdirectories (#452) - external_memory_fd: Initialize output struct with proper
sType
(#394) - entry_libloading: Do not pass
AsRef
implementation by reference (#389)
0.32.1 - 2021-03-29
- Add high-level extension wrapper for the 1.1 extension
VK_KHR_create_renderpass2
(#414)
0.32.0 - 2021-03-07
- Final KHR RayTracing support (
VK_KHR_ray_tracing_pipeline
,VK_KHR_ray_query
andVK_KHR_acceleration_structure
device extensions) VK_NV_device_diagnostics_config
device extensionVK_KHR_deferred_host_operations
device extension- Expose header version and extension spec version constants
- Provide Vulkan library loader from custom path
- Removed deprecated experimental
VK_KHR_ray_tracing
extension - Update Vulkan-Headers to 1.2.168
- Update libloading from 0.6 to 0.7
- Turn
c_void
-returning functions into Rust()
- Use best guess for ggp extension types
- Use raw pointers to static-sized arrays in FFI signatures
- rename parameter of
get_physical_device_surface_support
0.31.0 - 2020-05-10
libloading
is now an optional dependency, but still used by default- Add metal surface extension
- Implement
VK_KHR_draw_indirect_count
- Added const qualifier to
as_raw
andfrom_raw
fns on enums
- The
vk::Device
parameter in 1.2 functions is now implicit - Moved library creation out of
Entry::new_custom
- Initialize MemoryRequirements with
Default
instead ofzeroed
0.30.0 - 2020-03-22
- Support for Vulkan 1.2 (Generated from spec 1.2.135)
- Add
VK_KHR_timeline_semaphore
extension support - Add
VK_KHR_ray_tracing
extension support - Add
VK_KHR_external_memory_fd
extension support - More safety docs
- Expose raw function pointers in extensions
- Switch to libloading
- Vulkan version macros are now const functions
- Switched to a new changelog format
- Fix XCB types
- Fix OSX build errors of the examples
- Breaking: Removed Display impl for flags. The Debug impl now reports flags by name.
- Functions now have a doc comment that links to the Vulkan spec
- Entry has a new method called
try_enumerate_instance_version
which can be used in a 1.0 context. - The generator now uses
BTreeMap
for better diffs.
- Switched to a new changelog format
- Fixed a build issue on ARM.
- Breaking: Arrays are now passed by reference.
- Builders are now marked as
#[transparent]
. - Breaking: Renamed
.next(..)
topush_next
.push_next
is only available on structs that are passed directly. Additionallypush_next
only accepts structs that can be inserted into the pointer chain. Read the readme for more information. - New -experimental- extensions. Those do not follow the semver rules and can be removed at any time.
- Added
AmdGpaInterface
extension.
- Extensions are now namespaced.
ash::extensions::khr::Swapchain
- Removed vendor tags from extension methods
- Added missing functions for VkEvent
- The examples were updated to use the new builder pattern
- A SPIR-V parsing function
ash::util::read_spv
- Added
get_pipeline_cache_data
-
Fix loader on MacOS.
-
Expose function pointers for easier interop with external libraries.
-
Builder now uses bool instead of Bool32.
-
Adds support for Vulkan 1.1
-
Constants are not represented as an
enum
anymore. Constants and flags are both represented as associated constants.
flags: vk::COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT,
//to
flags: vk::CommandPoolCreateFlags::RESET_COMMAND_BUFFER_BIT,
-
Pretty printing for flags
-
Handles can be loaded from outside of ash. See
SomeHandle::from_raw
. This is useful if you need to interact with a C library. -
Removing versioning from ash.
V1_X
are now gone. Versioning had very little benefit in practice,Entry
,Instance
andDevice
are now version free. A custom loader can still be implemented. The various traits still remainDeviceV1_0
. -
vk.rs
is now generated fromvk.xml
-
Ash now includes all docs inside the
vk.xml
, and are visible in rustdoc. -
Default
is now implemented for all structs -
There is now a builder pattern
-
Handles are now
#[repr(transparent)]
-
Various bug fixes
- Fixes arm build => uses libc everywhere. Remove
AlignByteSlice
.
- Refactor Align to use vk::DeviceSize.
-
map_memory
now returns a void ptr -
ash::util::Align
is a helper struct that can write to aligned memory.