Choix d’une ressourceChoosing a resource

Une ressource est une collection de données qui est utilisée par le pipeline 3D.A resource is a collection of data that is used by the 3D pipeline. La création de ressources et la définition de leur comportement constituent la première étape de la programmation de votre application.Creating resources and defining their behavior is the first step toward programming your application. Ce guide couvre les rubriques de base pour le choix des ressources requises par votre application.This guide covers basic topics for choosing the resources required by your application.

Identifier les étapes de pipeline nécessitant des ressourcesIdentify pipeline stages that need resources

La première étape consiste à choisir l’étape (ou les étapes) du pipeline graphique qui utilisera une ressource.The first step is to choose the graphics pipeline stage (or stages) that will use a resource. Autrement dit, Identifiez chaque étape qui lira des données à partir d’une ressource, ainsi que les étapes permettant d’écrire des données dans une ressource.That is, identify each stage that will read data from a resource as well as the stages that will write data out to a resource. Connaître les étapes de pipeline dans lesquelles les ressources seront utilisées détermine les API qui seront appelées pour lier la ressource à l’étape.Knowing the pipeline stages where the resources will be used determines the APIs that will be called to bind the resource to the stage.

Ce tableau répertorie les types de ressources qui peuvent être liées à chaque étape du pipeline.This table lists the types of resources that can be bound to each pipeline stage. Elle indique si la ressource peut être liée en tant qu’entrée ou en sortie.It includes whether the resource can be bound as an input or an output.

Étape de pipelinePipeline Stage Entrée/SortieIn/Out RessourceResource Type de ressourceResource Type
Assembleur d'entréeInput Assembler DansIn Mémoire tampon de vertexVertex Buffer BufferBuffer
Assembleur d'entréeInput Assembler DansIn Mémoire tampon d’indexIndex Buffer BufferBuffer
Étapes du nuanceurShader Stages DansIn Nuanceur-ResourceViewShader-ResourceView Buffer, Texture1D, Texture2D, Texture3DBuffer, Texture1D, Texture2D, Texture3D
Étapes du nuanceurShader Stages DansIn Tampon de nuanceur-constanteShader-Constant Buffer BufferBuffer
Sortie de fluxStream Output SortieOut BufferBuffer BufferBuffer
Fusion de sortieOutput Merger SortieOut Affichage de la cible de renduRender-target View Buffer, Texture1D, Texture2D, Texture3DBuffer, Texture1D, Texture2D, Texture3D
Fusion de sortieOutput Merger SortieOut Affichage de la profondeur/du gabaritDepth/Stencil View Texture1D, Texture2DTexture1D, Texture2D

 

Identifier la manière dont chaque ressource sera utiliséeIdentify how each resource will be used

Une fois que vous avez choisi les étapes de pipeline que votre application utilisera (et par conséquent les ressources requises par chaque étape), l’étape suivante consiste à déterminer la manière dont chaque ressource sera utilisée, c’est-à-dire, si une ressource est accessible par le processeur ou le GPU.Once you have chosen the pipeline stages that your application will use (and therefore the resources that each stage will require), the next step is to determine how each resource will be used, that is, whether a resource can be accessed by the CPU or the GPU.

Le matériel sur lequel votre application s’exécute aura au minimum au moins un processeur et un GPU.The hardware that your application is running on will have a minimum of at least one CPU and one 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.To pick a usage value, consider which type of processor needs to read or write to the resource from the following options.

Utilisation des ressourcesResource Usage Peut être mis à jour parCan be updated by Fréquence des mises à jourFrequency of Update
DefaultDefault GPUGPU rarementinfrequently
DynamiqueDynamic UCCPU fréquemmentfrequently
StagingStaging GPUGPU n/an/a
Non modifiableImmutable UC (uniquement au moment de la création de la ressource)CPU (only at resource creation time) n/an/a

 

L’utilisation par défaut doit être utilisée pour une ressource qui est censée être mise à jour par l’UC rarement (moins d’une fois par frame).Default usage should be used for a resource that is expected to be updated by the CPU infrequently (less than once per frame). Dans l’idéal, l’UC n’écrira jamais directement dans une ressource avec une utilisation par défaut afin d’éviter des pénalités de performances potentielles.Ideally, the CPU would never write directly to a resource with default usage so as to avoid potential performance penalties.

L’utilisation dynamique doit être utilisée pour une ressource que l’UC met à jour relativement souvent (une ou plusieurs fois par trame).Dynamic usage should be used for a resource that the CPU updates relatively frequently (once or more per frame). Un scénario classique pour une ressource dynamique consiste à créer des tampons de vertex et d’index dynamiques qui seraient remplis au moment de l’exécution avec des données relatives à la géométrie visible du point de vue de l’utilisateur pour chaque image.A typical scenario for a dynamic resource would be to create dynamic vertex and index buffers that would be filled at runtime with data about the geometry visible from the point of view of the user for each frame. Ces mémoires tampons sont utilisées pour afficher uniquement la géométrie visible par l’utilisateur pour ce frame.These buffers would be used to render only the geometry visible to the user for that frame.

L’utilisation intermédiaire doit être utilisée pour copier des données vers et à partir d’autres ressources.Staging usage should be used to copy data to and from other resources. Un scénario classique consiste à copier des données dans une ressource avec l’utilisation par défaut (à laquelle l’UC ne peut pas accéder) à une ressource avec une utilisation intermédiaire (à laquelle l’UC peut accéder).A typical scenario would be to copy data in a resource with default usage (which the CPU cannot access) to a resource with staging usage (which the CPU can access).

Les ressources immuables doivent être utilisées lorsque les données de la ressource ne seront jamais modifiées.Immutable resources should be used when the data in the resource will never change.

Une autre façon de regarder la même idée est de réfléchir à ce que fait une application avec une ressource.Another way of looking at the same idea is to think of what an application does with a resource.

Comment l’application utilise la ressourceHow Application uses the Resource Utilisation des ressourcesResource Usage
Charger une seule fois et ne jamais la mettre à jourLoad once and never update Immuable ou par défautImmutable or Default
L’application remplit les ressources à plusieurs reprisesApplication fills resource repeatedly DynamiqueDynamic
Restituer à la textureRender to texture DefaultDefault
Accès de l’UC des données GPUCPU access of GPU data StagingStaging

 

Si vous n’êtes pas sûr de l’utilisation à choisir, commencez par utiliser l’utilisation par défaut, car il est supposé être le cas le plus courant.If you are unsure what usage to choose, start with the default usage as it is expected to be the most common case. Une mémoire tampon de nuanceur constante est le type de ressource qui doit toujours avoir une utilisation par défaut.A Shader-Constant buffer is the one resource type that should always have default usage.

Liaison de ressources à des étapes de pipelineBinding resources to pipeline stages

Une ressource peut être liée à plusieurs étapes de pipeline en même temps, à condition que les restrictions spécifiées lors de la création de la ressource soient remplies.A resource can be bound to more than one pipeline stage at the same time as long as the restrictions specified when the resource was created are met. Ces restrictions sont spécifiées comme indicateurs d’utilisation, indicateurs de liaison ou indicateurs d’accès au processeur.These restrictions are specified as usage flags, bind flags, or cpu access flags. Plus précisément, une ressource peut être liée en tant qu’entrée et en sortie simultanément, à condition que la lecture et l’écriture d’une partie d’une ressource ne puissent pas se produire en même temps.More specifically, a resource can be bound as an input and an output simultaneously as long as reading and writing part of a resource cannot happen at the same time.

Lors de la liaison d’une ressource, réfléchissez à la façon dont le GPU et l’UC accèdent à la ressource.When binding a resource, think about how the GPU and the CPU will access the resource. Les ressources qui sont conçues pour un seul but (n’utilisez pas plusieurs indicateurs d’accès d’utilisation, de liaison et d’UC) peuvent avoir une meilleure performance.Resources that are designed for a single purpose (do not use multiple usage, bind, and cpu access flags) will more than likely result in better performance.

Par exemple, considérez le cas d’une cible de rendu utilisée comme texture plusieurs fois.For example, consider the case of a render target used as a texture multiple times. Il peut être plus rapide d’avoir deux ressources : une cible de rendu et une texture utilisées comme ressource de nuanceur.It may be faster to have two resources: a render target and a texture used as a shader resource. Chaque ressource n’utilise qu’un seul indicateur de liaison, indiquant « cible de rendu » ou « ressource de nuanceur ».Each resource would use only one bind flag, indicating "render target" or "shader resource". Les données sont copiées de la texture de cible de rendu vers la texture du nuanceur.The data would be copied from the render-target texture to the shader texture.

Dans cet exemple, cette technique peut améliorer les performances en isolant l’écriture de la cible de rendu à partir de la lecture de la texture du nuanceur.This technique in this example may improve performance by isolating the render-target write from the shader-texture read. 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.The only way to be sure is to implement both approaches and measure the performance difference in your particular application.

Rubriques connexesRelated topics

RessourcesResources