Das DirectX-Team von Microsoft hat die Agility SDK 1.716.0-Preview am 23. Januar 2025 vorgestellt und damit die neue Direct3D-12-Funktion Recreate At GPUVA eingeführt. Sie erlaubt es, vor dem Anlegen von Buffer- und Heap-Ressourcen eine konkrete GPU-Virtual-Address (GPUVA) vorzugeben. Adressiert wird damit ein Problem, das bislang vor allem Capture-und-Replay-Werkzeuge wie PIX betraf.
Klassische Ressourcenallokation unter Direct3D 12 gibt keine Garantie auf eine bestimmte virtuelle Adresse. Schreiben Anwendungen GPU-Virtual-Addresses in Buffer, etwa für den Einsatz mit ExecuteIndirect, sind diese Adressen an die Speicherlage zum Aufnahmezeitpunkt gebunden. Beim späteren Wiedergeben werden sie ungültig, weil die Allokation an anderer Stelle erfolgt. Werkzeuge mussten Argument-Buffer bisher abfangen und die zur Aufnahme erfassten Adressen manuell durch die Adressen des Replays ersetzen. Dieses Vorgehen gilt als aufwendig und fehleranfällig.
Funktionsweise von Recreate At GPUVA
Statt Adressen nachträglich zu übersetzen, können Tools mit Recreate At GPUVA die gewünschte GPUVA bereits beim Anlegen der Ressource vorgeben. Damit entfällt die manuelle Ersetzung der Adressen im Argument-Buffer, und der Mehraufwand für die Adressübersetzung wird reduziert. Microsoft nennt als zusätzlichen Effekt eine geringere Nichtdeterminismus-Rate in wiedergegebenen Workloads, da die Speicherlagen zwischen Aufnahme und Replay übereinstimmen.
Die Funktion ist in dieser Preview auf Buffer und Heaps beschränkt. Das DirectX-Team verweist darauf, dass geprüft werde, was eine Wiederherstellung von Shader-Identifiern und Shader-Tables erfordern würde. Die Verfügbarkeit ist auf den Developer Mode begrenzt. Zur Umsetzung im Code dient unter anderem die Schnittstelle ID3D12PageableTools mit der Methode GetAllocation, die GPUVAs ausliest, sowie die Ressourcenerzeugung über CreateCommittedResource2.
Feature-Erkennung und Treiberunterstützung
Die Unterstützung lässt sich über CheckFeatureSupport mit dem Feature D3D12_FEATURE_D3D12_OPTIONS20 ermitteln. Meldet das Feld RecreateAtTier den Wert D3D12_RECREATE_AT_TIER_1, steht die Funktion bereit. Zum Start der Preview meldete Microsoft Treiberunterstützung bei Intel ab Version 32.0.101.6557, bestätigte Unterstützung bei NVIDIA sowie eine Developer-Preview-Verfügbarkeit bei AMD. Bei Qualcomm war die Umsetzung für einen späteren Zeitpunkt vorgesehen.
Parallel zur SDK-Preview stellte Microsoft einen PIX-Preview-Build bereit, der die neue Funktion ab dem Ankündigungstag unterstützt. Damit richtet sich Recreate At GPUVA primär an Entwickler von Tooling und Capture-Replay-Systemen, die deterministische Wiedergaben benötigen. Wer den Weg von Direct3D 12 als Low-Level-API von Anfang an verfolgt hat, kennt diese Detailarbeit am Speichermodell schon aus früheren Etappen wie der DirectX-12-Integration in Fortnite. Die vollständigen API-Spezifikationen liefert das Team im zugehörigen GitHub-Repository.
