Skip to content

v0.4.1

Latest
Compare
Choose a tag to compare
@crud89 crud89 released this 24 May 16:16

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 or std::generate now use std::generator.
    • Builders are now constexpr where possible and are implemented using deducing this in place of CRTP, which makes them more lightweight.
    • New exceptions with support for stacktrace and source_location.
    • Replace fmt with std::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 to meta. (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.
  • 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/or GraphicsDeviceFeatures::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.
  • 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:

@Tractorou24