# Unreleased - **Breaking** The `Kind` and `SubpassContents` types have been moved to the root of the `command_buffer` module. - **Breaking** On `AutoCommandBufferBuilder`, the methods `begin_render_pass` and `next_subpass` now take `SubpassContents` instead of a boolean value. - **Breaking** The `CommandBuffer` trait now has an additional required method, `kind`. - **Breaking** Update dependency `winit` 0.22 -> 0.23 - Some safety checks have been added to `execute_commands`/`execute_commands_from_vec` on `AutoCommandBufferBuilder`, but not everything is checked yet so it's still unsafe to call. - Added two vulkano-win features `raw-window-handle_` and `winit_` to be able to use vulkano without winit. - Added function to create surface from `RawWindowHandle`. - Added a `properties` method to `Format`. - Added additional device feature flags for enabling SPIR-V related capabilities. - Added method `copy_buffer_dimensions` that allows copying parts of buffers containing arrays. - Fixed surface creation function on Windows(PR #1410). - Travis CI Linux Nightly job temporary disabled until #1423 resolved. # 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 only `subgroupSize` 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 utilize `subgroupSize` 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 as `SpecializationConstants {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 for `Box::new(yourFuture) as Box` # 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 all `CpuAccessibleBuffer` initializers to allow the user to perfer host cached memory. - **Breaking** Added `fullscreen_exclusive` field to `Swapchain` initializers to allow the user to specify how fullscreen exclusivity should be handled. + Swapchain methods added: `Swapchain::acquire_fullscreen_exclusive()`, `Swapchain::release_fullscreen_exclusive()`, and `Swapchain::is_fullscreen_exclusive()` - 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` and `QueueFamily` now implement `PartialEq` and `Eq` - `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` and `DescriptorSet` now require `DeviceOwned`. - Added `PartialEq`, `Eq` and `Hash` implementations to all types involved in a draw call, including: - `Instance`, `Device`, `GraphicsPipeline` and `dyn GraphicsPipelineAbstract` - `UnsafeBuffer` and all types implementing `BufferAccess` - `UnsafeImage`, `UnsafeImageView` and all types implementing `ImageAccess` or `ImageViewAccess` - 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` with `VK_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` and `max_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 crates `Cargo.toml` - Add support for `VK_KHR_16bit_storage` and `VK_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()` to `Instance` to allow querying of all extensions, not just known ones. - **Breaking Change** `loaded_extensions()` on `Instance` 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`, and `AutoCommandBuilder::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 if `vk::QUEUE_TRANSFER_BIT` is set instead of also always returning true. Removed `supports_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` derive `PartialEq` and `Eq` - 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` and `DrawIndexedIndirectError`. # 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 of `vulkano_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` into `MissingImageUsage` and `MissingBufferUsage` 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 to `BufferSlice` - Made `AttributeInfo` derive `Copy`, `Clone` and `Debug` - Use [google/shaderc](https://github.com/google/shaderc-rs) 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` 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 specify `VK_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 the `DynamicState` argument, allowing reuse between calls. - `Instance::new` and `Instance::with_loader` now take in the layers as an iterator of borrowed `str`s, not of references to borrowed `str`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 the `DebugReportObjectTypeEXT` of an object - Added `Device::set_object_name` and `Device::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 to `UnsafeCommandBufferBuilder` - 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()` and `ge()` for `DescriptorsCount`, which also fixes a potential memory leak when allocating descriptor sets. - Fixed the `ordered_passes_renderpass!` macro not working properly when using `resolve`. - Added an optional `resolve` entry in `pass` for `single_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` and `alpha_to_one_enabled`. Added `GraphicsPipelineCreationError::SampleRateShadingFeatureNotEnabled` and `AlphaToOneFeatureNotEnabled`. - Deprecated `pipeline::multisample::Multisample`. # Version 0.7.0 (2017-09-21) - Added `RuntimePipelineDesc`, an implementation of `PipelineLayoutDesc` that makes creating custom layouts easier. - Changed `CpuBufferPool::next()` and `chunk()` to return a `Result` 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` and `BufferlessVertices` to enable bufferless drawing. - Changed `ImageAccess::try_gpu_lock` and `unlock()` to verify whether the image layout is correct, especially at the first usage of an image. - Changed `BufferAccess::conflict_*` and `ImageAccess::conflict_*` to forbid querying a specific range of the resource. - Fixed `layers` argument validation in `Swapchain::new_inner`. - Added a 32-bit word constructor for `ShaderModule` (`ShaderModule::from_words`). - Changed the various `is_superset_of` functions to return a `Result` instead of a `bool`. # 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` and `copy_image_to_buffer` not taking the mipmap level into account when checking for the correct image dimensions. - Added `ImageDimensions::mipmap_dimensions()` and `ImageDimensions::num_mipmaps()`. - Added an implementation of `DeviceOwned` for `QueuesIter` and `Queue`. - Fixed the standard command pool and descriptor pool being destroyed too often. - Added `#[allow(non_snake_case)]` to structs generated by vulkano-shaders.