Das DirectX-Team von Microsoft hat am 27. Mai 2026 mit Partial Graphics Programs ein zweistufiges Verfahren zur Kompilierung von Pipeline State Objects (PSO) vorgestellt, das die Ladezeiten und das durch Shader-Kompilierung verursachte Stottern in Spielen mit sehr vielen PSO-Kombinationen reduzieren soll. Die Funktion steht zunächst als experimentelles Feature im Agility SDK 1.721-preview bereit und richtet sich an Engine- und Grafikentwickler, wie sie Xbox zuletzt auf der GDC 2026 unter dem Motto Build for What’s Next adressiert hat. Diese Entwickler übersetzen bislang große Mengen nahezu identischer Pipeline-Varianten vorab.
Hintergrund ist ein bekanntes Problem moderner Render-Pipelines: Titel mit einer hohen Zahl einzigartiger PSO-Kombinationen müssen diese Zustandsobjekte vorab und über mehrere Hardware-Ziele hinweg kompilieren. Dabei entsteht erhebliche Redundanz, da viele Varianten denselben Shader-Code teilen und sich nur in einzelnen Zuständen wie der Blend-Konfiguration unterscheiden. Wird die Kompilierung stattdessen zur Laufzeit nachgeholt, äußert sich das in sichtbarem Ruckeln.
Zweistufige Kompilierung statt redundanter Pipelines
Partial Graphics Programs zerlegen die Pipeline-Erstellung in zwei Schritte. Im ersten Schritt entstehen partielle Programme, die gemeinsam genutzte Zustände kapseln. Ein Prerasterization Shader Partial bündelt dabei Vertex-Shader, Primitiv-Topologie und Input-Layout, während ein Pixel Shader Partial den Pixel-Shader, die Render-Target-Formate sowie die Blend-Subobjekte enthält. Im zweiten Schritt werden diese Partials in einem generischen Programm zusammengeführt und um weitere, variierende Zustände wie unterschiedliche Blend-Konfigurationen ergänzt. Wie stark Vertex- und Pixel-Stufen in der Praxis voneinander abhängen, zeigt sich etwa an Techniken wie Vertex-Animation über den Shader in der Unreal Engine.
Laut Microsoft erfolgt die eigentliche Kompilierung der partiellen Programme bereits beim Anlegen einer Collection. Das ausführbare State Object, das die Collection referenziert, muss anschließend nur noch einen vergleichsweise günstigen Link-Schritt durchführen. Gemeinsam genutzter Zustand wird so nur einmal übersetzt. Das senkt die Gesamtkompilierzeit und vermeidet die Duplizierung identischer Übersetzungsvorgänge. Im Renderpfad wird ein generisches Programm über SetProgram mit einem D3D12_SET_PROGRAM_DESC und dem Typ D3D12_PROGRAM_TYPE_GENERIC_PIPELINE vor den Draw-Calls gesetzt.
Verfügbarkeit, Voraussetzungen und Hardware-Unterstützung
Die Funktion ist als experimentelles Feature umgesetzt und setzt voraus, dass vor der Geräteerstellung D3D12StateObjectsExperiment aktiviert wird. Die Unterstützung lässt sich über CheckFeatureSupport mit D3D12_FEATURE_DATA_PARTIAL_GRAPHICS_PROGRAMS abfragen. Mindestvoraussetzung ist Tier-1.0-Support sowie Shader Model 6.0 oder höher. Ein Codebeispiel namens HelloPartialGraphicsPrograms sowie die Spezifikation stehen in den DirectX-Repositories bereit.
Bei der Hardware-Unterstützung nennt Microsoft AMD mit den Radeon-RX-7000- und RX-9000-Serien als bereits unterstützt. Für Intel Xe2 und neuer sowie für NVIDIAs RTX-Hardware ist die Unterstützung über künftige Treiber vorgesehen. Der Software-Rasterizer WARP unterstützt das Feature ebenfalls und steht als NuGet-Paket bereit, sodass sich die Funktion auch ohne kompatible Hardware evaluieren lässt. Die Spezifikation ist im DirectX-Specs-Repository unter github.com/microsoft/DirectX-Specs zu finden.