130 KiB
Unreleased
Public dependency updates
- raw-window-handle 0.6
- winit 0.29
Public dependency updates
Breaking changes
Changes to command buffers:
AutoCommandBufferBuilder
andUnsafeCommandBufferBuilder
now take anArc<dyn CommandBufferAllocator>
on construction.AutoCommandBufferBuilder
,PrimaryAutoCommandBuffer
,SecondaryAutoCommandBuffer
,UnsafeCommandBufferBuilder
andUnsafeCommandBuffer
no longer have a type parameter for the type of allocator.
Changes to command buffer allocation:
CommandBufferAllocator
no longer has any associated types in order to make the trait object-safe.- There is now only the single
CommandBufferAlloc
type to represent allocated command buffers. TheCommandBufferAlloc
andCommandBufferBuilderAlloc traits and
StandardCommandBufferAllocand
StandardCommandBufferBuilderAlloc` types were removed. CommandBufferAllocator::allocate
now returns a singleCommandBufferAlloc
on success andValidated<VulkanError>
on failure.CommandBufferAllocator
now has a required methoddeallocate
.
Changes to descriptor sets:
- There is now only the single type
DescriptorSet
to represent descriptor sets. TheDescriptorSet
trait andPersistentDescriptorSet
type were removed. - Renamed
UnsafeDescriptorSet
toRawDescriptorSet
. DescriptorSet
now takes anArc<dyn DescriptorSetAllocator>
on construction, the type parameter for the descriptor set allocator was removed.
Changes to descriptor set allocation:
DescriptorSetAllocator
no longer has anAlloc
associated type in order to make the trait object-safe.- There is now only the single type
DescriptorSetAlloc
to represent allocated descriptor sets. TheDescriptorSetAlloc
trait andStandardDescriptorSetAlloc
type were removed. DescriptorSetAllocator
has a new required methoddeallocate
.
Changes to Surface
:
Surface::required_extensions
now returns a result.Surface::from_window[_ref]
now takeHasWindowHandle + HasDisplayHandle
as the window and return a new error type.
Changes to surface creation and support functions:
- Where handles to foreign window system objects are passed, Vulkano no longer takes a generic pointer, but takes the same pointer type that Ash does.
Changes to vertex input:
VertexInputBindingDescription
andVertexInputAttributeDescription
are now non-exhaustive, and must be created with theDefault
trait.
Additions
- Partially validated versions of
submit
andpresent
commands (called viaQueueGuard
). - Support for the
khr_timeline_semaphore
extension. - Ability to update existing descriptor sets.
- Support for the
ext_vertex_input_dynamic_state
extension. - Support for 64-bit values in vertex input.
Bugs fixed
- Incorrect assert condition in
PipelineLayout::is_compatible_with
. evaluate_spec_constant_op
panics with UConvert, SConvert, and FConvert.- #2398 Push constant reflection sometimes uses the wrong types, and doesn't correctly reflect push constants with multiple entry points.
surface_capabilities
demands thatwin32_monitor
beSome
orNone
in the wrong cases.- Improved and more accurate validation of vertex input.
Version 0.34.1 (2023-10-29)
Bugs fixed
StandardDescriptorSetAllocator
panicking due to an arithmetic overflow when arithmetic overflow checks are enabled.- Vulkano-util still depending on the now-deprecated vulkano-win.
Version 0.34.0 (2023-10-25)
Public dependency updates
- ash 0.37.3 (Vulkan 1.3.251)
- libloading 0.8
Breaking changes
Changes to pipeline construction:
- Pipelines are now constructed with the standard complement of
new
,new_unchecked
andfrom_handle
constructors, that each take aComputePipelineCreateInfo
orGraphicsPipelineCreateInfo
struct. - Pipeline layouts are no longer automatically constructed when creating a pipeline. You can auto-create a pipeline layout (and modify the auto-generated parameters if needed) using the new
PipelineDescriptorSetLayoutCreateInfo
type. GraphicsPipelineCreateInfo::vertex_input_state
requires aVertexInputState
struct directly, instead of aVertexDefinition
. TheVertexDefinition
trait can be used to create the struct.GraphicsPipelineCreateInfo
now requires you to provideinput_assembly_state
,rasterization_state
,multisample_state
andcolor_blend_state
instead of them having default values. You can still calldefault()
to generate default values for each of them.- Instead of an entry point and specialization constants, pipeline construction now takes a
PipelineShaderStageCreateInfo
structure.GraphicsPipelineCreateInfo
has astages
member that takes all shader stages at once, instead of separate members for each shader type.EntryPoint
now owns instead of borrows a reference to theShaderModule
, so this is easier. - Specialization constants are now provided by calling
ShaderModule::specialize
with aHashMap
containingSpecializationConstant
enum values. This produces aSpecializedShaderModule
value, which you can then create anEntryPoint
from. - The
SpecializationConstants
trait is removed, andvulkano_shaders
no longer generates structs for specialization constants. ViewportState
is now a standard struct with two fields,viewports
andscissors
.- The
origin
anddimensions
fields ofViewport
andScissors
are renamed tooffset
andextent
to match Vulkan. Viewport::depth_range
is now an inclusive range.- All fields of
AttachmentBlend
are renamed to match Vulkan. - Added a
_ne
field to all pipeline state create info structs, as they should have had all along. - Dynamic state is now specified with the
GraphicsPipelineCreateInfo::dynamic_state
field.
Changes to images:
- There is now only the single type
Image
to represent images.ImageAccess
,ImageInner
,AttachmentImage
,ImmutableImage
,StorageImage
andSwapchainImage
were removed. ImageView
no longer has a type parameter,ImageViewAbstract
was removed.- Removed
ImageAccessFromUndefinedLayout
,ImmutableImageCreationError
,ImmutableImageInitialization
andMipmapsCount
. Image
was moved to theimage
module.ImageDimensions
is removed.ImageCreateInfo
now instead hasimage_type
,extent
andarray_layers
to match Vulkan. Some of the methods ofImageDimensions
have been turned into bare functions in theimage
module.ImageCreateFlags::ARRAY_2D_COMPATIBLE
is renamed toDIM2D_ARRAY_COMPATIBLE
to better match the Vulkan name (but within the limitation that identifiers can't start with a digit).ImageCreateInfo::stencil_usage
is now anOption<ImageUsage>
.
Changes to buffers:
- The
Subbuffer::{try_cast, try_cast_slice, try_from_bytes}
functions were replaced bySubbuffer::reinterpret[_ref]
. - The
buffer_with_range(_array)
constructor ofWriteDescriptorSet
now takesDescriptorBufferInfo
structs. - Index buffers are now specified using the
IndexBuffer
enum instead of theIndex
trait. ExternalBufferInfo::sparse
was replaced by aflags
field.Subbuffer::mapped_ptr
was replaced bySubbuffer::mapped_slice
.
Changes to errors:
- Added new types
ValidationError
andValidated
(enum ofValidationError
+ something else) to return errors from any function. Some existing functions have been converted to use these types, others will follow later. AllocationCreationError
is renamed toMemoryAllocatorError
.SuballocationCreationError
is renamed toSuballocatorError
.
Changes to command buffers:
SyncCommandBuffer(Builder)
is merged into*AutoCommandBuffer(Builder)
. The commands that formerly belonged toSyncCommandBufferBuilder
are now available as_unchecked
versions onAutoCommandBufferBuilder
.- Command buffers are now created with a wrapping
Arc
like other object types. - The type parameter of
PrimaryCommandBuffer
andSecondaryCommandBuffer
is now the allocator itself (like for the builder) rather than its allocation type. UnsafeCommandBuffer(Builder)
now takes ownership of the command buffer allocation, and has a type parameter for the allocator.CommandPoolResetError
is renamed toResetCommandPoolError
.- Command pool creation and resetting now take
CommandPoolCreateFlags
andCommandPoolResetFlags
respectively. - All validated binding and dynamic state commands now return
Result
instead of panicking, just like the other commands. - The
begin_render_pass
,next_subpass
andend_render_pass
commands now takeSubpassBeginInfo
and/orSubpassEndInfo
parameters. Nothing has changed functionally, but this allows for future-compatibility. UnsafeCommandBufferBuilder
now performs some validation, when it does not rely on tracking any state. The old, completely unvalidated commands have been renamed with_unchecked
added to the end.
Changes to descriptor sets and descriptor set layouts:
PersistentDescriptorSet::new
now takes an additional parameter, specifying descriptor set copy operations.DescriptorSetLayoutCreateInfo::push_descriptor
has been replaced with a more genericflags
field.DescriptorSetLayoutBinding::variable_descriptor_count
has been replaced with a more genericbinding_flags
field.DescriptorPool::allocate_descriptor_sets
is now validated, and returnsDescriptorPoolAlloc
objects.DescriptorSetAllocator::allocate
returnsValidated<VulkanError>
as its error type.UnsafeDescriptorSet::update
is now partially validated, and takes slices instead of iterators.UnsafeDescriptorSet
now owns its allocation.
Changes to render pass objects:
AttachmentDescription::stencil_load_op
andstencil_store_op
are now wrapped in anOption
. If it isNone
, the value is taken fromload_op
andstore_op
instead.SubpassDescription::resolve_attachments
is renamed tocolor_resolve_attachments
.- Renamed
LoadOp
andStoreOp
toAttachmentLoadOp
andAttachmentStoreOp
to match the Vulkan names. - In the
single_pass_renderpass
andordered_passes_renderpass
macros, theload
andstore
fields for attachments are renamed toload_op
andstore_op
, and ordered below theformat
andsamples
fields, to match the fields of theAttachmentDescription
structure.
Changes to instances:
InstanceCreateInfo::enumerate_portability
has been replaced with a more genericflags
field.DebugUtilsMessengerCreateInfo::user_callback
is now a custom typeDebugUtilsMessengerCallback
, and is unsafe to create.- The debug messenger callback now takes three parameters instead of one, corresponding to the first three parameters of the Vulkan callback (the fourth, user data, is represented by the closure itself).
InstanceCreateInfo
now has adebug_utils_messengers
field. TheInstance::with_debug_utils_messengers
constructor is removed, as the unsafety has been moved to the user callback construction itself.
Changes to DescriptorPool
:
DescriptorPool::new
now returns validation errors instead of panicking.DescriptorPoolCreateInfo::can_free_descriptor_sets
has been replaced with a more genericflags
field.
Changes to pipeline caches:
- They are now constructed with the standard combination of a
new
constructor and aPipelineCacheCreateInfo
.
Changes to Swapchain
:
- Swapchain creation no longer returns an error when the swapchain extent doesn't match the current surface extent. This requirement is ill-defined in the spec, as detailed here: TOCTOU race condition on minImageExtent/maxImageExtent?.
- Renamed
acquire_full_screen_exclusive
andrelease_full_screen_exclusive
toacquire_full_screen_exclusive_mode
andrelease_full_screen_exclusive_mode
to match the Vulkan names. acquire_next_image
andwait_for_present
now returnValidated<VulkanError>
as their error type.
Changes to samplers:
- The
sampler
module is now a submodule ofimage
.
Changes to Format
:
- The following objects now use
Format
instead ofOption<Format>
:BufferView
,Image
,ImageView
,SamplerYcbcrConversion
. - The
block_size
method no longer returns anOption
. - The
type_color
,type_depth
andtype_stencil
methods are renamed tonumeric_format_color
,numeric_format_depth
andnumeric_format_stencil
, and the returned type is renamed toNumericFormat
. ShaderScalarType
is renamed toNumericType
.
Changes to memory allocation:
- The memory (sub)allocation API has been completely reworked.
Buffer
andSubbufferAllocator
now take anArc<dyn MemoryAllocator>
on construction.Suballocator
andMemoryAllocator
now have explicitdeallocate
methods in order to fix all the flexibility issues.Suballocator
is completely generic now in regards to the type of suballocation.SuballocationCreateInfo
was removed.MemoryAllocatePreference
andAllocationType
are no longer marked#[non_exhaustive]
.MemoryAlloc
was replaced byResourceMemory
,MemoryAlloc
now only represents specifically allocations made byMemoryAllocator
.PoolAllocator
was removed.GenericMemoryAllocatorCreateInfo::allocation_type
was removed.
AllocationCreateInfo::usage
andSubbufferAllocatorCreateInfo::memory_usage
were replaced by amemory_type_filter
field, to allow for a more flexible selection of the memory type. Additionally,SubbufferAllocatorCreateInfo::memory_type_filter
defaults toMemoryTypeFilter::PREFER_DEVICE
for consistency withAllocationCreateInfo
, unlike the previous default ofMemoryUsage::Upload
.SubbufferAllocatorCreateInfo::buffer_usage
is now empty by default for consistency withBufferCreateInfo
.MemoryAlloc::new
no longer returns aResult
, and doesn't map theDeviceMemory
automatically anymore.MemoryAlloc::mapped_ptr
andMemoryAlloc::mapped_slice[_mut]
were replaced byMemoryAlloc::mapped_slice
, which returns a pointer.MemoryAlloc::{invalidate, flush}_range
now take aMappedMemoryRange
as argument.- Merged
MemoryAllocator::allocate_from_type_unchecked
intoMemoryAllocator::allocate_from_type
andMemoryAllocator::allocate_unchecked
intoMemoryAllocator::allocate
. - Replaced
MemoryAllocator::allocate_dedicated_unchecked
withMemoryAllocator::allocate_dedicated
. FreeListAllocator
,BuddyAllocator
andBumpAllocator
are no longerSync
.GenericMemoryAllocatorCreateInfo::block_sizes
now represents a block size per memory type, instead of per memory heap, to allow for a more fine-grained configuration.- Merged
GenericMemoryAllocator::new_unchecked
intoGenericMemoryAllocator::new
.
Changes to descriptor set allocation:
StandardDescriptorSetAllocator
now takes aStandardDescriptorSetAllocatorCreateInfo
parameter.
Changes to command buffer allocation:
StandardCommandBufferAllocatorCreateInfo::secondary_buffer_count
now defaults to 0.
Changes to synchronization primitives:
Event::signaled
is renamed tois_signaled
, to match the method onFence
.- The
set_raw
andreset_raw
methods ofEvent
are removed. Event::reset
is nowunsafe
, as it has preconditions that cannot be validated.FenceCreateInfo::signaled
is replaced with aflags
field.
Changes to queries:
Query
andQueriesRange
are removed. Theget_results
method is moved toQueryPool
directly.
Changes to futures:
FlushError
is replaced withValidated<VulkanError>
.
Changes to the khr_display
extension:
- The API is completely refactored.
- Getting displays and display planes is now done from the physical device.
- All features are now available.
Changes to the physical device:
- The
PhysicalDevice::surface_present_modes
method now takes an additionalSurfaceInfo
parameter.
Additions
- Vulkano-shaders: Added a
root_path_env
property to allow loading shaders generated by a build script. - Support for the
khr_deferred_host_operations
extension. - Added
image_view_with_layout(_array)
andimage_view_with_layout_sampler(_array)
constructors toWriteDescriptorSet
, which let you control the image layouts used for image views bound to a descriptor. - Added
Surface::from_window[_ref]
andSurface::required_extensions
. This is now the preferred way of creating a surface, vulkano-win has been deprecated. - Added support for the
khr_acceleration_structure
andkhr_ray_query
extensions. PipelineLayoutCreateInfo
now has aflags
field.- Added
Device::descriptor_set_layout_support
from thekhr_maintenance3
extension. - Support for the
khr_depth_stencil_resolve
extension.SubpassDescription
now has additionaldepth_stencil_resolve_attachment
,depth_resolve_mode
andstencil_resolve_mode
fields. - Support for the
khr_separate_depth_stencil_layouts
extension.AttachmentReference
now has an additionalstencil_layout
field, andAttachmentDescription
now has additionalstencil_initial_layout
andstencil_final_layout
fields. - Added
flags
toRenderPassCreateInfo
,AttachmentDescription
andSubpassDescription
. - Support for the
khr_device_group_creation
extension. - Added support for
InlineUniformBlock
descriptors. - When creating an instance or device, you only need to specify the extensions and features you actually care about. Any extensions and features that are required by the extensions that you specified are now automatically enabled too.
- Support for the
ext_surface_maintenance1
and most of theext_swapchain_maintenance1
extension. - Added a
domain_origin
field toTessellationState
. - Added the trait
InstanceOwned
. - Debug formatting of Vulkan objects no longer follows references to other objects, instead only printing their handles, in order to alleviate the spam.
- Added
ImageCreateFlags::EXTENDED_USAGE
from thekhr_maintenance2
extension. - Support for the
ext_image_drm_format_modifier
extension. - Support for the
ext_image_2d_view_of_3d
extension. - Added
Format::UNDEFINED
, and implementedDefault
which returns this value. ShaderModule
is now constructed with anew
method, which takes aShaderModuleCreateInfo
struct. The old constructorsfrom_words
andfrom_bytes
are deprecated.- Added a
set_debug_utils_object_name
method to theDeviceOwned
trait. - Support for the
ext_subgroup_size_control
extension. - Support for the
khr_image_format_list
extension. - Support for the
khr_swapchain_mutable_format
extension. - Support for pipeline derivatives.
- Support for the
khr_get_display_properties2
extension. - Added
DeviceMemory::{map, unmap, mapping_state, invalidate_range, flush_range}
,MappedDeviceMemory
has been deprecated. - Added
MemoryMapInfo
,MemoryUnmapInfo
,MappingState
andMappedMemoryRange
. - Added
ShaderModule::single_entry_point()
which may replaceentry_point("main")
calls in common setups. - Added
ShaderModule::single_entry_point_with_execution
. - Added
GenericMemoryAllocatorCreateInfo::memory_type_bits
andAllocationCreateInfo::memory_type_bits
. - Vulkano-shaders: support for specialization-constant-sized arrays in structs (they are generated with the size specified as fallback in the specialization constant initializer).
- Added the
DeviceAddress
andNonNullDeviceAddress
types to the crate root. - Support for the
ext_private_data
extension. - Added the
UPDATE_AFTER_BIND
,UPDATE_UNUSED_WHILE_PENDING
andPARTIALLY_BOUND
flags toDescriptorBindingFlags
, as well asDescriptorSetLayoutCreateFlags::UPDATE_AFTER_BIND_POOL
andDescriptorPoolCreateFlags::UPDATE_AFTER_BIND
.
Bugs fixed
- #2184:
VK_KHR_get_physical_device_properties2
not used inDevice
creation for Vulkan 1.1 and later. - Fixed UB in
ShaderModule::from_bytes[_with_data]
, where an unaligned reference could have been created. - Fixed a bug when using
GenericMemoryAllocator
configured not to use dedicated allocation, where a dedicated allocation wasn't created even when required. - Fixed UB in
{AutoCommandBufferBuilder, UnsafeCommandBufferBuilder}::push_constants
where a reference to uninitialized bytes could have been created. Device::set_debug_utils_object_name
no longer exhibits use-after-free UB.- #2248: Meanings of | and & operators for extensions were swapped.
- Fixed validation for the
AllocationType
of allocations inRawImage::bind_memory
, where the image tiling wasn't taken into consideration. - vulkano-shaders: Use a placeholder name instead of erroring out, when the shader doesn't contain a name for a struct.
- #2203: Shader reflection fails to find descriptor set variables if multiple
OpAccessChain
instructions are themselves chained. - vulkano-shaders: Invalid emitted code for shader input/output interfaces if the shader is missing a name decoration.
- Fixed potential UB when using
MemoryAlloc::try_unwrap
, where the allocation was mapped on contruction of theMemoryAlloc
but not unmapped on unwrapping, allowing double-mapping. - Fixed a bug in
GenericMemoryAllocator::allocate
, where the root allocations weren't created with the configuredAllocationType
. - Specialization constants are now applied to the reflected SPIR-V code before any other reflection is performed.
- Fragment shaders cannot use
dual_src_blend
device feature due to interface errors. - Vulkano-shaders: handle pointers correctly when they appear in composite types.
Version 0.33.0 (2023-04-01)
Public dependency updates
Breaking changes
Changes to all Vulkan bitflag types:
- They are now implemented as wrappers around an integer, instead of as a struct of
bool
s. - The fields of the struct have been replaced with associated constants, using uppercase names as is the convention.
- All functions that take or return one of these types now take them by value (copy).
- Bitflag types that have a corresponding enum type now have the following additional items:
- A
contains_enum
method that takes a value of the enum, and returns whether the bitflags contain the flag corresponding to that enum. - A
From
implementation to convert the enum to the bitflags type, with a single flag set. - A
FromIterator
implementation that collects an iterator of enums into a single bitflag value. - An
IntoIterator
implementation that does the reverse.
- A
Changes to two swapchain bitflag types:
SupportedSurfaceTransforms
is renamed toSurfaceTransforms
.SupportedCompositeAlpha
is renamed toCompositeAlphas
.
Changes to buffers:
- Merged
CpuAccessibleBuffer
,DeviceLocalBuffer
,BufferSlice
,CpuBufferPoolChunk
,CpuBufferPoolSubbuffer
intoSubbuffer
. - Removed
BufferAccess
,TypedBufferAccess
,BufferAccessObject
,BufferInner
andBufferViewAbstract
. - Replaced
CpuBufferPool
withSubbufferAllocator
, which is now marked!Sync
and no longer has aT
type parameter. The type parameter was moved to the methods, to allow one allocator to allocate as many types of buffers as needed. - All methonds on
BufferContents
have been replaced.
Changes to DescriptorRequirements
:
- The struct has been split into two levels: the per-binding
DescriptorBindingRequirements
, and the per-descriptor-indexDescriptorRequirements
. - The
descriptor_requirements
method of various types has been renamed todescriptor_binding_requirements
to match. DescriptorBindingRequirements
has a singledescriptors
member instead of multipleHashSet
members. This member is aHashMap
withOption<u32>
as the key type. The keyNone
holds requirements for non-constant indices, while requirements for constant indices are stored asSome
.- Validation checks against the requirements, and pipeline barriers, now always include the requirements of the
None
key as well. This may result in false positives, but prevents false negatives. DescriptorRequirements
now hasmemory_read
andmemory_write
members, which hold aShaderStages
value for the stages which read or write the resource. This is used for more fine-grained pipeline barriers.
Changes to the sync
module and types:
- Split the module into several submodules:
event
,fence
,future
,semaphore
. - Added the
DependencyFlags
type, which is now used byDependencyInfo
andSubpassDependency
. - Renamed
QueueFamilyTransfer
toQueueFamilyOwnershipTransfer
and made it into an enum to prevent invalid usage.
Changes to GpuFuture
:
- The
check_buffer_access
andcheck_image_access
methods now return nothing on success.
Changes to pipelines:
- The
descriptor_binding_requirements
method is moved to thePipeline
trait, and returns a reference to the hashmap directly.
Changes to impl_vertex
, VertexMember
and VertexMemberInfo
:
VertexMember::format
now directly returns aFormat
VertexMemberInfo
now holds format andVertexMemberTy
was removed.impl_vertex
was updated to correctly use the newVertexMember::format
signature.
Changes to memory and allocation:
MemoryRequirements::{size, alignment}
fields have been replaced with a singlelayout
field.Suballocator::allocate_unchecked
has been removed.- Device properties that represent alignments are now generated with the type
DeviceAlignment
instead ofDeviceSize
. - Removed
FastMemoryAllocator
, because it was giving people the wrong impression that this is a type of allocator that is employed often and for general tasks, which couldn't be further from the truth. - Renamed
MemoryUsage::GpuOnly
toMemoryUsage::DeviceOnly
. - Marked
MemoryUsage
,MemoryAllocatePreference
andAllocationType
as non-exhaustive. AllocationCreateInfo::{requirements, allocation_type, dedicated_allocation}
fields were removed.- Added the parameters
requirements
,allocation_type
,dedicated_allocation
toMemoryAllocator::allocate[_unchecked]
.
Changes to vulkano-shaders:
- Struct fields are now padded using
Padded
, instead of generating additional fields. - The
types_meta
option has been removed in favor ofcustom_derives
. Additionally, a derive forBufferContents
is automatically added to the generated structs, so there is no need to specify anything in order to use the structs in buffers. - The
ty
module is no longer generated. All types are generated in the same module where the macro call resides.
Additions
- Added
SubbufferAllocatorCreateInfo
. - Allow waiting on
SwapchainAcquireFuture
. - Implement
IntoIterator
forFeatures
,DeviceExtensions
andInstanceExtensions
. - A
buffer_with_range
constructor forWriteDescriptorSet
, which can be used to select the range within the buffer that should be bound. This must be used when using dynamic buffers. - Added a derive macro for the
Vertex
trait. Theimpl_vertex
macro andVertexMember
trait are deprecated. BufferDefinition
matching logic was updated to work with the newVertexMemberInfo
and now matches based on scalar type, number of components and number of elements allowing the use of formats such as*_UNORM
.GraphicsPipelineBuilder
validation was extended to make sure locations are not bound multiple times when a single attribute spans multiple locations (e.g. using double precision float formats).- Added documentation of the cargo features to the main documentation page of each crate.
- Added documentation of
_unchecked
functions to the main documentation page. - Added
DeviceLayout
andDeviceAlignment
. - Added the type alias
NonZeroDeviceSize
. - Added
VertexBufferDescription
and three new methods to theVertex
trait that return it:per_vertex
,per_instance
andper_instance_with_divisor
. This deprecates and replacesBuffersDefinition
. - Implemented
From<SampleCount>
foru32
. - Added documentation to the
shader
module to explain the layout of buffers, push constants and other data accessed by shaders. - The macros
single_pass_renderpass!
andordered_passes_renderpass!
now allow trailing commas in various places. - Added a
BufferContents
derive macro. You no longer need to usebytemuck
to read/write your structs form/to buffers. - Added
BufferContentsLayout
. - Added support for allocating buffers with any kind of unsized contents, not just slices. These can also be read/written from the host.
- Added
Padded
, which can be used to pad struct fields as well as array elements/matrix columns. - Added support for the
VK_EXT_external_memory_dma_buf
extension, which allows importing an image from a Linux dma_buf. - Vulkano-shaders: All error messages are now appropriately spanned compile-errors, instead of being panics.
- Vulkano-shaders: Added support for arrays (and by extension matrices) whose stride exceeds the size of the element type in Rust (e.g.
vec3[]
). - Vulkano-shaders: Added a
linalg_type
option to the macro, for generating types from external linear algebra crates. - Vulkano-win: Added
create_surface_from_handle_ref
. - Vulkano-win: The features
winit
andraw-window-handle
can now be used directly,winit_
andraw-window-handle_
have been deprecated.
Bugs fixed
- #2094: Fixed debug assertion when the first command in a command buffer that uses an image expects it to be in the
Undefined
layout. - Fixed wrong aspects being used in pipeline barriers when an image view selects one aspect of a combined depth+stencil image.
- Fixed panic when building a finished command buffer, if the command buffer contains commands that use only some subresources of an image.
- Fixed possible arithmetic overflows when allocating memory with a size that's too large.
- Added missing check for the allocation type when binding memory.
- #2130: Fixed getting memory requirements on swapchain images, which don
- Vulkano-shaders: Fixed an "expected expression, found
,
" compile error for precompiled shaders with more than one entrypoint. - #2149: Image data being discarded when transitioning from UNDEFINED in StorageImage
- Vulkano-shaders:
mat3xN
is now generated correctly, taking its matrix stride into account. - Vulkano-shaders: Row-major matrices are now generated correctly.
- Fixed potential panics during panics.
Version 0.32.3 (2022-12-07)
Bugs fixed
- Fixed issue with
MemoryAlloc::mapped_ptr
not being adjusted for offset.
Version 0.32.2 (2022-12-06)
Bugs fixed
- Fixed another issue with
CpuBufferPool<T>
, where the alignment ofT
was not being considered when allocating.
Version 0.32.1 (2022-11-09)
Bugs fixed
- #2074: Fixed error on multiple draw calls using a texture that had a layout transition.
- Fixed an issue with
CpuBufferPool<T>
, where the alignment ofT
was not being considered when allocating. - Fixed an issue with
CpuBufferPool
, where the allocated subbuffers did not respect the non-coherent atom size for non-host-coherent memory types.
Version 0.32.0 (2022-10-31)
Breaking changes
Changes to queue operations:
- To do operations on a queue, you must now call
with
to gain access. This takes a closure that is passed a - The
wait
method of devices and queues is renamed towait_idle
to match Vulkan. Queue
now implementsVulkanObject
instead ofSynchronizedVulkanObject
, which is removed.Queue
now takes ownership of resources belonging to operations that you execute on it, to keep them from being destroyed while in use.- If
Queue
is dropped, it will callwait_idle
to block the current thread until all operations on it have completed. - The
command_buffer::submit
module has been removed. TheSubmitAnyBuilder
enum is moved to thesync
module, and no longer has a lifetime parameter.
Changes to Surface
, Swapchain
and swapchain operations:
Surface
,Swapchain
,SwapchainImage
andSwapchainAcquireFuture
and related functions no longer have aW
type parameter.- All constructors of
Surface
now takeOption<Arc<dyn Any + Send + Sync>>
instead of a genericW
. Thewindow
function has been renamed toobject
and likewise returnsOption<&Arc<dyn Any + Send + Sync>>
. - Vulkano-win:
create_surface_from_handle
takes anArc<impl Any + Send + Sync + HasRawWindowHandle + HasRawDisplayHandle>
,create_surface_from_winit
takes anArc<Window>
. PresentInfo
has been renamed toSwapchainPresentInfo
and has differently named members and constructor.acquire_next_image
returns anu32
index to match Vulkan.
Changes to GpuFuture
:
- Added required method
check_swapchain_image_acquired
. AccessError::SwapchainImageAcquireOnly
has been renamed toSwapchainImageNotAcquired
.
Changes to command buffers and command pools:
- Renamed
CommandPool
toCommandBufferAllocator
,StandardCommandPool
toStandardCommandBufferAllocator
, andUnsafeCommandPool
toCommandPool
to better reflect their action. - Removed
Device::with_standard_command_pool
. AutoCommandBufferBuilder::{primary, secondary}
now take an implementation ofCommandBufferAllocator
instead of theDevice
.- The
PrimaryCommandBuffer
andSecondaryCommandBuffer
traits are renamed toPrimaryCommandBufferAbstract
andSecondaryCommandBufferAbstract
.
Changes to descriptor sets and descriptor pools:
- Renamed
DescriptorPool
toDescriptorSetAllocator
,StandardDescriptorPool
toStandardDescriptorSetAllocator
, andUnsafeDescriptorPool
toDescriptorPool
to better reflect their action. DescriptorPool
methods now take&self
and the type itself is!Sync
.- Removed
SingleLayoutDescPool
andSingleLayoutVariableDescPool
. - Removed
Device::with_standard_descriptor_pool
. - Descriptor set allocators must now be managed manually.
PersistentDescriptorSet::{new, new_variable}
now take an implementation ofDescriptorSetAllocator
,PersistentDescriptorSet::new_with_pool
has been removed.
Changes to buffers and images:
DeviceLocalBuffer::{from_buffer, from_data, from_iter}
andImmutableImage::{from_iter, from_buffer}
now take a mutable reference to anAutoCommandBufferBuilder
instead of a queue, and no longer return a future. The upload command will be recorded into the provided command buffer, which should be executed later.- When binding memory to a buffer with the
shader_device_address
usage, and theext_buffer_device_address
extension isn't enabled, the memory must now have been allocated with theMemoryAllocateFlags::device_address
flag set. UnsafeBuffer
andUnsafeImage
are renamed toRawBuffer
andRawImage
.UnsafeBufferCreateInfo
andUnsafeImageCreateInfo
are renamed toBufferCreateInfo
andImageCreateInfo
.ImageCreateInfo
now takes aflags
instead of separate booleans.- Replaced the various unsafe
*_linear_layout
methods ofUnsafeImage
with a safesubresource_layout
method. TheLinearLayout
struct is renamed toSubresourceLayout
to match. - Added
bind_memory
methods to these two types. These takeself
by value, and returnBuffer
andImage
on success. - Added
Buffer
andImage
types, which represent buffers and images that have had memory bound to them. This memory can be retrieved using thememory()
method. - Most previous uses of
UnsafeBuffer
andUnsafeImage
now useBuffer
andImage
instead.
Changes to the VulkanObject
trait:
- The method
internal_object
is renamed tohandle
, and the associated typeObject
is renamed toHandle
.
Changes to PipelineStages
:
- The
transfer
flag has been renamed toall_transfer
.
Changes to SubpassDependency
, MemoryBarrier
, BufferMemoryBarrier
, ImageMemoryBarrier
:
- Fields that start with
source_
have been renamed tosrc_
. - Fields that start with
destination_
have been renamed todst_
.
Changes to the set_event
command:
- This command now takes a
DependencyInfo
instead ofPipelineStages
, to enable use of thevkCmdSetEvent2
version.
Changes to memory allocation:
MemoryPool
has been replaced withMemoryAllocator
andStandardMemoryPool
has been replaced withStandardMemoryAllocator
.- Removed
AllocFromRequirementsFilter
,MemoryPoolAlloc
,MappingRequirement
,AllocLayout
,PotentialDedicatedAllocation
,StandardNonHostVisibleMemoryTypePool
,StandardNonHostVisibleMemoryTypePoolAlloc
,StandardHostVisibleMemoryTypePool
,StandardHostVisibleMemoryTypePoolAlloc
andStandardMemoryPoolAlloc
. - Memory allocators must now be managed manually.
- Buffer and image constructors now take an implementation of the
MemoryAllocator
trait.
- Buffer and image constructors now take an implementation of the
Additions
- Added
bind_sparse_unchecked
,present_unchecked
andsubmit_unchecked
methods toQueueGuard
. - Added the
device_coherent
,device_uncached
andrdma_capable
flags toMemoryPropertyFlags
, and improved the documentation of all flags with additional usage advice. - Some methods of
PhysicalDevice
now cache their results, so that another call with the same arguments will retrieve them faster. - Fence methods are now validated and synchronized, so they take
&self
. - When calling
Fence::is_signaled
orFence::wait
, if the fence is associated with a queue, any resources of the associated queue operation will be released. VulkanLibrary::extension_properties
, to mirror the equivalent function onPhysicalDevice
.VulkanLibrary
methodslayer_extension_properties
,supported_layer_extensions
andsupported_extensions_with_layers
, to query the extensions supported by layers.- Added the remaining missing variants of the
ColorSpace
enum. - Added a
supports_protected
member toSurfaceCapabilities
for thekhr_surface_protected_capabilities
extension. - Support for the
ext_validation_features
extension. - Support for the
khr_external_fence_fd
andkhr_external_fence_win32
extensions. - Added
MemoryAllocateFlags
. - Added
Device::allocation_count
. - Support for the
khr_external_semaphore_fd
,khr_external_semaphore_win32
andfuchsia_external_semaphore
extensions. Semaphore::export_fd
is no longer unsafe.- Added support for all remaining
PipelineStages
andAccessFlags
, including those from thesynchronization2
feature. - Added support for
synchronization2
to theset_event
,reset_event
andwrite_timestamp
commands, and toSubpassDependency
when creating a render pass. - Added the
wait_events
command toSyncCommandBufferBuilder
andUnsafeCommandBufferBuilder
. - Added the
Suballocator
trait and 4 of its implementors:FreeListAllocator
,BuddyAllocator
,PoolAllocator
andBumpAllocator
. - Added
GenericMemoryAllocator
and its configurationGenericMemoryAllocatorCreateInfo
. - Added
MemoryAlloc
,AllocationCreateInfo
,AllocationCreationError
,MemoryUsage
,MemoryAllocatePreference
,MemoryTypeFilter
,SuballocationCreateInfo
andSuballocationCreationError
. - Added a
flags
field toBufferCreateInfo
. This contains no flags yet, but will in the future. - Added the
disjoint
flag toImageCreateFlags
. This flag is used in combination with multi-planar images, to bind separate memory to each plane of the image. It is not yet supported for the higher-level image types. - Added
StandardCommandBufferAllocatorCreateInfo
. - Added
StandardCommandBufferAllocator::{try_reset_pool, clear}
. - Added a spinning
Future
implementation toFence
andFenceSignalFuture
.
Bugs fixed
- #2004: A swapchain image could be presented without being acquired.
- #1871: Layer extensions are not included when validating extensions to enable on an instance.
- Fixed missing validation when binding memory to a buffer with the
shader_device_address
usage. - Queue family count isn't being set in either
ash::vk::BufferCreateInfo
orash::vk::ImageCreateInfo
. - Validation checks for
khr_portability_subset
devices. - Depth and stencil attachments are now properly checked when using dynamic rendering.
- Proper error (
NoStencilAttachment
) is now being returned if stencil attachment format is missing. - Fixed an issue with missing synchronization between a command buffer and any that were previously submitted on the same queue.
SwapchainCreateInfo
documentation correction.- Fixed an issue with
CpuAccessibleBuffer<T>
, where the alignment ofT
was not being considered when allocating.
Version 0.31.1 (2022-10-04)
Bugs fixed
- Incorrect check for descriptor set validity when the shader declares a runtime-sized array.
- #2018: Incorrect handling of
VK_SUBOPTIMAL_KHR
caused a panic when presenting.
Version 0.31.0 (2022-09-18)
Public dependency updates
- winit 0.27
- raw-window-handle 0.5
- half 2
Breaking changes
Changes to Instance
and Vulkan initialization:
FunctionPointers
is renamed toVulkanLibrary
, and now resides in a separatelibrary
module. It is re-exported from the crate root.- The
Loader
trait is now in thelibrary
module. Instance
now requires aVulkanLibrary
object, which you must create beforehand.- The
auto_loader
function is removed. - Supported extensions and layers are now retrieved from the
VulkanLibrary
object. The oldlayers_list
andInstanceExtensions
methods are removed. - The deprecated methods of
DeviceExtensions
are removed. - Vulkano-win:
required_extensions
now requires a reference toVulkanLibrary
. VulkanLibrary::get_instance_proc_addr
is nowunsafe
, and returnsash::vk::PFN_vkVoidFunction
.
Changes to Vulkano-util:
- Required instance extensions for surface creation aren't added until
VulkanoContext
is created. - The
instance
,device
,graphics_queue
andcompute_queue
methods ofVulkanoContext
now return a reference instead of an ownedArc
.
Changes to command pools:
StandardCommandPool
is now implemented lock-free, using thread-local storage.Device::standard_command_pool
has been removed in favor ofDevice::with_standard_command_pool
.StandardCommandPool::new
nows return aResult
.- Added
khr_portability_enumeration
as a default configuration for MacOS invulkano-utils
Changes to descriptor (set) pools:
- Renamed
StdDescriptorPool[Alloc]
toStandard{...}
. StandardDescriptorPool
is now implemented lock-less, using thread-local storage.- Removed
Device::standard_descriptor_pool
in favor ofDevice::with_standard_descriptor_pool
. DescriptorPool::allocate
now takes&Arc<DescriptorSetLayout>
instead of&DescriptorSetLayout
.SingleLayoutDescSetPool::new
now returnsResult
.- Added
SingleLayoutVariableDescSetPool
.
Changes to memory pools:
- Renamed
StdMemoryPool[Alloc]
,StdHostVisibleMemoryTypePool[Alloc]
,StdNonHostVisibleMemoryTypePool[Alloc]
toStandard{...}
. - Renamed
Device::standard_pool
toDevice::standard_memory_pool
.
Changes to PhysicalDevice
:
PhysicalDevice::enumerate
has been replaced withInstance::enumerate_physical_devices
. This function returnsArc<PhysicalDevice>
.- Enumerating physical devices multiple times now retrieves the list of devices each time, instead of only at instance creation. This makes it possible to handle devices that are added/removed during runtime.
PhysicalDevice
now owns instead of borrows from its parentInstance
, so it has no more type parameter.- Added
extension_properties
,memory_properties
andqueue_family_properties
method to get the full properties directly. MemoryType
,MemoryHeap
andQueueFamily
have been removed. Where they were used, you now provide au32
index into thememory_properties().memory_types
,memory_properties().memory_heaps
andqueue_family_properties()
arrays.QueueFamily::supports_surface
has been replaced withPhysicalDevice::surface_support
, to match the Vulkan structure.QueueCreateInfo
now implementsDefault
(with a defaultqueue_family_index
of 0).Queue::family
has been renamed toqueue_family_index
.
Changes to swapchain presentation:
swapchain::present
now takesPresentInfo
parameter.swapchain::present_incremental
has been removed.GpuFuture::then_swapchain_present
now takesPresentInfo
parameter.GpuFuture::then_swapchain_present_incremental
has been removed.SubmitPresentBuilder::swapchain
now takesPresentInfo
.- Added support for
present_id
feature withpresent_id
field onPresentInfo
. - Added support for
present_wait
feature by adding methodswapchain::wait_for_present
.
Changes to CpuBufferPool
:
- The methods
next
andchunk
have been renamed tofrom_data
andfrom_iter
respectively, to be clearer and to match the constructor methods of other buffer and image types.
Changes to bitflag structs and enums corresponding to Vulkan equivalents, as well as to InstanceExtensions
, DeviceExtensions
and Features
:
- The
all()
constructor has been removed from types that have it, as it has the potential to break forward compatibility: it can enable new flags that were not anticipated by old code. For the same reason, the!
operator is not implemented. - All values are validated against the device API version and enabled extensions.
- The constructor
::none()
is deprecated in favour of::empty()
. - The method
is_superset_of
is deprecated in favour ofcontains
. BufferUsage
andImageUsage
no longer have constructors for some specific combinations.
Miscellaneous:
- Merged
ImmutableBuffer
intoDeviceLocalBuffer
. Semaphore::export_opaque_fd
has been renamed toexport_fd
and now takes anExternalSemaphoreHandleType
to specify the handle type to export.Surface::from_raw_surface
has been renamed tofrom_handle
to match thefrom_handle
methods that were added for other types.
Additions
- All bitflag types,
InstanceExtensions
,DeviceExtensions
andFeatures
now:- Have a
const fn empty()
constructor. - Have
const
methodsis_empty
,intersects
,contains
,union
,intersection
,difference
,symmetric_difference
. - Implement the operators
&
,&=
,|
,|=
,^
,^=
,-
and-=
. - Implement
Clone
,Copy
,Debug
,Default
,PartialEq
,Eq
andHash
. - Implement
From
to and from the corresponding Vulkan type (exceptInstanceExtensions
,DeviceExtensions
andFeatures
).
- Have a
- All enum types now:
- Implement
Clone
,Copy
,Debug
,PartialEq
,Eq
andHash
. - Implement
From
to the corresponding Vulkan type, andTryFrom
from the corresponding Vulkan type.
- Implement
- Support for importing
OpaqueWin32
/OpaqueWin32Kmt
memory handles. - Two missing functions for querying about sparse images:
PhysicalDevice::sparse_image_format_properties
andUnsafeImage::sparse_memory_requirements
. - A
DeviceMemory::commitment
method to retrieve the current commitment for lazily-allocated memory. - Support for the
khr_external_fence
andkhr_external_fence_capabilities
extensions. No import or export functions are defined yet, but those can be added more easily now. - The missing
wayland_presentation_support
,win32_presentation_support
xcb_presentation_support
andxlib_presentation_support
methods toPhysicalDevice
. - Support for the
ext_headless_surface
,ext_directfb_surface
,fuchsia_imagepipe_surface
,ggp_stream_descriptor_surface
andqnx_screen_surface
surface for creating surfaces from these APIs. - Support for the
ext_tooling_info
extension. - Support for external memory to
UnsafeBuffer
. - Support for the
ext_separate_stencil_usage
extension.UnsafeImage
and theImageAccess
trait now have astencil_usage
method. - The
DepthReadOnlyStencilAttachmentOptimal
andDepthAttachmentStencilReadOnlyOptimal
image layouts. - The ability to choose a usage for image views, that is a subset of the usage of the parent image.
Bugs fixed
- Fixed iOS compilation. Potentially breaking.
- Removed dependency to
cocoa
andmetal
- Fixed iOS compilation errors
- Added
winit_to_surface
method for iOS, ensuring we can draw to a subCAMetalLayer
layer - Added
Surface::update_ios_sublayer_on_resize
to ensure iOS sublayer is fullscreen if initial window size was not the same as device's - Ensure both iOS and MacOS have
CAMetalLayer
when usingcreate_surface_from_handle
- Removed dependency to
- #1896: Vulkano-shaders generates invalid struct definitions when struct field names are stripped out by the compiler.
- Atomic writes in shaders are not treated as write access for the purposes of synchronization.
- Improvements to compiler linting:
- Most clippy warnings and errors have been fixed, and the remainder is explicitly allowed in each crate root. Some of these may be re-enabled in the future if desired.
- Warnings for dead code and unused variables have been re-enabled and fixed.
Version 0.30.0 (2022-07-20)
- Breaking Removed the
try_gpu_lock
,increase_gpu_lock
andunlock
methods from theBufferAccess
andImageAccess
traits. Locking is now implemented internally inUnsafeBuffer
andUnsafeImage
. - Breaking All
check_buffer_access
andcheck_image_access
functions now take anUnsafeBuffer
/UnsafeImage
and aRange<DeviceSize>
. - Breaking
UnsafeCommandBufferBuilder::pipeline_barrier
now takes aDependencyInfo
. It will usevkCmdPipelineBarrier2
if supported. - Breaking The debug command buffer commands have been renamed to match Vulkan. They now take a
DebugUtilsLabel
value. - Breaking
end_debug_utils_label
is nowunsafe
, as it requires validation checks that are not implemented yet. - Breaking
DebugCallback
is renamed toDebugUtilsMessenger
to match Vulkan, and now takes aDebugUtilsMessengerCreateInfo
to construct. It is nowunsafe
to create, because the the callback cannot call any Vulkan API functions, which Vulkano is unable to check. - Breaking The copy, blit, clear, fill and update commands are completely rewritten, and now use
Info
structs to specify the parameters. They now allow you to specify multiple regions at once to copy, give you fill control over the image subresources, and also let you select image layouts. - Breaking The
transfer_source
andtransfer_destination
fields ofBufferUsage
andImageUsage
are renamed totransfer_src
andtransfer_dst
to match Vulkan. - Breaking
SubImage
has been removed. - Breaking The
conflict_key
method on theBufferAccess
andImageAccess
traits is removed. - Breaking
ImageViewCreateInfo
now has a singlesubresource_range
field instead of separate fields for aspect, mip levels and array layers. - Breaking The
aspects
,mip_levels
andarray_layers
methods ofImageViewAbstract
are removed, and replaced with a singlesubresource_range
method. - Breaking The
current_mip_levels_access
andcurrent_array_layers_access
methods ofImageAccess
are removed. - Breaking
begin_render_pass
now takes aRenderPassBeginInfo
struct. - Breaking
ClearRect
now has a singleRange<u32>
for array layers. - Breaking The fields of
ClearAttachment::Color
are now named. - Breaking The
ImageClearValue
trait is removed. - Breaking The various
AutoCommandBufferBuilder
constructors for secondary command buffers have been merged into onesecondary
function, which directly takes aCommandBufferInheritanceInfo
value. - Breaking The
render_pass
values ofGraphicsPipelineBuilder
andCommandBufferInheritanceInfo
have both been changed into an enum that selects between rendering withbegin_render_pass
and rendering withbegin_rendering
. They implementInto
for easy conversion. - Breaking Added the missing
rasterization_samples
field toMultisampleState
, which must be provided when doing multisampled rendering. - Breaking Renamed the
ready
method ofFence
tois_signaled
. - Breaking The
set_depth_bounds
parameter is now a singleRangeInclusive
instead of two separatef32
, to match the type used on theDepthBoundsState
struct. - Breaking Removed
DeviceExtensions::required_extensions()
. Required extensions such askhr_portability_subset
are now enabled automatically when available. - Breaking Removed
PhysicalDevice::required_extensions()
UnsafeCommandPoolCreateInfo
andUnsafeCommandPoolCreationError
interfaces exposed.- Fixed compile error in Vulkano-win on Android.
- Added
COVERAGE.md
, a document detailing how much of Vulkan is currently covered by Vulkano. - Added debug utils commands to
Queue
. - Added
Instance::with_debug_utils_messengers
, to provide creation info for messengers that should be used at instance creation and destruction time. This function is alsounsafe
. - Added
subresource_layers
andsubresource_range
methods toUnsafeImage
andImageAccess
to easily generate these types from an image. - Added support for the
khr_copy_commands2
device extension. - Added the
resolve_image
command buffer command. BufferViewAbstract
now has arange
method that returns the byte range of the underlying buffer that the view covers.- Added new enum value
CheckDispatchError::ZeroLengthDimensions
to be returned whendispatch()
is called with dimension(s) of length zero. - Vulkano-shaders now supports
raygen
,anyhit
,closesthit
,miss
,intersection
andcallable
shaders. - Fix PresentFuture flushing twice if
then_swapchain_present
fails. - Added new enum value
SwapchainCreationError::ImageExtentZeroLengthDimensions
to be returned when at least one of the image extent's dimensions are zero. - Added support for dynamic rendering, and a
triangle-v1_3
example demonstrating how it's used. - Fixed a bug where
NonExhaustive
implemented theDefault
trait and was therefore still constructable by the user. - Updated ash to 0.37.0+1.3.209.
- Fixed bug in various Vulkan calls where the returned data might be incomplete.
- Fixed bug that triggered an assert if a render pass had an attachment with
Undefined
initial layout. - Added an
is_signaled
method toFenceSignalFuture
. - Add a simple
general_purpose_image_view
method toStorageImage
for less verbose image view creation for e.g. intermediary render targets. - Add a
vulkano_util
crate to help reduce boilerplate in many use cases.VulkanoContext
to hold access to device & instances,VulkanoWindows
to organize windows and their renderers.VulkanoRenderer
to hold the window and methods toacquire
(swapchain) andpresent
between which you are intended to execute your pipelines. - Add option to change
PresentMode
at runtime invulkano_util
withset_present_mode
- Made
ImageUsage
constructor functionsconst
. - Added
intersection
andmax_count
methods toSampleCounts
, as well as aBitAnd
implementation. InstanceCreateInfo
now hasenumerate_portability
field.
Version 0.29.0 (2022-03-11)
- Breaking
Instance
creation parameters are given usingInstanceCreateInfo
. - Breaking
ApplicationInfo
and theapp_info_from_cargo_toml!
macro are removed, their functionality is now integrated intoInstanceCreateInfo
. - Breaking
Device
creation parameters are given usingDeviceCreateInfo
. - Breaking Changes to
UnsafeBuffer
:- Creation parameters are given using
UnsafeBufferCreateInfo
. It is no longer unsafe to construct, only to use. - Memory requirements are no longer returned on construction, but retrieved by calling
memory_requirements
on theUnsafeBuffer
.
- Creation parameters are given using
- Breaking Constructing a buffer of zero size now results in a panic (except for
CpuBufferPool
chunks). - Breaking
BufferView
creation parameters are given usingBufferViewCreateInfo
. - Breaking The following types are now considered non-exhaustive and must be constructed using a method call and struct update syntax:
BufferUsage
,SparseLevel
. - Breaking
RenderPass
creation parameters are given usingRenderPassCreateInfo
.RenderPassDesc
is removed. - Breaking
Framebuffer
creation parameters are given usingFramebufferCreateInfo
. - Breaking The
dimensions
,width
andheight
methods ofFramebuffer
are replaced withextent
andlayers
. - Breaking Changes to
Surface
:- The constructors are renamed to match their Vulkan equivalents:
from_display_mode
>from_display_plane
from_anativewindow
>from_android
from_ios_moltenvk
>from_ios
from_macos_moltenvk
>from_mac_os
from_vi_surface
>from_vi
from_hwnd
>from_win32
from_raw
now requires aSurfaceApi
value.Surface::capabilities
has been moved toPhysicalDevice
and split into three functions:surface_capabilities
,surface_formats
andsurface_present_modes
.Capabilities
has been renamed toSurfaceCapabilities
.- The
is_supported
method has been moved toQueueFamily
and renamed tosupports_surface
.
- The constructors are renamed to match their Vulkan equivalents:
- Breaking Changes to
Swapchain
:- Creation parameters are given using
SwapchainCreateInfo
. Methods ofSwapchain
are renamed to match. - All names with
Fullscreen
andfullscreen
have been renamed toFullScreen
andfull_screen
, to match Vulkan word breaking. FullScreenExclusive::AppControlled
has been renamed toFullScreenExclusive::ApplicationControlled
to match Vulkan.- Using
FullScreenExclusive::ApplicationControlled
on Windows now requires aWin32Monitor
.
- Creation parameters are given using
- Breaking Vulkano-win:
create_vk_surface
andcreate_vk_surface_from_handle
have been renamed tocreate_surface_from_winit
andcreate_surface_from_handle
respectively. - Breaking
DescriptorSetLayout
creation parameters are given usingDescriptorSetLayoutCreateInfo
. The getter methods onDescriptorSetLayout
have been changed to match. - Breaking
DescriptorDesc
has been renamed toDescriptorSetLayoutBinding
and must now be constructed with struct update syntax. Thety
member has been renamed todescriptor_type
, andvariable_count
has been renamed tovariable_descriptor_count
. - Breaking
PipelineLayout
creation parameters are given usingPipelineLayoutCreateInfo
. The getter methods onPipelineLayout
have been changed to match. - Breaking
PipelineLayoutPcRange
has been renamed toPushConstantRange
. - Breaking
DeviceMemory
creation parameters are given usingMemoryAllocateInfo
andMemoryImportInfo
. The number of constructors has been reduced. - Breaking Importing memory is now
unsafe
, because the safety of the file descriptor can't be guaranteed. - Breaking
DedicatedAlloc
is renamed toDedicatedAllocation
, and itsNone
variant is now represented by being wrapped in anOption
. - Breaking
DeviceMemoryAllocError
is renamed toDeviceMemoryAllocationError
. - Breaking
UnsafeCommandPool
creation parameters are given usingUnsafeCommandPoolCreateInfo
. - Breaking
UnsafeCommandPool::allocate_command_buffers
now takesCommandBufferAllocateInfo
. - Breaking The
alloc
method on theCommandPool
trait has been renamed toallocate
, and it takesCommandBufferLevel
instead of a boolean. - Breaking The
new
constructors ofUnsafeCommandBufferBuilder
andSyncCommandBufferBuilder
now takeCommandBufferBeginInfo
. - Breaking The
begin_render_pass
methods ofUnsafeCommandBufferBuilder
andSyncCommandBufferBuilder
now takeRenderPassBeginInfo
. - Breaking
CommandBufferLevel
is now a plain enum,CommandBufferLevel::Secondary
has no associated value anymore. Its constructors have been removed. - Breaking
CommandBufferInheritance
andCommandBufferRenderPassInheritance
have been renamed toCommandBufferInheritanceInfo
andCommandBufferRenderPassInheritanceInfo
respectively. - Breaking The
inheritance
method on theSecondaryCommandBuffer
trait has been renamed toinheritance_info
. - Breaking
QueryPool
creation parameters are given usingQueryPoolCreateInfo
. - Breaking The
ty
andnum_slots
methods ofQueryPool
have been renamed toquery_type
andquery_count
. - Breaking
Fence
andSemaphore
no longer have a type parameter. - Breaking
Event
creation parameters are given usingEventCreateInfo
. - Breaking
Fence
creation parameters are given usingFenceCreateInfo
. - Breaking
Semaphore
creation parameters are given usingSemaphoreCreateInfo
. - Breaking
Semaphore::export_opaque_fd
is nowunsafe
. - Breaking
Sampler
creation parameters are given usingSamplerCreateInfo
. - Breaking
SamplerYcbcrConversion
creation parameters are given usingSamplerYcbcrConversionCreateInfo
. - Breaking
UnsafeDescriptorPool
creation parameters are given usingUnsafeDescriptorPoolCreateInfo
. - Breaking The
alloc
andfree
methods ofUnsafeDescriptorPool
are renamed toallocate_descriptor_sets
andfree_descriptor_sets
. - Breaking The
alloc
method of theDescriptorPool
trait is renamed toallocate
. - Breaking
DescriptorSetLayout::descriptors_count
is renamed todescriptor_counts
, and returns a hashmap instead of a separate type. - Breaking
UnsafeImage
creation parameters are given usingUnsafeImageCreateInfo
. - Breaking
ImageView
creation parameters are given usingImageViewCreateInfo
. - Breaking
ImageView::new
has been renamed tonew_default
. - Breaking
ImageView::ty
has been renamed toview_type
. - Breaking The
format
methods ofUnsafeImage
andImageViewAbstract
now returnOption<Format>
. - Breaking
UnsafeImage::flags
has been replaced with methods to return individual flags. - Breaking
MappedDeviceMemory
is now constructed separately withnew
, the_and_map
variants ofDeviceMemory
are removed. - Breaking Changed how
MappedDeviceMemory
handles CPU access; addedinvalidate_range
andflush_range
methods andread
andwrite
methods to get (im)mutable byte slices to the memory. - Breaking Bytemuck dependencies:
- All buffer types now require their data type parameter to implement
BufferContents
, which hasbytemuck::Pod
as a supertrait. Vertex
also hasPod
as a supertrait.- Consequently, you must derive the
Zeroable
andPod
traits from bytemuck on any custom structures that are used as buffer contents. - To do this for structures generated by Vulkano-shaders, use the
types_meta
parameter as seen in the teapot example.
- All buffer types now require their data type parameter to implement
- Fixed sync bug in
copy_image
andblit_image
where thesrc
anddest
images are the same but with different mip level and/or array layer. - Fixed bug in
begin_render_pass
causing a panic when clearing a depth-only attachment. - Fixed bug in the
QueueFamily::supports_
methods causing a panic when querying support for a stage that needs no queue flags. - Fixed buffer overflow bug in
AutoCommandBufferBuilder::push_constants
. - Fixed
AutoCommandBufferBuilder::push_constants
to push multiple times in case of range overlap (to accommodate VUIDs 01795 and 01796) - Fixed
shader!
macro failing to compile with geometry shaders. - Refactored
VertexBuffersCollection
to allowArc<dyn BufferAccess>
. - Added a
Format::texels_per_block
method.\ - Fixed bug on certain drivers where samplers would behave oddly when minmax samplers are enabled.
- Added support for the
khr_create_renderpass2
extension. - Added an
api
method toSurface
to return the windowing API that it was created from. - Added a
create_info
method toSwapchain
to return aSwapchainCreateInfo
that contains all the parameters copied from the existing swapchain. This can be used for easy recreation of outdated swapchains. - Added support for the
khr_get_surface_capabilities2
extension. - Vulkano-win: Added
create_win32_monitor_from_winit
function. - Added support for Vulkan 1.3.
- Added
Version::HEADER_VERSION
, a constant that contains the Vulkan spec version that Vulkano currently uses. - Added
PhysicalDevice::external_buffer_properties
. PhysicalDevice::image_format_properties
now includes external memory properties in the returned structure.- Added
Device::memory_fd_properties
. - Added
PhysicalDevice::external_semaphore_properties
. - Replaced
fnv
crate'sFnvHashMap
,FnvHashSet
&FnvHasher
with theirstd
counterparts. - Validate SPIR-V code containing
OpUndef
correctly. VertexBuffersCollection
now supports arrays.- Fixed overflow in multiview vertex buffer validation.
- Fixed missing initialization in
PhysicalDevice::surface_formats
.
Version 0.28.0 (2022-02-02)
- Breaking Updated to ash 0.35, half 1.8, smallvec 1.7, winit 0.26, raw-window-handle 0.4.
- Breaking
ColorSpace::DciP3Linear
is renamed toDisplayP3Linear
to match an equivalent change in the Vulkan naming. - Updated vk.xml to 1.2.203.
- Upgraded to Rust 2021.
- Breaking
DescriptorWrite
is renamed toWriteDescriptorSet
to match Vulkan, and moved into the maindescriptor_set
module. - Breaking The constructors of
WriteDescriptorSet
are no longer unsafe. Added convenience constructors for writing non-arrayed bindings. - Breaking Descriptor sets are no longer constructed using a builder, but with an iterator of
WriteDescriptorSet
items. See in the examples how this is used.PersistentDescriptorSet::start
has been replaced with three constructors,new
,new_variable
andnew_with_pool
. Each of these takes an iterator ofWriteDescriptorSet
.SingleLayoutDescSetPool::next
takes an iterator ofWriteDescriptorSet
as well.
- Breaking Shader reflection now always generates only the descriptor requirements needed for each given entry point, instead of for all of them. The
exact_entrypoint_interface
argument to theshader!
macro is removed. - Added ClearRect struct, which contains the region information to be cleared
- Added ClearAttachment enum, which will contain the ClearValue and type of attachment
- Implemented AutoCommandBufferBuilder::clear_attachments, which implements all possible checks from the vulkan standards to make it safe.
- Implemented SyncCommandBufferBuilder::clear_attachments and UnsafeCommandBufferBuilder::clear_attachments.
- Allowed
copy_image
,blit_image
andcopy_buffer
to work withsrc
anddest
images/beffers being the same. But, regions from src to dest must not overlap. - Fix undefined behaviour on external semaphore creation.
- Fix undefined behaviour on external image creation.
- Add uuid checking to gl-interop example.
- Added additional fields to
DescriptorRequirements
, and changedmutable
to be on a per-descriptor basis. - Breaking
Sampler
is now constructed using a builder, usingstart
instead ofnew
. The shortcut functionssimple_repeat_linear
andsimple_repeat_linear_no_mipmap
are retained, but now returnResult
. - Breaking
MipmapMode
is renamed toSamplerMipmapMode
to match Vulkan. - Breaking
SamplerAddressMode::ClampToBorder
no longer includes aBorderColor
value. This is now provided with the new builder. - Breaking The
ImageViewAbstract::can_be_sampled
method is removed, and replaced withSampler::can_sample
. - Added
Filter::Cubic
. - Added support for filter reduction modes on samplers.
- Added
buffer_self_copy_overlapping
andbuffer_self_copy_not_overlapping
as unit tests for self_copy feature (#1782). - Removed test
basic_conflict
(failed after #1782). - Added VertexMember implementations for nalgebra Vectors and Points as an optional crate feature.
- Breaking The spelling
mip_level
is used everywhere as a function and variable name for consistency with Vulkan naming. - Breaking Changes to
UnsafeImage
:- It is now constructed with a builder.
- It is no longer unsafe to construct, only to use.
- Memory requirements are no longer returned on construction, but retrieved by calling
memory_requirements
on theUnsafeImage
. format_features
now returns a reference.preinitialized_layout
is replaced byinitial_layout
, which returns anImageLayout
value.
- Breaking Changes to the
ImageAccess
trait:- Added a
format_features
method, and removedsupports_blit_source
andsupports_blit_destination
. preinitialized_layout
is replaced byinitial_layout
, which returns anImageLayout
value.current_layer_levels_access
was misnamed, and is now namedcurrent_array_layers_access
.current_miplevels_access
is now namedcurrent_mip_levels_access
.
- Added a
- Breaking Changes to
ImageView
:UnsafeImageView
has been merged intoImageView
.- Removed
with_
from all the builder functions. - The
ImageViewAbstract
trait now hasVulkanObject
as a supertrait, and no longer has aninner
method.
- Breaking Changes to
Format
:properties
has been moved toPhysicalDevice::format_properties
. It now supports thekhr_format_feature_flags2
extension.requires_sampler_ycbcr_conversion
has been renamed toycbcr_chroma_sampling
and returnsOption<ChromaSampling>
, whereSome
replacestrue
.size
has been renamed toblock_size
.block_dimensions
has been renamed toblock_extent
.- The members of the
CompressionType
enum have changed.
- Breaking The
BufferViewAbstract
trait now hasVulkanObject
as a supertrait. - Breaking
ExternalMemoryHandleType
has been renamed toExternalMemoryHandleTypes
, and the singular nameExternalMemoryHandleType
has been introduced as an enum. - Breaking
ComponentMapping
andComponentSwizzle
have been moved to thesampler
module. - Added
PhysicalDevice::image_format_properties
. - Added
UnsafeImage::tiling
. - The
ImageViewAbstract
trait now includes aformat_features
method. - The
BufferViewAbstract
trait now includesformat
andformat_features
methods. - Add
boxed_send()
,boxed_sync()
,boxed_send_sync()
forGpuFuture
. - Fixed mipmap generation for 2D array images.
- Added
aspects
to the builder ofImageView
, to choose which aspect(s) of an image to use in the view. - Added
SamplerYcbcrConversion
, and the ability to attach it to a sampler or image view. - Fixed of not being able to create multi-layer framebuffers.
Version 0.27.1 (2021-12-07)
- Reimplement generic impl's for
BufferAcces
,TypedBufferAccess
&ImageAccess
.
Version 0.27.0 (2021-12-06)
- Breaking The modules
compute_pipeline
andgraphics_pipeline
are shortened tocompute
andgraphics
, and are now public. - Breaking
ComputePipeline
,GraphicsPipeline
andPipelineLayout
are re-exported from the basepipeline
module, but other items are not. - Breaking Major changes have been made to most parts of the graphics pipeline state.
- Each state category is now provided by a separate type ending in
State
that lives in its own submodule ofgraphics
. Some of these were existing types that were renamed. - Most of the state-setting methods on
GraphicsPipelineBuilder
are deprecated. State is now set using a_state
method, which is given one of the above state types.
- Each state category is now provided by a separate type ending in
- Breaking
ShaderInterfaceEntry
now contains the startlocation
andcomponent
, and specifies its type using a newty
member instead of as a format. - Breaking
DynamicStateMode
is replaced with a simplebool
. - Breaking The presence of dynamic state in the pipeline state is now expressed more explicitly with two new types,
StateMode
andPartialStateMode
. - Breaking The
PersistentDescriptorSet::start
andSingleLayoutDescSetPool::new
functions now returnResult
. - Breaking
DescriptorWrite
now takes an iterator instead of a single item, allowing arrayed descriptors to be written in one operation. - Breaking Removed the
EntryPointAbstract
trait, which was unused. - Breaking
ComputeEntryPoint
andGraphicsEntryPoint
now hold a list ofDescriptorRequirements
instead ofDescriptorSetDesc
. - Breaking Removed
union
,union_multiple
andensure_compatible_with_shader
fromDescriptorSetDesc
, andunion
fromDescriptorDesc
. This is now handled byDescriptorRequirements
. - Breaking
DescriptorDesc::ensure_compatibility_with_shader
now takesDescriptorRequirements
instead of anotherDescriptorDesc
. - Breaking When the shader's layout specifies a descriptor with runtime array, its upper bound from now on interprets as zero by default(previously it was
1
). - Breaking The
DescriptorSet
trait now has aresources
method, which returns a reference to aDescriptorSetResources
object. It no longer has thenum_buffers
,buffer
,num_images
andimage
methods. - Breaking
BufferViewRef
is replaced withBufferViewAbstract
, similar to the existingImageViewAbstract
. - Breaking
UnsafeDescriptorSet::write
takes aDescriptorSetLayout
instead ofDevice
. - Breaking
DescriptorWrite
is now constructed based on the resources stored instead of the descriptor type. The descriptor type is inferred from the descriptor set layout. - Breaking Added an
Arc
to many parameters and return types:- Objects implementing
BufferAccess
,BufferViewAbstract
,ImageAccess
,ImageViewAbstract
orDescriptorSet
are now always constructed in anArc
, and parameters that take one of these types require theArc
wrapper. - The type parameters of
BufferView
,ImageView
andBufferSlice
do not contain this implicitArc
. - The types
DescriptorSetLayout
,PipelineLayout
,ComputePipeline
,GraphicsPipeline
,QueryPool
,RenderPass
andFramebuffer
are also always constructed in anArc
.
- Objects implementing
- Breaking
Framebuffer
no longer has a type parameter.- This made the
FramebufferAbstract
trait redundant, and it has been removed. CommandBufferLevel
and its nested types no longer have a type parameter either.AttachmentsList
is no longer needed and has been removed.
- This made the
- Breaking The
dimensions
method has been removed as an inherent method from types that already implementImageAccess
, to avoid confusion between the inherent method and the method of the trait when they have different semantics. - Breaking Replaced
DescriptorDescTy
withDescriptorType
and made further changes to the members ofDescriptorDesc
. - Breaking Added a
Pipeline
trait to hold methods that are common to all pipeline types. - Breaking Changes to allow allocating variable descriptor counts:
- The
alloc
method of theDescriptorPool
trait now has a second parameter to specify the number of descriptors to allocate for the variable count binding. If there is no variable count binding in the layout, this should be 0. - The
alloc
method ofUnsafeDescriptorPool
now takes an iterator ofDescriptorSetAllocateInfo
.
- The
- For
PersistentDescriptorSet
when using a layout with a variable count binding, allocate only the number of descriptors needed instead of always the maximum. - Descriptor resources are now checked against the shader requirements at the time of a draw/dispatch call, rather than at the time the descriptor set is created. Only the resources that are actually needed in the shader are checked, the other resources in a descriptor set are ignored and don't need to be valid.
- Added a new
DescriptorRequirements
type, which contains requirements imposed by a shader onto a descriptor and the resources bound to it.DescriptorDesc
can be created fromDescriptorRequirements
with theFrom
trait.DescriptorSetDesc
s can be created from the requirements with thefrom_requirement
constructor.- The descriptor requirements of a pipeline can be queried using a new
descriptor_requirements
method.
- Added basic support for the
khr_push_descriptor
extension, with an example of how it's used. The implementation is somewhat limited and some of the details may change in a future update. - Added support for lots more dynamic state, most of which requires features or extensions to use.
- Added support for discard rectangles, in the
pipeline::discard_rectangle
module. - Added support for line rasterization state, in the
pipeline::rasterization
module. - Added support for color write enable state, in the
pipeline::color_blend
module. GraphicsPipeline
now has methods to return each state object it was created with.ash
has been updated to 0.33.3, which provides new features and extensions.- Added
CommandBufferState::push_constants
to retrieve the set of all push constant bytes that have been set. - Added check to
AutoCommandBufferBuilder
to ensure that the push constants that are needed by the pipeline have been set. - Added android platform to external memory cfgs.
- Fixed two bugs related to the requirements for enabled extensions:
- For required extensions that have been promoted, the promoted version now also fulfills the requirement.
- For features that must be enabled in tandem with extensions (e.g.
descriptor_indexing
), the requirement only applies to Vulkan 1.2 and above, since these features do not exist on earlier versions and thus cannot be enabled. - Fix device memory builder not including p_next structures.
- Fix exportable image not created with VkExternalMemoryImageCreateInfo.
- Fix mutable bit not set on exportable image.
ShaderModule
can how handle multiple entry points with the same name but differing execution models.ShaderModule::entry_point
will now returnNone
if the entry point with the specified name does not exist or is ambiguous. To disambiguate, useShaderModule::entry_point_with_execution
.- Added a
shaderc-debug
cargo feature to Vulkano-shaders, to emit debug information in the generated SPIR-V code. - Added a
type_for_format
macro, which returns a Rust type that is suitable for representing a givenFormat
. - Fixed a bug when using vulkano-shaders macro with multiple shaders in release mode.
- Fixed bug where the wrong image layout was used for images used as a storage image.
- Fix typo in
clear_depth_stencil
.
Version 0.26.0 (2021-10-2)
- Breaking The
draw
anddraw_indexed
commands onAutoCommandBufferBuilder
now take parameters to explicitly specify the range of vertices and instances to draw. - Breaking
BufferlessDefinition
is removed. - Breaking The
VertexSource
trait is removed, and has been replaced with the newVertexBuffersCollection
trait, which works analogously toDescriptorSetsCollection
. Vertex buffers can now be passed in as a tuple, just like descriptor sets. - Breaking Removed the vertex definition type parameter from
GraphicsPipeline
, which is no longer needed with the change above. - Breaking The
ComputePipelineAbstract
andGraphicsPipelineAbstract
traits are no longer needed and have been removed, with their methods made available on the baseComputePipeline
andGraphicsPipeline
types. - Breaking Changes to
DescriptorDesc
and related changes:- The variants of
DescriptorDescTy
now match those ofDescriptorType
and Vulkan. - The
array_count
andreadonly
members are renamed todescriptor_count
(to match Vulkan) andmutable
(with the opposite sense, to match familiar Rust usage). DescriptorImageDesc
is renamed toDescriptorDescImage
. Thedimensions
andarrayed
members have been combined into a singleImageViewType
value.- Removed the
arrayed
member of theInputAttachment
variant as well, as the standard now explicitly disallows arrayed input attachments. - The
ensure_superset_of
method has been split into two, one for shader compatibility and one for binding descriptor sets. The error return types of these methods have been revised.
- The variants of
- Breaking The
Cubemap
andCubemapArray
variants ofImageViewType
are renamed toCube
andCubeArray
to match Vulkan. - Breaking Setting state in
AutoCommandBufferBuilder
is now done via separate commands (e.g.bind_descriptor_sets
,bind_vertex_buffers
) instead of being provided with dispatch/draw commands. This matches how these commands work in Vulkan.- Validity of the state is checked by the dispatch/draw commands.
DynamicState
is removed; each individual state now has its own command to set it. This includes some states that were not previously included inDynamicState
.
- Breaking
StateCacher
is removed; its task is now partially handled bySyncCommandBufferBuilder
. - Breaking Many traits now require
Send + Sync
:BufferAccess
,ImageAccess
,ImageViewAbstract
,FramebufferAbstract
,AttachmentsList
,MemoryPoolAlloc
,DescriptorSet
,DescriptorPoolAlloc
,PrimaryCommandBuffer
,SecondaryCommandBuffer
,CommandPoolAlloc
. This further means that any type parameters of types implementing these traits also requireSend + Sync
. - BREAKING
DescriptorSetLayout::new()
now returnsResult<Self, DescriptorSetLayoutError>
instead of Result<Self, OomError>` - BREAKING
DescriptorCompatibilityError
additional variantVariableCount
. - BREAKING
GraphicsPipelineCreationError
additional variantPipelineLayoutCreationError
. - BREAKING
PipelineLayoutCreationError
additional variantSetLayoutError
. - BREAKING
FixedSizeDescriptorSetsPool
has been replaced bySingleLayoutDescSetPool
. - BREAKING Set builders now return
&mut Self
instead ofSelf
& methods take values wrapped in anArc
. - Breaking Changes to
Format
:Format
variants are now all uppercase with underscores. This avoids interpretation problems where the underscore is significant for the meaning.- The
ty
method and theFormatTy
enum are removed. They are replaced with theNumericType
enum, which concerns itself only with the numeric representation and not with other properties. There are now threetype_*
methods to retrieve it, for colour, depth and stencil respectively. - The
planes
method now returns a slice containing the equivalent single-plane formats of each plane.
- Breaking The
ImageAccess
trait no longer has thehas_color
,has_depth
andhas_stencil
methods. This information can be queried using theaspects
ortype_*
methods ofFormat
. - Breaking Changes made to
DescriptorDescTy
to support immutable samplers. - Breaking
DescriptorWrite::combined_image_sampler
now takes the sampler in anOption
. UseNone
when the descriptor has immutable samplers. - Breaking Changes to pipeline layout tweaks:
DescriptorSetDesc::tweak
is renamed toset_buffer_dynamic
, and now takes only a single binding index.DescriptorSetDesc::tweak_multiple
is removed.- The dynamic buffers parameter of
GraphicsPipelineBuilder::with_auto_layout
has been replaced with a closure that can be used to make tweaks to the descriptor set layouts as needed. ComputePipeline::new
has an additional closure parameter identical to the one described above.
- Breaking
AttachmentImage::dimensions()
now returns[u32; 3]
which includes the layer count. - Breaking Buffers and Images that have
with_exportable_fd
use dedicated allocation, thus requiring khr_get_memory_requirements2 and khr_dedicated_allocation on top of already needed khr_external_memory and khr_external_memory_fd. - Breaking
Compare
is renamed toCompareOp
to match Vulkan. - Breaking Vulkano-shaders no longer generates a
Shader
struct, but instead providesload
as a standalone function that returnsArc<ShaderModule>
directly. - Breaking Vulkano-shaders no longer generates a function for each entry point. Entry points are now retrieved using the
entry_point
method ofShaderModule
. - Breaking The
shader
module is moved to the crate root, andspirv
is now a submodule of it. - Breaking
ShaderModule::new
is renamed tofrom_bytes
to match the existingfrom_words
. - Breaking
ShaderModule
now parses and analyses the shader provided to it on construction, checks whether the shader is compatible with the device, and gathers data such as descriptor sets and input/output interfaces directly from its code. To provide this data yourself as before, and avoid parsing, you can use the_with_data
constructors. - Breaking
ComputeEntryPoint
andGraphicsEntryPoint
are removed, as are the functions onShaderModule
that generate them. Instead, you can look up an entry point using theentry_point
method. - Added support for additional shader types in
ShaderStage
,ShaderStages
andPipelineStages
. - Added
export_fd
andwith_exportable_fd
toAttachmentImage
andStorageImage
as well asmem_size
which is needed when using those images with Cuda. - Vulkano-shaders: added extension/feature checks for more SPIR-V capabilities.
- Added support for surface creation from a CAMetalLayer using VK_EXT_metal_surface.
- Bug fixed. Image layout passed to SubImage is now being respected
- The full Rust code is now generated from vk.xml by autogen directly, instead of using intermediate macros.
- Added
storage_buffer()
method toBufferUsage
. - Fixed mismatched types on Android.
- Fixed bug in descriptor set validity checking that allowed drawing/dispatching with descriptor sets that didn't match the pipeline.
- Fixed bug where the wrong functions were used for retrieving physical device info.
- Fixed minor bug in retrieving features from the physical device.
- Add BSD platforms to external memory (dma-buf fd) cfgs
- Added support for
u8
index buffers with theext_index_buffer_uint8
extension. - Descriptor sets now support variable count descriptors.
- e.g.
layout(set = 0, binding = 0) uniform sampler2D textures[];
- e.g.
- Non-breaking
Format
additions:- Formats and their metadata are now auto-generated from vk.xml. This significantly expands the support for YCbCr formats in particular.
- The
compatibility
method returns an object that can be used to check the compatibility of two formats, explained here. - The
components
method returns the number of bits in each colour component. - The
compression
method returns the compression scheme as a new enum,CompressionType
. - The
requires_sampler_ycbcr_conversion
method returns whether the "sampler YCbCr conversion" must be enabled on an image view and sampler in order to use this format. GraphicsPipelineBuilder
now usesVec
instead ofSmallVec
internally to reduced stack usage.
- Added support for descriptors with immutable samplers.
- They are included as separate members on the appropriate variants of
DescriptorDescTy
. - Added a
set_immutable_samplers
method toDescriptorSetDesc
, which lets you set the immutable samplers for a descriptor. This can be used together with the closure provided to pipeline constructors. add_image
can be used when building a descriptor set, to provide an image to a combined image sampler descriptor that has immutable samplers.
- They are included as separate members on the appropriate variants of
- Updated dependencies:
- png 0.16 > 0.17
- time 0.2 > 0.3
AttachmentImage::current_layer_levels_access()
now returns the correct range which solves pipeline barriers only affecting the first layers of of a multi-layerAttachmentImage
.- A new Vulkano-shaders macro option
shaders
to compile several shaders in a single macro invocation producing generated Rust structs common for all specified shaders without duplications. This feature improves type-safe interoperability between shaders. - Fixed CommandBufferExecFuture adding the command buffer to queue submission after being flushed.
- Added a
spirv
module to the main crate, which contains an auto-generated parser for SPIR-V files, and various other utilities that can be used to analyze shaders at runtime. DescriptorSetLayout
now hasvariable_descriptor_count
which returns the descriptor count in a variable count descriptor if present.- Additional copy buffer to image checks.
- Add
clear_depth_stencil_image
toAutoCommandBufferBuilder
to clear depth / stencil images. AutoCommandBufferBuilder
andSyncCommandBufferBuilder
now have astate
method, which can be used to query the state set by previous "bind" and "set" commands.- Changed parameters requiring an iterator so that they now take
IntoIterator
, for more flexibility. - Removed various custom iterator types in favour of returning
impl Iterator
. - Replaced the various dynamic state querying methods of
GraphicsPipeline
with two:dynamic_state
to query a single dynamic state, anddynamic_states
to iterate over all of them.
Version 0.25.0 (2021-08-10)
- Breaking Refactoring of
PhysicalDevice
and related types.- The module
instance::physical_device
is moved todevice::physical
. Items are exported directly from there. - Functions on
PhysicalDevice
that previously returned a custom iterator type now returnimpl ExactSizeIterator
. PhysicalDevice
now has new methodssupported_extensions
andrequired_extensions
. The equivalent constructors onDeviceExtensions
are deprecated, but still present.
- The module
- Breaking Renamed
Device::loaded_extensions
toenabled_extensions
, to match the terminology used forenabled_features
as well as the Vulkan standard. - Breaking Renamed
Instance::loaded_extensions
andloaded_layers
toenabled_extensions
andenabled_layers
respectively. - Breaking Major reorganisation of the
descriptor
module. Most importantly, itsdescriptor_set
child is moved to the crate root and everything is placed under there. Full list of module changes:descriptor::descriptor_set::*
>descriptor_set
.descriptor::descriptor::*
>descriptor_set::layout
.- But
ShaderStages*
are moved topipeline::shader
.
- But
descriptor_set::UnsafeDescriptorSetLayout
>descriptor_set::layout::DescriptorSetLayout
(renamed).descriptor_set::DescriptorSetDesc
>descriptor_set::layout
.descriptor_set::{FixedSize*}
>descriptor_set::fixed_size_pool
.- Re-exported
descriptor_set::FixedSizeDescriptorSetsPool
.
- Re-exported
descriptor_set::{Persistent*}
>descriptor_set::persistent
.- Re-exported
descriptor_set::PersistentDescriptorSet
,descriptor_set::PersistentDescriptorSetBuildError
,descriptor_set::PersistentDescriptorSetError
.
- Re-exported
descriptor_set::{DescriptorPool*, DescriptorsCount, UnsafeDescriptorSetPool*}
>descriptor_set::pool
.descriptor_set::{StdDescriptorPool*}
>descriptor_set::pool::standard
.- Re-exported
descriptor_set::pool::StdDescriptorPool
.
- Re-exported
descriptor_set::{DescriptorWrite, UnsafeDescriptorSet}
>descriptor_set::sys
.descriptor_set::collection
is now private.
- Breaking
Features::superset_of
is renamed tois_superset_of
. - Breaking The
VertexDefinition
trait no longer hasAttribsIter
andBuffersIter
as associated types. It instead returns aVertexInput
. - Breaking The various types for vertex definitions (except
BufferlessDefinition
) have been replaced with the newBuffersDefinition
type, which can handle any number of vertex and instance buffers. Examples of how it's used can be seen in the "instancing" and "teapot" examples. - Breaking
InputRate
has been renamed toVertexInputRate
to match the Vulkan name. TheInstance
variant now has adivisor
member. - Breaking
DescriptorSetDesc
is converted from a trait to a struct.DescriptorSetLayout
can take this struct in its constructor, as alternative to the iterator which was already possible previously. - Breaking
PipelineLayout
is now built from a list of descriptor set layouts and push constant ranges, like in plain Vulkan. It no longer constructs its own descriptor set layouts internally. - Breaking
PipelineLayoutDescPcRange
is renamed toPipelineLayoutPcRange
. - Breaking
PipelineLayoutDesc
is no longer needed and is removed. Its functionality has been moved toDescriptorSetDesc
andPipelineLayoutPcRange
. This also applies toComputeEntryPoint
,GraphicsEntryPoint
andEntryPointAbstract
. - Breaking
PipelineLayout
now has adescriptor_set_layouts
method which returns a slice of all the layouts, replacing the previousdescriptor_set_layout
which only returned one at a time. - Breaking Vulkano is now relaying on features from Rustc >= 1.53.0.
- Breaking The boolean
graphics
parameter on thebind_descriptor_sets
method ofSyncCommandBufferBuilder
,UnsafeCommandBufferBuilder
andStateCacher
has been replaced with a new enumPipelineBindPoint
. - Breaking Known physical device properties (VkPhysicalDeviceProperties, VkPhysicalDeviceLimits, VkPhysicalDeviceSparseProperties) are now no longer
Option<T>
.- These properties are available with every
vkGetPhysicalDeviceProperties2
call. - Add some
Default
instances to make the auto trait happy.
- These properties are available with every
- Breaking Values that represent a size, offset or index on the device are now represented as
DeviceSize
(a type alias ofu64
). - Breaking Fix in push constant ranges with intersecting stage flags.
- Added support for the
ext_vertex_attribute_divisor
extension, via the newBuffersDefinition
type and the additions toVertexInputRate
. - Added
is_superset_of
method toDeviceExtensions
andInstanceExtensions
. - Examples now enable only the features they need instead of all of them.
- Examples have much smarter device selection logic. In the triangle example this is supplied with comments.
- Errors checking(by unwrapping) in
MappedDeviceMemory::read_write
. - Add creation of Semaphores with exportable Linux file descriptor on.
- Add method to export file descriptor corresponding to Semaphore.
SemaphoreBuilder
introduced.- Add DisplayNative enum variant to ColorSpaceEnum (AMD-specific feature).
- Vulkano-shaders now provides the image format for descriptors, if the shader requires a specific format.
- Vulkano-shaders now uses the
spirv_headers
crate for some of its types. - Large allocations now use dedicated allocations which improves memory efficiency.
- Add
Clone
interface forLayerProperties
. - Fixed detection of storage buffers in SPIR-V so that it works for all SPIR-V versions.
- Added
VertexInput
type, which contains the binding and attribute descriptions. - Added a
vertex_input
method toGraphicsPipelineAbstract
, which returns a reference to the vertex input. - Add support for 8bit uniform storage.
- Added limits check for vertex buffer binding numbers.
- Fixed synchronization bug where pipeline barriers were placed based on the binding of resources instead of the draw/dispatch calls that use them.
SyncCommandBufferBuilder
andUnsafeCommandBufferBuilder
accept anyIntoIterator
where they previously only acceptedIterator
.- Updated ash to 0.33.0, vk.xml to 1.2.185, and ran
cargo update
to update other dependencies' patch versions. - Add support for EXTENDED_SRGB_NONLINEAR_EXT color space.
- Better error message for wrong color space value
- Added
impl BitOr
fordebug::MessageType
anddebug::MessageSeverity
and some bit field generators, also turning them intoconst fn
.
Version 0.24.0 (2021-06-20)
- Breaking Vulkano-shaders now checks if the device supports the shader's SPIR-V version, when loading the shader.
- Breaking (but unlikely) Vulkano-shaders now compiles to SPIR-V 1.0 by default. If your shader needs features only available in a higher version, you can specify the target version on the
shader!
macro with the newvulkan_version: "major.minor"
andspirv_version: "major.minor"
arguments. - Breaking Changes to how image sample counts are represented.
- Instead of an integer, functions with a parameter for number of image samples now take a value of
SampleCount
, an enum with variants namedSampleN
, whereN
is a power-of-two integer. It can be converted to a VulkanSampleCountFlags
, and from an integer withtry_from
. sample_counts
field is originaly represented as u32 type, which is now represented bySampleCounts
struct-type which is a boolean collection of supportedsample_counts
. It can be converted to and from a VulkanSampleCountFlags
.
- Instead of an integer, functions with a parameter for number of image samples now take a value of
- Breaking Changes to shader interfaces and pipeline layouts.
- The module
descriptor::pipeline_layout
has been renamed topipeline::layout
. - The trait
ShaderInterfaceDef
has been replaced by a simple structShaderInterface
, and itselements
method returns a slice instead of an iterator. This means you no longer need to define a new type for a shader interface. The accompanying typeShaderInterfaceDefEntry
has been renamed toShaderInterfaceEntry
to match. TheShaderInterfaceDefMatch
trait andEmptyShaderInterfaceDef
struct have been removed. - The trait
PipelineLayoutDesc
has also been converted into a struct, with methodsdescriptor_sets
andpush_constants
which return slices. It is functionally equivalent to the oldRuntimePipelineDesc
type, which is now merged into it. The traitsPipelineLayoutSuperset
,PipelineLayoutSetsCompatible
andPipelineLayoutPushConstantsCompatible
have been integrated into this struct as well. TheEmptyPipelineDesc
trait has been replaced with an::empty()
constructor. - Consequently, functions that took a value of these traits now take a plain
ShaderInterface
orPipelineLayoutDesc
. Types that had a type parameter for it no longer have it, e.g.VertexDefinition
,GraphicsEntryPoint
,GraphicsEntryPointAbstract
,PipelineLayout
. - Now that
PipelineLayout
has no more type parameter, the traitPipelineLayoutAbstract
is removed. The layout type parameter is also removed fromComputePipeline
andGraphicsPipeline
. ComputeEntryPoint
andGraphicsEntryPoint
now take a value specifying the push constants descriptor, instead of having a type parameter. The corresponding associated type onEntryPointAbstract
has been removed.- The
GraphicsEntryPointAbstract
trait has been removed.GraphicsPipelineBuilder
now takes aGraphicsEntryPoint
object directly, and has lifetime parameters for the 5 shader types instead.EntryPointDummy
is no longer needed and has been removed.
- The module
- Breaking The constructors of
Instance
now take an additional argument to specify the maximum API version. - Breaking Vulkano is now built on top of Ash instead of vk-sys.
- The
EntryPoints
,InstancePointers
andDevicePointers
types from vk-sys have been replaced with a new modulefns
containingEntryFunctions
,InstanceFunctions
andDeviceFunctions
. Rather than containing the functions directly, there is a member for each Vulkan version and extension, which is loaded from Ash. - The functions to retrieve the function pointers have been renamed to
fns
. - The
TYPE
associated constant has been removed from theVulkanObject
trait. This is now provided by the AshHandle
trait, which the object returned byinternal_object
must implement.
- The
- Breaking
RawInstanceExtensions
andRawDeviceExtensions
have been removed. TheInstance
andDevice
constructors now take&InstanceExtensions
and&DeviceExtensions
respectively. Theloaded_extensions
function returns these reference types as well. - Breaking The restrictions of each enabled extension and feature are checked when creating an instance or device.
- Breaking Physical device properties are now retrieved through a new
properties
method, returning a&Properties
reference.- To allow for the possibility that not every property is known by the physical device, fields in
Properties
are wrapped by anOption
. - The previous methods for retrieving properties,
name
,ty
,limits
,driver_version
,pci_device_id
,pci_vendor_id
,uuid
andextended_properties
, have been removed. - The
api_version
method remains, but there is now a semantic difference between it and the version reported byproperties
: The raw property gives the maximum supported version that the driver itself reports, while the method onPhysicalDevice
returns the version a logical device would support if it were created from this physical device (that is, restricted by the instance'smax_api_version
).
- To allow for the possibility that not every property is known by the physical device, fields in
- Breaking
ImageAccess
trait methodtry_gpu_lock()
now has an additional argument to allow locking the image in an uninitialized state.` - Breaking The
conflicts_buffer
andconflicts_image
methods on theBufferAccess
andImageAccess
traits are removed. - Breaking Draw and dispatch calls on
AutoCommandBufferBuilder
no longer have a parameter for dynamic offsets. Instead, they are provided as part of the descriptor sets parameter. They are added to each descriptor set individually using the newoffsets
method on theDescriptorSet
trait.SyncCommandBufferBuilder
andStateCacher
likewise take dynamic offsets as part of the descriptor set. - Breaking
StencilFaceFlags
is renamed toStencilFaces
, and its variants are also shortened. - Breaking
DynamicStencilValue
now contains afront
and aback
value. - Breaking The stencil state commands of
SyncCommandBufferBuilder
now take aStencilFaces
value and au32
instead ofDynamicStencilValue
. - Improve
ImageLayout
checks to preventAccessError::ImageNotInitialized
from occurring where the image is safe to use uninitialized. - Added
DeviceExtensions::khr_spirv_1_4
, which allows SPIR-V 1.4 shaders in Vulkan 1.1. - Added
FunctionPointers::api_version
to query the highest supported instance version. - Added
Instance::api_version
andDevice::api_version
to return the actual supported Vulkan version. These may differ between instance and device, and be lower than whatFunctionPointers::api_version
andPhysicalDevice::api_version
return. - Added
Instance::max_api_version
, which returns the maximum version that was specified when creating the instance. - Fixed the issue when creating a buffer with exportable fd on Linux(see to #1545).
- The
draw_indirect
anddraw_indexed_indirect
commands onAutoCommandBufferBuilder
now check the draw count against themax_draw_indirect_count
limit. - Fixed a few documentation errors.
- It is now possible to construct a graphics pipeline without a fragment shader.
- Added support for all core Vulkan 1.1 and 1.2 device features.
- Updated winit to 0.25.
- Fixed the teapot example on ArchLinux (GTX 1650).
- Added support for the SPIR-V draw parameters capability.
- Added support for the VK_KHR_multiview extension.
- Vulkano-shaders: Added support for MultiView SPIR-V capability.
- Multiview example added showing how to utilize the VK_KHR_multiview extension to render to multiple layers of a framebuffer at once.
- All Vulkan extensions supported by Ash are now provided in
InstanceExtensions
andDeviceExtensions
. This includes all but the very newest extensions; new extensions should be added whenever Ash is updated to a new version. - Every extension is now documented with a link to its Vulkan page and information about requirements, conflicts, promotion and deprecation.
InstanceExtensions
andDeviceExtensions
now have aFrom
implementation that takes an iterator of&CStr
. There is also aFrom
implementation forVec<CString>
that performs the reverse conversion.- All Vulkan features supported by Ash are now provided.
- Implement fmt::Display for DisplayMode.
- Clarify return value is in millihertz for DisplayMode.refresh_rate()
- Reworked some of the internals of
SyncCommandBufferBuilder
, so that a mutex is no longer needed and resource conflict detection is simplified. Features::all
andFeatures::none
are nowconst fn
.
Version 0.23.0 (2021-04-10)
- Breaking Changes to command buffers:
AutoCommandBuffer
and theCommandBuffer
trait have been split in two, one for primary and the other for secondary command buffers.AutoCommandBufferBuilder
remains one type, but has a type parameter for the level of command buffer it will be creating, and some of its methods are only implemented for builders that createPrimaryAutoCommandBuffer
.- The
Flags
enum is renamed toCommandBufferUsage
, and is exported from the maincommand_buffer
module. TheNone
variant is renamed toMultipleSubmit
. - Simplified the number of constructors on
AutoCommandBufferBuilder
by adding aCommandBufferUsage
parameter. Kind
has been renamed toCommandBufferLevel
, and for secondary command buffers it now contains a singleCommandBufferInheritance
value.CommandBufferInheritance::occlusion_query
andUnsafeCommandBufferBuilder::begin_query
now takeQueryControlFlags
instead of a boolean.
- Breaking The non-default constructors of
ImageView
have been replaced with a builder, created withImageView::start(image)
. - Breaking Added support for component mapping/swizzling on image views.
image::Swizzle
is moved and renamed toimage::view::ComponentMapping
. It now has anis_identity
method.- A non-default component mapping can now be specified for image views, via the new builder. A
ComponentMapping
parameter has been added toUnsafeImageView
as well. - The
identity_swizzle
method on theImageViewAbstract
trait has been replaced withcomponent_mapping
, which returns aComponentMapping
directly. - Storage image and input attachment descriptors now check for identity swizzling when being built.
- Breaking Major rearranging of framebuffer and render pass-related types:
- The
framebuffer
module is renamed torender_pass
. RenderPassDesc
is now a struct, not a trait. The methods have been simplified, returning a slice reference to theattachments
,subpasses
anddependencies
.- Renamed:
AttachmentDescription
>AttachmentDesc
,PassDescription
>SubpassDesc
,PassDependencyDescription
>SubpassDependencyDesc
. EmptySinglePassRenderPassDesc
is replaced with theRenderPassDesc::empty
constructor, or itsDefault
implementation.- The
RenderPassCompatible
,RenderPassDescClearValues
andRenderPassSubpassInterface
traits are removed, their functionality is moved toRenderPassDesc
.
- Renamed:
RenderPass
takes a concreteRenderPassDesc
value for construction, and no longer has a type parameter.- The
RenderPassAbstract
trait is removed. GraphicsPipeline
andFramebuffer
no longer have a render pass type parameter.GraphicsPipelineAbstract
andFramebufferAbstract
have trait methods to retrieve the render pass instead.
- The
- The
ordered_passes_renderpass!
andsingle_pass_renderpass!
macros are unchanged externally.
- The
- Support for queries:
- Breaking
UnsafeQueryPool
,UnsafeQuery
andUnsafeQueriesRange
haveUnsafe
removed from their names. - Breaking
QueriesRange
is now represented with a standard RustRange
in its API. - Breaking The secondary command buffer constructors that have parameters for queries will check if the corresponding features are enabled, and return a different error type.
- Removed
OcclusionQueriesPool
, which was incomplete and never did anything useful. get_results
has been added toQueriesRange
, to copy query results to the CPU.- The following functions have been added to both
SyncCommandBufferBuilder
andAutoCommandBufferBuilder
:begin_query
(still unsafe),end_query
(safe),write_timestamp
(still unsafe),copy_query_pool_results
(safe),reset_command_pool
(still unsafe). - Better documentation of everything in the
query
module. - An example demonstrating occlusion queries.
- Breaking
- Breaking Improved the handling of image aspects a little, with the enum
ImageAspect
and the structImageAspects
.UnsafeCommandBufferBuilderImageAspect
has been removed. - Breaking Removed the separate structs for each image format. Now, only the
Format
enum exists.- Traits that no longer make sense in this context have been removed:
FormatDesc
, thePossible*FormatDesc
traits,StrongStorage
. - In types that had a type parameter for the format type, it has been removed.
AcceptsPixels
has been converted toPixel
, which is implemented on the pixel type rather than on the format type.
- Traits that no longer make sense in this context have been removed:
- Breaking
shader!
will generate descriptor information for all variables declared in the shader module, even if they are not used. This reverts the default behavior from the last release.- Breaking Added the
exact_entrypoint_interface
option toshader!
to force vulkano to only generate descriptor information for variables that are used. (the default behavior from the last release)
- Breaking Added the
- Breaking
AccessFlagBits
is renamed toAccessFlags
. - Breaking Minor refactor of
UnsafeBuffer
:- Replaced the various usage functions with a single
usage
function, mirroring the change made earlier toUnsafeImage
. - The
SparseLevel::sparse
member is removed, andUnsafeBuffer::new
takesOption<SparseLevel>
instead.
- Replaced the various usage functions with a single
- Breaking
Swapchain
is now constructed using a builder.Swapchain::start
will start building a new blank swapchain. Callingrecreate
on an existing swapchain will create a builder filled with all the properties of the old swapchain. - Added two methods to
Format
:planes
to query the number of planes in the format, andaspects
to query what aspects an image of this type has. - The deprecated
cause
trait function on Vulkano error types is replaced withsource
. - Fixed bug in descriptor array layers check when the image is a cubemap.
- Vulkano-shaders: Fixed and refined the generation of the
readonly
descriptor attribute. It should now correctly mark uniforms and sampled images as read-only, but storage buffers and images only if explicitly marked asreadonly
in the shader. - Vulkano-shaders: Added support for StoragePushConstant8 SPIR-V capability.
- Fixed a bug which caused a segfault when extending memory allocation info in DeviceMemoryBuilder
BufferlessDefinition
andBufferlessVertices
now deriveCopy
andClone
. This allowsGraphicsPipelineBuilder
s that have not yet defined a vertex buffer type to be cloned.- Various functions for converting to/from Vulkan flags have been consolidated into implementations of the standard
From
trait. - Export root-level
entry_point
method onloader::FunctionPointers
type. - Add few more
InstanceExtensions
from KHR and EXT.
Version 0.22.0 (2021-03-31)
- Breaking Updated all code to Rust 2018 edition.
- Breaking DeviceMemoryBuilder::new() takes in
memory_index
rather thanMemoryType
. - Fixed
shader!
generated descriptor set layouts for shader modules with multiple entrypoints.- Breaking Prefixed
shader!
generated descriptor setLayout
structs with the name of the entrypoint the layout belongs to. For shaders generated from GLSL source, this meansLayout
has been renamed toMainLayout
. - Breaking
shader!
will no longer generate descriptor information for variables that are declared but not used in a shader.
- Breaking Prefixed
- Breaking
shader!
now accepts structs in shader interfaces decorated withBufferBlock
rather thanBlock
. - Fixed missing barriers in dispatch calls
- Breaking
shader!
no longer marks descriptor sets as readonly as a fallback when it doesn't know- Breaking The keyword
readonly
might need to be added in front of thebuffer
keyword in GLSL files to get them working again
- Breaking The keyword
- Breaking
- Breaking Changes to image types:
- Image types no longer implement
ImageViewAccess
. Dimensions
is removed. Image constructors now takeImageDimensions
.ImageDimensions
no longer has thecubemap_compatible
member. Instead, several image constructors takeImageCreateFlags
which specifies this aspect.- Replaced the various functions of
UnsafeImage
to query format features and usage with two that simply returnFormatfeatures
andImageUsage
.
- Image types no longer implement
- Breaking Changes to image view handling:
- Created a new
image::view
module for all image view related things. - Introduced a new
ImageView
type, a safe wrapper aroundUnsafeImageView
. - The
ImageViewAccess
trait is renamed toImageViewAbstract
, some methods added, removed or renamed.ImageView
implements this trait. UnsafeImageView
no longer holds image usage information, nor does it check for valid usage.
- Created a new
- Breaking
UnsafeCommandBuffer
andSyncCommandBuffer
and their corresponding builders and other related types no longer have a type parameter for the command pool allocation, and no longer keep the command pool alive. Their constructors now take an&UnsafeCommandPoolAlloc
. Users must now ensure that the pool allocation outlives the command buffers and their builders (AutoCommandBuffer
does this itself). - Breaking The
CommandBuffer
trait no longer has thePoolAlloc
associated type, and has four new methods:num_buffers
,buffer
,num_images
andimage
. - Breaking structures passed to
ImmutableBuffer::from_data
andCpuAccessibleBuffer::from_data
must implementCopy
to ensure soundness of these functions - Replaced deprecated
compare_and_swap
withcompare_exchange
. UnsafeCommandPoolAlloc
now implementsDeviceOwned
.- Allow
const
usage of features andBufferUsage
. - Opaque fd and dma-buf import support on
Linux
. DeviceMemoryMapping
to separate device memory and mappings.- Added external memory support for
DeviceLocalBuffer
for Linux. - Implemented synchronization for
SyncCommandBufferBuilder::execute_commands
. AutoCommandBufferBuilder::execute_commands
is now fully safe to use.SyncCommandBufferBuilder
now becomes poisoned when it returns an error, to prevent using the builder in an inconsistent state.- Added a
dispatch_indirect
command toAutoCommandBufferBuilder
.
Version 0.21.0 (2021-03-05)
- Breaking
Message::layer_prefix
turned to Option to prevent segfaults when Vulkan message didn't providepMessageIdName
value - Breaking On
AutoCommandBufferBuilder
, methods that bind a descriptor set now take adynamic_offsets
parameter - Breaking On
AutoCommandBufferBuilder
andSyncCommandBufferBuilder
, theupdate_buffer
method now takesdata
by reference - Breaking Made
PipelineLayoutDescTweaks
public, for use with compute pipelines - Added support for
ImageAspect
and YV12/NV12 formats, for use with the UnsafeImage API. - Added basic VK_KHR_external_memory, VK_KHR_external_memory_fd, and VK_EXT_external_memory_dma_buf support.
- Fixed potential segmentation fault in
ComputePipeline
when referencingPipelineCache
objects. - Fixed race condition in
StandardCommandPool
when allocating buffers. - Fixed potential stack overflow error in loading large shaders by storing the bytecode as static.
- Fixed descriptor set layouts with arrays containing more than one element triggering unreachable code.
- Fixed panic on some machines when calling
Surface::capabilities
- Added basic support and safety checks for dynamic uniform/storage buffers
- Updated dependencies:
crossbeam
0.7 -> 0.8half
1.6 -> 1.7shaderc
0.6 -> 0.7smallvec
1.4 -> 1.6cgmath
0.17 -> 0.18 (for examples)png
0.15 -> 0.16 (for examples)time
0.1 -> 0.2 (for examples)
- Added
VK_KHR_portability_subset
device extension. - Added
DeviceExtensions::required_extensions
function that returns a set of available extensions required to createDevice
on this platform. FormatFeatures
now implementsCopy
.- Removed the
AttachmentImageView
trait, which didn't appear to be used for anything anyway. - Added support and validation for the
mutable_format
andblock_texel_view_compatible
image creation flags. - Added
format
to theImageViewBuilder
, to choose a different format from the underlying image.
Version 0.20.0 (2020-12-26)
- Breaking The
ImmutableImage::from_iter
andImmutableImage::from_buffer
can build Mipmaps - Breaking
CpuAccessibleBuffer
now usesRwLock
fromparking_lot
. - Breaking The
Kind
andSubpassContents
types have been moved to the root of thecommand_buffer
module. - Breaking On
AutoCommandBufferBuilder
, the methodsbegin_render_pass
andnext_subpass
now takeSubpassContents
instead of a boolean value. - Breaking The
CommandBuffer
trait now has an additional required method,kind
. - Breaking Update dependency
winit
0.22 -> 0.24 - Breaking Added an Option to the ComputePipeline constructor to enable pipeline caching.
- Add support for 8bit storage.
- Some safety checks have been added to
execute_commands
/execute_commands_from_vec
onAutoCommandBufferBuilder
, but not everything is checked yet so it's still unsafe to call. - Added two vulkano-win features
raw-window-handle_
andwinit_
to be able to use vulkano without winit. - Added function to create surface from
RawWindowHandle
. - Added a
properties
method toFormat
. - Added additional device feature flags for enabling SPIR-V related capabilities.
- Added method
copy_buffer_dimensions
that allows copying parts of buffers containing arrays. - Added
debug_marker_begin
,debug_marker_end
anddebug_marker_insert
toAutoCommandBufferBuilder
. - Fixed surface creation function on Windows(PR #1410).
- Travis CI Linux Nightly job temporary disabled until #1423 resolved.
- Renamed feature from
shader_f3264
toshader_float64
. - Added method
build_with_cache
to theGraphicsPipelineBuilder
that enables pipeline caching. - Check usage bits on image when creating image view.
- Fixing an assertion panic in the SyncCommandBuffer. If the buffer encountered an error while locking the necessary resources, it would unlock all previously locked resources. Images were unlocked incorrectly and an assert in the image unlock function would panic.
- Added support for including precompiled shaders in vulkano-shaders using the
bytes
option. - Added an option for Vulkano-Shaders macro to automatically generate standard traits(Default, PartialEq, etc) implementations for Rust types generated from the Shader types, and to derive these structs with external traits.
- Fixed clear
Cubemap
andCubemapArray
framebuffer attachment dimensions; previously only 1/6th of the layers in each of these image layouts were actually considered by the framebuffer (for clearing and rendering). This seems to have been a result of the difference betweenDimensions
andImageDimensions
.
Version 0.19.0 (2020-06-01)
- Breaking AutoCommandBufferBuilder methods now take a mutable reference to
self
instead of taking ownership - Update
smallvec
1.2 -> 1.4 - Added additional
ImageUsage
constructor functions,color_attachment
,depth_stencil_attachment
,transient_color_attachment
&transient_depth_stencil_attachment
. - Update dependency
half
1.5 -> 1.6 - Update MacOS dependency
metal
0.17 -> 0.18 - Added additional checks around image/device compatibility.
- Fixed all warnings as of Rust 1.43.1
- Provides new API to fetch additional information of the Physical Device from the
PhysicalDeviceProperties2KHR
structure whenever it possible. In the current implementation onlysubgroupSize
property is fetching. This interface can be extended in the future to obtain more metadata depending on community needs. dynamic-local-size
compute shader example added showing how to utilizesubgroupSize
to compute and set shader's local size in run time.- Fixed Vulkano Shaders bug when compute shader local group layout values bound to specialization constants. Now it is possible to define the layout in form of
layout(local_size_x_id = 12, local_size_y_id = 13, local_size_z = 1) in;
and then set the values asSpecializationConstants {constant_12: 8, constant_13: 4, ...}
. - Allow applications to access the instance and device pointers
- Add a helper function '.boxed()' on the
GpuFuture
that is short forBox::new(yourFuture) as Box<dyn GpuFuture>
Version 0.18.0 (2020-03-11)
- Breaking Update dependency
winit
0.21 -> 0.22 - Update dependency
half
1.4 -> 1.5 - Update dependency
smallvec
0.6 -> 1.2
Version 0.17.0 (2020-02-09)
- Breaking Swapchain::recreate_with_dimension() is now Swapchain::recreate_with_dimensions()
- Breaking Sync::SharingMode::Exclusive(queue_family: u32) is now Sync::SharingMode::Exclusive.
- Breaking Added Swapchain::with_old_swapchain() - same as previous Swapchain::new(), if an oldswapchain needs to be used
- Breaking Swapchain::new() now doesnt need to have the old_swapchain parameter anymore but requires the ColorSpace
- Breaking Decouple descriptor sets from pipeline
- Breaking Update Winit to 0.21.0
- Breaking Add
host_cached
field to allCpuAccessibleBuffer
initializers to allow the user to perfer host cached memory. - Breaking Added
fullscreen_exclusive
field toSwapchain
initializers to allow the user to specify how fullscreen exclusivity should be handled.- Swapchain methods added:
Swapchain::acquire_fullscreen_exclusive()
,Swapchain::release_fullscreen_exclusive()
, andSwapchain::is_fullscreen_exclusive()
- Swapchain methods added:
- Add function
execute_commands_from_vec
to handle submission of multiple secondary command buffers. - Allow
DebugCallback
to be sent between threads - Pipeline barriers are now correctly inserted when a resource is used more than two times.
- Update MacOS dependency cocoa to 0.20
- Fixed code generated by
shader!
macro so that SSBO's are supported again (broken in 0.16.0). - Added Swapchain::surface() - which returns the saved surface
- Propogate new lines correctly in shader compile errors.
Queue
andQueueFamily
now implementPartialEq
andEq
- `Swapchain::acquire_next_image()
now returns
(image_id, suboptimal, aquire_future)``- suboptimal indicates that the swapchain is usable, but should be recreated
- Fixed Join Future implementation to not submit joined command buffers twice.
- The traits
GraphicsPipelineAbstract
andDescriptorSet
now requireDeviceOwned
. - Added
PartialEq
,Eq
andHash
implementations to all types involved in a draw call, including:Instance
,Device
,GraphicsPipeline
anddyn GraphicsPipelineAbstract
UnsafeBuffer
and all types implementingBufferAccess
UnsafeImage
,UnsafeImageView
and all types implementingImageAccess
orImageViewAccess
- All types implementing
DescriptorSet
Version 0.16.0 (2019-11-01)
- Fixed bug in examples causing OutOfHostMemory errors
- Replaced
VK_EXT_debug_report
VK_EXT_debug_marker
withVK_EXT_debug_utils
. - Update MacOS dependencies metal to 0.17 and cocoa to 0.19
- Added dynamic stencil elements to
DynamicState
- Fixed
ImageDimensions::mipmap_dimensions
andmax_mipmaps
in cases where the original size is not a power of two. - Shader includes now work on Windows.
- Breaking Change Shader include directories passed to the
shader!
macro are now relative to the cratesCargo.toml
- Add support for
VK_KHR_16bit_storage
andVK_KHR_storage_buffer_storage_class
device extensions. - Update dependencies: lazy_static, half, syn, quote & proc-macro2
- Swapchain can now be recreated with dimensions of corresponding surface using
recreate()
. - Added
raw_loaded_extensions()
toInstance
to allow querying of all extensions, not just known ones. - Breaking Change
loaded_extensions()
onInstance
no longer returns a reference. - Add support for GLSL macro defines to the
shader!
macro. - Switch to Vulkan 1.1 and inherently SpirV 1.3 (shaderc default version for vulkan 1.1)
Version 0.15.0 (2019-10-18)
Yanked
Version 0.14.0 (2019-08-17)
- Update shaderc to 0.6. This again allows to use locally installed libraries which reduces the build-time significantly on Arch/Voidlinux (see https://github.com/google/shaderc-rs/issues/58)
- Removed faulty debug_assert in
SwapchainAcquireFuture::drop
. - Compressed texture formats can now be uploaded using
ImmutableImage::from_iter
,ImmutableImage::from_buffer
,AutoCommandBuilder::copy_buffer_to_image_dimensions
, andAutoCommandBuilder::copy_buffer_to_image
.
Version 0.13.0 (2019-07-02)
This is an emergency breaking breaking change. It fixes Undefined Behaviour that was preventing the compilation of Vulkano on the latest rust nightlies.
- Structs that have the
impl_vertex
macro applied to them, now also need to#[derive(Default)]
.
Version 0.12.0 (2019-05-24)
- Update shaderc to 0.5. New shaderc has improved pre-built options for libshaderc that significantly reduce package build time and are appropriate for use in CI
QueueFamily::explicitly_supports_tranfers
only returns true ifvk::QUEUE_TRANSFER_BIT
is set instead of also always returning true. Removedsupports_transfers
.- Update to winit 0.19
- Add support for
#include "..."
and#include <...>
directives within source files. - Add a
union
method for the extensions types. - Make
BufferUsage
derivePartialEq
andEq
- Fix a compiler error in struct code generated by the
shader!
macro. - Improve inference of image layout transitions and in turn image memory barrier behaviour.
Version 0.11.1 (2018-11-16)
- Expose
CopyImageError
andDrawIndexedIndirectError
.
Version 0.11.0 (2018-11-08) (yanked because vk-sys 0.3.4 was accidentally breaking vulkano 0.10)
- Update to winit 0.18
- Export features and device extensions from the device module instead of the instance module
instance::Features
->device::Features
instance::DeviceExtensions
->device::DeviceExtensions
instance::RawDeviceExtensions
->device::RawDeviceExtensions
- Added
vulkano_shaders::shader!
proc macro, use this instead ofvulkano_shader_deriver::VulkanoShaders
. - The entire
vulkano_shader_derive
crate is deprecated. vulkano_shaders::{reflect, compile, Error}
are no longer public.- Remove vulkano_shaders::build_glsl_shaders
- Removed mir support, as it is being removed from the vulkan spec.
- Split
PersistentDescriptorSetError::MissingUsage
intoMissingImageUsage
andMissingBufferUsage
each with a matching enum indicating the usage that was missing. - Fix instance_count when using draw_index with instance buffers
- Added a
reinterpret
function toBufferSlice
- Made
AttributeInfo
deriveCopy
,Clone
andDebug
- Use google/shaderc for shader compilation
- Reject generation of rust types for SPIR-V arrays that would have incorrect array stride.
- Removed the
Layout
prefix of the descriptions used for a render pass. - Implemented DescriptorSetCollection for
Vec<T>
which allows easier use of construction them for usage when drawing.
Version 0.10.0 (2018-08-10)
- Use dynamically loaded
libvulkan
like on other platforms instead of linking to MoltenVK on macOS - Updated winit to version 0.17.
- Allow custom implementations of
RenderPassDesc
to specifyVK_SUBPASS_EXTERNAL
as a dependency source or destination - Added
vulkano_win::create_vk_surface
which allows creating a surface safely without taking ownership of the window. AutoCommandBufferBuilder::draw
and friends no longer consume theDynamicState
argument, allowing reuse between calls.Instance::new
andInstance::with_loader
now take in the layers as an iterator of borrowedstr
s, not of references to borrowedstr
s.
Version 0.9.0 (2018-03-13)
- Updated winit to version 0.11.
Version 0.8.0 (2018-03-11)
- Changed
ShaderInterfaceMismatchError
to be more verbose. - Allow depth/stencil images to be used with
AutoCommandBufferBuilder::copy_image_to_buffer()
- Allow
Surface
to own the window it references. - Clear value validation for
AutoCommandBufferBuilder::begin_render_pass()
- Fix occasional truncation of glslang_validator when glsl-to-spirv is rebuilt
- Fix linking against MoltenVK >= 0.19.0
- Fix panic on DeviceLost error after resizing swapchain on nvidia/amd hardware
- Added
AutoCommandBufferBuilder::copy_image
- Added
VulkanObject::TYPE
to look up theDebugReportObjectTypeEXT
of an object - Added
Device::set_object_name
andDevice::set_object_name_raw
- Added
GraphicsPipelineBuilder::with_auto_layout
to simplify use of dynamic buffers.
Version 0.7.3 (2018-02-10)
Yanked
Version 0.7.2 (2017-10-09)
- Allow
impl_vertex!
to support generic structs. - Added
GraphicsPipelineBuilder::with_pipeline_layout
. - Fixed creating a buffer view not checking the
min_texel_buffer_offset_alignment
limit. - Added support for loading the
VK_EXT_debug_marker
extension and adding debug markers toUnsafeCommandBufferBuilder
- Changed
GraphicsPipelineBuilder
to default to a buffer-less vertex input. - Deprecated
pipeline::input_assembly::InputAssembly
.
Version 0.7.1 (2017-09-28)
- Fixed an HiDPI scaling issue on MacOS in vulkano-win.
- Fixed
le()
andge()
forDescriptorsCount
, which also fixes a potential memory leak when allocating descriptor sets. - Fixed the
ordered_passes_renderpass!
macro not working properly when usingresolve
. - Added an optional
resolve
entry inpass
forsingle_pass_renderpass!
, for resolving multisampled attachments into non-multisampled attachments. - Fixed the value of
rasterizationSamples
not corresponding to the render pass. - Added
GraphicsPipelineBuilder::sample_shading_disabled
,sample_shading_enabled
,alpha_to_coverage_disabled
,alpha_to_coverage_enabled
,alpha_to_one_disabled
andalpha_to_one_enabled
. AddedGraphicsPipelineCreationError::SampleRateShadingFeatureNotEnabled
andAlphaToOneFeatureNotEnabled
. - Deprecated
pipeline::multisample::Multisample
.
Version 0.7.0 (2017-09-21)
- Added
RuntimePipelineDesc
, an implementation ofPipelineLayoutDesc
that makes creating custom layouts easier. - Changed
CpuBufferPool::next()
andchunk()
to return aResult
in case of an error when allocating or mapping memory. - Changed
CommandBufferExecError::AccessError
to provide a hint of where the error occurs. - Added
vulkano::pipeline::vertex::BufferlessDefinition
andBufferlessVertices
to enable bufferless drawing. - Changed
ImageAccess::try_gpu_lock
andunlock()
to verify whether the image layout is correct, especially at the first usage of an image. - Changed
BufferAccess::conflict_*
andImageAccess::conflict_*
to forbid querying a specific range of the resource. - Fixed
layers
argument validation inSwapchain::new_inner
. - Added a 32-bit word constructor for
ShaderModule
(ShaderModule::from_words
). - Changed the various
is_superset_of
functions to return aResult
instead of abool
.
Version 0.6.2 (2017-09-06)
- Added checking compatibility between the descriptor sets and the pipeline object when adding a draw or compute command.
- Fixed several bugs in the validation checks of
blit_image
. - Fixed
blit_image
,copy_buffer_to_image
andcopy_image_to_buffer
not taking the mipmap level into account when checking for the correct image dimensions. - Added
ImageDimensions::mipmap_dimensions()
andImageDimensions::num_mipmaps()
. - Added an implementation of
DeviceOwned
forQueuesIter
andQueue
. - Fixed the standard command pool and descriptor pool being destroyed too often.
- Added
#[allow(non_snake_case)]
to structs generated by vulkano-shaders.