Choix d’une ressource
Une ressource est une collection de données utilisée par le pipeline 3D. La création de ressources et la définition de leur comportement constituent la première étape de la programmation de votre application. Ce guide traite des rubriques de base pour le choix des ressources requises par votre application.
Identifier les étapes de pipeline qui ont besoin de ressources
La première étape consiste à choisir la ou les phases du pipeline graphique qui utiliseront une ressource. Autrement dit, identifiez chaque étape qui lit les données d’une ressource, ainsi que les phases qui écrivent les données dans une ressource. Connaître les phases de pipeline où les ressources seront utilisées détermine les API qui seront appelées pour lier la ressource à la phase.
Ce tableau répertorie les types de ressources qui peuvent être liés à chaque étape de pipeline. Elle indique si la ressource peut être liée en tant qu’entrée ou sortie.
Étape de pipeline | Entrée/Sortie | Ressource | Type de ressource |
---|---|---|---|
Assembleur d'entrée | Dans | Tampon de vertex | Buffer |
Assembleur d'entrée | Dans | Mémoire tampon d’index | Buffer |
Étapes du nuanceur | Dans | Shader-ResourceView | Buffer, Texture1D, Texture2D, Texture3D |
Étapes du nuanceur | Dans | mémoire tampon Shader-Constant | Buffer |
Sortie du flux | Sortie | Buffer | Buffer |
Fusion de sortie | Sortie | Affichage de la cible de rendu | Buffer, Texture1D, Texture2D, Texture3D |
Fusion de sortie | Sortie | Vue Profondeur/Gabarit | Texture1D, Texture2D |
Identifier la façon dont chaque ressource sera utilisée
Une fois que vous avez choisi les étapes de pipeline que votre application utilisera (et par conséquent les ressources dont chaque étape aura besoin), l’étape suivante consiste à déterminer comment chaque ressource sera utilisée, c’est-à-dire si une ressource est accessible par le processeur ou le GPU.
Le matériel sur lequel votre application s’exécute aura au moins un processeur et un GPU. Pour choisir une valeur d’utilisation, déterminez le type de processeur qui doit lire ou écrire dans la ressource à partir des options suivantes.
Utilisation des ressources | Peut être mis à jour par | Fréquence de mise à jour |
---|---|---|
Default | GPU | Rarement |
Dynamique | UC | Fréquemment |
Staging | GPU | n/a |
Non modifiable | PROCESSEUR (uniquement au moment de la création de la ressource) | n/a |
L’utilisation par défaut doit être utilisée pour une ressource qui est censée être mise à jour par le processeur rarement (moins d’une fois par image). Dans l’idéal, le processeur n’écrit jamais directement dans une ressource avec une utilisation par défaut afin d’éviter des pénalités de performances potentielles.
L’utilisation dynamique doit être utilisée pour une ressource que le processeur met à jour relativement fréquemment (une ou plusieurs fois par image). Un scénario classique pour une ressource dynamique consiste à créer des mémoires tampons de vertex et d’index dynamiques qui seraient remplies au moment de l’exécution avec des données sur la géométrie visibles du point de vue de l’utilisateur pour chaque image. Ces mémoires tampons sont utilisées pour afficher uniquement la géométrie visible par l’utilisateur pour ce cadre.
L’utilisation intermédiaire doit être utilisée pour copier des données vers et à partir d’autres ressources. Un scénario classique consiste à copier des données dans une ressource avec une utilisation par défaut (à laquelle le processeur ne peut pas accéder) vers une ressource avec une utilisation intermédiaire (à laquelle l’UC peut accéder).
Les ressources immuables doivent être utilisées lorsque les données de la ressource ne changeront jamais.
Une autre façon de considérer la même idée consiste à penser à ce qu’une application fait avec une ressource.
Comment l’application utilise la ressource | Utilisation des ressources |
---|---|
Charger une seule fois et ne jamais mettre à jour | Immuable ou par défaut |
L’application remplit la ressource à plusieurs reprises | Dynamique |
Rendu en texture | Default |
Accès processeur des données GPU | Staging |
Si vous ne savez pas quelle utilisation choisir, commencez par l’utilisation par défaut, car il s’agit probablement du cas le plus courant. Une mémoire tampon Shader-Constant est le seul type de ressource qui doit toujours avoir une utilisation par défaut.
Liaison de ressources à des phases de pipeline
Une ressource peut être liée à plusieurs étapes de pipeline en même temps tant que les restrictions spécifiées lors de la création de la ressource sont respectées. Ces restrictions sont spécifiées en tant qu’indicateurs d’utilisation, indicateurs de liaison ou indicateurs d’accès au processeur. Plus précisément, une ressource peut être liée en tant qu’entrée et sortie simultanément, tant que la lecture et l’écriture d’une partie d’une ressource ne peuvent pas se produire en même temps.
Lors de la liaison d’une ressource, réfléchissez à la façon dont le GPU et le processeur accèdent à la ressource. Les ressources conçues dans un seul but (n’utilisent pas plusieurs indicateurs d’utilisation, de liaison et d’accès au processeur) entraîneront probablement de meilleures performances.
Par exemple, considérez le cas d’une cible de rendu utilisée comme texture plusieurs fois. Il peut être plus rapide d’avoir deux ressources : une cible de rendu et une texture utilisées comme ressource de nuanceur. Chaque ressource utilise un seul indicateur de liaison, indiquant « cible de rendu » ou « ressource de nuanceur ». Les données sont copiées de la texture cible de rendu vers la texture du nuanceur.
Dans cet exemple, cette technique peut améliorer les performances en isolant l’écriture de la cible de rendu de la lecture de texture du nuanceur. La seule façon d’être sûr est d’implémenter les deux approches et de mesurer la différence de performances dans votre application particulière.
Rubriques connexes
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour