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 fin 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 qu’une 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 .

Couche de débogage

La couche de débogage fournit une validation supplémentaire étendue des paramètres et de la cohérence (par exemple, la validation de la liaison de nuanceur et de la liaison de ressources, la validation de la cohérence des paramètres et la création de descriptions d’erreurs). 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 par 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 sensiblement 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 avec leurs noms conviviaux. Le nom convivial par défaut est «< sans nom> ». 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 à partir de votre version de production.

Basculer vers la couche de référence

Cette couche permet à une application de passer d’un périphérique matériel (HAL) à un appareil de référence ou 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 via cette transition d’appareil. Toutefois, il n’est parfois pas possible 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 passe d’un périphérique matériel à 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 le périphérique logiciel est en cours de rendu, les ressources doivent être téléchargées dans 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.

Notes

Cette fonctionnalité de basculement vers la couche 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 multithread d’accéder à l’appareil à partir de plusieurs threads.

Une application Direct3D 10 peut contrôler la synchronisation d’un appareil à l’aide de fonctions d’appareil. Cela permet à une application d’activer/désactiver des sections critiques (activation/désactivation temporaire de la protection multithread) et d’utiliser/libérer un verrou de section critique sur plusieurs points d’entrée de l’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 entièrement thread-safe par défaut.

 

Fonctionnalités de l’API (Direct3D 10)