é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 |