
AMD FidelityFX™ Cauldron Framework
AMD FidelityFX Cauldron Framework is our open-source experimentation framework for DirectX®12 and Vulkan®, provided in the AMD FidelityFX SDK.
Today, we are excited to announce that we are releasing Cauldron 1.0.
Cauldron is a framework for rapid prototyping that will be used in AMD SDK samples and effects. It supports Direct3D 12 and Vulkan®. If you want to go straight to the features and screenshots page go to Cauldron’s project page, then come back here to get a few more details!
Cauldron takes care of the typical operations required to render something on the screen, such as creating and opening a window, loading and displaying a glTF 2.0 model, and applying some post-processing. It is like having a simplified game engine that you can learn and modify in little time.
Cauldron has been designed to be both accessible for those who are still learning, and flexible for those who want to extend it with new features. In fact Cauldron was first written for Direct3D 12 and ported later on to Vulkan without much effort. Given that Cauldron supports two API implementations, an interesting exercise is to diff between them to see how API calls translate to each other. Cauldron is an excellent resource for those who already know one of those two APIs and want to learn the other.
After its initial internal release Cauldron quickly went viral inside AMD and ended up being adopted by other teams, such as tools, drivers and demo teams. We hope that it will find similar adoption from the programming community!
Cauldron uses vanilla C++ and aims to follow a ‘one feature, one class, one file’ philosophy; that way you don’t need to jump around many files in order to understand how something works. Whenever possible most of the classes will implement the following methods:
<code><br>class MyTechnique<br>{<br>bool OnCreate(…); //creates the pipelines, static geometry, and other one-time initializations<br>void OnDestroy(…);<br>void OnDraw(…) // use the created resources to draw the technique<br>}<br></code>
Two techniques are needed to render glTF 2.0 models, one technique for the PBR pass and another for the Depth-Only pass. Hence we will find two classes called GltfPbrPass and GltfDepthPass. The data of a glTF model is split in three files:
Since Cauldron includes both graphics-agnostic and graphics-dependent code we can split the framework in three Visual Studio projects:
The post-processing techniques supported (bloom, blur, downsampling and tonemapping) introduce two new members that help create temporary render targets.
<code><br>bool OnCreateWindowSizeDependentResources(…) // creates temporary render targets needed for the effect<br>void OnDestroyWindowSizeDependentResources(…)<br></code>
If you want to implement things at a lower level you can still do it and even use some of the following memory managers to help you:
Note that those implementations are optimized for ease of use and readability so that all users feel comfortable understanding the code and extending it.
Cauldron is provided on GPUOpen under the MIT open source license. We are looking forward to your feedback!