Share via


Fonctionnalités de Direct3D 11.1

La fonctionnalité suivante a été ajoutée dans Direct3D 11.1, qui est incluse avec Windows 8, Windows RT et Windows Server 2012. La prise en charge partielle de Direct3D 11.1 est disponible sur Windows 7 et Windows Server 2008 R2 via la mise à jour de plateforme pour Windows 7, qui est disponible via Platform Update pour Windows 7.

Améliorations apportées au suivi du nuanceur et au compilateur

Direct3D 11.1 vous permet d’utiliser le suivi de nuanceur pour vous assurer que votre code fonctionne comme prévu et, si ce n’est pas le cas, vous pouvez découvrir et résoudre le problème. Le Kit de développement logiciel (SDK) Windows pour Windows 8 contient des améliorations du compilateur HLSL. Le suivi du nuanceur et le compilateur HLSL sont implémentés dans D3dcompiler_nn.dll.

L’API de suivi du nuanceur et les améliorations apportées au compilateur HLSL se composent des méthodes et fonctions suivantes.

La bibliothèque D3dcompiler.lib nécessite D3dcompiler_nn.dll. Cette DLL ne fait pas partie de Windows 8 ; elle se trouve dans le dossier \bin du Kit de développement logiciel (SDK) Windows pour Windows 8 avec la version de ligne de commande Fxc.exe du compilateur HLSL.

Notes

Bien que vous puissiez utiliser cette combinaison de bibliothèques et de DLL pour le développement, vous ne pouvez pas déployer d’applications du Windows Store qui utilisent cette combinaison. Par conséquent, vous devez à la place compiler des nuanceurs HLSL avant de livrer votre application du Windows Store. Vous pouvez écrire des fichiers binaires de compilation HLSL sur le disque, ou le compilateur peut générer des en-têtes avec des tableaux d’octets statiques qui contiennent les données blob du nuanceur. Vous utilisez l’interface ID3DBlob pour accéder aux données blob. Pour développer votre application du Windows Store, appelez D3DCompile2 ou D3DCompileFromFile pour compiler la source HLSL brute, puis alimentez les données blob obtenues dans Direct3D.

 

Partage d’appareils Direct3D

Direct3D 11.1 permet aux API Direct3D 10 et Direct3D 11 d’utiliser un appareil de rendu sous-jacent.

Cette fonctionnalité Direct3D 11.1 se compose des méthodes et de l’interface suivantes.

Vérifier la prise en charge des nouvelles fonctionnalités et formats Direct3D 11.1

Direct3D 11.1 vous permet d’case activée de nouvelles fonctionnalités que le pilote graphique peut prendre en charge et de nouvelles façons de prendre en charge un format sur un appareil. Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 spécifie également de nouvelles valeurs DXGI_FORMAT .

Cette fonctionnalité Direct3D 11.1 se compose de l’API suivante.

Utiliser la précision minimale HLSL

À compter de Windows 8, les pilotes graphiques peuvent implémenter des types de données scalaires HLSL de précision minimale en utilisant toute précision supérieure ou égale à leur précision de bits spécifiée. Lorsque votre code de nuanceur de précision minimale HLSL est utilisé sur du matériel qui implémente la précision minimale HLSL, vous utilisez moins de bande passante mémoire et, par conséquent, vous utilisez également moins d’alimentation système.

Vous pouvez interroger la prise en charge de précision minimale que le pilote graphique fournit en appelant ID3D11Device::CheckFeatureSupport avec la valeur D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . Dans cet appel ID3D11Device::CheckFeatureSupport , passez un pointeur vers une structure D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT que ID3D11Device::CheckFeatureSupport remplit avec les niveaux de précision minimaux pris en charge par le pilote pour l’étape du nuanceur de pixels et pour les autres étapes du nuanceur. Les informations retournées indiquent simplement que le matériel graphique peut effectuer des opérations HLSL avec une précision inférieure à la précision flottante 32 bits standard, mais ne garantit pas que le matériel graphique s’exécutera réellement à une précision inférieure.

Vous n’avez pas besoin de créer plusieurs nuanceurs qui n’utilisent pas la précision minimale. Au lieu de cela, créez des nuanceurs avec une précision minimale, et les variables de précision minimale se comportent à une précision complète de 32 bits si le pilote graphique signale qu’il ne prend pas en charge la précision minimale. Pour plus d’informations sur la précision minimale HLSL, consultez Utilisation de la précision minimale HLSL.

Les nuanceurs de précision minimale HLSL ne fonctionnent pas sur les systèmes d’exploitation avant Windows 8.

Spécifier des plans de découpage utilisateur dans HLSL au niveau de fonctionnalité 9 et supérieur

À compter de Windows 8, vous pouvez utiliser l’attribut de fonction clipplanes dans une déclaration de fonction HLSL plutôt que SV_ClipDistance pour que votre nuanceur fonctionne au niveau de la fonctionnalité 9_x ainsi qu’au niveau de fonctionnalité 10 et supérieur. Pour plus d’informations, consultez Plans de découpage utilisateur sur le matériel de niveau de fonctionnalité 9.

Créer des mémoires tampons constantes plus grandes qu’un nuanceur peut accéder

Direct3D 11.1 vous permet de créer des mémoires tampons constantes supérieures à la taille maximale des mémoires tampons constantes auxquelles un nuanceur peut accéder (constantes 4096 32 bits*4 composants – 64 Ko). Plus tard, lorsque vous liez les mémoires tampons au pipeline, par exemple, via PSSetConstantBuffers ou PSSetConstantBuffers1, vous pouvez spécifier une plage de mémoires tampons auxquelles le nuanceur peut accéder et qui correspond à la limite de 4096.

Direct3D 11.1 met à jour la méthode ID3D11Device::CreateBuffer pour cette fonctionnalité.

Utiliser des opérations logiques dans une cible de rendu

Direct3D 11.1 vous permet d’utiliser des opérations logiques plutôt que de fusionner dans une cible de rendu. Toutefois, vous ne pouvez pas combiner des opérations logiques avec la fusion entre plusieurs cibles de rendu.

Cette fonctionnalité Direct3D 11.1 se compose de l’API suivante.

Forcer le nombre d’échantillons à créer un état de rastériseur

Direct3D 11.1 vous permet de spécifier un nombre d’échantillons forcés lorsque vous créez un état de rastériseur.

Cette fonctionnalité Direct3D 11.1 se compose de l’API suivante.

Notes

Si vous souhaitez effectuer un rendu avec le nombre d’échantillons forcé à 1 ou supérieur, vous devez suivre les instructions suivantes :

  • Ne pas lier les vues de gabarit de profondeur.
  • Désactivez les tests de profondeur.
  • Vérifiez que le nuanceur ne génère pas de profondeur.
  • Si vous avez des vues de cible de rendu liées (D3D11_BIND_RENDER_TARGET) et que vous avez forcé le nombre d’exemples à plus de 1, assurez-vous que chaque cible de rendu n’a qu’un seul exemple.
  • N’utilisez pas le nuanceur à la fréquence de l’échantillon. Par conséquent, ID3D11ShaderReflection::IssampleFrequencyShader retourne FALSE.

Sinon, le comportement de rendu n’est pas défini. Pour plus d’informations sur la configuration du gabarit de profondeur, consultez Configuration des fonctionnalités de Depth-Stencil.

 

Traiter des ressources vidéo avec des nuanceurs

Direct3D 11.1 vous permet de créer des vues (SRV/RTV/UAV) sur des ressources vidéo afin que les nuanceurs Direct3D puissent traiter ces ressources vidéo. Le format d’une ressource vidéo sous-jacente limite les formats que la vue peut utiliser. L’énumération DXGI_FORMAT contient de nouvelles valeurs de format de ressource vidéo. Ces valeurs DXGI_FORMAT spécifient les formats d’affichage valides que vous pouvez créer et la façon dont le runtime Direct3D 11.1 mappe la vue. Vous pouvez créer plusieurs vues de différentes parties de la même surface et, selon le format, les tailles des vues peuvent différer les unes des autres.

Direct3D 11.1 met à jour les méthodes suivantes pour cette fonctionnalité.

Prise en charge étendue des ressources Texture2D partagées

Direct3D 11.1 garantit que vous pouvez partager des ressources Texture2D que vous avez créées avec des types de ressources et des formats particuliers. Pour partager des ressources Texture2D, utilisez les indicateurs D3D11_RESOURCE_MISC_SHARED, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX ou une combinaison des indicateurs D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX et D3D11_RESOURCE_MISC_SHARED_NTHANDLE (nouveau pour Windows 8) lorsque vous créez ces ressources.

Direct3D 11.1 garantit que vous pouvez partager les ressources Texture2D que vous avez créées avec ces valeurs DXGI_FORMAT :

  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT

En outre, Direct3D 11.1 garantit que vous pouvez partager les ressources Texture2D que vous avez créées avec un niveau mipmap de 1, une taille de tableau de 1, des indicateurs de liaison de D3D11_BIND_SHADER_RESOURCE et de D3D11_BIND_RENDER_TARGET combinés, l’utilisation par défaut (D3D11_USAGE_DEFAULT), et uniquement ces valeurs D3D11_RESOURCE_MISC_FLAG :

Direct3D 11.1 vous permet de partager une plus grande variété de types et de formats de ressources Texture2D. Vous pouvez demander si le pilote graphique et le matériel prennent en charge le partage de ressources Texture2D étendu en appelant ID3D11Device::CheckFeatureSupport avec la valeur D3D11_FEATURE_D3D11_OPTIONS . Dans cet appel ID3D11Device::CheckFeatureSupport , passez un pointeur vers une structure D3D11_FEATURE_DATA_D3D11_OPTIONS . ID3D11Device::CheckFeatureSupport définit le membre ExtendedResourceSharing de D3D11_FEATURE_DATA_D3D11_OPTIONS sur TRUE si le matériel et le pilote prennent en charge le partage de ressources Texture2D étendu.

Si ID3D11Device::CheckFeatureSupport retourne TRUE dans ExtendedResourceSharing, vous pouvez partager les ressources que vous avez créées avec ces valeurs DXGI_FORMAT :

  • DXGI_FORMAT_R32G32B32A32_TYPELESS
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R32G32B32A32_UINT
  • DXGI_FORMAT_R32G32B32A32_SINT
  • DXGI_FORMAT_R16G16B16A16_TYPELESS
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_UINT
  • DXGI_FORMAT_R16G16B16A16_SNORM
  • DXGI_FORMAT_R16G16B16A16_SINT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R10G10B10A2_UINT
  • DXGI_FORMAT_R8G8B8A8_TYPELESS
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UINT
  • DXGI_FORMAT_R8G8B8A8_SNORM
  • DXGI_FORMAT_R8G8B8A8_SINT
  • DXGI_FORMAT_B8G8R8A8_TYPELESS
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_TYPELESS
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R32_TYPELESS
  • DXGI_FORMAT_R32_FLOAT
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R32_SINT
  • DXGI_FORMAT_R16_TYPELESS
  • DXGI_FORMAT_R16_FLOAT
  • DXGI_FORMAT_R16_UNORM
  • DXGI_FORMAT_R16_UINT
  • DXGI_FORMAT_R16_SNORM
  • DXGI_FORMAT_R16_SINT
  • DXGI_FORMAT_R8_TYPELESS
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8_UINT
  • DXGI_FORMAT_R8_SNORM
  • DXGI_FORMAT_R8_SINT
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_NV11
  • DXGI_FORMAT_P016
  • DXGI_FORMAT_P010
  • DXGI_FORMAT_Y216
  • DXGI_FORMAT_Y210
  • DXGI_FORMAT_Y416
  • DXGI_FORMAT_Y410

Si ID3D11Device::CheckFeatureSupport retourne TRUE dans ExtendedResourceSharing, vous pouvez partager les ressources que vous avez créées avec ces fonctionnalités et indicateurs :

Notes

Lorsque ExtendedResourceSharing a la valeur TRUE, vous disposez d’une plus grande flexibilité lorsque vous spécifiez des indicateurs de liaison pour le partage de ressources Texture2D. Non seulement le pilote graphique et le matériel prennent en charge davantage d’indicateurs de liaison, mais également plus de combinaisons possibles d’indicateurs de liaison. Par exemple, vous pouvez spécifier uniquement D3D11_BIND_RENDER_TARGET ou aucun indicateur de liaison, etc.

 

Même si ID3D11Device::CheckFeatureSupport retourne TRUE dans ExtendedResourceSharing, vous ne pouvez toujours pas partager les ressources que vous avez créées avec ces fonctionnalités et indicateurs :

Modifier les sous-ressources avec de nouvelles options de copie

Direct3D 11.1 vous permet d’utiliser de nouveaux indicateurs de copie pour copier et mettre à jour des sous-ressources. Lorsque vous copiez une sous-ressource, les ressources source et de destination peuvent être identiques et les régions source et de destination peuvent se chevaucher.

Cette fonctionnalité Direct3D 11.1 se compose de l’API suivante.

Ignorer les ressources et les vues de ressources

Direct3D 11.1 vous permet d’ignorer les ressources et les vues des ressources du contexte de l’appareil. Cette nouvelle fonctionnalité informe le GPU que le contenu existant dans les ressources ou les vues de ressources ne sont plus nécessaires.

Cette fonctionnalité Direct3D 11.1 se compose de l’API suivante.

Prendre en charge un plus grand nombre d’UAV

Direct3D 11.1 vous permet d’utiliser un plus grand nombre d’UAV lorsque vous liez des ressources à l’étape de fusion de sortie et lorsque vous définissez un tableau de vues pour une ressource non ordonnée.

Direct3D 11.1 met à jour les méthodes suivantes pour cette fonctionnalité.

Lier une sous-plage d’une mémoire tampon constante à un nuanceur

Direct3D 11.1 vous permet de lier une sous-plage d’une mémoire tampon constante à laquelle un nuanceur peut accéder. Vous pouvez fournir une mémoire tampon constante plus grande et spécifier la sous-plage que le nuanceur peut utiliser.

Cette fonctionnalité Direct3D 11.1 se compose de l’API suivante.

Récupérer la sous-plage d’une mémoire tampon constante liée à un nuanceur

Direct3D 11.1 vous permet de récupérer la sous-plage d’une mémoire tampon constante liée à un nuanceur.

Cette fonctionnalité Direct3D 11.1 se compose de l’API suivante.

Effacer tout ou partie d’un affichage de ressources

Direct3D 11.1 vous permet d’effacer un affichage de ressources (RTV, UAV ou toute vue vidéo d’une surface Texture2D). Vous appliquez la même valeur de couleur à toutes les parties de la vue.

Cette fonctionnalité Direct3D 11.1 se compose de l’API suivante.

Mapper des SMV de mémoires tampons dynamiques avec NO_OVERWRITE

Direct3D 11.1 vous permet de mapper des vues de ressources de nuanceur (SRV) de mémoires tampons dynamiques avec D3D11_MAP_WRITE_NO_OVERWRITE. Les runtimes Direct3D 11 et antérieurs limitaient le mappage aux tampons de vertex ou d’index.

Direct3D 11.1 met à jour la méthode ID3D11DeviceContext::Map pour cette fonctionnalité.

Utiliser des UAV à chaque étape du pipeline

Direct3D 11.1 vous permet d’utiliser les instructions suivantes du modèle de nuanceur 5.0 à toutes les étapes du nuanceur qui étaient précédemment utilisées uniquement dans les nuanceurs de pixels et les nuanceurs de calcul.

Direct3D 11.1 met à jour les méthodes suivantes pour cette fonctionnalité.

Ces instructions existaient dans Direct3D 11.0 dans ps_5_0 et cs_5_0. Étant donné que Direct3D 11.1 rend les UAV disponibles à toutes les étapes du nuanceur, ces instructions sont disponibles à toutes les étapes du nuanceur.

Si vous passez des nuanceurs compilés (VS/HS/DS/HS) qui utilisent l’une de ces instructions à une fonction create-shader, comme CreateVertexShader, sur les appareils qui ne prennent pas en charge les UAV à chaque étape (y compris les pilotes existants qui ne sont pas implémentés avec cette fonctionnalité), la fonction create-shader échoue. La fonction create-shader échoue également si le nuanceur tente d’utiliser un emplacement UAV au-delà de l’ensemble d’emplacements UAV pris en charge par le matériel.

Les UAV référencés par ces instructions sont partagés entre toutes les étapes du pipeline. Par exemple, un UAV lié à l’emplacement 0 à l’étape de fusion de sortie est disponible à l’emplacement 0 vers VS/HS/DS/GS/PS.

Il n’est pas garanti que les accès UAV que vous émettez à partir des étapes du nuanceur qui s’exécutent dans un draw*() donné ou que vous émettez à partir du nuanceur de calcul au sein d’un dispatch*() ne se terminent pas dans l’ordre dans lequel vous les avez émis. Mais tous les accès UAV se terminent à la fin du Draw*() ou dispatch*().

Prise en charge étendue des appareils WARP

Direct3D 11.1 étend la prise en charge des appareils WARP , que vous créez en passant D3D_DRIVER_TYPE_WARP dans le paramètre DriverType de D3D11CreateDevice.

À compter de Direct3D 11.1, les appareils WARP prennent en charge :

  • Tous les niveaux de fonctionnalités Direct3D de 9.1 à 11.1
  • Nuanceurs de calcul et pavage
  • Surfaces partagées. Autrement dit, vous pouvez partager entièrement des surfaces entre des appareils WARP, ainsi qu’entre des appareils WARP dans différents processus.

Les appareils WARP ne prennent pas en charge ces fonctionnalités facultatives :

Lorsque vous exécutez une machine virtuelle Hyper-V avec votre unité de traitement graphique (GPU) désactivée ou sans pilote d’affichage, vous obtenez un appareil WARP dont le nom convivial est « Microsoft Basic Display Adapter ». Cet appareil WARP peut exécuter l’expérience Windows complète, notamment DWM, Internet Explorer et les applications du Windows Store. Cet appareil WARP prend également en charge l’exécution d’applications héritées qui utilisent DirectDraw ou l’exécution d’applications qui utilisent Direct3D 3 à Direct3D 11.1.

Utiliser Direct3D dans les processus session 0

À partir de Windows 8 et Windows Server 2012, vous pouvez utiliser la plupart des API Direct3D dans les processus session 0.

Notes

Ces API de sortie, de fenêtre, de chaîne d’échange et de présentation ne sont pas disponibles dans les processus de session 0, car elles ne s’appliquent pas à l’environnement session 0 :

Si vous appelez l’une des API précédentes dans un processus session 0, elle retourne DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.

 

Prise en charge de la mémoire tampon d’ombre au niveau de fonctionnalité 9

Utilisez un sous-ensemble de fonctionnalités de mémoire tampon d’ombre Direct3D 10_0+ pour implémenter des effets d’ombre au niveau des caractéristiques 9_x. Pour plus d’informations sur ce que vous devez faire pour implémenter des effets d’ombre sur les 9_x de niveau de fonctionnalité, consultez Implémentation de mémoires tampons d’ombre pour le niveau de fonctionnalité Direct3D 9.

Nouveautés de Direct3D 11