Microsoft has released the latest version of its DirectStorage API. The new version, 1.2, brings some new features as well as bug fixes. There is also performance boost in store thanks to some changes made.
With DirectStorage 1.2, Microsoft is bringing buffered IO mode. The company says it is in response to developers wanting to use the same code path, both on solid-state drives (SSDs) as well as hard disk drives (HDDs). HDDs operate on buffered IO mode since they have much longer seek times. The company writes:
DirectStorage currently opens files in unbuffered mode. This allows us to avoid unnecessary copies, getting the data onto the GPU as quickly as possible. However, we heard from some developers that they’d like to be able to use the same code both on high-speed SSDs as well as legacy hard drives. The legacy hard drives require buffered IO in order to mask the long seek times. For this reason, we added the ability to configure DirectStorage to open files in buffered mode.
Aside from buffered IO, a new GetCompressionSupport API has been introduced which adds the ability to query the decompression path used, whether it is the GPU or the fallback CPU path. The full changelog for DirectStorage 1.2 is given below:
- Add support for enabling buffered file IO for use on HDDs that may benefit from OS file caching behaviors.
- Add IDStorageQueue2::GetCompressionSupport API to indicate what path the DirectStorage runtime will take when decompressing a supported GPU decompression format.
- Update dstorage.h and dstorageerr.h to be covered by the MIT License.
- Add Microsoft.Direct3D.DirectStorage.winmd, to ease generation of non-C++ bindings to the API.
- Add "Reserved1" field to DSTORAGE_REQUEST_OPTIONS. This makes the in-memory layout of the structure more explicit, but doesn't actually change the layout from previous versions.
- Fix DSTORAGE_REQUEST_DESTINATION_TEXTURE_REGION for 3D textures.
- Fix scheduling issue that manifested when transferring uncompressed data from memory to buffers
- Move the copy after GPU decompression onto the compute queue for GPUs where this is faster.
You can find more details on the official blog post here.