Objets d’état (Direct3D 10)

Dans Direct3D 10, l’état de l’appareil est regroupé en objets d’état qui réduisent considérablement le coût des changements d’état. Il existe plusieurs objets d’état, et chacun d’eux est conçu pour initialiser un ensemble d’état pour une étape de pipeline particulière. Vous pouvez créer jusqu’à 4 096 de chaque type d’objet d’état.

état Input-Layout

Ce groupe d’états (voir D3D10_INPUT_ELEMENT_DESC) dicte la façon dont la phase d’assembleur d’entrée lit les données des mémoires tampons d’entrée et les assemble pour les utiliser par le nuanceur de vertex. Cela inclut l’état tel que le nombre d’éléments dans la mémoire tampon d’entrée et la signature des données d’entrée. La phase d’assembleur d’entrée est une nouvelle étape du pipeline dont le travail consiste à diffuser en continu des primitives de la mémoire vers le pipeline.

Pour créer un objet input-layout-state, consultez CreateInputLayout.

État du rastériseur

Ce groupe d’états (voir D3D10_RASTERIZER_DESC) initialise la phase de rastériseur. Cet objet inclut des états tels que les modes de remplissage ou d’abattage, l’activation d’un rectangle à ciseaux pour la coupe et la définition de paramètres multiéchantillons. Cette étape rastérise les primitives en pixels, en effectuant des opérations telles que le découpage et le mappage des primitives à la fenêtre d’affichage.

Pour créer un objet rasterizer-state, consultez CreateRasterizerState.

état Depth-Stencil

Ce groupe d’états (voir D3D10_DEPTH_STENCIL_DESC) initialise la partie de gabarit de profondeur de l’étape sortie-fusion. Plus précisément, cet objet initialise le test de profondeur et de gabarit.

Pour créer un objet depth-stencil-state, consultez CreateDepthStencilState.

État de fusion

Ce groupe d’états (voir D3D10_BLEND_DESC) initialise la partie fusion de la phase de fusion-sortie.

Pour créer un objet blend-state, consultez CreateBlendState.

État de l’échantillonneur

Ce groupe d’états (voir D3D10_SAMPLER_DESC) initialise un objet sampler. Un objet sampler est utilisé par les étapes du nuanceur pour filtrer les textures en mémoire.

Différences entre Direct3D 9 et Direct3D 10 :

  • Dans Direct3D 10, l’objet sampler n’est plus lié à une texture spécifique, il décrit simplement comment effectuer un filtrage en fonction de n’importe quelle ressource attachée.

 

Pour créer un objet sampler-state, consultez CreateSamplerState.

Considérations relatives aux performances

La conception de l’API pour utiliser des objets d’état crée plusieurs avantages en matière de performances. Il s’agit notamment de la validation de l’état au moment de la création de l’objet, de l’activation de la mise en cache des objets d’état dans le matériel et de la réduction considérablement de la quantité d’état passée lors d’un appel d’API de paramètre d’état (en passant un handle à l’objet d’état au lieu de l’état).

Pour obtenir ces améliorations des performances, vous devez créer vos objets d’état au démarrage de votre application, bien avant votre boucle de rendu. Les objets d’état sont immuables, c’est-à-dire qu’une fois qu’ils sont créés, vous ne pouvez pas les modifier. Au lieu de cela, vous devez les détruire et les recréer. Pour faire face à cette restriction, vous pouvez créer jusqu’à 4 096 objets d’état de chaque type. Par exemple, vous pouvez créer plusieurs objets sampler avec différentes combinaisons d’état de l’échantillonneur. La modification de l’état de l’échantillonneur s’effectue ensuite en appelant l’API Set appropriée qui passe un handle à l’objet (par opposition à l’état de l’échantillonneur). Cela réduit considérablement la surcharge pendant chaque trame de rendu pour le changement d’état, car le nombre d’appels et la quantité de données sont considérablement réduits.

Vous pouvez également choisir d’utiliser le système d’effet qui gérera automatiquement la création et la destruction efficaces des objets d’état pour votre application.

Fonctionnalités de l’API (Direct3D 10)