Microsoft hat die DirectStorage-Runtime in der Version 1.2 am 18. April 2023 veröffentlicht und reicht damit zwei gezielte Ergänzungen zum vorausgegangenen 1.1-Release nach, das die GPU-Dekompression auf dem PC eingeführt hatte. Im Zentrum stehen eine neue Abfragemethode für den tatsächlich gewählten Dekompressionspfad sowie ein optionaler Buffered-IO-Modus, der das Laden auf älteren mechanischen Festplatten verbessert. Die Runtime wird weiterhin als NuGet-Paket unter Microsoft.Direct3D.DirectStorage ausgeliefert.
Die Methode IDStorageQueue2::GetCompressionSupport() erlaubt es Entwicklern, zur Laufzeit zu ermitteln, welchen Weg die Runtime für die Dekompression auf dem jeweiligen System eingeschlagen hat. Unterschieden werden drei Fälle: ein GPU-optimierter Pfad, ein GPU-Fallback ohne die volle Optimierung sowie ein CPU-Fallback. Damit erhält eine Engine eine belastbare Grundlage, um etwa Texturauflösungen oder Streaming-Budgets an die real verfügbare Dekompressionsleistung der Zielhardware anzupassen, statt pauschal von einem GPU-Pfad auszugehen. Wie viel ein sauber abgestimmtes Streaming-Budget ausmacht, zeigte sich schon früher in der Praxis, etwa beim effizienten Textur-Streaming in Titanfall 2.
Buffered IO als Brückenlösung für mechanische Datenträger
Die zweite Neuerung adressiert klassische Festplatten. Über das Flag ForceFileBuffering in der Struktur DSTORAGE_CONFIGURATION1 lässt sich gepuffertes Datei-IO erzwingen. In diesem Modus übernimmt die Dateipufferung des Betriebssystems das Lesen, wodurch sich die langen Suchzeiten mechanischer Datenträger teilweise verdecken lassen. Voraussetzung ist, dass zugleich DisableBypassIO auf TRUE gesetzt wird, da der gepufferte Pfad nicht mit dem BypassIO-Mechanismus kombinierbar ist. Auf SSDs und NVMe-Laufwerken bleibt der ungepufferte Direktzugriff die vorgesehene Betriebsart. Welche Reserven moderne Speicher dort freilegen, wurde unter anderem bei der WD_BLACK C50 2 TB Edition im Test deutlich.
Auf der Leistungsseite verschiebt die Runtime den Kopiervorgang, der nach der GPU-Dekompression anfällt, auf kompatiblen Grafikkarten auf die Compute-Queue. Dadurch läuft das Kopieren parallel zu anderer Arbeit auf der Grafikkarte und blockiert nicht die primäre Warteschlange. Hinzu kommen mehrere Korrekturen: ein neu eingeführtes Feld Reserved1 in DSTORAGE_REQUEST_OPTIONS zur expliziten Speicheranordnung, eine Korrektur an DSTORAGE_REQUEST_DESTINATION_TEXTURE_REGION für 3D-Texturen sowie eine Behebung von Scheduling-Problemen bei unkomprimierten Memory-to-Buffer-Transfers.
Bezug zur Xbox Velocity Architecture und Pfadwahl auf dem PC
Die DirectStorage-Initiative orientiert sich am Vorbild der Xbox Velocity Architecture, bei der dedizierte Hardware-Dekompression und ein direkter Pfad vom Speicher in den Grafikspeicher das Texture-Streaming tragen. Auf dem PC muss diese Funktionalität ohne feste Hardwarekonfiguration auskommen, weshalb die Runtime zwischen mehreren Pfaden wählt. Die GetCompressionSupport-Abfrage macht diese Wahl für die Anwendung sichtbar, während Buffered IO die Bandbreite an Zielsystemen nach unten hin um ältere Festplatten erweitert. Beide Ergänzungen zielen darauf, den mit 1.1 begonnenen GPU-Dekompressionspfad für ein breiteres Spektrum an PC-Konfigurationen nutzbar zu machen.
