• This repository has been archived on 21/Apr/2022
  • Stars
    star
    403
  • Rank 107,140 (Top 3 %)
  • Language
    C++
  • License
    BSD 2-Clause "Sim...
  • Created about 6 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

vulkan abstraction layer that represent frame as a task graph

Build Status Build Status Build Status Discord Chat

FrameGraph

FrameGraph simplifies prototyping on Vulkan and can be used as a base layer for the graphics engine. FrameGraph designed for maximum performance but not at the expense of usability. API developed as simple as possible, it hides all synchronizations, memory allocations and all this boilerplate code that is needed to get Vulkan work. Builtin validations together with Vulkan validation layers allow you to quickly find and fix errors.

Features

  • multithreaded command buffer building and submission.
  • simple API, hides memory allocation, host<->device transfers, synchronizations.
  • shader debugging and profiling.
  • supports RTX extensions.
  • supports async compute and async transfer queues.
  • all render tasks are stateless.

Used vulkan features and extensions:

  • push constants
  • dynamic buffer offset
  • specialization constants
  • VK_EXT_debug_utils
  • VK_KHR_dedicated_allocation
  • VK_KHR_sampler_mirror_clamp_to_edge
  • VK_EXT_descriptor_indexing
  • VK_NV_mesh_shader
  • VK_NV_shading_rate_image
  • VK_NV_ray_tracing
  • VK_KHR_shader_clock

Samples

FrameGraph-Samples

Documentation

Suported Platforms

  • Windows (with MSVC 2017, 2019)
  • Linux (with GCC 8.2, Clang 9)
  • Android (Clang)

Building

Generate project with CMake and build.
Required C++17 standard support and CMake 3.10.
Reequired internet connection to download external dependencies.

Dependencies:
Vulkan-headers or Vulkan SDK - required.
VulkanMemoryAllocator - required.
glfw or SDL2 - required for framework and some tests.
glslang - required for glsl compiler.
SPIRV-Tools, SPIRV-Headers and Python 3.7 - (optional) for spirv optimization.
GLSL-Trace - (optional) for shader debugging.
lodepng - (optional) for screenshots.
graphviz - (optional) for graph visualization.
Assimp - (optional) for Scene extension.
DevIL - (optional) for Scene extension.
imgui - (optional) for UI extension.
OpenVR - (optional) for VR support.
GLM - (optional) for Scene extension.
ffmpeg - (optional) for video recording.

References

  1. FrameGraph in Frostbite.
  2. Handles vs pointers
  3. Porting engine to vulkan.
  4. FrameGraph from Ubisoft
  5. RenderGraph from EA