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.
- Updated
ash
to v0.38 - Updated
winit
to v0.30 (and moved related functionality to newscreen-13-window
crate)
log
andwinit
are no longer exported byuse screen_13::prelude::*
0.11.4 - 2024-07-16
- Validation error:
Attempted write update to an immutable sampler descriptor
0.11.3 - 2024-05-29
- Support for separate image samplers (
SamplerState
in HLSL,sampler
in GLSL)
- 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 runcargo update
or remove yourCargo.lock
file
- If you see errors such as
lazy_static
dependency
0.11.2 - 2024-02-26
parking_lot::Mutex
is now an optional featurepool
types now use more efficient internal caching
Resolver::submit
would sometimes drop and create command pools too often
0.11.1 - 2024-02-20
puffin
profiling to most example code - see getting started guide for more information
ResolveMode
moved fromdriver
todriver::render_pass
Swapchain::present_image
change introduced inv0.11
needlessly spammed theWARN
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"
- Unnecessary explicit reset of Vulkan command pools
- Unnecessary
Mutex
guardingFramebuffer
andGraphicPipeline
access
0.11.0 - 2024-02-18
- Min/max image sampler reduction mode - see
examples/min_max.rs
PhysicalDevice::sampler_filter_minmax_properties
added to report propertiesSamplerInfo::reduction_mode
added to set mode
SamplerInfo::LINEAR
andNEAREST
to make sampler creation easierComputePipeline::with_name
,GraphicPipeline::with_name
andRayTracePipeline::with_name
debug helper functionsAccelerationStructureInfo::generic
function
Device::image_format_properties
returns anOption
so that unsupported formats may returnNone
instead of relying on user code to detectDriverError::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
- Use
AccelerationStructureInfo
- Function
new_blas
renamed toblas
- Function
new_tlas
renamed totlas
- Function
BufferInfo
- Function
new
renamed todevice_mem
- Function
new_mappable
renamed tohost_mem
- Function
ComputePipelineInfo
now implementsCopy
,Eq
andHash
DeviceInfo
now implementsDefault
GraphicPipelineInfo
now implementsCopy
ImageInfo
- Constructor parameters reordered:
fmt
now after image size - Function
new_2d
renamed toimage_2d
(in addition tocube
,image_1d
, etc.) - Field
linear_tiling
renamed totiling
(type changed frombool
tovk::ImageTiling
)
- Constructor parameters reordered:
ImageViewInfo::new
function nowconst
RayTracePipelineInfo
now implementsCopy
SwapchainInfo
- Function
new
now returnsSwapchainInfo
(previously returnedSwapchainInfoBuilder
) - Field
format
renamed tosurface
- Default values for
width
andheight
fields removed
- Function
- Constructors no longer return builders
ComputePipelineInfo::name
,GraphicPipelineInfo::name
andRayTracePipelineInfo::name
have each been moved to their respective pipeline structSampleCount
enum members renamed fromX1
toType1
(etc.) to match Vulkan specEventLoop
now produces linear surfaces by default - usedesired_surface_format
andSurface::srgb
to select sRGBSwapchain::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
ComputePipelineInfo::default
now properly sets a default value forbindless_descriptor_count
GraphicPipelineInfo::new
function: UseDefault
implementation insteadRayTracePipelineInfo::new
function: UseDefault
implementation insteadSamplerInfo::new
function: UseDefault
implementation instead
0.10.0 - 2024-02-09
- 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
- 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(..)
- Use
BufferInfo::can_map
renamed toBufferInfo::mappable
- Increase
PoolInfo::DEFAULT_RESOURCE_CAPACITY
from 4 to 16 in order to prevent excess resource creation
EventLoop
: Resize swapchain in response to events instead of each frame (save 50 μs/frame)
input
: This module did not support functionality unique to Screen 13 and did not have higher quality than existing solutions such aswinit_input_helper
EventLoopBuilder::linear_surface_format
/srgb_surface_format
: UseSurface::linear
/srgb
instead
0.9.4 - 2024-02-07
- 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
FifoPool
resource pool implementation- Memory management functions and configurable bucket sizes for
Pool
implementations
- Compilation bug for
rustc
v1.75.0 on Mac OS
0.9.2 - 2024-01-23
- 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 latestmain
0.9.1 - 2023-12-29
- Ability to select from available swapchain surface formats when creating an
EventLoop
- Driver
surface
andswapchain
modules (and their types) are now public API
- 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
- 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
- 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
andDevice::image_format_properties
so user code may avoid calling unsafeash
functionsRenderGraph::node_device_address
functioncontrib/screen-13-hot
: Shader compilation macro definition support- Virtual reality example using OpenXR - see
examples/vr
- Support for
VK_EXT_index_type_uint8
; usedevice.physical_device.index_type_uint8_features.index_type_uint8
to check for support - Manually configurable image samplers - see
examples/image_sampler.rs
- Device creation (and
EventLoop::build()
) no longer take a ray-tracing parameter; instead the device will be created and you should usedevice.physical_device.ray_trace_features.ray_tracing_pipeline
to check for support - Logical device (
Device
) structure has been moved toscreen_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
, andupdate_buffer_offset
- Updated parameters of
RenderGraph
functions to be more efficient (Into<Box<[_]>>
is nowAsRef<[_]>
and take values ofCopy
-types instead of borrows) ResolverPool
trait has been moved from thescreen_13::graph
module toscreen_13
Driver
structure; useDevice::create_headless
directlyPhysicalDeviceDescriptorIndexingFeatures
andFeatureFlags
as they are no longer required
0.8.1 - 2023-02-18
- Pipelines which use multiple descriptor sets (different
set =
values) sometimes trigger validation errors contrib/screen-13-hot
: build error on Windows platform
- 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
contrib/screen-13-egui
: Updatedegui
to v0.20
0.8.0 - 2022-12-28
- Shader hot-reload feature for compute, graphic and ray-trace pipelines (see examples)
Buffer
objects may be created with an alignment specified inBufferInfo
(useful for shader binding tables)
ComputePipeline::create
now takes three arguments: the device, info, and shaderComputePipelineInfo
no longer contains shader information; useShader::new_compute
for that instead
0.7.1 - 2022-12-17
- Soundness issue in
AccelerationStructure::instance_slice
helper function
- Skeletal mesh animation demonstration in
examples/skeletal-anim
0.7.0 - 2022-12-05
- Validation error caused by image blit operations
multipass.rs
and other examples use unsupported image formats without checking for fallbacks
EventLoop
may be constructed with multiple hardware queues, seedesired_queue_count
and the newmultithread.rs
example
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
- 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/
andcontrib/
code
bindless.rs
example using an unbounded image sampler array and draw indirect call
- Leased resources now reference their pool using
Weak
reference counting to improve drop ordering
0.6.4 - 2022-10-31
- 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
- Mutlisampled anti-aliasing example (MSAA)
attach_color
andattach_depth_stencil
functions onPipelinePassRef
when bound to aGraphicPipeline
for attachments which would otherwise useVK_ATTACHMENT_LOAD_OP_DONT_CARE
node_info
function onPassRef
andPipelinePassRef
which may be accessed while recording passes
0.6.3 - 2022-10-25
- 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
bind_node
function onPassRef
andPipelinePassRef
which may be accessed while recording passes
- 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
- Crash/device lost while resizing the window
- Inconsistent frame timing on certain drivers
- Incorrect window size on certain drivers
- Fullscreen demostration in
vsm_omni
example using F11 and F12 keys - Configurable frames-in-flight setting
0.6.1 - 2022-10-16
- Depth/stencil images are now cleared properly
- Multi-layer framebuffers work as intended
- Render graph resolver orders renderpasses correctly
default_view_info()
helper onImageInfo
to assist in defining new views- Variance shadow mapping example using a filtered cubemap
0.6.0 - 2022-10-06
clear_color
andclear_depth_stencil
functions now take the image being cleared: it is now possible to clear and attach, but not store or resolve, an imagerecord_
-* methods now also provide aBindings
parameter to the recording closureRayTracePipeline::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
attach_color
andattach_depth_stencil
functions: replace with theload_
andstore_
functions for color or depth/stencil attachmentsdevice_api.rs
helper functions: create resources directlyrun
stand-alone function: UseEventLoop
directly.- Various internal-only fields and other types within the
driver
module
- Depth/stencil attachment clear requests are properly handled in cases where the image used is transient
0.5.0 - 2022-09-17
LazyPool
resource pool which tries to find acceptable resources before creating new onesinstance_slice
function for acceleration structuresnew_blas
andnew_tlas
helper functions for acceleration structure info- Node-
_mut
functions forPassRef
: enables clearer code patterns when building passes rt_triangle.rs
example; similar totriangle.rs
but uses a ray trace pipeline
build_structure
andupdate_structure
now take geometry info as a borrow instead of by value
input::Typing
struct; it has use valid cases but is not within the scope of this crate
prelude_arc
: Useprelude
module insteaddriver::BlendMode::Replace
and other camel-case constants; use screaming-snake versions, i.e.driver::BlendMode::REPLACE
- Windows platform:
EventLoop
no longer panics if the window is minimized
0.4.2 - 2022-06-28
create_from_slice
function for buffers
0.4.1 - 2022-06-24
update_structure
function for acceleration structuresgroup_handle
function for ray trace pipelines
0.4.0 - 2022-06-06
See #25 for migration details
- Resources may now be bound using
Arc<T>
ofdriver
smart pointers:Buffer
,Image
, etc
- Resource state is now held in the
driver
smart pointers instead of the current graph
- "Binding" types, such as
ImageBinding
andImageLeaseBinding
: useArc<Image>
instead - Dependency on the
archery
crate; see rationale
0.3.2 - 2022-06-01
- Additional memory mapping functions to
Buffer
structure
BlendMode
graphic pipeline enumeration is now a structure with full options
0.3.1 - 2022-05-27
- Bindless descriptor support (unsized arrays in shader code) and example
- Improve swapchain image flag handling
0.3.0 - 2022-05-20
- Ray tracing support
- Subpass API, additional examples
- Pak file functionality moved to
pak
crate
- Dear ImGui library and example
- Bitmapped text rendering
- Pak file baking is now multi-threaded; assets still only get packed exactly once
CommandChain
structure functionality is now found on theRenderGraph
structure
0.2.0 - 2022-02-08
- Render Graph module, bindings, nodes, and executions: with render pass merging/re-ordering/etc
CommandChain
structure
- 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
- Screen 13 file-based configuration: use DriverConfig now
Gpu
andRender
structures: useRenderGraph
andImageNode
now- Existing bitmap/draw/text/write/etc operations: functionality replaced and in some cases TODO
- Implementation of
draw
functionality - Implementation of
text
functionality
- Features:
auto-cull
,debug-names
,deferred-3d
, andforward-3d
- Selectable
Arc
orRc
shared types
- 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
- 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