Partager via


Couches d’API (Direct3D 10)

Le runtime Direct3D 10 est construit avec des couches, en commençant par les fonctionnalités de base au cœur et en créant des fonctionnalités facultatives et d’assistance aux développeurs dans les couches externes.

Couche principale

La couche principale existe par défaut ; fournir un mappage très mince entre l’API et le pilote de périphérique, ce qui réduit la surcharge pour les appels à haute fréquence. Étant donné que la couche principale est essentielle pour les performances, elle effectue uniquement une validation critique.

Les couches restantes sont facultatives. En règle générale, les couches ajoutent des fonctionnalités, mais ne modifient pas le comportement existant. Par exemple, les fonctions principales auront les mêmes valeurs de retour indépendamment de la couche de débogage instanciée, bien que la sortie de débogage supplémentaire puisse être fournie si la couche de débogage est instanciée.

Créez des couches lorsqu’un appareil est créé en appelant D3D10CreateDevice et en fournissant une ou plusieurs valeurs D3D10_CREATE_DEVICE_FLAG.

Déboguer la couche

La couche de débogage fournit un paramètre supplémentaire et une validation de cohérence étendues (telles que la validation de la liaison de nuanceur et de la liaison de ressources, la validation de la cohérence des paramètres et la description des erreurs de création de rapports). La sortie générée par la couche de débogage se compose d’une file d’attente de chaînes accessibles à l’aide de l''interface ID3D10InfoQueue (voir Personnaliser la sortie de débogage avec ID3D10InfoQueue (Direct3D 10)). Les erreurs générées par la couche principale sont mises en surbrillance avec des avertissements de la couche de débogage.

Pour créer un appareil qui prend en charge la couche de débogage, vous devez installer le Kit de développement logiciel (SDK) DirectX (pour obtenir D3D10SDKLayers.DLL), puis spécifier l’indicateur D3D10_CREATE_DEVICE_DEBUG lors de l’appel de D3D10CreateDevice. Bien sûr, l’exécution d’une application avec la couche de débogage sera beaucoup plus lente. Pour activer/désactiver les messages de débogage pour les API D3DX10, appelez D3DX10DebugMute.

Lorsque la couche de débogage répertorie les fuites de mémoire, elle génère une liste de pointeurs d’interface objet ainsi que leurs noms conviviaux. Le nom convivial par défaut est «<>non nommé ». Vous pouvez définir le nom convivial à l’aide de la méthode ID3D10DeviceChild ::SetPrivateData et du GUID WKPDID_D3DDebugObjectName qui se trouve dans D3Dcommon.h. Par exemple, pour nommer pTexture avec un nom SDKLayer de mytexture.jpg, utilisez le code suivant :

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

En règle générale, vous devez compiler ces appels hors de votre version de production.

Basculer vers la couche référence

Cette couche permet à une application de passer d’un périphérique matériel (HAL) à une référence ou à un appareil logiciel (REF). Pour changer d’appareil, vous devez d’abord créer un appareil qui prend en charge la couche switch-to-reference (voir D3D10CreateDevice) puis appeler ID3D10SwitchToRef ::SetUseRef.

Tous les états, ressources et objets de l’appareil sont conservés par le biais de cette transition d’appareil. Toutefois, il est parfois impossible de faire correspondre exactement les données de ressources. Cela est dû au fait que certaines informations sont disponibles pour un appareil matériel qui n’est pas disponible pour un appareil de référence.

Pratiquement toutes les applications en temps réel utilisent l’implémentation HAL du pipeline. Lorsque le pipeline est basculé d’un appareil matériel vers un appareil de référence, les opérations de rendu sont effectuées simultanément dans le matériel et les logiciels. À mesure que l’appareil logiciel est rendu, il nécessite que les ressources soient téléchargées sur la mémoire système. Cela peut nécessiter que d’autres ressources mises en cache dans la mémoire système soient supprimées pour faire de la place.

Note

Cette fonctionnalité de couche de référence est prise en charge uniquement dans Direct3D 10 et Direct3D 10.1 et n’est plus prise en charge dans Direct3D 11 et versions ultérieures.

 

couche Thread-Safe

Cette couche est conçue pour permettre aux applications multithreads d’accéder à l’appareil à partir de plusieurs threads.

Une application Direct3D 10 peut contrôler une synchronisation d’appareils à l’aide de fonctions d’appareil. Cela permet à une application d’activer/désactiver des sections critiques (activation/désactivation temporaire de la protection multithreading) et de libérer un verrou de section critique sur plusieurs points d’entrée d’API Direct3D 10. La couche thread-safe est activée par défaut. Pour les applications à thread unique, la couche thread-safe n’a aucun impact sur les performances.

Différences entre Direct3D 9 et Direct3D 10 :

  • Contrairement à Direct3D 9, l’API Direct3D 10 est par défaut entièrement thread-safe.

 

fonctionnalités de l’API (Direct3D 10)