Home » Blogs » The AMD FidelityFX™ Breadcrumbs Library 1.0 is now available on GPUOpen

Introducing the AMD FidelityFX™ Breadcrumbs library

Picture of Marek Machliński
Marek Machliński

Marek is part of AMD's European Game Engineering Team. He is focused on helping game developers get the most out of Radeon™ GPUs using Vulkan® and DirectX®12 technologies.

As part of FidelityFX SDK 1.1 release, the AMD FidelityFX Breadcrumbs library is now available!

Breadcrumbs logo invert

What is the AMD FidelityFX Breadcrumbs library?

With growing complexity of modern graphics cards and explicit nature of graphics APIs like Direct3D® 12 and Vulkan®, the responsibility of developers increased in terms of making sure that all work is correctly scheduled and synchronized on the GPU.

With such responsibility comes also great danger – dealing with and resolving various crashes that incorrectly scheduled work can cause.

With such new burden on developer’s shoulders, it has become clear that need for better tooling aiding in analysing GPU crashes has arisen.

So far we have released fully fledged tool that can help you greatly in post-mortem analysis of various crashes on AMD GPUs – Radeon GPU Detective, make sure to check it out!

The AMD FidelityFX Breadcrumbs library serves similar purpose, but as an cross platform library that you as a developer can add to your game.

The Breadcrumbs library will track your workload on the GPU, and in the presence of crash it will give you possiblity to create report on current state of GPU work execution.

Usage

Full integration of AMD FidelityFX Breadcrumbs library is described in its extensive documentation, but as a set of steps needed for Breadcrumbs to work, you just need to:

  • Create Breadcrumbs context.
  • Each frame:
    • Mark start of new rendering frame.
    • Register command lists used with Breadcrumbs methods.
    • Place begin-end markers around calls you are interested in tracking (other marker systems already in place are good fit for that).
    • Check whether GPU crash occured (usually at the end of the frame while presenting new frame with swapchain) and if so then you can gather text report from Breadcrumbs library to incorporate it in your own reporting system.
  • Destroy Breadcrumbs context.

With these steps, the Breadcrumbs library is fully operational and can be used as a lightweight means of gathering crash data and aiding you in development of your game.

You can customize the amount of information passed into the library with additional comments, registered pipeline states, and various markers types that will enhance Breadcrumbs output to better track down source of the malicious GPU crash.

Example output

Below you can find example output of the FidelityFX Breadcrumbs. It can be extended with additional device information specific to available data and metrics in currently used graphics API.

Copied!

[BREADCRUMBS]
<Frame 250>
 - [>] Queue type <0>, submission no. 0, command list 1: "VK test command list"
    ├─[X] RESOURCE_BARRIER: "Backbuffer barrier to RT"
    ├─[>] Main Rendering
    │  ├─[X] CLEAR_RENDER_TARGET: "Reset current backbuffer contents"
    │  └─[>] DRAW_INDEXED: "Draw simple triangle"
    └─[ ] RESOURCE_BARRIER: "Backbuffer barrier to PRESENT"
<Frame 251>
 - [ ] Queue type <0>, submission no. 0, command list 1: "VK test command list"
    ├─[ ] RESOURCE_BARRIER: "Backbuffer barrier to RT"
    ├─[ ] Main Rendering
    │  ├─[ ] CLEAR_RENDER_TARGET: "Reset current backbuffer contents"
    │  └─[ ] DRAW_INDEXED: "Draw simple triangle"
    └─[ ] RESOURCE_BARRIER: "Backbuffer barrier to PRESENT"
<Frame 252>
 - [ ] Queue type <0>, submission no. 0, command list 1: "VK test command list"
    ├─[ ] RESOURCE_BARRIER: "Backbuffer barrier to RT"
    ├─[ ] Main Rendering
    │  ├─[ ] CLEAR_RENDER_TARGET: "Reset current backbuffer contents"
    │  └─[ ] DRAW_INDEXED: "Draw simple triangle"
    └─[ ] RESOURCE_BARRIER: "Backbuffer barrier to PRESENT"

Introducing AMD FidelityFX™ Brixelizer

As of FidelityFX SDK version 1.1, Brixelizer and Brixelizer GI are now unleashed to world so in this article we aim to discuss a few practical use cases and provide you with some tips you can apply for getting the most performance out of Brixelizer in your application.

Picture of Marek Machliński
Marek Machliński

Marek is part of AMD's European Game Engineering Team. He is focused on helping game developers get the most out of Radeon™ GPUs using Vulkan® and DirectX®12 technologies.

Enjoy this blog post? If you found it useful, why not share it with other game developers?

You may also like...

Getting started: AMD GPUOpen software

New or fairly new to AMD’s tools, libraries, and effects? This is the best place to get started on GPUOpen!

AMD GPUOpen Getting Started Development and Performance

Looking for tips on getting started with developing and/or optimizing your game, whether on AMD hardware or generally? We’ve got you covered!

GPUOpen Manuals

Don’t miss our manual documentation! And if slide decks are what you’re after, you’ll find 100+ of our finest presentations here.

AMD GPUOpen Technical blogs

Browse our technical blogs, and find valuable advice on developing with AMD hardware, ray tracing, Vulkan®, DirectX®, Unreal Engine, and lots more.

AMD GPUOpen videos

Words not enough? How about pictures? How about moving pictures? We have some amazing videos to share with you!

AMD GPUOpen Performance Guides

The home of great performance and optimization advice for AMD RDNA™ 2 GPUs, AMD Ryzen™ CPUs, and so much more.

AMD GPUOpen software blogs

Our handy software release blogs will help you make good use of our tools, SDKs, and effects, as well as sharing the latest features with new releases.

AMD GPUOpen publications

Discover our published publications.