Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes
File renamed without changes
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,6 @@ imgui.ini
libdxcompiler.so
**/*.pak
**/*.profraw
fuzz/artifacts
fuzz/corpus
graphify-out
84 changes: 71 additions & 13 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,69 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.14.2] - 2026-06-18

### Added

- `Graph` replaces the old `RenderGraph` workflow with command-first graph construction and
`Submission` finalization.
- `stream` module with reusable `CommandStream` values and typed stream arguments.
- `submission` module for prepared submission data, dependency tracking, and graph execution state.
- `node` module with resource node types moved out of the old `graph::node` namespace.
- `driver::graphics` and `cmd::graphics` modules replace the old singular `graphic` modules.
- `driver::ray_tracing` and `cmd::ray_tracing` modules replace the old `ray_trace` modules.
- `vk-graph-window` `Graphchain` API replaces the old display/swapchain presentation wrapper.
- `Fence` driver type and additional swapchain presentation result/error types.
- `checked` feature for runtime graph and stream validation.

### Changed

- This release intentionally ignores semver-checks compatibility failures against the published
`0.14.0+alpha` crate. It includes removed modules, renamed types, renamed fields, changed method
signatures, and trait changes while remaining on the `0.14` release line.
- The old pass-oriented `graph` API was replaced by command builder APIs under `cmd` and root-level
`Graph` methods.
- `Display`/`DisplayInfo` presentation APIs moved out of the main crate; use `vk-graph-window` and
`Graphchain` for windowed presentation.
- `GraphicPipeline`, `GraphicPipelineInfo`, `BlendMode`, and `DepthStencilMode` were renamed to
`GraphicsPipeline`, `GraphicsPipelineInfo`, `BlendInfo`, and `DepthStencilInfo`.
- `RayTracePipeline`, `RayTracePipelineInfo`, and `RayTraceShaderGroup` were renamed to
`RayTracingPipeline`, `RayTracingPipelineInfo`, and `RayTracingShaderGroup`.
- `Device::physical_device` was renamed to `Device::physical`.
- Physical-device extension support now uses actual Vulkan extension names such as
`vk_khr_swapchain`, `vk_khr_synchronization2`, and grouped `Option<khr::...>` support structs for
KHR extensions with feature/property data.
- Ambiguous public `ty` fields were renamed to domain-specific names such as `image_type`,
`view_type`, `acceleration_structure_type`, and `shader_group_type`.
- `SpecializationInfo` was renamed to `SpecializationMap`.
- Builder conversion methods now consistently use `into_builder` instead of `to_builder`.
- Device, resource, pipeline, swapchain, and surface APIs were tightened around explicit creation,
ownership, and unsafe raw-handle construction.
- Workspace integration crates now target `vk-graph` `0.14.2` and are versioned as `0.1.1`.

### Removed

- Removed the old `graph`, `graph::pass_ref`, and `display` public APIs.
- Removed the old `prelude` re-export surface from the main crate.
- Removed `pool::alias` and `AliasPool`.
- Removed old `Device::create_headless`, `Device::create_display`, `Device::load`,
`Device::format_properties`, `Device::image_format_properties`, and `Device::instance` helpers.
- Removed old `Buffer::access`, `Image::access`, and `AccelerationStructure::access` helpers.
- Removed `Pool::lease`; implement `Pool::resource` for custom pools instead.

### Fixed

- Documentation examples now compile as `no_run` doctests instead of being ignored.
- Rustdoc tables and module docs were cleaned up across command, driver, shader, stream, and example
documentation.

## Planned

- Support https://vulkan.gpuinfo.org/displayextensiondetail.php?extension=VK_EXT_full_screen_exclusive, possibly through extension crate
- Fix a few scheduling and merging issues found with specific workloads
- Add optional new-style Vulkan render passes when not on mobile or requested, see if that improves performance by reducing some of the inter-renderpass optimization steps - possibly a build feature
- Add optional new-style Vulkan render passes when not on mobile, or when requested, to see if that improves performance by reducing some of the inter-renderpass optimization steps - possibly a build feature
- Clean up graph pass API - the names of the methods are not all consistent or in line with the Vulkan-spec terminology
- Make all Info structs have the same properties: Copy, Exact parameter values sent to Vulkan not magically interpreted and changed by Screen-13
- Make all Info structs have the same properties: Copy, exact parameter values sent to Vulkan are not magically interpreted and changed by vk-graph
- New crate name to reflect the stability and functionality of this crate, retire "QBasic" references, sad face

## [0.13.0] - 2025-12-14
Expand All @@ -31,8 +88,8 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

- Issue where RenderDoc clears images between renderpasses ("undefined img") due to incorrect usage
of image layout barriers
- Out-of-memory errors during image and buffer creation leaked vulkan resource handles
- Build error seen on error on Android and Raspberry Pi (_See [#105](https://github.com/attackgoat/screen-13/pull/105)_)
- Out-of-memory errors during image and buffer creation leaked Vulkan resource handles
- Build error seen on Android and Raspberry Pi (_See [#105](https://github.com/attackgoat/screen-13/pull/105)_)

## [0.12.6] - 2025-05-10

Expand All @@ -52,7 +109,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Fixed

- Segmentation fault crash and flickering on MacOS when resizing the swapchain (_See [#99](https://github.com/attackgoat/screen-13/pull/99)_)
- Segmentation fault crash and flickering on macOS when resizing the swapchain (_See [#99](https://github.com/attackgoat/screen-13/pull/99)_)

## [0.12.4] - 2025-03-30

Expand All @@ -69,7 +126,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Fixed

- Fix compilation issue on MacOS
- Fix compilation issue on macOS
- Remove incorrect debug assertion for swapchain desired image count

## [0.12.2] - 2025-03-24
Expand All @@ -82,7 +139,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Fixed

- Swapchain image displays nothing after Window presentaion on linux Mesa drivers
- Swapchain image displays nothing after Window presentation on Linux Mesa drivers

## [0.12.0] - 2025-03-13

Expand Down Expand Up @@ -268,7 +325,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### 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
faster (~100 μs) and complex render graphs may be significantly more performant

## [0.9.3] - 2024-01-30

Expand Down Expand Up @@ -439,7 +496,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Added

- Mutlisampled anti-aliasing example (MSAA)
- Multisampled 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

Expand Down Expand Up @@ -469,7 +526,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Added

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

## [0.6.1] - 2022-10-16
Expand All @@ -492,7 +549,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- `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
- Many types have been moved between modules in order to document things clearly

### Removed

Expand Down Expand Up @@ -617,7 +674,7 @@ _See [#25](https://github.com/attackgoat/screen-13/pull/25) for migration detail

### Changed

- Driver now directly based on vulkan, having removed support for the deprecated Gfx-Hal library
- 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

Expand Down Expand Up @@ -655,7 +712,8 @@ _See [#25](https://github.com/attackgoat/screen-13/pull/25) for migration detail
platforms and require no bare-metal graphics API knowledge
- "Hello, world!" example using a bitmapped font

[Unreleased]: https://github.com/attackgoat/screen-13/compare/v0.12.6...HEAD
[Unreleased]: https://github.com/attackgoat/vk-graph/compare/v0.14.2...HEAD
[0.14.2]: https://crates.io/crates/vk-graph/0.14.2
[0.1.0]: https://crates.io/crates/screen-13/0.1.0
[0.2.0]: https://crates.io/crates/screen-13/0.2.0
[0.3.0]: https://crates.io/crates/screen-13/0.3.0
Expand Down
15 changes: 7 additions & 8 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Thank you for taking the time to look over this document. You are encouraged to open issues, submit
PRs, suggest changes, or anything else you feel might move this project forward.

If you have any questions or would like private coorespondence with the main author, John Wells,
If you have any questions or would like private correspondence with the main author, John Wells,
please use john@attackgoat.com.

## Ground Rules
Expand All @@ -16,17 +16,16 @@ access to make changes within this project and you may be banned entirely.

All contributions, ideas, issues, or other efforts you expend on this project must be provided
using the existing MIT or Apache 2.0 license agreements applied to this project. This means that
anything you do for this project will be provided to the public without any strings or conditions
attached. You must also have the right to provide any code or ideas under these licenses as you will
retain no ownership or control after contribution.
anything you do for this project will be provided to the public without any extra strings or
conditions attached. You must also have the right to provide any code or ideas under these licenses.

## Technical Requirements

All code must:

- Be modern Rust code (currently 2024 edition, latest stable compiler) _or_ GLSL.
- Pass `cargo fmt` and `cargo clippy` (debug and release) with no warnings
- Support required platforms: Linux, Mac, Windows
- Support required platforms: Linux, macOS, Windows
- Use only `crates.io`-published crates

### Recommendations
Expand All @@ -37,15 +36,15 @@ All code should:
- Provide useful documentation and comments, including private code
- Support other platforms: Android, iOS

## How do I get started
## How do I get started?

Download the source code and play around with the examples, see README.md for more.

Any and all contributions are acceptable, including major changes to design or capabilities. If your
change is big please ask or open an issue to make sure the rest of the community is on board with
your new ideas.

### What if my idea is too radical
### What if my idea is too radical?

If we cannot fit your change into the existing design without breaking API for other users or
creating other headaches then we will add your code into a `contrib` directory or separate branch as
Expand All @@ -61,4 +60,4 @@ needed.
- Change log: Transfer unreleased details to the new version
- Change log: Add diff link (they are at the bottom)
- Run `cargo publish`
- Github: Add a tag for the version
- GitHub: Add a tag for the version
37 changes: 24 additions & 13 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,17 @@ readme = "README.md"
log = "0.4"
profiling = "1.0"
read-only = "0.1"
vk-graph = { path = "", version = "0.14.1" }
vk-graph-egui = { path = "crates/vk-graph-egui", version = "0.1.0" }
vk-graph-fx = { path = "crates/vk-graph-fx", version = "0.1.0" }
vk-graph-hot = { path = "crates/vk-graph-hot", version = "0.1.0" }
vk-graph-imgui = { path = "crates/vk-graph-imgui", version = "0.1.0" }
vk-graph-window = { path = "crates/vk-graph-window", version = "0.1.0" }
vk-graph = { path = "", version = "0.14.2" }
vk-graph-egui = { path = "crates/vk-graph-egui", version = "0.1.1" }
vk-graph-fx = { path = "crates/vk-graph-fx", version = "0.1.1" }
vk-graph-hot = { path = "crates/vk-graph-hot", version = "0.1.1" }
vk-graph-imgui = { path = "crates/vk-graph-imgui", version = "0.1.1" }
vk-graph-window = { path = "crates/vk-graph-window", version = "0.1.1" }
winit = "0.30"

[package]
name = "vk-graph"
version = "0.14.1+beta"
version = "0.14.2"
authors = ["John Wells <john@attackgoat.com>"]
edition.workspace = true
license.workspace = true
Expand Down Expand Up @@ -62,6 +62,7 @@ profile-with-tracy = ["profiling/profile-with-tracy"]
ash = { version = "0.38.0", default-features = false, features = ["debug", "std"] }
ash-window = "0.13"
derive_builder = "0.20"
fixedbitset = "0.5"
gpu-allocator = "0.28"
log.workspace = true
ordered-float = "5.1"
Expand All @@ -70,6 +71,7 @@ paste = "1.0"
profiling.workspace = true
raw-window-handle = "0.6"
read-only.workspace = true
smallvec = "1.15"
spirq = "1.2"
vk-sync = { version = "0.5", package = "vk-sync-fork" } # // SEE: https://github.com/gwihlidal/vk-sync-rs/pull/4 -> https://github.com/expenses/vk-sync-rs

Expand All @@ -81,6 +83,7 @@ anyhow = "1.0"
bmfont = { version = "0.3", default-features = false }
bytemuck = "1.25"
clap = { version = "4.5", features = ["derive"] }
criterion = "0.5"
glam = { version = "0.32", features = ["bytemuck"] }
half = { version = "2.4", features = ["bytemuck"] }
hassle-rs = "0.11"
Expand All @@ -89,15 +92,23 @@ log = "0.4"
meshopt = "0.2"
polyhedron-ops = ">=0.2, <=0.2.4"
pretty_env_logger = "0.5"
puffin = "0.19"
puffin_http = "0.16"
puffin = "0.20"
puffin_http = "0.17"
rand = "0.9"
reqwest = { version = "0.12", features = ["blocking"] }
vk-graph-fx.workspace = true
vk-graph-imgui.workspace = true
vk-graph-egui.workspace = true
vk-graph-window.workspace = true
vk-graph-fx = { path = "crates/vk-graph-fx" }
vk-graph-imgui = { path = "crates/vk-graph-imgui" }
vk-graph-egui = { path = "crates/vk-graph-egui" }
vk-graph-window = { path = "crates/vk-graph-window" }
vk-shader-macros = "0.2"
tobj = "4.0"
winit.workspace = true
winit_input_helper = "0.17"

[[bench]]
name = "submission_reorder"
harness = false

[[bench]]
name = "image_swap_access"
harness = false
Loading
Loading