Releases: crud89/LiteFX
Releases Β· crud89/LiteFX
v0.5.1
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
AllocationBehaviorflags, 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.
- 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_COMPILERorCMAKE_C_COMPILERcache 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
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_COMPILERorCMAKE_C_COMPILERcache variables are being reset. (see PR #157)
v0.4.1
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::tohas been replaced with the STL counterpart. - A novel
Enumerablecontainer was introduced, as a type-erased view over another range or view. - Some places that previously used
std::ranges::generateorstd::generatenow usestd::generator. - Builders are now
constexprwhere possible and are implemented usingdeducing thisin place of CRTP, which makes them more lightweight. - New exceptions with support for
stacktraceandsource_location. - Replace
fmtwithstd::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
rttihas 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
asSharedfunction 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
presentcalls 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::MeshShadersto turn it on). (See PR #116) - Add optional support for ray-tracing and ray queries (enable
GraphicsDeviceFeatures::RayTracingand/orGraphicsDeviceFeatures::RayQueriesto 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_utilsis 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
QueueTypeis 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:
v0.3.1
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
.goexplicitly. - 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
Bufferdescriptors 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_OPTIONSparameter. (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
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
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_GLMorBUILD_WITH_DIRECTX_MATH(See PR #53). - Build π : Simplifies building for the vcpkg port in the vcpkg registry (See PR #53).