Passer au contenu principal
Cette méthode configure les positions d’échantillon utilisées par les opérations subséquentes de dessin, de copie, de résolution et autres opérations similaires.

Syntaxe

Paramètres

NumSamplesPerPixel [in]
Type : UINT
SAL : In Spécifie le nombre d’échantillons à prélever par pixel. Cette valeur peut être 1, 2, 4, 8 ou 16; sinon, l’appel SetSamplePosition est abandonné. Le nombre d’échantillons doit correspondre au nombre d’échantillons configuré dans le PSO au moment du dessin; sinon, le comportement est indéfini. NumPixels [in]
Type : UINT
SAL : In Spécifie le nombre de pixels pour lesquels des modèles d’échantillonnage sont spécifiés. Cette valeur peut être 1 ou 4; sinon, l’appel SetSamplePosition est abandonné. Une valeur de 1 configure un modèle d’échantillonnage unique à utiliser pour chaque pixel; une valeur de 4 configure des modèles d’échantillonnage distincts pour chaque pixel d’une grille de 2x2 pixels qui se répète sur l’espace de la cible de rendu ou de la fenêtre d’affichage, alignée sur des coordonnées paires. Notez que le nombre maximal d’échantillons combinés ne peut pas dépasser 16; sinon, l’appel est abandonné. Si NumPixels est défini à 4, NumSamplesPerPixel ne peut pas spécifier plus de 4 échantillons. pSamplePositions [in]
Type : D3D12_SAMPLE_POSITION *
SAL : In_reads(NumSamplesPerPixel*NumPixels) Spécifie un tableau d’éléments D3D12_SAMPLE_POSITION. La taille du tableau est NumPixels * NumSamplesPerPixel. Si NumPixels est défini à 4, le premier groupe de positions d’échantillon correspond au pixel supérieur gauche de la grille de 2x2 pixels; le groupe suivant correspond au pixel supérieur droit, le suivant au pixel inférieur gauche et le dernier groupe au pixel inférieur droit. Si l’interpolation centroïde est utilisée pendant le rendu, l’ordre des positions pour chaque pixel détermine la priorité d’échantillonnage centroïde. Autrement dit, le premier échantillon couvert dans l’ordre spécifié est choisi comme emplacement d’échantillon centroïde.

Valeur de retour

Type : void Aucune.

Remarques

La sémantique opérationnelle des positions d’échantillon est déterminée par les diverses opérations de dessin, de copie, de résolution et autres qui peuvent se produire. CommandList : En l’absence d’appels antérieurs à SetSamplePositions dans une CommandList, les échantillons prennent la position par défaut fondée sur le Pipeline State Object (PSO). Les positions par défaut sont déterminées soit par la portion SAMPLE_DESC du PSO si elle est présente, soit par les positions d’échantillon standard si la portion RASTERIZER_DESC du PSO a ForcedSampleCount défini à une valeur supérieure à 0. Une fois SetSamplePosition appelée, les appels de dessin subséquents doivent utiliser un PSO qui spécifie un nombre d’échantillons correspondant, soit au moyen de la portion SAMPLE_DESC du PSO, soit au moyen de ForcedSampleCount dans la portion RASTERIZER_DESC du PSO. SetSamplePositions ne peut être appelée que sur une CommandList graphique. Elle ne peut pas être appelée dans un bundle; les bundles héritent de l’état des positions d’échantillon de la CommandList appelante et ne le modifient pas. L’appel SetSamplePositions(0, 0, NULL) rétablit les positions d’échantillon à leurs valeurs par défaut. Effacement de RenderTarget : Les positions d’échantillon sont ignorées lors de l’effacement d’une cible de rendu. Effacement de DepthStencil : Lors de l’effacement de la portion profondeur d’une surface de profondeur-gabarit ou d’une région de celle-ci, les positions d’échantillon doivent être définies de façon à correspondre à celles du rendu futur sur la surface ou la région effacée; le contenu de toute région non effacée produite avec des positions d’échantillon différentes devient indéfini. Lors de l’effacement de la portion gabarit d’une surface de profondeur-gabarit ou d’une région de celle-ci, les positions d’échantillon sont ignorées. Dessin sur RenderTarget : Lors du dessin sur une cible de rendu, les positions d’échantillon peuvent être modifiées pour chaque appel de dessin, même lors du dessin sur une région qui chevauche des appels de dessin précédents. Les positions d’échantillon actuelles déterminent la sémantique opérationnelle de chaque appel de dessin, et les échantillons sont prélevés à partir du contenu stocké de la cible de rendu, même si ce contenu a été produit avec des positions d’échantillon différentes. Dessin avec DepthStencil : Lors du dessin sur une surface de profondeur-gabarit (lecture ou écriture) ou une région de celle-ci, les positions d’échantillon doivent être définies de façon à correspondre à celles utilisées précédemment pour effacer la région affectée. Pour utiliser une position d’échantillon différente, la région cible doit d’abord être effacée. Les pixels hors de la région effacée ne sont pas affectés. Le matériel peut stocker la portion profondeur d’une surface de profondeur-gabarit sous forme d’équations de plan, et les évaluer pour produire des valeurs de profondeur lorsque l’application émet une lecture. Seuls le rastériseur et la fusion de sortie sont tenus de prendre en charge les positions d’échantillon programmables de la portion profondeur d’une surface de profondeur-gabarit. Toute autre lecture ou écriture de la portion profondeur rendue avec des positions d’échantillon définies peut les ignorer et plutôt échantillonner aux positions standard. Résolution de RenderTarget : Lors de la résolution d’une cible de rendu ou d’une région de celle-ci, les positions d’échantillon sont ignorées; ces API n’opèrent que sur les valeurs de couleur stockées. Résolution de DepthStencil : Lors de la résolution de la portion profondeur d’une surface de profondeur-gabarit ou d’une région de celle-ci, les positions d’échantillon doivent être définies de façon à correspondre à celles du rendu antérieur sur la surface ou la région résolue. Pour utiliser une position d’échantillon différente, la région cible doit d’abord être effacée. Lors de la résolution de la portion gabarit d’une surface de profondeur-gabarit ou d’une région de celle-ci, les positions d’échantillon sont ignorées; les résolutions de gabarit n’opèrent que sur les valeurs de gabarit stockées. Copie de RenderTarget : Lors de la copie à partir d’une cible de rendu, les positions d’échantillon sont ignorées, qu’il s’agisse d’une copie complète ou partielle. Copie de DepthStencil (sous-ressource complète) : Lors de la copie d’une sous-ressource complète à partir d’une surface de profondeur-gabarit, les positions d’échantillon doivent être définies de façon à correspondre aux positions d’échantillon utilisées pour générer la surface source. Pour utiliser une position d’échantillon différente, la région cible doit d’abord être effacée. Sur certains matériels, des propriétés de la surface source (comme les équations de plan stockées pour les valeurs de profondeur) sont transférées vers la destination. Par conséquent, si l’on dessine ensuite sur la surface de destination, les positions d’échantillon utilisées à l’origine pour générer le contenu source doivent être utilisées avec la surface de destination. L’API l’exige sur tous les matériels par souci de cohérence, même si cela peut ne s’appliquer qu’à certains. Copie de DepthStencil (sous-ressource partielle) : Lors de la copie d’une sous-ressource partielle à partir d’une surface de profondeur-gabarit, les positions d’échantillon doivent être définies de façon à correspondre aux positions d’échantillon utilisées pour générer la surface source, comme pour la copie d’une sous-ressource complète. Toutefois, si le contenu d’une sous-ressource de destination affectée n’est que partiellement couvert par la copie, le contenu de la portion non couverte de ces sous-ressources devient indéfini, sauf s’il a été entièrement généré avec les mêmes positions d’échantillon que la source de la copie. Pour utiliser une position d’échantillon différente, la région cible doit d’abord être effacée. Lors de la copie d’une sous-ressource partielle à partir de la portion gabarit d’une surface de profondeur-gabarit, les positions d’échantillon sont ignorées. Peu importe les positions d’échantillon utilisées pour générer le contenu des autres zones de la mémoire tampon de destination non couvertes par la copie - ce contenu reste valide. SamplePos de nuanceur : L’intrinsèque HLSL SamplePos ne tient pas compte des positions d’échantillon programmables, et les résultats renvoyés aux nuanceurs qui l’appellent sur une surface rendue avec des positions programmables sont indéfinis. Les applications doivent transmettre manuellement les coordonnées à leur nuanceur au besoin. De même, l’évaluation d’attributs par index d’échantillon est indéfinie avec des positions d’échantillon programmables. Transition hors de l’état DEPTH_READ ou DEPTH_WRITE : Si une sous-ressource à l’état DEPTH_READ ou DEPTH_WRITE fait l’objet d’une transition vers tout autre état, y compris COPY_SOURCE ou RESOLVE_SOURCE, certains matériels pourraient devoir décompresser la surface. Par conséquent, les positions d’échantillon doivent être définies dans la liste de commandes de façon à correspondre à celles utilisées pour générer le contenu de la surface source. De plus, pour toute transition subséquente de la surface tant que les mêmes données de profondeur y demeurent, les positions d’échantillon doivent continuer de correspondre à celles définies dans la liste de commandes. Pour utiliser une position d’échantillon différente, la région cible doit d’abord être effacée. Si une application souhaite réduire au minimum la zone décompressée lorsque seule une portion doit être utilisée, ou simplement préserver la compression, ResolveSubresourceRegion() peut être appelée en mode DECOMPRESS avec un rectangle spécifié. Cela décompresse uniquement la zone pertinente dans une ressource distincte en laissant la source intacte sur certains matériels, bien que sur d’autres matériels, même la zone source soit décompressée. La ressource distincte explicitement décompressée peut ensuite faire l’objet d’une transition vers l’état souhaité (comme SHADER_RESOURCE). Transition hors de l’état RENDER_TARGET : Si une sous-ressource à l’état RENDER_TARGET fait l’objet d’une transition vers un état autre que COPY_SOURCE ou RESOLVE_SOURCE, certaines implémentations pourraient devoir décompresser la surface. Cette décompression est indépendante des positions d’échantillon. Si une application souhaite réduire au minimum la zone décompressée lorsque seule une portion doit être utilisée, ou simplement préserver la compression, ResolveSubresourceRegion() peut être appelée en mode DECOMPRESS avec un rectangle spécifié. Cela décompresse uniquement la zone pertinente dans une ressource distincte en laissant la source intacte sur certains matériels, bien que sur d’autres matériels, même la zone source soit décompressée. La ressource distincte explicitement décompressée peut ensuite faire l’objet d’une transition vers l’état souhaité (comme SHADER_RESOURCE).

Configuration requise

En-tête : d3d12_xs.h ou d3d12_x.h
Bibliothèque : d3d12_xs.lib ou d3d12_x.lib
Plateformes prises en charge : consoles XBOX Series et famille XBOX One

Voir aussi

ID3D12GraphicsCommandList1
Dernière modification le 6 octobre 2026