Fonctionnalités direct3D 10.1

Direct3D 10.1 étend l’ensemble de fonctionnalités de Direct3D 10.0 avec les nouvelles fonctionnalités suivantes :

  • Modes de fusion : modes de fusion indépendants par cible de rendu à l’aide de la nouvelle interface blend-state (voir l’interface ID3D10BlendState1). Les opérations de fusion double source sont limitées au rendu de l’emplacement cible 0 ; vous ne pouvez pas écrire dans d’autres sorties ou avoir des cibles de rendu liées à des emplacements autres que l’emplacement 0.

  • Comportement de triage : Les faces à surface nulle sont automatiquement supprimées. Cela affecte uniquement le rendu filaire.

  • Règles à virgule flottante : utilise les mêmes règles IEEE-754 pour les opérations à virgule flottante EXCEPT 32 bits. Les opérations à virgule flottante ont été renforcées pour produire un résultat dans le 0,5 ULP (unit-last-place) du résultat infiniment précis. Cela s’applique à l’addition, à la soustraction et à la multiplication. (précision à 0,5 ULP pour la multiplication, 1,0 ULP pour la réciproque).

  • Formats : la précision de la fusion float16 a augmenté à 0,5 ULP. La fusion est également nécessaire pour les formats UNORM16/SNORM16/SNORM8.

  • Anti-alias multi-échantillons : le multi-échantillonnage a été amélioré pour généraliser la transparence basée sur la couverture et rendre le travail de multi-échantillonnage plus efficace grâce au rendu multi-passes. Pour ce faire, toutes les sémantiques multi-échantillons sont définies comme si le nuanceur de pixels s’exécutait toujours une fois par échantillon (fréquence d’échantillonnage), calculant une couleur distincte par échantillon. Si un nuanceur de pixels n’utilise aucun attribut par échantillon, il calcule la même valeur pour chaque échantillon couvert dans un pixel. Dans ce cas, il équivaut au matériel exécutant le nuanceur une fois par pixel (fréquence de pixels), en répliquant le résultat sur tous les exemples couverts. Naturellement, l’exécution à la fréquence des pixels produit toujours les mêmes résultats que l’exécution du même nuanceur à la fréquence de l’échantillon, lorsque les attributs sont échantillonné à une fréquence de pixels. La statistique du pipeline PSInvocations incrémente à la fréquence de l’échantillon, sauf si le nuanceur s’exécute à la fréquence des pixels.

  • La bande passante d’étape de pipeline a augmenté la quantité de données qui peuvent être passées entre les étapes du nuanceur :

    Ressource limites
    Registres entre les étapes du nuanceur 32 (x 4-composant 32 bits)
    Registres d’entrée du nuanceur de vertex 32
    Emplacements d’entrée de l’assembleur d’entrées 32

     

  • Règles de rastérisation : les règles de rastérisation ont changé pour les lignes, en outre, de nouvelles fonctionnalités ont été ajoutées.

    • MultisampleEnable affecte uniquement la rastérisation de lignes (les points et les triangles ne sont pas affectés) et est utilisé pour choisir un algorithme de dessin de ligne. Cela signifie que certaines rastérisations multi-échantillons de Direct3D 10 ne sont plus prises en charge.
    • Nouvelle exécution du nuanceur de pixels de fréquence d’échantillonnage avec rastérisation primitive.
  • Ressources – CopyResource est activé dans deux nouveaux scénarios :

    • Les surfaces MSAA de couleur et de profondeur/de gabarit peuvent désormais être utilisées avec CopyResource comme source ou destination
    • Formatez la conversion lors de la copie entre certaines représentations préstructurées 32/64/128 bits, des ressources typées et des représentations compressées des mêmes largeurs de bits.
  • Échantillonnage de texture : les instructions sample_c et sample_c_lz sont définies pour fonctionner avec Texture2DArrays et TextureCubeArrays. Utilisez le membre de Location (composant alpha) pour spécifier un index de tableau.

  • Vues : TextureCube et la nouvelle TextureCubeArray (voir D3D10_TEXCUBE_ARRAY_SRV1) ne sont pas des ressources réelles, mais sont de nouvelles vues sur une ressource Texture2DArray. Créez une vue de ressource à partir d’une ressource Texture2DArray avec un nouvel indicateur d’utilisation (D3D10_RESOURCE_MISC_TEXTURECUBE), utilisez la nouvelle interface ID3D10ShaderResourceView1 pour lier une vue de texture de cube au pipeline.

Les nouvelles fonctionnalités nécessitent un type d’appareil 10.1 (voir l’interface ID3D10Device1), qui peut être créé en appelant D3D10CreateDevice1. Ou bien vous pouvez créer l’appareil et la chaîne d’échange en même temps en appelant D3D10CreateDeviceAndSwapChain1.

Dans Windows Vista Service Pack 1, les DLL Direct3D 10.0 et Direct3D 10.1 existent côte à côte sur le système. Pour accéder aux fonctionnalités 10.1, effectuez l’une des opérations suivantes :

Accès aux fonctionnalités 10.1 sur Vista Gold et Vista Service Pack 1

Les développeurs qui souhaitent prendre en charge Vista Gold et SP1 devront tenir compte de l’absence de nouvelles extensions d’API 10.1 sur Vista Gold. DXUT et D3DX10 fournissent des fonctions pratiques pour créer l’appareil approprié, en fonction des DLL disponibles sur le système et du matériel disponible (10.0 ou 10.1). L’appareil 10.1 hérite de l’appareil 10.0 et peut être récupéré à l’aide de QueryInterface(). Il est recommandé que chaque application effectue le suivi du type d’appareil et conserve un pointeur vers l’appareil 10.1 (le cas échéant) pour éviter les appels QueryInterface fréquents lorsque la fonctionnalité 10.1 est souhaitée. De même, lorsque les vues de ressources et les objets d’état 10.1 sont associés par la classe personnalisée d’une application, il est recommandé que l’application suive s’il s’agit d’un objet de type 10.0 ou 10.1 pour éviter les appels QueryInterface() redondants. D3DX10 inclut un ensemble de fonctions utilitaires pour simplifier ce processus (voir D3DX10CreateDeviceet D3DX10CreateDeviceAndSwapChain).

Accès exclusif aux fonctionnalités 10.1 sur Vista Service Pack 1

Certains développeurs peuvent choisir de demander Vista Service Pack 1, qui sera distribué largement aux utilisateurs finaux et inclut une série d’améliorations en dehors de Direct3D 10.1. Ces développeurs peuvent utiliser exclusivement les en-têtes et bibliothèques Direct3D 10.1, adoptant une dépendance sur les DLL Direct3D 10.1 qui prennent en charge à la fois le matériel 10.0 et 10.1 (certains appels peuvent échouer, toutefois, sur les appareils 10.0 où la nouvelle fonctionnalité n’est pas prise en charge).

Remarques supplémentaires :

  • Les API exposées dans la D3DX10.dll acceptent les appareils 10.0 et 10.1, et tirent parti des fonctionnalités 10.1 lorsqu’elles sont disponibles.
  • D3D10SDKLayers.dll prend en charge un appareil 10.1 et peut générer le débogage approprié pour les fonctionnalités 10.1.
  • D3D10Ref.dll implémente un appareil logiciel 10.0 et 10.1.
  • D3DX10 et FXC prennent en charge le modèle de nuanceur 10.1 mis à jour avec les cibles suivantes : vs_4_1, gs_4_1, ps_4_1 et fx_4_1, qui peuvent être liées à un appareil 10.1. Un appareil 10.1 prend en charge le modèle de nuanceur 4.0 et les nuanceurs 4.1.
  • L’infrastructure d’effet Direct3D 10.0 prend en charge les appareils 10.0 et 10.1. Toutefois, toute technique qui inclut des nuanceurs de modèle de nuanceur 4.1 ou les nouvelles fonctionnalités 10.1 doit utiliser un appareil 10.1.

Guide de programmation pour Direct3D 10