Migration vers Direct3D 11

Cette section fournit des informations sur la migration vers Direct3D 11 à partir d’une version antérieure de Direct3D.

Direct3D 9 à Direct3D 11

L’API Direct3D 11 s’appuie sur les améliorations apportées à l’infrastructure dans Direct3D 10 et 10.1. Le portage de Direct3D 9 vers Direct3D 11 est similaire au déplacement de Direct3D 9 vers Direct3D 10. Voici les principaux défis à relever dans cet effort.

  • Suppression de toute l’utilisation du pipeline de fonctions fixes au profit des nuanceurs programmables créés exclusivement en HLSL (compilés via D3DCompiler au lieu de D3DX9).
  • Gestion de l’état basée sur des objets immuables plutôt que sur des bascules d’état individuelles.
  • Mise à jour pour respecter les exigences de liaison strictes des dispositions d’entrée de la mémoire tampon de vertex et des signatures de nuanceur.
  • Association d’affichages de ressources du nuanceur à toutes les ressources de texture.
  • Mappage de tout le contenu d’image à un DXGI_FORMAT, y compris la suppression de tous les formats de couleur 16 bits (5/5/5/1, 5/6/5, 4/4/4/4/4), la suppression de tous les formats de couleur 24 bits (8/8/8) et le classement strict des couleurs RVB.
  • Fractionner l’utilisation globale de l’état constant en plusieurs petites mémoires tampons constantes mises à jour plus efficacement.

Pour plus d’informations sur le passage de Direct3D 9 à Direct3D 10, consultez Considérations relatives à Direct3D 9 vers Direct3D 10.

Direct3D 10 à Direct3D 11

La conversion de programmes écrits pour utiliser l’API Direct3D 10 ou 10.1 est un processus simple, car Direct3D 11 est une extension de l’API existante. À une seule exception mineure (notée ci-dessous - filtrage de texte monochrome), toutes les méthodes et fonctionnalités de Direct3D 10/10.1 sont disponibles dans Direct3D 11. Le plan ci-dessous décrit les différences entre les deux API pour faciliter la mise à jour du code existant. Les principales différences sont les suivantes :

  • Les opérations de rendu (dessin, état, etc.) ne font plus partie de l’interface de l’appareil, mais font plutôt partie de la nouvelle interface DeviceContext, ainsi que des méthodes de mappage/unmap de ressources et de requête d’appareil.
  • Direct3D 11 inclut toutes les améliorations et modifications apportées entre Direct3D 10.0 et 10.1

Énumérations et définitions

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMATPlusieurs nouveaux formats DXGI ont été définis.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REFLa fonctionnalité switch-to-ref n’est pas prise en charge par Direct3D 11.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPENotez que les identificateurs d’énumération dans D3D_DRIVER_TYPE ont été redéfinis à partir des identificateurs dans D3D10_DRIVER_TYPE. Par conséquent, veillez à utiliser les identificateurs d’énumération au lieu de nombres littéraux.
D3D_DRIVER_TYPE est défini dans D3Dcommon.h.
D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAGNotez que la plupart de ces indicateurs ont été redéfinis. Veillez donc à utiliser des identificateurs d’énumération plutôt que des nombres littéraux.
D3D10_FILTER D3D11_FILTERNotez que le filtrage de texte D3D10_FILTER_TEXT_1BIT a été supprimé de Direct3D 11. Voir DirectWrite.
D3D10_COUNTER D3D11_COUNTERNotez que les compteurs indépendants du fournisseur ont été supprimés pour Direct3D 11, car ils étaient rarement pris en charge.
D3D10_x D3D11_x De nombreuses énumérations et définitions sont identiques, ont des limites plus importantes ou ont des valeurs supplémentaires.

Structures

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRYAjoute Stream.
D3D10_BLEND_DESC D3D11_BLEND_DESCNotez que cette structure a considérablement changé de 10 à 10.1 pour fournir l’état de fusion par cible de rendu
D3D10_BUFFER_DESC D3D11_BUFFER_DESCAjoute une structureByteStride à utiliser avec les ressources Compute Shader
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESCNotez que des membres d’union supplémentaires ont été ajoutés à cette structure pour 10.1
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESCA un nouveau membre Flags.
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICSAjoute plusieurs nouveaux compteurs d’étape du nuanceur.
D3D10_x D3D11_x De nombreuses structures sont identiques entre les deux API.

Interfaces

Direct3D 10 Direct3D 11
ID3D10Device ID3D11Device et ID3D11DeviceContext
L’interface de l’appareil a été divisée en deux parties. Pour un portage rapide, vous pouvez utiliser ID3D11Device::GetImmediateContext.
Les méthodes « ID3D10Device::GetTextFilterSize » et « SetTextFilerSize » n’existent plus. Voir DirectWrite.
Create*Shader prend un paramètre facultatif supplémentaire pour ID3D11ClassLinkage.
*SetShader et *GetShader prennent des paramètres facultatifs supplémentaires pour ID3D11ClassInstance.
CreateGeometryShaderWithStreamOutput prend un tableau et un nombre pour plusieurs foulées de flux de sortie.
La limite du paramètre NumEntries de CreateGeometryShaderWithStreamOutput est passée à D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT dans Direct3D 11.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef ID3D11SwitchToRefLa fonctionnalité basculer vers ref n’est pas prise en charge dans Direct3D 11.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3DLes méthodes Map et Unmap ont été déplacées vers ID3D11DeviceContext, et toutes les méthodes Map utilisent D3D11_MAPPED_SUBRESOURCE au lieu d’un void**.
ID3D10Asynchronous ID3D11AsynchronousBegin, End et GetData ont été déplacés vers ID3D11DeviceContext.
ID3D10x ID3D11x De nombreuses interfaces sont identiques entre les deux API.
Solution 10/10.1 Solution 11
API de réflexion HLSL (D3D10Compile*, D3DX10Compile*) et de reflet de nuanceur D3DCompiler (voir D3DCompiler.h) Remarque : Pour les applications du Windows Store, les API D3DCompiler sont prises en charge uniquement pour le développement, et non pour le déploiement.
Effets 10 Effets 11 est disponible en tant que source partagée en ligne. Note: Cette solution n’est pas adaptée aux applications du Windows Store, car elle nécessite les API D3DCompiler au moment de l’exécution (déploiement).
Mathématiques D3DX9/D3DX10 DirectXMath
D3DX10 D3DX11 dans le SDK DirectX hérité DirectXTex, DirectXTK et DirectXMesh offrent des alternatives à de nombreuses technologies dans les bibliothèques D3DX10 et D3DX11 héritées.
Direct2D et DirectWrite offrent une prise en charge de haute qualité pour le rendu des lignes et des polices stylées.

Pour plus d’informations sur le Kit de développement logiciel (SDK) DirectX hérité, consultez Où se trouve le Kit de développement logiciel (SDK) DirectX ?.

Direct3D 10.1 vers Direct3D 11

Direct3D 10.1 est une extension de l’interface Direct3D 10, et toutes les fonctionnalités de Direct3D 10.1 sont disponibles dans Direct3D 11. La plupart des portages de 10.1 vers 11 sont déjà traités ci-dessus, passant de 10 à 11.

Énumérations et définitions

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVELIdentique mais défini dans D3DCommon.h plus l’ajout de D3D_FEATURE_LEVEL_11_0 pour le matériel de 11 classes, ainsi que D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 et D3D_FEATURE_LEVEL_9_3 pour 10level9
(D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2 et D3D10_FEATURE_LEVEL_9_3 ont également été ajoutés pour 10.1 à d3d10_1.h)

Structures

Direct3D 10.1 Direct3D 11
D3D10_BLEND_DESC1 D3D11_BLEND_DESCLa version 11 est identique à la version 10.1.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESCLa version 11 est identique à la version 10.1.

Interfaces

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Device et ID3D11DeviceContext
L’interface de l’appareil a été divisée en deux parties. Pour un portage rapide, vous pouvez utiliser ID3D11Device::GetImmediateContext.
Les méthodes « ID3D10Device::GetTextFilterSize » et « SetTextFilerSize » n’existent plus. Voir DirectWrite.
Create*Shader prend un paramètre facultatif supplémentaire pour ID3D11ClassLinkage.
*SetShader et *GetShader prennent des paramètres facultatifs supplémentaires pour ID3D11ClassInstance.
CreateGeometryShaderWithStreamOutput prend un tableau et un nombre pour plusieurs foulées de flux de sortie.
La limite du paramètre NumEntries de CreateGeometryShaderWithStreamOutput est passée à D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT dans Direct3D 11.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Nouvelles fonctionnalités de Direct3D 11

Une fois votre code mis à jour pour utiliser l’API Direct3D 11, de nombreuses nouvelles fonctionnalités sont à prendre en compte.

  • Rendu multithread via des listes de commandes et plusieurs contextes
  • Implémentation d’algorithmes avancés à l’aide du nuanceur de calcul (à l’aide de profils de nuanceur 4.0, 4.1 ou 5.0)
  • Nouvelles fonctionnalités matérielles de 11 classes :
    • Modèle de nuanceur HLSL 5.0
    • Liaison de nuanceur dynamique
    • Pavage via les nuanceurs de coque et de domaine
    • Nouveaux formats de compression de bloc : BC6H pour les images HDR, BC7 pour les images standard plus fidèles
  • Utilisation de la technologie 10level9 pour le rendu sur de nombreux appareils Shader Model 2.0 et Shader Model 3.0 via l’API DIrect3D 11 pour la prise en charge du matériel vidéo bas de gamme sur Windows Vista et Windows 7.
  • Exploitation du périphérique de rendu logiciel WARP.

Nouvelles fonctionnalités de DirectX 11.1

Windows 8 inclut d’autres améliorations graphiques DirectX à prendre en compte lorsque vous implémentez votre code graphique DirectX, notamment Direct3D 11.1, DXGI 1.2, Windows Display Driver Model (WDDM) 1.2, le matériel de niveau de fonctionnalité 11.1, les contextes d’appareil Direct2D et d’autres améliorations.

La prise en charge partielle de Direct3D 11.1 est disponible sur Windows 7 ainsi que via la mise à jour de plateforme pour Windows 7, qui est disponible via la mise à jour de plateforme pour Windows 7.

Nouvelles fonctionnalités de DirectX 11.2

Le Windows 8.1 inclut Direct3D 11.2, DXGI 1.3 et d’autres améliorations.

Guide de programmation pour Direct3D 11

Effets (Direct3D 11)