LiteFX 0.4.1 - Alpha 04
- Adapt C++23 where applicable. (See PR #98, PR #102, PR #113 and PR #119) This includes:
- Many of the range adaptors could be simplified.
- The adaptor
ranges::to
has been replaced with the STL counterpart. - A novel
Enumerable
container was introduced, as a type-erased view over another range or view. - Some places that previously used
std::ranges::generate
orstd::generate
now usestd::generator
. - Builders are now
constexpr
where possible and are implemented usingdeducing this
in place of CRTP, which makes them more lightweight. - New exceptions with support for
stacktrace
andsource_location
. - Replace
fmt
withstd::format
. (See PR #128)
- Add support for compilation using clang. (See PR #138 and PR #146)
- Allow static linking to the engine libraries. (See PR #135)
- The namespace
rtti
has been renamed tometa
. (See PR #121) - Improvements to C++ core guideline conformance. (See PR #103)
- New event infrastructure. (See PR #81)
- Add support for user-defined debug markers. (See PR #82)
- Improved resource allocation and binding: (See PR #83, PR #110, PR #111, PR #123, PR #126 and PR #147)
- Resources can now be created without querying the descriptor set layout or descriptor layout in advance.
- When allocating descriptor sets, default bindings can be provided to make bind-once scenarios more straightforward.
- Descriptor sets can also be allocated without providing any binding index (in which case continuous counting is assumed) or resources (which enables late binding or resource updating).
- Descriptor set binding has been simplified by caching last used pipeline on command buffers and providing the possibility to bind multiple descriptor sets at once.
- Binding to descriptors that are not part of the layout does no longer throw an exception.
- Improved handling of temporary command buffers. (See PR #89, PR # 123 and See PR #151)
- Command buffers can now be submitted with shared ownership to a command queue, which then stores them and releases the references, if the submit fence is passed (during
waitFor
). - Command buffer transfers can now receive resources with shared ownership. Resource references are released in a similar fashion.
- It is no longer required to manually allocate staging buffers, as raw data can now be passed to transfers on command buffers directly.
- To share ownership, the
asShared
function can be used.
- Command buffers can now be submitted with shared ownership to a command queue, which then stores them and releases the references, if the submit fence is passed (during
- Allow manual command queue allocation for advanced parallel workloads. (See PR #112 and PR #114)
- New "Compute" example demonstrates how to use and synchronize different graphics and compute queues.
- Make most of the render pipeline state dynamic (viewports, scissors, ...). (See PR #86)
- Vector conversion to math types can now be done for constant vectors. (See PR #87)
- Backend types now import contra-variant interface functions instead of hiding them. (See PR #91)
- Add support for GPU time measurements (Timing Events). (See PR #94)
- Add builder interface for barriers and extent barrier flexibility. (See PR #97 and PR #123)
- Add support for static secondary command buffers aka. bundles. (See PR #100)
- Render targets are now created with a set of flags instead of individual boolean switches. (See PR #114)
- This also enables for more use cases, like using render targets in read-write bindings or sharing between different queues.
- Swap chains can now accept
present
calls without explicitly providing a frame buffer. (See PR #114 and PR #125) - Build macros are now prefixed with
LITEFX_
to support portability. (See PR #117) - Add optional support for mesh shaders (enable
GraphicsDeviceFeatures::MeshShaders
to turn it on). (See PR #116) - Add optional support for ray-tracing and ray queries (enable
GraphicsDeviceFeatures::RayTracing
and/orGraphicsDeviceFeatures::RayQueries
to turn it on). (See PR #122) - Render passes have been improved and simplified, now supporting automatic input attachment binding and event-based resize handlers. (See PR #124)
- Frame buffers have been decoupled from render passes, allowing to share images between passes and binding resources of different sampling rates and resolutions to the same pass. (See PR #125)
- Support for vertical synchronization has been added. (See PR #127)
- Fetch DXC from vcpkg. (See PR #131)
- Simplified math type interface. (See PR #120)
- Add support for indirect draws/dispatches. (See PR #118)
- Add native visualizers for improved debugging. (See PR #137)
- Mip-map generation moved into graphics utility library. (See PR #144 and See PR #151)
- Support for CMake 4.0 and removal of deprecated build behaviour. (See PR #149)
- Updated several dependencies. (See PR #150)
π Vulkan:
- Raise minimum Vulkan SDK version to 1.3.204.1. (See PR #86 and PR #88)
VK_EXT_debug_utils
is now enabled by default for the Vulkan backend in debug builds. (See PR #82)- Images are now implicitly transitioned during transfer operations. (See PR #93)
- Command buffers no longer share a command pool, improving multi-threading behavior. (See PR #112)
- Queue allocation has also been reworked so that a queue from the most specialized queue family for a provided
QueueType
is returned.
- Queue allocation has also been reworked so that a queue from the most specialized queue family for a provided
- Empty descriptor sets are now allowed and may be automatically created to fill gaps in descriptor set space indices. (See PR#110)
- Swap chain presentation uses fences instead of convoluted binary semaphores for synchronization. (See PR #114)
- Furthermore, the D3D interop version of the swap chain has been reworked to support proper frames in flight (as opposed to do a full CPU-wait before presenting).
- Descriptor set pool sizes are now determined dynamically, depending on the number of allocations. (See PR #115)
- Use Synchronization2 primitives for synchronization. (See PR #122)
- Render passes have been replaced with dynamic rendering. (See PR #125)
β DirectX 12:
- Link PIX event runtime for DX12 x64 builds by default. (See PR #82 and (PR #133)
- Switch D3D12 runtime to DirectX Agility SDK. (See PR #95)
- Add support for enhanced barriers. (See PR #97)
- Raise minimum required feature level to 12.1. (See PR #122)
π Bug Fixes:
- Image dimensions are always clamped to a minimum of 1, so that resources with zero-dimensions can no longer be created. (See PR #90)
- Missing formatters for DXIL and SPIR-V reflection types have been added. (See PR #104)
- Input assembler states can now be defined without providing an index buffer layout. (See PR #109)
- Image transitions now work correct if applied to individual layers only. (See PR #122)
- Descriptor sets are now properly allocated, even when using more strict drivers. (See PR #129)
- Resolving PIX runtime should now also work when building from the registry. (See PR #148)
π₯ Contributors: