Skip to content

Latest commit

 

History

History
587 lines (387 loc) · 19.4 KB

CHANGELOG.md

File metadata and controls

587 lines (387 loc) · 19.4 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

Changed

  • Updated ash to v0.38
  • Updated winit to v0.30 (and moved related functionality to new screen-13-window crate)

Removed

  • log and winit are no longer exported by use screen_13::prelude::*

0.11.4 - 2024-07-16

Fixed

  • Validation error: Attempted write update to an immutable sampler descriptor

0.11.3 - 2024-05-29

Added

  • Support for separate image samplers (SamplerState in HLSL, sampler in GLSL)

Changed

  • Updated egui to v0.26
  • Updated gpu-allocator to v0.26
  • Updated spirq to v1.2
    • If you see errors such as expected spirq_core::ty::Type, found spirq::prelude::Type you will need to run cargo update or remove your Cargo.lock file

Removed

  • lazy_static dependency

0.11.2 - 2024-02-26

Changed

  • parking_lot::Mutex is now an optional feature
  • pool types now use more efficient internal caching

Fixed

  • Resolver::submit would sometimes drop and create command pools too often

0.11.1 - 2024-02-20

Added

Changed

  • ResolveMode moved from driver to driver::render_pass

Fixed

  • Swapchain::present_image change introduced in v0.11 needlessly spammed the WARN log while waiting for presentation images to be ready
  • Vulkan validation error introduced in v0.11: "All queue submission commands that refer to fence must have completed execution"

Removed

  • Unnecessary explicit reset of Vulkan command pools
  • Unnecessary Mutex guarding Framebuffer and GraphicPipeline access

0.11.0 - 2024-02-18

Added

  • Min/max image sampler reduction mode - see examples/min_max.rs
    • PhysicalDevice::sampler_filter_minmax_properties added to report properties
    • SamplerInfo::reduction_mode added to set mode
  • SamplerInfo::LINEAR and NEAREST to make sampler creation easier
  • ComputePipeline::with_name, GraphicPipeline::with_name and RayTracePipeline::with_name debug helper functions
  • AccelerationStructureInfo::generic function

Changed

  • Device::image_format_properties returns an Option so that unsupported formats may return None instead of relying on user code to detect DriverError::Unsupported
  • Information struct trait implementations, field and function naming normalized:
    • Constructors no longer return builders
      • Use to_builder to convert an info struct into a builder
      • Use build to convert a builder into an info struct
    • AccelerationStructureInfo
      • Function new_blas renamed to blas
      • Function new_tlas renamed to tlas
    • BufferInfo
      • Function new renamed to device_mem
      • Function new_mappable renamed to host_mem
    • ComputePipelineInfo now implements Copy, Eq and Hash
    • DeviceInfo now implements Default
    • GraphicPipelineInfo now implements Copy
    • ImageInfo
      • Constructor parameters reordered: fmt now after image size
      • Function new_2d renamed to image_2d (in addition to cube, image_1d, etc.)
      • Field linear_tiling renamed to tiling (type changed from bool to vk::ImageTiling)
    • ImageViewInfo::new function now const
    • RayTracePipelineInfo now implements Copy
    • SwapchainInfo
      • Function new now returns SwapchainInfo (previously returned SwapchainInfoBuilder)
      • Field format renamed to surface
      • Default values for width and height fields removed
  • ComputePipelineInfo::name, GraphicPipelineInfo::name and RayTracePipelineInfo::name have each been moved to their respective pipeline struct
  • SampleCount enum members renamed from X1 to Type1 (etc.) to match Vulkan spec
  • EventLoop now produces linear surfaces by default - use desired_surface_format and Surface::srgb to select sRGB
  • Swapchain::present_image now uses event-based waiting for rendering operations instead of polling, greatly reducing CPU usage
  • Updated ash-molten (Mac OS support) to v0.17

Fixed

  • ComputePipelineInfo::default now properly sets a default value for bindless_descriptor_count

Removed

  • GraphicPipelineInfo::new function: Use Default implementation instead
  • RayTracePipelineInfo::new function: Use Default implementation instead
  • SamplerInfo::new function: Use Default implementation instead

0.10.0 - 2024-02-09

Added

  • Ray tracing support for vkCmdTraceRaysIndirectKHR and dynamic stack size
  • Resource aliasing re-introduced - see examples/aliasing.rs
  • Expanded the number of functions and scopes profiled by the profiling crate

Changed

  • Information structs are now #[non_exhaustive] in order to make future additions minor changes - update strategies:
    • Use ..Default::default() syntax during struct creation
    • Use associated constructor functions such as ImageInfo::new_2d(..)
  • BufferInfo::can_map renamed to BufferInfo::mappable
  • Increase PoolInfo::DEFAULT_RESOURCE_CAPACITY from 4 to 16 in order to prevent excess resource creation

Fixed

  • EventLoop: Resize swapchain in response to events instead of each frame (save 50 μs/frame)

Removed

  • input: This module did not support functionality unique to Screen 13 and did not have higher quality than existing solutions such as winit_input_helper
  • EventLoopBuilder::linear_surface_format/srgb_surface_format: Use Surface::linear/srgb instead

0.9.4 - 2024-02-07

Changed

  • Improved performance during render graph resolution: vsm_omni example now records frames 10% faster (~100 μs) and complex render graphs may be signifcantly more performant

0.9.3 - 2024-01-30

Added

  • FifoPool resource pool implementation
  • Memory management functions and configurable bucket sizes for Pool implementations

Fixed

  • Compilation bug for rustc v1.75.0 on Mac OS

0.9.2 - 2024-01-23

Changed

  • Deprecated EventLoop surface format functions
  • Updated derive_builder to v0.13
  • Updated gpu-allocator to v0.25
  • Updated winit to v0.29
  • Updated egui to v0.25
  • Updated imgui-rs to latest main

0.9.1 - 2023-12-29

Added

  • Ability to select from available swapchain surface formats when creating an EventLoop
  • Driver surface and swapchain modules (and their types) are now public API

Changed

  • Changed KeyBuf implementation functions to take values instead of borrows
  • Updated gpu-allocator to v0.24
  • Updated spirq to v1.0.2

0.9.0 - 2023-09-07

Fixed

  • Incorrect handling of images with multiple array layers during render passes
  • Validation error related to VK_KHR_surface when using headless devices
  • Shader modules of graphic pipelines cached by a render pass were not considered during lookup

Added

  • Support for performance profiling crates
  • Queue family index is now a part of the API and allows for submission of render graph work using secondary queue families
  • Expose all Vulkan 1.0 properties via PhysicalDevice::features_v1_0
  • Device::format_properties and Device::image_format_properties so user code may avoid calling unsafe ash functions
  • RenderGraph::node_device_address function
  • contrib/screen-13-hot: Shader compilation macro definition support
  • Virtual reality example using OpenXR - see examples/vr
  • Support for VK_EXT_index_type_uint8; use device.physical_device.index_type_uint8_features.index_type_uint8 to check for support
  • Manually configurable image samplers - see examples/image_sampler.rs

Changed

  • Device creation (and EventLoop::build()) no longer take a ray-tracing parameter; instead the device will be created and you should use device.physical_device.ray_trace_features.ray_tracing_pipeline to check for support
  • Logical device (Device) structure has been moved to screen_13::driver::device
  • Physical device feature and property structures have been moved to screen_13::driver::physical_device
  • Re-ordered parameters of RenderGraph functions: blit_image_region, blit_image_regions, and update_buffer_offset
  • Updated parameters of RenderGraph functions to be more efficient (Into<Box<[_]>> is now AsRef<[_]> and take values of Copy-types instead of borrows)
  • ResolverPool trait has been moved from the screen_13::graph module to screen_13

Removed

  • Driver structure; use Device::create_headless directly
  • PhysicalDeviceDescriptorIndexingFeatures and FeatureFlags as they are no longer required

0.8.1 - 2023-02-18

Fixed

  • Pipelines which use multiple descriptor sets (different set = values) sometimes trigger validation errors
  • contrib/screen-13-hot: build error on Windows platform

Added

  • Custom vertex layout support - see examples/vertex_layout.rs
  • Enabled full set of Vulkan 1.1 and Vulkan 1.2 core features during device creation
  • Ray query support with ray_omni.rs example
  • Exposed existing command buffer implementation so that programs may wait for render graph GPU submissions to finish executing before reading the results with the CPU - see examples/cpu_readback.rs
  • KeyBuf::is_down helper function

Changed

  • contrib/screen-13-egui: Updated egui to v0.20

0.8.0 - 2022-12-28

Added

  • Shader hot-reload feature for compute, graphic and ray-trace pipelines (see examples)
  • Buffer objects may be created with an alignment specified in BufferInfo (useful for shader binding tables)

Changed

  • ComputePipeline::create now takes three arguments: the device, info, and shader
  • ComputePipelineInfo no longer contains shader information; use Shader::new_compute for that instead

0.7.1 - 2022-12-17

Fixed

  • Soundness issue in AccelerationStructure::instance_slice helper function

Added

0.7.0 - 2022-12-05

Fixed

  • Validation error caused by image blit operations
  • multipass.rs and other examples use unsupported image formats without checking for fallbacks

Added

  • EventLoop may be constructed with multiple hardware queues, see desired_queue_count and the new multithread.rs example

Changed

  • Resolver::submit() now takes a queue index instead of an instance; Device::queue_count provides the total number of queues available

0.6.5 - 2022-11-11

Fixed

  • Incorrectly skipped pipeline barriers on resources used in secondary render passes
  • Semaphore in-use validation error when dropping swapchain
  • Validation error caused by back-to-back image reads in auto-merged fragment shader passes
  • Validation error caused by node access for the ALL_COMMANDS stage before graphic passes
  • Multiple validation errors in the example/ and contrib/ code

Added

  • bindless.rs example using an unbounded image sampler array and draw indirect call

Changed

  • Leased resources now reference their pool using Weak reference counting to improve drop ordering

0.6.4 - 2022-10-31

Fixed

  • Framebuffer resolve functionality was implemented incorrectly, did not work
  • Synchronization error when using compute written-resources in fragment shaders
  • Validation error in multipass.rs example
  • Unnecessary depth buffer store operations in vsm_omni.rs example

Added

  • Mutlisampled anti-aliasing example (MSAA)
  • attach_color and attach_depth_stencil functions on PipelinePassRef when bound to a GraphicPipeline for attachments which would otherwise use VK_ATTACHMENT_LOAD_OP_DONT_CARE
  • node_info function on PassRef and PipelinePassRef which may be accessed while recording passes

0.6.3 - 2022-10-25

Fixed

  • Panic when setting exclusive fullscreen if the monitor is set to less than maximum resolution
  • Panic when overlapping push constant ranges in graphic and ray trace pipelines

Added

  • bind_node function on PassRef and PipelinePassRef which may be accessed while recording passes

Changed

  • Improved fullscreen experience: no extra decoration or briefly displayed small window
  • Cursor re-displayed, if hidden, when event loop window loses focus

0.6.2 - 2022-10-20

Fixed

  • Crash/device lost while resizing the window
  • Inconsistent frame timing on certain drivers
  • Incorrect window size on certain drivers

Added

  • Fullscreen demostration in vsm_omni example using F11 and F12 keys
  • Configurable frames-in-flight setting

0.6.1 - 2022-10-16

Fixed

  • Depth/stencil images are now cleared properly
  • Multi-layer framebuffers work as intended
  • Render graph resolver orders renderpasses correctly

Added

  • default_view_info() helper on ImageInfo to assist in defining new views
  • Variance shadow mapping example using a filtered cubemap

0.6.0 - 2022-10-06

Changed

  • clear_color and clear_depth_stencil functions now take the image being cleared: it is now possible to clear and attach, but not store or resolve, an image
  • record_-* methods now also provide a Bindings parameter to the recording closure
  • RayTracePipeline::group_handle is now an associated function where previously it was a method
  • Many types have been moved betwen modules in order to document things cleary

Removed

  • attach_color and attach_depth_stencil functions: replace with the load_ and store_ functions for color or depth/stencil attachments
  • device_api.rs helper functions: create resources directly
  • run stand-alone function: Use EventLoop directly.
  • Various internal-only fields and other types within the driver module

Fixed

  • Depth/stencil attachment clear requests are properly handled in cases where the image used is transient

0.5.0 - 2022-09-17

Added

  • LazyPool resource pool which tries to find acceptable resources before creating new ones
  • instance_slice function for acceleration structures
  • new_blas and new_tlas helper functions for acceleration structure info
  • Node-_mut functions for PassRef: enables clearer code patterns when building passes
  • rt_triangle.rs example; similar to triangle.rs but uses a ray trace pipeline

Changed

  • build_structure and update_structure now take geometry info as a borrow instead of by value

Deprecated

  • input::Typing struct; it has use valid cases but is not within the scope of this crate

Removed

  • prelude_arc: Use prelude module instead
  • driver::BlendMode::Replace and other camel-case constants; use screaming-snake versions, i.e. driver::BlendMode::REPLACE

Fixed

  • Windows platform: EventLoop no longer panics if the window is minimized

0.4.2 - 2022-06-28

Added

  • create_from_slice function for buffers

0.4.1 - 2022-06-24

Added

  • update_structure function for acceleration structures
  • group_handle function for ray trace pipelines

0.4.0 - 2022-06-06

See #25 for migration details

Added

  • Resources may now be bound using Arc<T> of driver smart pointers: Buffer, Image, etc

Changed

  • Resource state is now held in the driver smart pointers instead of the current graph

Removed

  • "Binding" types, such as ImageBinding and ImageLeaseBinding: use Arc<Image> instead
  • Dependency on the archery crate; see rationale

0.3.2 - 2022-06-01

Added

  • Additional memory mapping functions to Buffer structure

Changed

  • BlendMode graphic pipeline enumeration is now a structure with full options

0.3.1 - 2022-05-27

Added

  • Bindless descriptor support (unsized arrays in shader code) and example

Fixed

  • Improve swapchain image flag handling

0.3.0 - 2022-05-20

Added

  • Ray tracing support
  • Subpass API, additional examples

Removed

  • Pak file functionality moved to pak crate

0.2.1 - Unreleased

Added

  • Dear ImGui library and example
  • Bitmapped text rendering

Changed

  • Pak file baking is now multi-threaded; assets still only get packed exactly once

Removed

  • CommandChain structure functionality is now found on the RenderGraph structure

0.2.0 - 2022-02-08

Added

  • Render Graph module, bindings, nodes, and executions: with render pass merging/re-ordering/etc
  • CommandChain structure

Changed

  • Driver now directly based on vulkan, having removed support for the deprecated Gfx-Hal library
  • Lease/pool functionality simplified: leases are now obtained through a common interface using info
  • Engine/Program structures have been merged into a simpler EventLoop structure

Removed

  • Screen 13 file-based configuration: use DriverConfig now
  • Gpu and Render structures: use RenderGraph and ImageNode now
  • Existing bitmap/draw/text/write/etc operations: functionality replaced and in some cases TODO

0.1.9 - Unreleased

Added

  • Implementation of draw functionality
  • Implementation of text functionality

0.1.8 - Unreleased

Added

  • Features: auto-cull, debug-names, deferred-3d, and forward-3d
  • Selectable Arc or Rc shared types

Changed

  • Allow write function to specify multiple writes per call
  • Use builder pattern for all rendering commands
  • Switched asset schema from JSON to TOML

0.1.0 - 2020-07-05

Added

  • Easy-to-use API designed to allow developers to create graphics programs which run on many platforms and require no bare-metal graphics API knowledge
  • "Hello, world!" example using a bitmapped font