Affichages ordonnés du rastériseur
Les vues triées par le rastériseur (ROV) permettent au code de nuanceur de pixels de marquer les liaisons de vue d’accès non ordonnées (UAV) avec une déclaration qui modifie les exigences normales pour l’ordre des résultats du pipeline graphique pour les UAV. Cela permet aux algorithmes de transparence indépendante de l’ordre (OIT) de fonctionner, ce qui donne de bien meilleurs résultats de rendu lorsque plusieurs objets transparents sont alignés les uns avec les autres dans une vue.
Vue d’ensemble
Les pipelines graphiques standard peuvent avoir des difficultés à composer correctement plusieurs textures qui contiennent de la transparence. Les objets tels que les clôtures métalliques, la fumée, le feu, la végétation et le verre coloré utilisent la transparence pour obtenir l’effet souhaité. Des problèmes surviennent lorsque plusieurs textures qui contiennent de la transparence sont alignées les unes avec les autres (fumée devant une clôture devant un bâtiment en verre contenant de la végétation, par exemple). Les vues triées par un rastériseur (ROV) permettent aux algorithmes OIT sous-jacents d’utiliser les fonctionnalités du matériel pour essayer de résoudre correctement l’ordre de transparence. La transparence est gérée par le nuanceur de pixels.
Les vues triées par le rastériseur (ROV) permettent au code de nuanceur de pixels de marquer les liaisons d’UAV avec une déclaration qui modifie les exigences normales pour l’ordre des résultats du pipeline graphique pour les UAV.
Les RV garantissent l’ordre des accès aux UAV pour toutes les paires d’appels de nuanceur de pixels qui se chevauchent. Dans ce cas, « chevauchement » signifie que les appels sont générés par les mêmes appels de dessin et partagent la même coordonnée de pixel en mode d’exécution de la fréquence des pixels, et les mêmes coordonnées de pixel et d’exemple en mode de fréquence d’échantillonnage.
L’ordre dans lequel les accès ROV qui se chevauchent des appels de nuanceur de pixels sont exécutés est identique à l’ordre dans lequel la géométrie est envoyée. Cela signifie que, pour les appels de nuanceur de pixels qui se chevauchent, les écritures ROV effectuées par un appel de nuanceur de pixels doivent être disponibles pour être lues par un appel suivant et ne doivent pas affecter les lectures d’un appel précédent. Les lectures ROV effectuées par un appel de nuanceur de pixels doivent refléter les écritures d’un appel précédent et ne doivent pas refléter les écritures d’un appel suivant. Cela est important pour les UAV, car ils sont explicitement omis des garanties d’invariance de sortie normalement définies par l’ordre fixe des résultats du pipeline graphique.
Informations d’implémentation
Les vues triées par un rastériseur (ROV) sont déclarées avec les nouveaux objets HLSL (High Level Shader Language) suivants et ne sont disponibles que pour le nuanceur de pixels :
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
Utilisez ces objets de la même manière que d’autres objets UAV (par RWBuffer
exemple, etc.).
Résumé des API
Les RV sont une construction HLSL uniquement qui applique une sémantique de comportement différente aux UAV. Toutes les API pertinentes pour les UAV sont également pertinentes pour les RV. Notez que la méthode, les structures et la classe d’assistance suivantes référencent le rastériseur :
- D3D12_RASTERIZER_DESC : structure contenant la description du rastériseur.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : structure contenant un booléen, indiquant la prise en charge.
- CheckFeatureSupport : méthode pour accéder aux fonctionnalités prises en charge.
- CD3DX12_RASTERIZER_DESC : classe d’assistance pour la création de descriptions de rastériseurs.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : structure contenant l’état du pipeline.