Description
This issue is to describe the general structure, goals, hardware requirements and some initial features of Daemon-vulkan.
Goals
-
Daemon-vulkan is aimed at creating, supporting, and expanding a Vulkan-based renderer using modern API features to provide a smooth, high-framerate experience on scenes of any (reasonable) complexity in Unvanquished.
-
Clear framework to establish supported hardware.
-
Engine functionality required for gameplay features (like geometry and resource streaming).
Structure
Daemon-vulkan is (to be) a highly GPU-driven pipeline, with CPU tasks realised through a task (job) list.
The required API features and extensions are put into 3 capability packs: minimal, recommended, and experimental (names subject to change). This is in contrast to the granular extension enablement in the OpenGL renderer: while it might provide finer control over them, there usually isn't any need to - and at the same time hardware usually supports a whole set of features rather than just cherry-picking them (e. g. in OpenGL, if something supports SSBOs, it likely also supports compute shaders). At the same time, the fine-grained enablement increases the amount of potential codepaths exponentially, which is not great for maintenace.
Capability packs
The capability packs represent 3 different categories of devices:
-
minimal: minimal to run Daemon-vulkan (this means that it supports the requried features and extensions, but it does not necessarily guarantee that it would run well on such hardware; a list of minimal hardware requirements to run the game well might be created later)
-
recommended: TBA
-
experimental: this is where newer things like mesh shaders or hardware raytracing will land
Once some initial development is done, the first 2 capability pack will be fairly set-in-stone: more features might be added to them, but likely only those that are already supported by the minimum hardware for that capability pack. The 3rd capability pack, on the other hand, is less strict, so hardware requirements for it may fluctuate. Some extensions might be enabled alongside a capability pack, e. g. the NVidia version of Device Generated Commands, which is supported on fairly old GPUs, compared to the core version of this extension.
The capability pack list is still under construction, and can be found here - #12
Note that this list might fluctuate quite a lot in the near future.
Code-wise these capability packs would be contained in their own directories. Any shared parts would be outside of that.
Phasing out
At this time, there's no hardware phasing out planned. However, if we do need it at some point, it will simply require:
- Deleting the minimal capability pack directory.
- Renaming recommended capability pack to minimal.
- Copying the experimental capability pack directory to a newly-created recommended capability pack directory (potentially with some changes, based on feature/extension availability in the experimental capability pack at the time).
Versioning
Daemon-vulkan has its own versioning system on top of the Daemon one. It is not a replacement for the Daemon version, only an addition to it! Daemon-vulkan has the exact same API/ABI compatibility to Unvanquished as the GL-renderer does.
The version consists of 3 numbers [major].[minor].[patch]:
- [major]: Major features and milestones.
- [minor]: Minor features and milestones.
- [patch]: Bugfixes and minor changes that don't qualify for [minor] version.
Roadmap
The projected features are sorted by their expected version. Mainly, they will be projected a few minor versions (for minor features) and one major version (for major features) ahead. This does not include changes for [patch] versions. Other features will be in the unsorted category, version to be added later. The major and minor versions are also reflected through the milestones.
The current feature list can be found in: Vulkan Renderer Features (view)
The goal for version 1.0.0 is feature parity with the GL renderer. The current minor goal is the task list and Vulkan device initialisation.