Giter Club home page Giter Club logo

daxa's Introduction

Daxa logo

Daxa

Daxa is my opinionated GPU API abstraction over Vulkan.

Why would you want to use Daxa? These are some of the aspects of Daxa that set it apart from most other Vulkan abstractions:

  • Specifically designed for GPGPU programming and GPU-driven rendering. Daxa makes writing modern renderers simple and easy. It does not compromise for old hardware or old API concepts. Modern GPUs are the target (for Nvidia this is >=Turing, for AMD this is >= RDNA1).

  • Fully bindless. Buffers, images, samplers, and acceleration structures are all exclusively accessed via a bindless API. The bindless API abstracts descriptors completely. There are no bindings, no descriptor sets, no set layouts, no descriptor pools, and no binding or set indices within shaders.

  • Very high convenience with near zero boilerplate. Daxa makes the simple things as easy as possible. It abstracts over unnecessarily explicit parts of Vulkan. Tons of default values and common abstractions for renderers such as a render-graph and shader build system are provided by Daxa.

  • Shader utilities and shader feature integration. Daxa provides custom GLSL and HLSL headers, host/shader code sharing utilities, and even a shader build system featuring hot reloading and includes management. Especially the shader integration for many features is very convenient.

  • Efficient safety checks. An often neglected part of RHIs and rendering libraries is safety and debugging validation. Daxa performs many validation checks at very low overhead. Especially the render graph has very detailed error messages detailing misuse.

  • Effective abstractions with predictable performance. In contrast to many other abstractions, core Daxa never caches or lazily creates pipelines, layouts, or other objects. It should have performance as predictable as Vulkan. This makes profiling intuitive.

Getting started

If you want to get started with Daxa, check out learndaxa.com, a website hosting an up-to-date Daxa tutorial as well as a Wiki that provides more information on the Daxa API.

Additionally, the Daxa repository has a set of example projects in the tests folder.

If you prefer to interact in Discord over GitHub issues, Daxa has a Discord server.

List of biggest features

  • defaulted, named parameters for most functions via c++20 designated struct initialization
  • ergonomic, simplified object creation
  • easy device selection and properties query
  • integrated debug utilities such as debug names and range labels
  • feature-rich render-graph, handling automatic synchronization and more
  • shader integration for render-graph
  • shader/host code shading utilities
  • fully abstracted descriptor sets
  • automated, deeply integrated bindless system
  • shader bindless integration
  • a shader build system featuring hot reloading and #include handling
  • designed for threading, each object has its thread-safety described
  • no concept of render-pass or frame-buffer
  • typesafe simplified command recording and submission
  • automated memory allocation for buffers and images using VMA (manual allocation also possible)
  • swapchain that handles frames in flight pacing and WSI problems like resizing
  • always enabled dynamic state for any option that is cost-free on target hardware
  • simpler pipelines, no pipeline layout, and no descriptor set layouts
  • a full C API may be used to create API wrappers for other languages
  • extensive low-overhead validation checks
  • integrates most commonly used Vulkan extensions
  • integration of modern API features, such as BufferDeviceAddress, MeshShaders, RayTracing, DescriptorIndexing, DynamicRendering
  • ergonomic explicit synchronization (optional, you can also use the render-graph instead)
  • stores queriable metadata for all objects, similar to dx11
  • simplified, semi-managed resource lifetimes
  • resource destruction is deferred until all currently submitted commands finish execution
  • unified IDs in host and shader code for buffers, images, etc.
  • automatic default image view integrated into all images
  • controllable parent-child lifetime semantics
  • fully abstracts Vulkan, allows Daxa to have more control and be more convenient
  • dearImGui backend
  • transient memory pool utility object

daxa's People

Contributors

ipotrick avatar gaberundlett avatar matejsakmary avatar lukasino1214 avatar jaisiero avatar brynnbrancamp avatar fabulouscodingfox avatar down-s avatar trojanfoe avatar kidrigger avatar triedangle avatar nellfs avatar solmidnight avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.