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 dans les compteurs de flux de Direct3D 11 à 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 aucune façon spéciale de manipuler cette valeur, et les applications sont libres de lire/écrire la valeur avec l’UC ou le GPU.
BufferFilledSize
L’application est chargée d’allouer le stockage pour une quantité 32 bits appelée BufferFilledSize. Cela 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 ressource différente, que celle qui contient les données de sortie de flux. Cette valeur est accessible par le GPU dans l’étape 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 les éléments suivants dans ID3D12GraphicsCommandList ::SOSetTargets:
- BufferFilledSize tombe dans la plage implicite 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 conteneur.
- 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 du flux est prise en charge dans tous les types de tas.
Les signatures racines doivent spécifier si la sortie du flux sera utilisée à l’aide des indicateurs de D3D12_ROOT_SIGNATURE_FLAGS.
D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT pouvez être spécifié pour les signatures racines créées dans HLSL, de manière similaire à la façon dont les autres indicateurs sont spécifiés.
CreateGraphicsPipelineState échoue si le nuanceur de géométrie 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 dans l’état D3D12_RESOURCE_STATE_STREAM_OUT. Cela s’applique aux données de vertex et aux BufferFilledSize (qui peuvent se trouver dans les mêmes ressources ou les 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 le BufferFilledSize avec l’UC ou le GPU.
Rubriques connexes