Compteurs UAV
Vous pouvez utiliser des compteurs non ordonnés-Access-View (UAV) pour associer un compteur Atomic 32 bits à un mode d’accès non ordonné (UAV).
Différences entre les compteurs UAV de Direct3D 11 et Direct3D 12
Les applications Direct3D 12 et Direct3D 11 utilisent toutes les deux les mêmes fonctions de nuanceur HLSL (High-Level Shader Language) pour accéder aux compteurs UAV.
- IncrementCounter
- DecrementCounter
- Append
- Utiliser
Direct3D 12
Dans Direct3D 12, les valeurs 32 bits sont allouées par l’application. par conséquent, les valeurs 32 bits peuvent être lues et écrites par le processeur ou le GPU, comme n’importe quelle autre ressource Direct3D 12.
Direct3D 11
En dehors des nuanceurs, avec Direct3D 11, vous devez appeler les méthodes d’API pour accéder aux compteurs (par exemple, ID3D11DeviceContext :: CopyStructureCount).
Utilisation des compteurs UAV
Votre application est chargée d’allouer 32 bits de stockage pour les compteurs UAV. Ce stockage peut être alloué dans une ressource différente de celle qui contient les données accessibles via le UAV.
Reportez-vous à CreateUnorderedAccessView, D3D12 _ buffer _ UAV _ Flags et D3D12 _ buffer _ UAV.
Si pCounterResource est spécifié dans l’appel à CreateUnorderedAccessView, alors un compteur est associé au UAV. Dans ce cas :
- StructureByteStride doit être supérieur à zéro
- Le format du format doit être DXGI _ _ inconnu
- L’indicateur brut ne doit pas être défini
- Les deux ressources doivent être des mémoires tampons
- CounterOffsetInBytes doit être un multiple de 4 octets
- CounterOffsetInBytes doit se trouver dans la plage de la ressource de compteur
- pDesc ne peut pas être null
- la présource ne peut pas être null
Et notez les cas d’utilisation suivants :
- Si pCounterResource n’est pas spécifié, CounterOffsetInBytes doit avoir la valeur 0.
- Si l’indicateur brut est défini, le format doit être DXGI _ format _ R32 sans _ type et la ressource UAV doit être une mémoire tampon.
- Si pCounterResource n’est pas défini, CounterOffsetInBytes doit avoir la valeur 0.
- Si l’indicateur brut n’est pas défini et que StructureByteStride = 0, le format doit être un format UAV valide.
Direct3D 12 supprime la distinction entre les UAVs d’ajout et de compteur (bien que la distinction existe toujours dans le bytecode HLSL).
Le runtime principal valide ces restrictions dans CreateUnorderedAccessView.
Lors du traçage/Dispatch, la ressource de compteur doit être dans l’état D3D12 _ accès non _ _ ordonné _ à l’Étatde la ressource. En outre, dans un appel de dessin/distribution unique, il n’est pas valide pour une application d’accéder au même emplacement de mémoire 32 bits via deux compteurs UAV distincts. La couche de débogage génère des erreurs si l’une ou l’autre est détectée.
Il n’existe pas de méthode « SetUnorderedAccessViewCounterValue » ou « CopyStructureCount », car les applications peuvent simplement copier des données vers et à partir de la valeur de compteur directement.
L’indexation dynamique de UAVs avec des compteurs est prise en charge.
Si un nuanceur tente d’accéder au compteur d’un UAV qui n’a pas de compteur associé, la couche de débogage émet un avertissement et une erreur de page GPU se produit et entraîne la suppression de l’appareil des applications.
Les compteurs UAV sont pris en charge dans tous les types de tas (par défaut, upload, readback).