AMD is proud to announce our support of Microsoft® and its release of DirectStorage. The Microsoft DirectStorage SDK is now available for download. We encourage developers to download our latest drivers to ensure optimal support.
Luminous Productions® is collaborating with AMD and Microsoft® to integrate DirectStorage into their forthcoming title Forspoken™. Check out the GDC talk, “Breaking Down the World of Athia: The Technologies of Forspoken”, for a discussion of the experience integrating DirectStorage and AMD FidelityFX™.
DirectStorage API promises to help developers improve the gaming experience by providing an optimized file I/O and GPU resource loading API designed for modern hardware. Due to our unique position of providing CPU, GPU, and chipsets, AMD is collaborating closely with Microsoft, storage hardware vendors such as Phison, and game studios to ensure that DirectStorage is optimized for our entire hardware and software stack.
"AMD has a long history of bridging technology disciplines and Phison is thrilled to be able to help improve gaming by sharing our knowledge of SSD’s. Here at Phison we are aggressively pursuing the best possible technology to increase the storage bandwidth with first-to-market Gen4 in 2019 and now pushing productization of Gen5 in 2022.”
The DirectStorage API encourages developers to write more optimal code for both Windows 11 and Windows 10. It simplifies the process of batching file read requests, asynchronous transfer of resources to the GPU or CPU, and prioritization of that I/O on its way to its destination.
We believe that DirectStorage has the potential to change PC gaming. With it, developers have the capability to significantly reduce load times on PC.
DirectStorage offers the following features to improve I/O performance in games:
Modern storage devices, such as NVMe® are optimized for multiple simultaneous workloads to maintain peak throughput. Traditional serialized file I/O is no longer aligned with modern gaming and just-in-time rendering. DirectStorage encourages batching multiple requests simultaneously with a simplified API to maximize throughput.
Asynchronous I/O can be difficult to implement correctly with traditional storage APIs, and most software relies on serialized I/O. DirectStorage simplifies the task of asynchronous queuing, dispatch, and notification of I/O requests and transfer. It should now be much easier for titles to use an optimal path to loading data. While DirectStorage handles the loading of resources, programs can perform other tasks and make additional I/O requests.
Providing developers with the ability to prioritize requests ensures that players have the smoothest experience while loading and streaming in assets to create a more seamless user experience.
Call to Action for developers
While DirectStorage helps developers utilize the hardware, developers are responsible for ensuring their data can be loaded with minimal CPU intervention to minimize load time and maximize streaming performance. When storage performance was the bottleneck to loading performance, CPU utilization time from asset loading was considered less important because it was much smaller than the storage transfer time. Today, we find ourselves in the opposite situation. Code which processes assets at load time is now the most common bottleneck.
Developers should organize their data to minimize the CPU workload required to load data. Furthermore, developers should reduce the amount of data they load at game startup and rely on the performance of fast storage devices to stream in the minimal set of assets required. Fewer assets loaded means less data transferred, lower memory consumption, and lower chances of over-subscribing memory.
How can developers improve their engines and games?
- Reduce read->read dependencies of data. Ensure the title knows exactly what assets are required for loading a level and its assets ahead of time. For example, instead of loading each asset to find its dependencies, store the asset dependency data separately so that the asset does not require additional parsing to discover what it needs to be loaded.
- Save graphics assets to disk in the layout returned by
ID3D12Device::GetCopyableFootprints to prevent additional copies of data. This is device invariant and is designed to work across vendors.
- Use multiple threads for loading assets and interacting with the DirectStorage API. Processing loading on a single thread will create a performance bottleneck.
Stay tuned for a forthcoming AMD demo and a follow-up blog post with an example of how to achieve these goals and integrate DirectStorage.
- Breaking Down the World of Athia: The Technologies of Forspoken (GDC 2022 session)
GDC 2022 is just around the corner, so why not take some time to get ahead of the game and check out all of our upcoming GDC talks?
Looking for only DirectX®12 Tutorials and Samples? Start here.
Microsoft® DirectX®12 Ultimate provides APIs for creating games and other graphics applications.