Skip to content

Releases: Ipotrick/Daxa

3.4

04 Jan 21:53

Choose a tag to compare

[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

30 Nov 10:03

Choose a tag to compare

[Core]

  • Naming scheme update to new image barriers
  • Bugfix in swapchain for linux

3.3

27 Nov 17:22

Choose a tag to compare

3.3

General

[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!

  • new contributor @niooii made their first contribution in #116
  • VK_EXT_host_image_copy is now implicit, not required by @laurelkeys in #122
  • Fixed compilation error for clang-win64 by @Jaisiero in #115

3.2

16 Jul 21:15

Choose a tag to compare

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
  • 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

22 Jun 19:31

Choose a tag to compare

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_shader and cs
  • 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

24 Mar 23:14

Choose a tag to compare

  • 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

06 Jan 00:19

Choose a tag to compare

Fix compilation issue from ImGui breaking change

3.0.1

29 Sep 16:44
b6c43ef

Choose a tag to compare

minor release for vcpkg. No new additions, just bug fixes

3.0.0

15 Jul 20:41

Choose a tag to compare

  • 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

26 Aug 21:48

Choose a tag to compare

  • 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