Compteurs de sortie de flux
La sortie de flux est la capacité du GPU à écrire des sommets dans une mémoire tampon. Les compteurs de sortie de flux surveillent la progression.
- Différences entre les compteurs de flux de Direct3D 11 et Direct3D 12
- BufferFilledSize
- Rubriques connexes
Différences entre les compteurs de flux de Direct3D 11 et Direct3D 12
Dans le cadre du processus de sortie de flux, le GPU doit connaître l’emplacement actuel dans la mémoire tampon dans laquelle il écrit. Dans Direct3D 11, la mémoire pour stocker cet emplacement est allouée par le pilote et la seule façon pour les applications de manipuler cette valeur est via la méthode SOSetTargets . Dans Direct3D 12, les applications allouent de la mémoire pour stocker cet emplacement actuel. Il n’existe aucun moyen spécial de manipuler cette valeur, et les applications sont libres de lire/écrire la valeur avec le processeur ou le GPU.
BufferFilledSize
L’application est responsable de l’allocation du stockage pour une quantité 32 bits appelée BufferFilledSize. Il contient le nombre d’octets de données dans la mémoire tampon de sortie de flux. Ce stockage peut être placé dans la même ressource, ou une autre, que celle qui contient les données de sortie de flux. Cette valeur est accessible par le GPU dans la phase de sortie de flux pour déterminer où ajouter de nouvelles données de vertex dans la mémoire tampon. En outre, cette valeur est accessible par le GPU pour déterminer quand le dépassement de capacité s’est produit.
Reportez-vous à la structure D3D12_STREAM_OUTPUT_DESC.
La couche de débogage valide ce qui suit dans ID3D12GraphicsCommandList::SOSetTargets :
- BufferFilledSize se situe dans la plage impliquée par {OffsetInBytes, SizeInBytes}, si une ressource non NULL est spécifiée.
- BufferFilledSizeOffsetInBytes est un multiple de 4.
- BufferFilledSizeOffsetInBytes se trouve dans la plage de la ressource contenante.
- La ressource spécifiée est une mémoire tampon.
Le runtime ne valide pas le type de tas associé à la mémoire tampon de sortie de flux, car la sortie de flux est prise en charge dans tous les types de tas.
Les signatures racines doivent spécifier si la sortie de flux sera utilisée à l’aide des indicateurs D3D12_ROOT_SIGNATURE_FLAGS .
D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT peuvent être spécifiés pour les signatures racines créées dans HLSL, d’une manière similaire à la façon dont les autres indicateurs sont spécifiés.
CreateGraphicsPipelineState échoue si le nuanceur geometry contient une sortie de flux, mais que la signature racine n’a pas l’indicateur D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT défini.
Lorsqu’une ressource est utilisée comme cible de sortie de flux, les ressources utilisées doivent être à l’état D3D12_RESOURCE_STATE_STREAM_OUT. Cela s’applique aux données de vertex et à BufferFilledSize (qui peuvent se trouver dans les mêmes ressources ou dans des ressources distinctes).
Il n’existe aucune API spéciale pour définir des décalages de mémoire tampon de sortie de flux, car les applications peuvent écrire directement dans bufferFilledSize avec le processeur ou le GPU.
Rubriques connexes