Übersicht über Compute-Shader

Ein Compute-Shader ist eine programmierbare Shaderstufe, die Microsoft Direct3D 11 über die Grafikprogrammierung hinaus erweitert. Die Compute-Shadertechnologie wird auch als DirectCompute-Technologie bezeichnet.

Wie bei anderen programmierbaren Shadern (z. B. Vertex- und Geometrie-Shader) wird ein Compute-Shader mit HLSL entworfen und implementiert, aber genau an diesem Ort endet die Ähnlichkeit. Ein Compute-Shader bietet high-speed General Purpose Computing und nutzt die große Anzahl paralleler Prozessoren auf der Grafikprozessor (GRAPHICS Processing Unit, GPU). Der Compute-Shader bietet Funktionen zur Speicherfreigabe und Threadsynchronisierung, um effektivere parallele Programmiermethoden zu ermöglichen. Sie rufen die ID3D11DeviceContext::D ispatch- oder ID3D11DeviceContext::D ispatchIndirect-Methode auf, um Befehle in einem Compute-Shader auszuführen. Ein Compute-Shader kann auf vielen Threads parallel ausgeführt werden.

Verwenden von Compute-Shader auf Direct3D 10.x-Hardware

Ein Compute-Shader auf Microsoft Direct3D 10 wird auch als DirectCompute 4.x bezeichnet.

Wenn Sie die Direct3D 11-API und aktualisierte Treiber verwenden, kann direct3D-Hardware auf Featureebene 10 und 10.1 optional eine eingeschränkte Form von DirectCompute unterstützen, die die Profile cs _ 4 0 und cs _ _ 4 _ 1 verwendet. Wenn Sie DirectCompute auf dieser Hardware verwenden, beachten Sie die folgenden Einschränkungen:

  • Die maximale Anzahl von Threads ist auf D3D11 _ CS _ 4 _ X THREAD GROUP MAX THREADS PER _ GROUP _ _ _ _ _ (768) pro Gruppe beschränkt.
  • Die X- und Y-Dimension von numthreads ist auf D3D11 _ CS _ 4 _ X THREAD GROUP MAX X _ _ _ _ (768) und D3D11 _ CS _ 4 X THREAD GROUP _ MAX _ _ _ _ Y (768) beschränkt.
  • Die Z-Dimension von numthreads ist auf 1 beschränkt.
  • Die Z-Dimension von dispatch ist auf D3D11 _ CS _ 4 _ X DISPATCH MAX THREAD GROUPS IN Z _ DIMENSION _ _ _ _ _ _ (1) beschränkt.
  • Nur eine Ansicht mit ungeordneten Zugriffen kann an den Shader gebunden werden (D3D11 _ CS _ 4 _ X _ UAV REGISTER COUNT ist _ _ 1).
  • Nur RWStructuredBuffers und RWByteAddressBuffers sind als Unordered Access-Ansichten verfügbar.
  • Ein Thread kann zum Schreiben nur auf seine eigene Region im gruppenfreigaben Speicher zugreifen, obwohl er von einem beliebigen Speicherort aus lesen kann.
  • SV _ GroupIndex oder SV _ GroupThreadID muss beim Zugriff auf den gruppenfreigaben Speicher zum Schreiben verwendet werden.
  • Der gruppenfreigaben Speicher ist auf 16 KB pro Gruppe beschränkt.
  • Ein einzelner Thread ist auf einen 256-Byte-Bereich von gruppenfreigabem Speicher zum Schreiben beschränkt.
  • Es sind keine atomaren Anweisungen verfügbar.
  • Es sind keine Werte mit doppelter Genauigkeit verfügbar.

Verwenden von Compute-Shader auf Direct3D 11.x-Hardware

Ein Compute-Shader auf Direct3D 11 wird auch als DirectCompute 5.0 bezeichnet.

Wenn Sie DirectCompute mit cs _ 5 _ 0-Profilen verwenden,beachten Sie Folgendes:

  • Die maximale Anzahl von Threads ist auf D3D11 _ CS THREAD GROUP MAX THREADS PER GROUP _ _ _ _ _ _ (1024) pro Gruppe beschränkt.
  • Die X- und Y-Dimension von numthreads ist auf D3D11 _ CS THREAD GROUP MAX X _ _ _ _ (1024) und D3D11 _ CS THREAD GROUP MAX _ _ _ _ Y (1024) beschränkt.
  • Die Z-Dimension von numthreads ist auf D3D11 _ CS THREAD GROUP MAX Z _ _ _ _ (64) beschränkt.
  • Die maximale Dimension des Dispatchs ist auf D3D11 _ CS DISPATCH MAX THREAD GROUPS PER DIMENSION _ _ _ _ _ _ (65535) beschränkt.
  • Die maximale Anzahl von Ansichten mit ungeordneten Zugriffen, die an einen Shader gebunden werden können, ist D3D11 _ PS _ CS _ UAV REGISTER COUNT _ _ (8).
  • Unterstützt RWStructuredBuffers, RWByteAddressBuffers und typierte Unordered Access-Ansichten(RWTexture1D, RWTexture2D, RWTexture3Dund so weiter).
  • Atomar-Anweisungen sind verfügbar.
  • Unterstützung mit doppelter Genauigkeit ist möglicherweise verfügbar. Informationen zum Bestimmen, ob doppelte Genauigkeit verfügbar ist, finden Sie unter D3D11 _ FEATURE _ DOUBLES.

In diesem Abschnitt

Thema Beschreibung
Neue Ressourcentypen
In Direct3D 11 wurden mehrere neue Ressourcentypen hinzugefügt.
Zugreifen auf Ressourcen
Es gibt mehrere Möglichkeiten, auf Ressourcen zu zugreifen.
Atomic-Funktionen
Verwenden Sie eine interlocked intrinsic-Funktion, um auf einen neuen Ressourcentyp oder freigegebenen Arbeitsspeicher zu zugreifen. Interlocked-Funktionen funktionieren garantiert atomar. Das heißt, dass sie garantiert in der programmierten Reihenfolge auftreten. In diesem Abschnitt werden die atomic-Funktionen aufgeführt.

Grafikpipeline

How To: Create a Compute Shader