Start Games HLSL Shader Model 6.6: Dynamic Resources, 64-Bit-Atomics und Wave-Size-Control

HLSL Shader Model 6.6: Dynamic Resources, 64-Bit-Atomics und Wave-Size-Control

0
HLSL Shader Model 6.6: Dynamic Resources, 64-Bit-Atomics und Wave-Size-Control
HLSL Shader Model 6.6: Dynamic Resources, 64-Bit-Atomics und Wave-Size-Control - Bild: DirectX Developer Blog

Microsofts DirectX-Team hat am 20. April 2021 das HLSL Shader Model 6.6 angekündigt und damit die High Level Shading Language um mehrere Funktionen für die Low-Level-Programmierung auf der GPU erweitert. Geschrieben hat den Beitrag Greg Roth, Dev Lead im DirectX-Team. Drei Punkte stechen heraus: der direkte Zugriff auf Descriptor Heaps, erweiterte atomare Operationen und die Steuerung der Wave-Größe in Compute-Shadern. Wer das Modell nutzen will, braucht den aktuellen DirectX Shader Compiler (DXC) und das Agility SDK mit passenden Grafiktreibern. Letzteres gehört zum Funktionsumfang von DirectX 12.

Dynamic Resources und neue atomare Operationen

Das wichtigste Feature sind die Dynamic Resources. Shader können Ressourcen direkt aus dem Descriptor Heap instanziieren, ohne den Umweg über die Root Signature. Der Zugriff läuft über die neuen Objekte ResourceDescriptorHeap und SamplerDescriptorHeap, etwa in der Form „Texture2D<float4> myTexture = ResourceDescriptorHeap[texIdx];“. Adressiert werden sowohl der CBV_SRV_UAV-Heap als auch der Sampler-Heap, freigeschaltet über neue globale Root-Signature-Flags. So lässt sich das Bindless-Modell direkt in der Shading-Sprache abbilden, ohne dass jemand noch Deskriptor-Tabellen von Hand pflegen muss.

Auch bei den atomaren Operationen hat sich etwas getan. Die Interlocked-Funktionen sind jetzt überladen und beherrschen 64-Bit-Integer-Operationen sowie eingeschränkte bitweise Gleitkomma-Atomics. Verfügbar sind sie auf Group Shared Memory, Raw Buffers und Typed Resources. Zähler und Akkumulationen mit größerem Wertebereich lassen sich damit direkt auf der GPU rechnen, was vorher entweder zusätzliche Umwege oder Genauigkeitsverluste kostete.

Wave-Size-Control, Compute-Derivatives und weitere Intrinsics

Über die Wave-Size-Spezifikation legen Shader-Autoren kompatible Wave-Größen für Compute-Shader fest und stimmen die Kompilierung auf bestimmte Hardware-Konfigurationen ab. Dazu kommen quadbasierte Ableitungsoperationen, die nun auch in Compute-, Mesh- und Amplification-Shadern erlaubt sind, mit definierter Zuordnung von Threads zu Quads. Bisher blieben solche Derivative-Operationen vor allem dem Pixel-Shader vorbehalten.

Neu ist außerdem das Intrinsic IsHelperLane. Im Pixel-Shader gibt es für nicht sichtbare Helper-Lanes true zurück, in allen anderen Shader-Stufen false. Damit lassen sich Wave-Intrinsics gegen undefiniertes Verhalten absichern. Die neuen Pack- und Unpack-Intrinsics verarbeiten gepackte 8-Bit-Daten wie Farbwerte und kommen zusammen mit passenden gepackten Datentypen. Fürs Raytracing führt das Modell die Payload Access Qualifiers ein, also Annotationen zu den Lese- und Schreibsemantiken einzelner Payload-Felder. Sie sollen den Registerdruck senken und weniger Daten in den Speicher auslagern.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein