Releases: Ipotrick/Daxa
Releases · Ipotrick/Daxa
3.4
[General]
- removed vcpkg, switched to fetch content for dependencies
[Core]
- renamed some error codes for consistency
- deprecated now irrelevant memory flags
- RingBuffer
- fixed missing symbol export for function by @Jaisiero
- Optional
- added missing asserts on access
- SmallString
- now always null terminated
- TimelineSemaphore
- added host timeline signalling
- Swapchain
- fixed bug in acquire causing increased frame in flight delay
- rewrote internal error mangement
- added amd driver workaround fixing extreme stutter when resizing
- added color space to default format score function
- Device
- fix bugs in device initialization
- added function to return VkQueue from device
- fixed bugs around buffer host address creation
- fixed bugs around error recovery in resource creation
- fixed bugs within memory block construction causing vma to panic
- added HostImageCopyProperties
- added amd driver workaround for proper error reporting
- added submit index queue sync
- queue submit now returns a submit index
- added function to query latest submit index of queue
- added host submit index wait function
- added submit parameter: list of submit indices to wait on
- fixed abi incompatibility between c++ and c api by @GodOfMemes
- added support for creating tlas from memory blocks
- updated host image copy api to reflect latest image layout handling changes
- fixed bug in tlas destruction causing invalid buffer reuse
- fixed internal synchronization around queues
- CommandRecorder
- fixed synchronization bug causing deadlocks when submitting while recording commands on the same thread
- removed functionality to keep recording after completing current commands
- fixed bug in command pool management
- removed live time locks in cmd recording. Cmd recorders can now record while submitting commands on another thread.
- added error reporting for multiple command recorder functions
- added new validation to multiple command recorder functions
- added a function to reset assumed state of the cmd recorder (currently bound pipelines etc)
- useful for tool integration such as DLSS/FSR
- Pipelines
- added support for line rasterization settings to raster pipelines
- added raytracing pipeline library support
- Slang
- added spirv post processing to fix invalid slang output for per primitive output
- added support to get acceleration structures from address
- added nonunfirom ext around all image access to support amd
- Cleaned up internal validation macro by @laurelkeys
[TaskGraph]
- fully rewritten task graph internals (disabled for now)
Thanks to the external Contributors!
3.3.1
3.3
General
- fixed links in readme by @FabulousCodingFox
[Core]
- Deprecated image layouts! Only remaining layouts are undefined, general and present_src
- Deprecated image pipeline barrier api
- Added new simpler pipeline image barrier api
- As read only layouts are now deprecated, shader sampled and shader storage access is now allowed simultaneously. This is possible now, as both descriptor arrays now use general layout!
- Fixed incorret host image copy validation
- Moved host image copy from required to implicit feature by @laurelkeys
- Fixed swapchain frame in flight handling. Previously the swapchain always allowed one too many frames in flight, potentially causing invalid semaphore reuse
- Optimized internal handling of hot buffer/blas/tlas data. Hot data is now on a separate array, also optimized accessor functions for hot buffer/blas/tlas data. Results in around perf 40% improvement when accessing hot data.
- Fixed compile errors on latest clang by @Jaisiero
- [BREAKING CHANGE] updated event api to use new image barrier functions. I expect these functions are very uncommonly used so i choose not to keep a deprecated old version of this part of the api.
[TaskGraph]
- Now uses general layout for all operations aside from present
- Sheduling improvements for read -> read access
- Fixed taskgraph callback data passing bugs
- Improved task callbacks to be stack allocatable
- Tasks and task builders are now fully stack allocatable, task building no longer does any hidden heap allocations!
- Added new static validation for tasks
- Moved all internal task data allocations to use flat arena memory allocations
- Added fixed size task graph cpu memory pool size
- Fixed compile errors in taskgraph on linux by@niooii
Thank you to all external Contributors!
3.2
General
- Streamlined README
- updated a few samples and tutorial code to match new api/ removed use of deprecated api features in some samples and tutorials
- fixed the version of some deprecations
[Core]
- added new mandatory extension: HOST_IMAGE_COPY:
- added host to image device copy function
- added image to host device copy function
- added host image layout transition function
- fixed queue count constant in c++ api
- exposed lifetime tracking via submit index
- added daxa_dvc_latest_submit_index / Device::daxa_dvc_latest_submit_index function
- added daxa_dvc_oldest_pending_submit_index / Device::oldest_pending_submit_index function
- both together can be used to track and defer resource destruction based on daxas gpu submit progress tracking
[MemUtil]
- remaned to RingBuffer
- [BREAKING CHANGE] uses new core api submit index tracking to defer deallocations instead of requireing the signaling of a timeline semaphore
- [BREAKING CHANGE] removed timeline semaphore
- [BREAKING CHANGE] simplified api
[TaskGraph]
- deprecated and removed old TG syntax
- [BREAKING CHANGE] removed short hand versions of stage accessors
- [BREAKING CHANGE] removed view overrides
- [BREAKING CHANGE] removed implicit TaskResource -> TaskResourceView conversions in view assignment
- deprecated .view() function of task resource views
- deprecated free attachment_view function
- deprecated old style inline tasks and InlineTaskInfo
- deprecated old style task access consts
- [BREAKING CHANGE] removed runtime image index for layout (layout is the same for all runtime images of an attachment)
- [CAUTION] changed inline task builder to return references instead of values
- [BREAKING CHANGE] renamed readwrites_concurrent -> reads_writes_concurrent
- added support for task heads in inline tasks
- added new Info struct containing all info about a given task head
- Info field is very convenient as its possible to pass it as template parameters
- deprecated old head constants and usings in favor of new Info type within the task head namespace
- added span and at accessors to ATTACHMENTS constant in task head info
- this might lead to the deprecation of static tasks
- added new name overload for inline tasks "Task"
- added new function to add a head to a inline task
- added new head_uses function to inline tasks to allow assignment to attachment views of head attachments
- added overloads for all accessors, overriding head attachment accessors
- added new debug checks in new head attachment inline functions
- added new overload for executes builder call taking function ptr and parameters instead of lambda only
- [BREAKING CHANGE] removed experimental HeadTask class
- [BREAKING CHANGE] removed experimental InlineTaskWithHead class
- refactored assignment and internal template logic in multiple places
- added new Info struct containing all info about a given task head
- changed multi queue api (the multi queue api unlikely to change much from the new syntax)
- [BREAKING CHANGE] removed old secondary parameter in add task
- added new Task::queue() function allowing tasks to specify what queue they want to run on
- fixed inconsistent stage overrides within taskgraph backend
- refactored multiple sections within the taskgraph headers to ensure some complex parts of the code are c++ spec compliant
- bumped attachment maximum to 48
3.1
Versioning has changed. From now on releases will be more regular and purely time based. A version will be released every few weeks no matter how much changes are made in that time. This will make deprecations and package manager updates easier over time.
Changelog:
[TaskGraph]
General
- fixed warnings building cl-x86_64-windows-msvc-debug by @laurelkeys
- removed pessimizing moves by @laurelkeys
- fixed bugs in resource attachment overlap validation
- added new mips and layers functions to create slices of image views
- added new id and view quick access functions to TaskInterface
- added new Views initializer type to task head made tasks
- added new shortened versions of task access names
- syntax changes to allow for intellisense to properly parse task heads
- added better syntax to initialize attachment views (
Task::Views{.attachment_name=...})
Refactoring of TaskAccess
- added struct type TaskAccess
- contains stage, access type and type restriction
- converted TaskBufferAccess and TaskImageAccess into struct containing consants of type TaskAccess
- converted all TaskBufferAccess and TaskImageAccess to TaskAccess
- added new validation for attachments based on the type restriction field in TaskAccess
- change allows us to programmatically create accesses, this is required for sane code in builder pattern
- change allowed us to remove some old clutter switch tables with more procedural code internally
- Added new shorthand initializer constants in TaskAccessConsts, that first take stage and then take access.
Added builder pattern InlineTasks V1
- InlineTask now has builter pattern functions to construct a task
- uinion containing typed accessors over internal storage make construction syntax very nice and consice:
task.stage.access(resource), example:task.compute_shader.writes(hdr_image) - all stages have shorthand and long names. Example:
compute_shaderandcs - stages are typed, each stage only allows proper access. For example the stage index_input and present only allow for read
Task Types
- added concept of a task type
- types are Raster,Compute,Raytracing,Transfer and General
- per default a task is General
- typed tasks have a few benefits:
- allows to omit the stage of the access. More concise syntax
- CHANGED MEANING OF ACCESS WITHOUT STAGE! TYPED TASKS NOW OVERWRITE THE ANY STAGE WITH THE TASKS STAGE!
- TO GET OLD GENERIC BEHAVIOR USE THE STAGE ANY NOW!
- compute tasks for example usually all have the stage compute_shader for all attachments
- they allow for type checking in async compute.
- added stage typed inline task constructor parameter
- added new stage less access functions (reads, writes...)
- added new generic attachment function (uses) rename?
Added BETA Multi-Queue support
- add_task takes queue
- dead simple to use, simply send tasks to other queues
- currently a submit flushes recorded tasks in all queues and all queues wait on every other queue every submit for now
- validation has patches
- generates slightly illegal sync at times
Internals Refactor
- added a mk2 file containing all new taskgraph code
- current taskgraph used as testbed for new code in mk2
- moved all string inputs to be string_views
- allocated and copy all input strings within each call
- added linear allocator for task and string data
- move task, name, view cache memory into linear allocator
- saves around a thousand allocations in timberdoodle for tg construction
- converted many std::vectors to be linearly allocated DynamicVectors
- removed virtual calls, tasks no longer need virtual tables
- reduced nr of transient allocations by over 60% (measured in timberdoodle) in taskgraph construction
[Core]
- removed transfer and compute command recorder
- was mostly useless over typing
- more consistent with c api
- makes async compute api easier
- added queue family to command recorder constructor
- added formatted bindless textures for uint images in daxa.slang
- improved view assignment validation
- added implicit feature for shader clock
- added implicit feature for shaderImageGatherExtended
- updated mesh shader sample
- added manual swapchain cpu frames in flight sync function
- added memory report device feature
- fixed illegal const casts within internals
- fixed handling of SUBOPTIMAL_KHR on resize event by @Derpius
3.0.4 Fixes and Cleanup
- added initial new flat types for pipeline manager
- renamed language define
- [TaskGraph] Fix access api in task interface
- [Shader] added .get() function to sampler ids in slang
- fix mandelbrot
- fix typed index handle name in slang header
- Fix some warnings
- [General] fix linking issues for types.hpp to_string functions
- added graph global additional transient image usage flags
- {TaskGraph] added task name to task interface
- [TaskGraph] added pre and post task callbacks for debugging
- fix various to_string functions
- removed assert, they return UNKNOWN CASE on default now
- added cases to some to_string enums
- [TaskGraph] Redo api for copy and clear on buffer and image. Add check in core api for buffer fill.
- [TaskGraph] Added InlineTaskWithHead
- fix image id array typed handles
- [CommandRecorder] refactor all error returns to use new return if error macro
- fix for inline names
- [MemUtil] Improve default alignment to be alignof(T) for allocations
- [TaskGraph] added task index to task interface for reflection purposes
- [TaskGraph] fixed sheduling behavior for concurrent access. Concurrent accesses are now allowed to be reordered completely freely across the whole range of batches where the concurrent access is used.
- Added new more generic access types for images in taskgraph
- enable debug info in slang
- added tlas .get() function in slang hlsl
- fix internal syntax for slang AS.get()
*[TaskGraph] fiximage view cache- previously generated views for attachments with unspecified view type
- lead to invalid views beeing created
- disabled view creation for attachments with no view type specified
- Add missing include
- Fix missing header for std::sort (#96)
- Add missing include to fix Linux build (#97)
- fixed invalid enable of explicit feature
- Fix bug in device creation validation
- Fix minor bug in default SBT
- Added new raytracing pipeline manager functions
- added two missing nodiscards
- added new pipeline manager raster api, cleaned deprecation
- fix index type in slang
- cleaned deprecations
- fix bug in default image view creation
- [TaskGraph] optimize task graph backend ~20% saving in execute for tido
- Added push constant size default value for pipeline creation
- Added debug check for image view creation
3.0.3
Fix compilation issue from ImGui breaking change
3.0.1
minor release for vcpkg. No new additions, just bug fixes
3.0.0
- added raytracing api
- c api
- improved task head interface
- reworked task graph interface code
- reworked command recording
- performance improvements of device code
- added a lot of debug asserts and safety checks
- replaced hlsl with Slang in pipeline manager as a code compiler
- lots of bug fixes
2.0.0
- improved TaskGraph (formerly called TaskList):
- completely replaced front end api
- greatly simplified
- replaced resource model (now there are transient and persistent resources)
- optimized synchronization and ordering of tasks
- added new runtime sync engine that can seemlessly jit sync task graphs connecting at runtime
- added many convenience declarations and makros
- added new statically declared tasks for better syntax and abstraction
- added new functionalities to TaskInterface
- added shader integration to task uses list via shader shared files
- made transient images and buffers alias memory within task graphs
- gave persistent images and buffers better interfaces for resource backing
- added lots of validation and error detailed messages for errornous use
- redid TaskUse syntax and semantics.
- added TaskResourceViews to control subregion access in a more consistent and intuitive way.
- lots of bugfixes
- improved core api:
- removed dependency on vkBootstrap
- rewrote bindless resource management code for better efficiency
- renamings for consistency with vulkan
- added mesh shader support
- added optional manual memory management
- replaced image shader integration completely (now consistent between hlsl and glsl)
- renamed shader integration makros for consistency
- completely abstracted image aspect from all operations
- added new flag parameters to some api objects for more control in edge cases
- added "bindy" uniform buffers
- lots of bugfixes