Skip to content

Releases: crud89/LiteFX

v0.5.1

06 Nov 15:41

Choose a tag to compare

LiteFX 0.5.1 - Alpha 05

  • Improved descriptor management.
    • Common descriptor allocation and binding architecture. (See PR #165)
    • Unbounded arrays are no longer implicitly defined by setting the array element size to maximum. This allows to define multiple descriptor sets containing unbounded descriptor arrays without exceeding device limits in Vulkan. (See PR #166)
    • Binding hints can now be passed to shader reflection to have better control over the pipeline layout without falling back to explicit definitions. (See PR #168)
    • Descriptor sets can now mix samplers and other resources in a single set. (See PR #170)
    • Descriptor types can now be specified at bind time, rather than pipeline creation time. (See PR #172)
    • Descriptors on global descriptor heaps are now allocated from virtual allocators. (See PR #188)
    • Command buffers can now track temporary descriptor sets to keep them allocated until the command buffer finished. (See PR #188)
  • Improved memory management.
    • Add support for putting resources on GPU upload heaps using ReBAR. (See PR #175)
    • Implement queries for memory statistics. (See PR #184)
    • Implement AllocationBehavior flags, that can be used to control what happens, if memory budgets are depleted. (See PR #186)
    • Add factory methods that don't throw if an allocation fails, but return a boolean instead to inform about success or failure. (See PR #186)
    • Implement support for resource defragmentation. (See PR #192 and PR #195)
    • Implement support for resource aliasing. (See PR #193)
  • Improved rasterizer state.
    • Implement support for depth bounds testing. (See PR #189)
    • Added support for toggling depth clipping. (See PR #190)
    • Implemented support for conservative rasterization. (See PR #191)
  • Texel buffer formats can now be specified during resource binding. (See PR #173)
  • Additional shader stages for a descriptor set layout can now be provided through piepline binding hints. (See PR #185)
  • Implement support for vertex buffer input rates. (See PR #187)
  • Expose virtual allocators in the rendering API. (See PR #188)
  • It is now possible to provide custom allocators for frame buffer images, which enables fixed-size or aliased render targets. (See PR #193)
  • Implemented support for view instancing/multi-view rendering. (See PR #194)

πŸŒ‹ Vulkan:

  • Implement descriptor management using VK_EXT_descriptor_buffer. (See PR #165)
  • Fixed issue that caused the native Vulkan swap chain to not properly transition present targets, if the DirectX 12 backend was enabled. (See PR #165)
  • Fixed destruction of descriptor set layout handles. (PR #165)

❎ DirectX 12:

  • Fixed an issue where scissor rects that did not start at the window origin were incorrectly passed to the pipeline. (See PR #158)
  • Fixed an issue that caused image and sampler arrays to be mapped incorrectly to the underlying descriptor sets. (See PR #159)
  • Added support for manually allocating descriptor ranges from global descriptor heaps. (See PR #174)

🐞 Bug Fixes:

  • Fix issue where re-configuring the project would fail due to CMAKE_CXX_COMPILER or CMAKE_C_COMPILER cache variables are being reset. (see PR #157)
  • Fix deprecation warning for some literal operators. (See PR #161)
  • Fix debug layer warning about invalid stencil target access when a depth-only render target was used. (See PR #170)

v0.4.2

26 Sep 10:46

Choose a tag to compare

LiteFX 0.4.2 - Alpha 04 Patch 01

πŸŒ‹ Vulkan:

  • Fixed an issue that caused wrong image layout transitions for present targets, when using the Vulkan native swap chain when the D3D12 backend is enabled. (See PR #169)
  • Set static upper limit for the number of resources that can be bound to an unbounded array to 500.000 to prevent exceeding device limits when using multiple such descriptor arrays in a single pipeline. (See PR #169)

❎ DirectX 12:

  • Fixed an issue where scissor rects that did not start at the window origin were incorrectly passed to the pipeline. (See PR #158)
  • Fixed an issue that caused image and sampler arrays to be mapped incorrectly to the underlying descriptor sets. (See PR #159)

🐞 Bug Fixes:

  • Fix issue where re-configuring the project would fail due to CMAKE_CXX_COMPILER or CMAKE_C_COMPILER cache variables are being reset. (see PR #157)

v0.4.1

24 May 16:16

Choose a tag to compare

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

v0.3.1

22 Aug 07:04

Choose a tag to compare

LiteFX 0.3.1 - Alpha 03

  • Various API improvements (See PR #66)
    • Remove circular dependencies from constructors, to make it easier to opt-out of the builder architecture.
    • Split up builders to encourage re-using pipeline layouts, shader programs and fixed-function states.
    • Root builders now provide a move-conversion operator, eliminating the need to call .go explicitly.
    • Child builders use other naming convention for .go (.add) to improve readability.
  • Backend and device states help to automatically manage resources over multiple backend instances. (See PR #66)
  • Backends can now be switched at runtime. Samples have been updated to work on both backends, if they are built. (See PR #66)
  • Pipeline layouts can now be defined using shader reflection. (See PR #68)
  • It is now possible to initialize a descriptor with a static/immutable sampler state. (See PR #68)
  • Debugging has been improved with support for debug objects for DirectX 12 ❎ and Vulkan πŸŒ‹. (See PR #70)
  • Shaders can now be loaded from streams. (See PR #71)
  • Shaders can now be placed in Shader Libraries, which can be embedded into binaries. (See PR #71)
  • Descriptors have been reworked (See PR #74)
    • DescriptorTypes now reflect the HLSL buffer type to make defining pipeline layouts more straightforward. Descriptor set builders have been updated accordingly.
    • A new descriptor type for ByteAddressBuffers has been added.
    • Various bug fixes in how descriptor types are handled.
    • Shader reflection now properly restores Buffer descriptors in DirectX and supports all flavors of descriptor types in Vulkan.
    • Support for unbounded descriptor arrays has been added.
  • Allow samples to toggle full-screen mode by pressing F8. (See PR #77)
  • Add handler to samples for exit when pressing ESC. (See PR #77)
  • Build πŸ› : Shader targets can now receive additional compiler arguments using the COMPILE_OPTIONS parameter. (See PR #78)
  • Vulkan πŸŒ‹: If the DX12 backend is available, the Vulkan uses an interop swap chain to support flip-model swap effects for lower latencies. (See PR #66)

v0.2.2

28 Feb 16:30

Choose a tag to compare

LiteFX 0.2.2 - Alpha 02 Patch 1

  • Changes build process to use CMake presets. (See PR #64)
  • Enhances C++ standard compliance.
  • Fixes build errors with state-of-the-art compilers.

v0.2.1

01 Aug 11:52

Choose a tag to compare

LiteFX 0.2.1 - Alpha 02

  • Introduces rasterizer depth/stencil state. (See PR #36)
  • Adds support for multisampling. (See PR #36)
  • Introduces render target blend states (See PR #36).
  • Adds support for compute pipelines and shaders (See PR #48).
  • Adds possibility to declare texture and descriptor arrays (See PR #43).
  • Adds missing texture types to support 1D, 3D and cube map textures (See PR #44).
  • Introduces manual resource barriers (See PR #59).
  • Redesign command buffer interface (See PR #59).
  • Adds support for multi-threaded command recording in render-passes (See PR #59).
  • Introduces support for push/root constants (See PR #63).
  • Vulkan πŸŒ‹: line width is part of the dynamic rasterizer state (See PR #36).
  • Vulkan πŸŒ‹: Fixes validation errors about invalid attachment layout for depth/stencil only render targets.
  • Vulkan πŸŒ‹: Apply the -fvk-invert-y (DXC)/-finvert-y (GLSLC) switch to vertex, geometry and tessellation evaluation shaders. This removes the requirement to manually add a flip transform to projection matrices.
  • DirectX 12 ❎: Fixes issue that prevented samples from being run in release mode.
  • Build πŸ› : Fixes issue, that causes builds to fail when disabling BUILD_WITH_GLM or BUILD_WITH_DIRECTX_MATH (See PR #53).
  • Build πŸ› : Simplifies building for the vcpkg port in the vcpkg registry (See PR #53).

v0.1.1

23 Jun 10:55

Choose a tag to compare

LiteFX 0.1.1 - Alpha 01

The initial release of the engine.