ID3D12GraphicsCommandList1 ::SetSamplePositions, méthode (d3d12.h)
Cette méthode configure les exemples de positions utilisés par les opérations de dessin, de copie, de résolution et similaires suivantes.
Syntaxe
void SetSamplePositions(
[in] UINT NumSamplesPerPixel,
[in] UINT NumPixels,
[in] D3D12_SAMPLE_POSITION *pSamplePositions
);
Paramètres
[in] NumSamplesPerPixel
Type : UINT
SAL : In
Spécifie le nombre d’échantillons à prendre, par pixel. Cette valeur peut être 1, 2, 4, 8 ou 16, sinon l’appel SetSamplePosition est supprimé. Le nombre d’échantillons doit correspondre au nombre d’échantillons configuré dans l’authentification unique au moment du dessin, sinon le comportement n’est pas défini.
[in] NumPixels
Type : UINT
SAL : In
Spécifie le nombre de pixels pour lequel les modèles d’exemples sont spécifiés. Cette valeur peut être 1 ou 4, sinon l’appel SetSamplePosition est supprimé. La valeur 1 configure un seul exemple de modèle à utiliser pour chaque pixel ; La valeur 4 configure des modèles d’exemples distincts pour chaque pixel dans une grille de 2 x 2 pixels, qui est répétée sur l’espace de la cible de rendu ou de la fenêtre d’affichage, alignés sur les coordonnées paires.
Notez que le nombre maximal d’échantillons combinés ne peut pas dépasser 16, sinon l’appel est supprimé. Si NumPixels a la valeur 4, NumSamplesPerPixel ne peut pas spécifier plus de 4 exemples.
[in] pSamplePositions
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 sur 4, le premier groupe d’exemples de positions correspond au pixel supérieur gauche dans la grille de pixels de 2x2 ; le groupe suivant d’exemples de positions correspond au pixel supérieur droit, le groupe suivant au pixel inférieur gauche et le groupe final au pixel inférieur droit.
Si l’interpolation centroïde est utilisée pendant le rendu, l’ordre des positions de 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 de l’exemple centroïde.
Valeur de retour
None
Remarques
La sémantique opérationnelle des exemples de positions est déterminée par les différentes 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 un CommandList, les exemples assument la position par défaut en fonction de l’objet d’état de pipeline (PSO). Les positions par défaut sont déterminées par la partie SAMPLE_DESC du psO si elle est présente, ou par les positions d’échantillon standard si la partie RASTERIZER_DESC du bloc d’alimentation a la valeur ForcedSampleCount définie sur une valeur supérieure à 0.
Une fois que SetSamplePosition a été appelé, les appels de dessin suivants doivent utiliser un psO qui spécifie un nombre d’échantillons correspondant à l’aide de la partie SAMPLE_DESC du psO ou de ForcedSampleCount dans la partie RASTERIZER_DESC du psO.
SetSamplePositions ne peut être appelé que sur une commandList graphique. Il ne peut pas être appelé dans un bundle ; Les bundles héritent de l’état de position de l’exemple de CommandList appelant et ne le modifient pas.
L’appel de SetSamplePositions(0, 0, NULL) rétablit les valeurs par défaut des exemples de positions.
Effacer RenderTarget : Les exemples de positions sont ignorés lors de l’effacement d’une cible de rendu.
Clear DepthStencil : Lors du nettoyage de la partie profondeur d’une surface de gabarit de profondeur ou d’une région quelconque de celle-ci, les positions des échantillons doivent être définies pour correspondre à celles du rendu futur à la surface ou à la région effacée ; le contenu de toutes les régions non claires produites à l’aide de différentes positions d’échantillon devient non défini.
Lors de la suppression de la partie de gabarit d’une surface de profondeur-gabarit ou d’une région de celle-ci, les positions des exemples sont ignorées.
Dessiner dans RenderTarget : Lors du dessin vers une cible de rendu, les exemples de positions peuvent être modifiés pour chaque appel de dessin, même lors du dessin vers une région qui chevauche les 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 extraits du contenu stocké de la cible de rendu, même si le contenu a été produit à l’aide de différentes positions d’échantillon.
Dessiner à l’aide de DepthStencil : Lorsque vous dessinez sur une surface de profondeur-gabarit (lecture ou écriture) ou dans une région quelconque de celle-ci, les positions des exemples doivent être définies pour 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 en dehors de la zone claire ne sont pas affectés.
Le matériel peut stocker la partie profondeur ou 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 nécessaires pour prendre en charge les positions d’échantillon programmables de la partie profondeur d’une surface de gabarit de profondeur. Toute autre lecture ou écriture de la partie de profondeur qui a été rendue avec des positions d’échantillon définies peut les ignorer et échantillonner à la place aux positions standard.
Résoudre RenderTarget : Lors de la résolution d’une cible de rendu ou d’une région de celle-ci, les exemples de positions sont ignorés ; ces API fonctionnent uniquement sur les valeurs de couleur stockées.
Résoudre DepthStencil : Lors de la résolution de la partie profondeur d’une surface de gabarit de profondeur ou d’une région quelconque de celle-ci, les positions des exemples doivent être définies pour correspondre à celles du rendu passé à 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 partie de gabarit d’une surface de profondeur-gabarit ou d’une région de celle-ci, les positions des exemples sont ignorées ; Les résolutions de gabarit fonctionnent uniquement sur les valeurs de gabarit stockées.
Copier RenderTarget : Lors de la copie à partir d’une cible de rendu, les positions des exemples sont ignorées, qu’il s’agisse d’une copie complète ou partielle.
Copy DepthStencil (sous-ressource complète) : Lors de la copie d’une sous-ressource complète à partir d’une surface de gabarit de profondeur, les positions des exemples doivent être définies pour correspondre aux positions d’exemple 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 certaines propriétés matérielles de la surface source (telles que les équations de plan stockées pour les valeurs de profondeur), transfert vers la destination. Par conséquent, si la surface de destination est ensuite dessinée vers, les positions d’échantillon utilisées initialement pour générer le contenu source doivent être utilisées avec la surface de destination. L’API l’exige sur tout le matériel à des fins de cohérence, même si elle ne peut s’appliquer qu’à certains.
Copy DepthStencil (sous-ressource partielle) : Lors de la copie d’une sous-ressource partielle à partir d’une surface de profondeur-gabarit, les exemples de positions doivent être définis pour correspondre aux positions d’exemple utilisées pour générer la surface source, de la même façon que 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 partie non couverte au sein de ces sous-ressources devient non défini, sauf si l’ensemble a été généré à l’aide des mêmes exemples de positions que la source de 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 partie de gabarit d’une surface de profondeur-gabarit, les exemples de postions sont ignorés. Peu importe les positions d’échantillon utilisées pour générer du contenu pour d’autres zones de la mémoire tampon de destination non couvertes par la copie, ces contenus restent valides.
Shader SamplePos : L’intrinsèque SAMPLEPos HLSL n’est pas au courant des positions d’échantillon programmables et les résultats retournés aux nuanceurs appelant cela sur une surface rendue avec des positions programmables ne sont pas définis. Les applications doivent transmettre manuellement les coordonnées dans leur nuanceur si nécessaire. De même, l’évaluation des attributs par exemple d’index n’est pas dé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 est transférée vers un autre état, y compris COPY_SOURCE ou RESOLVE_SOURCE, un certain matériel peut avoir besoin de décompresser la surface. Par conséquent, les exemples de positions doivent être définis dans la liste de commandes pour correspondre à ceux utilisés pour générer le contenu dans la surface source. En outre, pour toutes les transitions ultérieures de la surface alors que les mêmes données de profondeur restent dans celle-ci, les positions des exemples doivent continuer à correspondre à celles définies dans la liste des 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 la zone décompressée alors qu’une seule partie doit être utilisée, ou simplement pour préserver la compression, ResolveSubresourceRegion() peut être appelé en mode DECOMPRESS avec un rect spécifié. Cela décompresse uniquement la zone appropriée dans une ressource distincte, laissant la source intacte sur un matériel, mais sur d’autres matériels, même la zone source est décompressée. La ressource distincte explicitement décompressée peut ensuite être transférée vers l’état souhaité (par exemple, SHADER_RESOURCE).
Transition hors de l’état RENDER_TARGET : Si une sous-ressource à l’état RENDER_TARGET est transférée vers autre chose que COPY_SOURCE ou RESOLVE_SOURCE, certaines implémentations peuvent avoir besoin de décompresser la surface. Cette décompression est indépendante des positions d’échantillonnage.
Si une application souhaite réduire la zone décompressée alors qu’une seule partie doit être utilisée, ou simplement pour préserver la compression, ResolveSubresourceRegion() peut être appelé en mode DECOMPRESS avec un rect spécifié. Cela décompresse uniquement la zone appropriée dans une ressource distincte, laissant la source intacte sur un matériel, mais sur d’autres matériels, même la zone source est décompressée. La ressource distincte explicitement décompressée peut ensuite être transférée vers l’état souhaité (par exemple, SHADER_RESOURCE).
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | d3d12.h |
Bibliothèque | D3d12.lib |
DLL | D3d12.dll |