Partager via


énumération D3D12DDI_BARRIER_SYNC (d3d12umddi.h)

Une valeur d'D3D12DDI_BARRIER_SYNC est un or au niveau du bit des champs suivants qui spécifient l’étendue de synchronisation du gpu en ce qui concerne la barrière.

Syntaxe

typedef enum D3D12DDI_BARRIER_SYNC {
  D3D12DDI_BARRIER_SYNC_NONE = 0x0,
  D3D12DDI_BARRIER_SYNC_ALL = 0x1,
  D3D12DDI_BARRIER_SYNC_DRAW = 0x2,
  D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER = 0x4,
  D3D12DDI_BARRIER_SYNC_INDEX_INPUT = 0x4,
  D3D12DDI_BARRIER_SYNC_VERTEX_SHADING = 0x8,
  D3D12DDI_BARRIER_SYNC_PIXEL_SHADING = 0x10,
  D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL = 0x20,
  D3D12DDI_BARRIER_SYNC_RENDER_TARGET = 0x40,
  D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING = 0x80,
  D3D12DDI_BARRIER_SYNC_RAYTRACING = 0x100,
  D3D12DDI_BARRIER_SYNC_COPY = 0x200,
  D3D12DDI_BARRIER_SYNC_RESOLVE = 0x400,
  D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT = 0x800,
  D3D12DDI_BARRIER_SYNC_PREDICATION = 0x800,
  D3D12DDI_BARRIER_SYNC_ALL_SHADING = 0x1000,
  D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING = 0x2000,
  D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO = 0x4000,
  D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW = 0x8000,
  D3D12DDI_BARRIER_SYNC_VIDEO_DECODE = 0x100000,
  D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS = 0x200000,
  D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE = 0x400000,
  D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE = 0x800000,
  D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE = 0x1000000,
  D3D12DDI_BARRIER_SYNC_SPLIT = 0x80000000
} ;

Constantes

 
D3D12DDI_BARRIER_SYNC_NONE
Valeur : 0x0
La synchronisation n’est pas nécessaire avant ou après une barrière. En cas d’utilisation, D3D12DDI_BARRIER_SYNC_NONE doit être le seul jeu de bits.

Une valeur SyncBefore de D3D12DDI_BARRIER_SYNC_NONE implique qu’il n’y a pas eu de barrières ou d’accès précédents à la ressource dans la même étendue ExecuteCommandLists.

Une valeur SyncAfter de D3D12DDI_BARRIER_SYNC_NONE implique que les sous-ressources correspondantes ne sont pas accessibles après la barrière dans la même étendue ExecuteCommandLists.

Dans les deux cas, AccessAfter doit être D3D12DDI_BARRIER_ACCESS_NO_ACCESS.
D3D12DDI_BARRIER_SYNC_ALL
Valeur : 0x1
Une SyncBefore valeur de D3D12DDI_BARRIER_SYNC_ALL indique que tout le travail précédent doit se terminer avant d’exécuter la barrière.

Une valeur SyncAfter de D3D12DDI_BARRIER_SYNC_ALL indique que tout le travail suivant doit attendre la fin de la barrière.
D3D12DDI_BARRIER_SYNC_DRAW
Valeur : 0x2
Cette valeur est une étendue de parapluie pour toutes les étapes de pipeline Draw. Synchronisez avec les charges de travail GPU suivantes :

* drawInstanced
* DrawIndexedInstanced
* SetGraphicsRootDescriptorTable
* SetGraphicsRootShaderResource
* SetGraphicsRootUnorderedAccessView
* SetGraphicsRootConstantBufferView

La synchronisation SetGraphicsRootXxx est nécessaire pour prendre en charge les descripteurs D3D12DDI_DESCRIPTOR_RANGE_FLAG_0013_DATA_STATIC_WHILE_SET_AT_EXECUTE.

Une valeur de SyncBefore de D3D12DDI_BARRIER_SYNC_DRAW indique que tout le travail dessin précédent doit être terminé avant d’exécuter la barrière.

Une valeur de SyncAfter de D3D12DDI_BARRIER_SYNC_DRAW indique que tous les travaux de dessin suivants doivent attendre la fin de la barrière.
D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER
Valeur : 0x4
Synchronisez avec l’exécution de l’étape assembleur d’entrée.
D3D12DDI_BARRIER_SYNC_INDEX_INPUT
Valeur : 0x4
Mappe à D3D12DDI_BARRIER_SYNC_INPUT_ASSEMBLER.
D3D12DDI_BARRIER_SYNC_VERTEX_SHADING
Valeur : 0x8
Synchronisez avec toutes les étapes d’ombrage de vertex, notamment les sommets, le domaine, la coque, le pavage, la géométrie, l’amplification et l’ombrage de maillage.
D3D12DDI_BARRIER_SYNC_PIXEL_SHADING
Valeur : 0x10
Synchronisez l’exécution du nuanceur de pixels.
D3D12DDI_BARRIER_SYNC_DEPTH_STENCIL
Valeur : 0x20
Synchronisez avec les opérations de lecture/écriture de profondeur/gabarit. Cela inclut les accès de la vue de profondeur (DSV) pendant Draw* et ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_RENDER_TARGET
Valeur : 0x40
Synchronisez avec les opérations de lecture/écriture de la cible de rendu. Cela inclut les écritures de vue de la cible de rendu (RTV) pendant Draw* et ClearRenderTargetView.
D3D12DDI_BARRIER_SYNC_COMPUTE_SHADING
Valeur : 0x80
Synchronisez avec les charges de travail GPU suivantes :

* Dispatch
* SetComputeRootDescriptorTable
* SetComputeRootShaderResource
* SetComputeRootUnorderedAccessView
* SetComputeRootConstantBufferView

La synchronisation SetComputeRootXxx est nécessaire pour prendre en charge les descripteurs D3D12DDI_DESCRIPTOR_RANGE_FLAG_DATA_STATIC_WHILE_SET_AT_EXECUTION.
D3D12DDI_BARRIER_SYNC_RAYTRACING
Valeur : 0x100
Synchronisez avec l’exécution de raytracing.
D3D12DDI_BARRIER_SYNC_COPY
Valeur : 0x200
Synchronisez-les avec les commandes Copy.
D3D12DDI_BARRIER_SYNC_RESOLVE
Valeur : 0x400
Synchronisez avec les commandes Resolve.
D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT
Valeur : 0x800
Synchronisez avec l’exécution d’ExecuteIndirect.
D3D12DDI_BARRIER_SYNC_PREDICATION
Valeur : 0x800
Synchronisez avec les commandes de prédication. Alias avec D3D12DDI_BARRIER_SYNC_EXECUTE_INDIRECT*.
D3D12DDI_BARRIER_SYNC_ALL_SHADING
Valeur : 0x1000
Synchronisez avec l’exécution de tous les nuanceurs.
D3D12DDI_BARRIER_SYNC_NON_PIXEL_SHADING
Valeur : 0x2000
Synchronisez avec l’exécution du nuanceur à l’exception de l’ombrage de pixels. Existe pour la compatibilité avec l’API ResourceBarrier héritée.
D3D12DDI_BARRIER_SYNC_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO
Valeur : 0x4000
Synchronisez avec PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054 travail.
D3D12DDI_BARRIER_SYNC_CLEAR_UNORDERED_ACCESS_VIEW
Valeur : 0x8000
Synchronisez avec l’exécution avec un UAV.
D3D12DDI_BARRIER_SYNC_VIDEO_DECODE
Valeur : 0x100000
Synchronisez avec l’exécution du décodage vidéo.
D3D12DDI_BARRIER_SYNC_VIDEO_PROCESS
Valeur : 0x200000
Synchronisez avec l’exécution du processus vidéo.
D3D12DDI_BARRIER_SYNC_VIDEO_ENCODE
Valeur : 0x400000
Synchronisez avec l’exécution du codage vidéo.
D3D12DDI_BARRIER_SYNC_BUILD_RAYTRACING_ACCELERATION_STRUCTURE
Valeur : 0x800000
Effectuez une synchronisation avec PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 travail.

La barrière correspondante AccessBefore ou champ AccessAfter doit avoir le jeu de bits D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE.
D3D12DDI_BARRIER_SYNC_COPY_RAYTRACING_ACCELERATION_STRUCTURE
Valeur : 0x1000000
Effectuez une synchronisation avec PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054 travail.

La barrière correspondante AccessBefore ou champ AccessAfter doit avoir le jeu de bits D3D12DDI_BARRIER_ACCESS_RAYTRACING_ACCELERATION_STRUCTURE_WRITE.
D3D12DDI_BARRIER_SYNC_SPLIT
Valeur : 0x80000000
Bit de synchronisation spécial indiquant une barrière fractionnée. Utilisé comme valeur SyncAfter pour indiquer le début d’une barrière fractionnée. L’application doit fournir une barrière correspondante avec syncBefore définie sur D3D12DDI_BARRIER_SYNC_SPLIT. Voir les remarques.

Remarques

Une barrière de fractionnement est un indicateur pour le pilote qu’une transition d’état doit se produire entre deux points dans un flux de commandes, même entre les limites d’ExecuteCommandLists. Les pilotes peuvent effectuer les transitions de disposition requises et vider le cache à tout moment entre le début et la fin d’une barrière fractionnée.

Les API Barrière améliorée autorisent la synchronisation SPLIT. Les barrières fractionnées sont représentées par une paire de barrières où la barrière initiale utilise une valeur D3D12DDI_BARRIER_SYNC_SPLITSyncAfter, et la dernière barrière utilise une valeur D3D12DDI_BARRIER_SYNC_SPLITSyncBefore.

Les paires de barrières fractionnées doivent utiliser des valeurs identiques LayoutBefore, LayoutAfter, AccessBeforeet AccessAfter valeurs pour les barrières initiales et finales. Les paires de barrières fractionnées doivent être séquentielles sans autres barrières intermédiaires sur la même ressource. L’extrait de code suivant est un exemple au niveau de l’application.

// BEGIN split from compute shader UAV to pixel shader SRV
splitBarrierBegin.SyncBefore = D3D12_BARRIER_SYNC_COMPUTE
splitBarrierBegin.SyncAfter = D3D12_BARRIER_SYNC_SPLIT
splitBarrierBegin.AccessBefore = D3D12_BARRIER_ACCESS_UNORDERED_ACCESS
splitBarrierBegin.AccessAfter = D3D12_BARRIER_ACCESS_DIRECT_QUEUE_SHADER_RESOURCE
splitBarrierBegin.LayoutBefore = D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS
splitBarrierBegin.LayoutAfter = D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE

// END split from compute shader UAV to pixel shader SRV
splitBarrierEnd.SyncBefore = D3D12_BARRIER_SYNC_SPLIT
splitBarrierEnd.SyncAfter = D3D12_BARRIER_SYNC_PIXEL_SHADING
splitBarrierEnd.AccessBefore = D3D12_BARRIER_ACCESS_UNORDERED_ACCESS
splitBarrierEnd.AccessAfter = D3D12_BARRIER_ACCESS_DIRECT_QUEUE_SHADER_RESOURCE
splitBarrierEnd.LayoutBefore = D3D12_BARRIER_LAYOUT_UNORDERED_ACCESS
splitBarrierEnd.LayoutAfter = D3D12_BARRIER_LAYOUT_DIRECT_QUEUE_SHADER_RESOURCE

Les barrières fractionnées entre les limites d’ExecuteCommandLists sont autorisées. Dans ce cas, toutes les valeurs AccessBefore et AccessAfter sont effectivement ignorées, car les limites d’ExecuteCommandLists prennent en charge tout vidage du cache. Essentiellement, les barrières de fractionnement cross-ExecuteCommandLists sont des barrières de disposition uniquement. Par conséquent, le fractionnement d’une barrière de mémoire tampon ou d’une barrière de texture d’accès simultané entre les limites d’ExecuteCommandLists n’a aucun but. Une barrière de fractionnement BEGIN ou END sans correspondance sur une mémoire tampon ou une texture d’accès simultané dans une étendue ExecuteCommandLists donnée n’est pas utilisée et la couche de débogage génère un avertissement.

Exigences

Exigence Valeur
client minimum pris en charge Windows 11 (WDDM 3.0)
d’en-tête d3d12umddi.h

Voir aussi

D3D12DDI_BARRIER_ACCESS

D3D12DDI_BUFFER_BARRIER_0088

D3D12DDI_GLOBAL_BARRIER_0088

D3D12DDI_RANGED_BARRIER_0088

D3D12DDI_TEXTURE_BARRIER_0088