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 aNULLvalue (#694) - Allow building
Entry/Instance/Devicefrom handle+fns (see theirfrom_parts_1_x()associated functions) (#748) - Update Vulkan-Headers to 1.3.271 (#760, #763, #783, #816)
- Added
VK_NV_memory_decompressiondevice extension (#761) - Added
VK_GOOGLE_display_timingdevice extension (#765) - Added
VK_ANDROID_external_memory_android_hardware_bufferdevice extension (#769) - Added
VK_AMD_buffer_markerdevice extension (#772) - Added
VK_AMD_shader_infodevice extension (#773) - Added
VK_AMDX_shader_enqueuedevice extension (#776) - Added
VK_EXT_host_image_copydevice extension (#779) - Added
VK_KHR_maintenance5device extension (#780) - Added
VK_NV_device_generated_commands_computedevice extension (#781) - Added
VK_KHR_cooperative_matrixinstance extension (#782) - Added
VK_EXT_vertex_input_dynamic_statedevice extension (#784) - Added
VK_KHR_sampler_ycbcr_conversiondevice extension (#785) - Added
VK_EXT_swapchain_maintenance1device extension (#786) - Added
VK_NV_low_latency2device extension (#802) - Added
VK_EXT_hdr_metadatadevice extension (#804) - Added
VK_NV_cuda_kernel_launchdevice extension (#805) - Added
descriptor_count()setter onash::vk::WriteDescriptorSet(#809) - Added
*_as_c_str()getters forc_charpointers andc_chararrays (#831) - Added
#[must_use]to Vulkan structs to make it more clear that they are moved by the builder pattern (#845)
- Replaced builders with lifetimes/setters directly on Vulkan structs (#602)
- Inlined struct setters (#602)
- Bumped MSRV from 1.59 to 1.69 (#709, #746)
- Replaced
const fn name()with associatedNAMEconstants (#715) - Generic builders now automatically set
objecttypeto<T as Handle>::ObjectType(#724) get_calibrated_timestamps()now returns a single value formax_deviation(#738)- Bumped
libloadingfrom0.7to0.8(#739) - extensions/khr: Take the remaining
p_next-containing structs as&mutto 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
Displayasc_voidinstead of*mut c_voidto match Xlib (#751) VK_KHR_device_group_creation: Take borrow ofEntryinfn new()(#753)VK_KHR_device_group_creation: Renamevk::Instance-returning function fromdevice()toinstance()(#759)- Windows
HANDLEtypes (HWND,HINSTANCE,HMONITOR) are now defined asisizeinstead of*const c_void(#797) - extensions/ext/ray_tracing_pipeline: Pass indirect SBT regions as single item reference (#829)
- Replaced
c_chararray setters withCStrsetters (#831)
- Removed all code generated for
"disabled"extensions, typically with a number rather than a descriptive name (#448) - Removed experimental AMD extensions (#607)
- Removed
query_countparameter 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_propertieshelper 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_3and 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_propertiesdevice extension (#622) - Update Vulkan-Headers to 1.3.251 (#697, #723, #741)
- Added
VK_KHR_performance_querydevice extension (#726) - Added
VK_EXT_shader_objectdevice extension (#732) - Added missing
Device::get_device_queue2()wrapper (#736) - Added with
new_with_instance()on the following extensions to allow loading the listedInstancefunctions: (#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_khrinstead ofcmd_draw_indexed_indirect_count_khrfor non-indexed draw call (#695)
0.37.1 - 2022-11-23
- Inlined builder setters (partial backport from #602)
- Inlined
Defaultimpls and trivialInstance/Device/Entrywrapper 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_modifierdevice extension (#603) - Set MSRV (Minimum Supported Rust Version) in
Cargo.tomlfor clearer errors (#604) - Update Vulkan-Headers to 1.3.235 (#605, #608, #619, #655, #667)
- Added
const STRUCTURE_TYPEto all Vulkan structures for matching withmatch_struct!macro (#614) - Added
VK_EXT_sample_locationsdevice extension (#616) - Added
VK_NV_coverage_reduction_modedevice extension (#617) - Added
VK_KHR_ray_tracing_maintenance1device extension (#620) - Added
VK_EXT_image_compression_controldevice extension (#621) - Added new functions to
VK_KHR_swapchain, available since Vulkan 1.1 (#629) - Added
VK_KHR_device_group_creationinstance extension (#630) - Added
VK_KHR_device_groupdevice extension (#631) - Added
VK_EXT_mesh_shaderdevice extension (#657) - Added
VK_EXT_acquire_drm_displayinstance extension (#668) - Added
VK_EXT_extended_dynamic_state3device extension (#671) - Added
VK_EXT_descriptor_bufferinstance extension (#679)
VK_KHR_ray_tracing_pipeline: Set the buffer length inget_ray_tracing_capture_replay_shader_group_handlesso 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_surfaceinstance extension (#589)
0.36.0 - 2022-02-21
VK_KHR_external_memory_fd: Drop_khrsuffix 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
InstanceandDevicefunctions (#568) - Update Vulkan-Headers to 1.3.206 (#563)
0.35.2 - 2022-02-19
- Replace
1.2-extensionsdocumentation links with1.3-extensions(#569) - Fixed broken (intradoc) links in the prelude and
VK_KHR_get_surface_capabilities2extension (#559)
- Added
VK_KHR_external_fence_win32device extension (#582) - Added
VK_KHR_external_semaphore_win32device extension (#581) - Added
VK_KHR_external_memory_win32device extension (#579) - Added
VK_EXT_extended_dynamic_state2device extension (#572) - Added
VK_KHR_copy_commands2device extension (#571) - Added
VK_EXT_private_datadevice extension (#570) - Added conversions from
Extent2DtoExtent3DandRect2D(#557)
0.35.1 - 2022-01-18
- Added
VK_EXT_calibrated_timestampsdevice extension (#556) - Added
VK_KHR_get_surface_capabilities2device 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.4for 0.4 interop (#553) - Assert that Vulkan array-getters return the same length (#534)
- README: Correct documentation for
Entryfunctions and related crate features (#545) - example: Refactor event loop handling for continuous redraw (#542)
- Generate
RGBA=R|G|B|Ahelper constant forColorComponentFlags(#537) - Remove remaining
CStringallocations on string literals in examples and hand-written AMD extension (#533)
0.35.0 - 2021-12-27
loadedfeature enabled by default in place oflinkedto relax default constraints on the build environmentEntry::newrenamed 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_waitdevice extension (#493) - Added
VK_KHR_maintenance4device extension (#489, #498) - Link
_len()functions to their array-getter using intradoc-links (#490) - Added
VK_KHR_dynamic_renderingdevice extension (#488)
- Extension names from
fn name()will not be checked for interior nuls anymore at runtime (#522) - examples: Use
c_charfor pointer to raw string (#521) - Group enum extension variants together per
impl Tblock (#519) - examples: Use
slice::from_refto not loose lifetime on nested slices (#513) - Simplify triangle example's vertex input state (#512)
- Device extension
khr::PipelineExecutablePropertiesandkhr::TimelineSemaphorenow exposefn device()instead offn instance()(#499) - Changed
khr::PipelineExecutableProperties::new()andkhr::TimelineSemaphore::new()to takeinstanceanddeviceas arguments (#499) - Fix broken vulkan-tutorial link in README.md (#492)
- Make
enumerate_physical_device_groupsunsafe (#491) - Added
Packed24_8helper-type for constructing AS Instance bitfields, used inAccelerationStructureInstanceKHR,AccelerationStructureSRTMotionInstanceNVandAccelerationStructureMatrixMotionInstanceNV(#476)s (#490) - examples: Upgrade to winit 0.25 (#487)
- To allow faster builds, Vulkan structures only implement
Debugif thedebugfeature is enabled, which is the default (#482) - Use
Selfin macros (instead of$name) andimplblocks (#479) - Link Vulkan directly under the default
linkedfeature. Disable default features and enable theloadedfeature for the oldlibloadingbehaviour (#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::Synchronization2device extension (#494) - Removed
instance()function fromext::ExtendedDynamicState,khr::PushDescriptor,ext::ToolingInfoandkhr::GetPhysicalDeviceProperties2instance extensions (#494) - Removed
deviceargument fromext::DebugMarkers::debug_marker_set_object_namefunction,khr::PipelineExecutablePropertiesandkhr::TimelineSemaphorefunctions (#494, #499) - Removed
From<vk::Result>trait forVkResult(#495) - Removed
instanceargument fromext::DebugUtils::submit_debug_utils_messagefunction (#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/pNextinget_physical_device_tool_properties(#465)- Repeatedly call enumeration functions when
VK_INCOMPLETEis 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_nextfunction 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_0traits (#416) - extensions/khr: Add
VK_KHR_external_fence_fdwrapper (#413) - Add
VK_EXT_extended_dynamic_stateextension (#421) - Add
VK_KHR_get_physical_device_properties2extension (#400) - extensions/khr: Add
ExternalSemaphoreFdsafe wrapper (#395) - Add
VK_KHR_get_memory_requirements2extension (#401) - Add
VK_EXT_full_screen_exclusiveextension (#399) - Add
VK_NN_vi_surfaceextension (#398) - Add
merge_pipeline_caches,queue_bind_sparse,get_render_area_granularitytoDeviceV1_0(#397) - Add
VK_KHR/EXT_buffer_device_addressextension (#405) - Add
VK_KHR_maintenanceextensions (#406)
- Use
PFN_types for struct members instead of repeating function signature (#438) - Untangle mismatched parameter/return
fnsignatures in types (#437) - Mark all function pointer types as
unsafe(#436) pSampleMasksetter should writeNULLif slice is empty (#432)- vk/platform_types: Mark
SECURITY_ATTRIBUTESas a trueffi::c_void(#433) - Impl trait functions directly on
EntryCustom/Instance/Device(#412) - Improve
Result'sDisplayimpl for extension values (#424) - Use lifetime borrows instead of raw pointers in
pp_geometries(#420) Entry::newreturnsErrwhen entry point isn't found (#390)- Remove the
_mvksuffix 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
AsRefimplementation 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_queryandVK_KHR_acceleration_structuredevice extensions) VK_NV_device_diagnostics_configdevice extensionVK_KHR_deferred_host_operationsdevice extension- Expose header version and extension spec version constants
- Provide Vulkan library loader from custom path
- Removed deprecated experimental
VK_KHR_ray_tracingextension - 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
libloadingis now an optional dependency, but still used by default- Add metal surface extension
- Implement
VK_KHR_draw_indirect_count - Added const qualifier to
as_rawandfrom_rawfns on enums
- The
vk::Deviceparameter in 1.2 functions is now implicit - Moved library creation out of
Entry::new_custom
- Initialize MemoryRequirements with
Defaultinstead ofzeroed
0.30.0 - 2020-03-22
- Support for Vulkan 1.2 (Generated from spec 1.2.135)
- Add
VK_KHR_timeline_semaphoreextension support - Add
VK_KHR_ray_tracingextension support - Add
VK_KHR_external_memory_fdextension 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_versionwhich can be used in a 1.0 context. - The generator now uses
BTreeMapfor 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_nextis only available on structs that are passed directly. Additionallypush_nextonly 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
AmdGpaInterfaceextension.
- 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
enumanymore. 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_Xare now gone. Versioning had very little benefit in practice,Entry,InstanceandDeviceare now version free. A custom loader can still be implemented. The various traits still remainDeviceV1_0. -
vk.rsis now generated fromvk.xml -
Ash now includes all docs inside the
vk.xml, and are visible in rustdoc. -
Defaultis 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_memorynow returns a void ptr -
ash::util::Alignis a helper struct that can write to aligned memory.