Partager via


Fonctionnalités d’échantillonnage de texture des ressources de diffusion en continu

Les fonctionnalités d’échantillonnage de texture des ressources de diffusion en continu incluent l’obtention de commentaires sur l’état du nuanceur sur les zones mappées, la vérification de l’accès à toutes les données consultées dans la ressource, la compression pour aider les nuanceurs à éviter les zones de diffusion en continu mipmappées qui sont connues comme non mappées et découvrir ce que le LOD minimal mappé pour une empreinte de filtre de texture entière sera.

Exigences des fonctionnalités d’échantillonnage de texture des ressources de diffusion en continu

Les fonctionnalités d’échantillonnage de texture décrites ici nécessitent la prise en charge du niveau 2 des ressources de streaming.

Commentaires sur l’état du nuanceur sur les zones mappées

Toute instruction de nuanceur qui lit et/ou écrit dans une ressource de diffusion en continu entraîne l’enregistrement des informations d’état. Cet état est exposé sous la forme d’une valeur de retour supplémentaire facultative sur chaque instruction d’accès aux ressources qui passe dans un registre temporaire 32 bits. Le contenu de la valeur de retour est opaque. Autrement dit, la lecture directe par le programme de nuanceur est interdite. Toutefois, vous pouvez utiliser la fonction CheckAccessFullyMapped pour extraire les informations d’état.

Vérification entièrement mappée

La fonction CheckAccessFullyMapped interprète l’état retourné à partir d’un accès mémoire et indique si toutes les données accessibles ont été mappées dans la ressource. CheckAccessFullyMapped retourne true (0xFFFFFFFF) si les données ont été mappées ou false (0x00000000) si les données n’ont pas été mappées.

Pendant les opérations de filtre, parfois le poids d’un texel donné finit par être 0,0. Un exemple est un échantillon linéaire avec des coordonnées de texture qui tombent directement sur un centre de texel : 3 autres texels (ceux qu’ils sont peuvent varier par matériel) contribuent au filtre, mais avec 0 poids. Ces texels de poids 0 ne contribuent pas au résultat du filtre du tout. Par conséquent, s’ils tombent sur des vignettes NULL , ils ne comptent pas comme un accès non mappé. Notez que la même garantie s’applique aux filtres de texture qui incluent plusieurs niveaux mip ; si les texels sur l’un des mipmaps ne sont pas mappés, mais que le poids sur ces texels est 0, ces texels ne comptent pas comme un accès non mappé.

Lors de l’échantillonnage à partir d’un format contenant moins de 4 composants (tels que DXGI_FORMAT_R8_UNORM), tous les texels qui tombent sur des vignettes NULL entraînent un signalement d’un accès mappé NULL , quels que soient les composants que le nuanceur examine réellement dans le résultat. Par exemple, la lecture de R8_UNORM et le masquage du résultat de lecture dans le nuanceur avec .gba/.yzw ne semblent pas avoir besoin de lire la texture du tout. Toutefois, si l’adresse texel est une vignette mappée NULL , l’opération compte toujours comme un accès à la carte NULL .

Le nuanceur peut vérifier l’état et poursuivre toute action souhaitée en cas d’échec. Par exemple, un cours d’action peut être la journalisation des « fautes » (par exemple via l’écriture UAV) et/ou l’émission d’une autre lecture limitée à un LOD plus grosseur connu pour être mappé. Une application peut également vouloir suivre les accès réussis afin d’obtenir un aperçu de la partie de l’ensemble mappé de vignettes accessibles.

L’une des complications de la journalisation n’existe pas pour signaler l’ensemble exact de vignettes qui auraient été consultées. L’application peut faire des estimations conservatrices basées sur la connaissance des coordonnées utilisées pour l’accès, ainsi que l’utilisation de l’instruction LOD ; par exemple, tex2Dlod) retourne le calcul LOD matériel.

Une autre complication est que beaucoup d’accès seront aux mêmes vignettes, donc beaucoup de journalisation redondante se produira et peut-être la contention sur la mémoire. Il peut être pratique si le matériel peut avoir la possibilité de ne pas déranger les accès aux vignettes s’ils ont été signalés ailleurs avant. Peut-être que l’état de ce suivi peut être réinitialisé à partir de l’API (probablement à des limites de trame).

Pince MinLOD par échantillon

Pour aider les nuanceurs à éviter les zones dans les ressources de diffusion en continu mipmapped qui sont connues comme étant non mappées, la plupart des instructions de nuanceur impliquant l’utilisation d’un échantillonneur (filtrage) ont un mode qui permet au nuanceur de passer un paramètre de pince MinLOD float32 supplémentaire à l’exemple de texture. Cette valeur se trouve dans l’espace de nombre mipmap de la vue, par opposition à la ressource sous-jacente.

Le matériel s’exécutemax(fShaderMinLODClamp,fComputedLOD)au même endroit dans le calcul LOD où se produit la pince MinLOD par ressource, qui est également une valeur max().

Si le résultat de l’application de la pince LOD par échantillon et d’autres pinces LOD définies dans l’échantillonneur est un ensemble vide, le résultat est le même résultat hors limites que la pince minLOD par ressource : 0 pour les composants au format surface et les valeurs par défaut pour les composants manquants.

L’instruction LOD (par exemple, tex2Dlod), qui précède la pince minLOD par échantillon décrite ici, retourne à la fois un LOD limité et nonclampé. Le LOD limité retourné par cette instruction LOD reflète toutes les restrictions, y compris la pince par ressource, mais pas une pince par échantillon. La pince par échantillon est contrôlée et connue par le nuanceur de toute façon, de sorte que l’auteur du nuanceur peut appliquer manuellement cette pince à la valeur de retour de l’instruction LOD si vous le souhaitez.

Filtrage de réduction min/max

Les applications peuvent choisir de gérer leurs propres structures de données qui les informent de ce que les mappages ressemblent à une ressource de diffusion en continu. Par exemple, il s’agit d’une surface qui contient un texel pour contenir des informations pour chaque vignette d’une ressource de diffusion en continu. Il est possible de stocker le premier LOD mappé à un emplacement de vignette donné. En effectuant un échantillonnage prudent de cette structure de données de la même façon que la ressource de diffusion en continu est destinée à être échantillonné, il est possible de découvrir ce que sera le LOD minimal entièrement mappé pour une empreinte de filtre de texture entière. Pour faciliter ce processus, Direct3D 11.2 introduit un nouveau mode échantillonneur universel, un filtrage min/max.

L’utilitaire de filtrage min/max pour le suivi LOD peut être utile à d’autres fins, par exemple, le filtrage des surfaces de profondeur.

Le filtrage de réduction minimale/maximale est un mode sur les échantillonneurs qui récupère le même ensemble de texels qu’un filtre de texture normal récupère. Mais au lieu de fusionner les valeurs pour produire une réponse, elle retourne le min() ou max() des texels extraits, sur une base par composant (par exemple, le min de toutes les valeurs R, séparément du min de toutes les valeurs G, etc.).

Les opérations min/max suivent les règles de précision arithmétique Direct3D. L’ordre des comparaisons n’a pas d’importance.

Pendant les opérations de filtre qui ne sont pas minimales/max, le poids d’un texel donné finit par être de 0,0. Un exemple est un échantillon linéaire avec des coordonnées de texture qui tombent directement sur un centre texel ; dans ce cas, 3 autres texels (ceux qu’ils sont peuvent varier par matériel) contribuent au filtre, mais avec 0 poids. Pour l’un de ces texels qui serait de 0 poids sur un filtre non-min/max, si le filtre est min/max, ces texels ne contribuent toujours pas au résultat (et les poids n’affectent pas autrement l’opération de filtre min/max).

La prise en charge de cette fonctionnalité dépend de la prise en charge de niveau 2 pour les ressources de diffusion en continu.

Accès de pipeline aux ressources de diffusion en continu