Types d’appareils (Direct3D 9)

Appareil HAL

Le type d’appareil principal est l’appareil hal, qui prend en charge la rastérisation accélérée matérielle et le traitement du vertex matériel et logiciel. Si l’ordinateur sur lequel votre application s’exécute est équipé d’une carte graphique qui prend en charge Direct3D, votre application doit l’utiliser pour les opérations Direct3D. Les appareils Hal Direct3D implémentent tout ou partie des modules de transformation, d’éclairage et de rastérisation dans le matériel.

Les applications n’accèdent pas directement aux cartes graphiques. Ils appellent des fonctions et des méthodes Direct3D. Direct3D accède au matériel via le hal. Si l’ordinateur sur lequel votre application s’exécute prend en charge la hal, il obtiendra les meilleures performances à l’aide d’un appareil hal.

Pour créer un appareil hal, appelez CreateDevice en utilisant D3DDEVTYPE_HAL comme type d’appareil.

Appareil de référence

Direct3D prend en charge un type d’appareil supplémentaire appelé appareil de référence ou rastériseur de référence. Contrairement à un appareil logiciel, le rastériseur de référence prend en charge chaque fonctionnalité Direct3D. Cet appareil est destiné à être utilisé à des fins de débogage et n’est donc disponible que sur les machines sur lesquelles le Kit de développement logiciel (SDK) DirectX a été installé. Étant donné que ces fonctionnalités sont implémentées pour la précision plutôt que pour la vitesse et sont implémentées dans les logiciels, les résultats ne sont pas très rapides. Le rastériseur de référence utilise des instructions de processeur spéciales chaque fois qu’il le peut, mais il n’est pas destiné aux applications commerciales. Utilisez le rastériseur de référence uniquement à des fins de test de fonctionnalités ou de démonstration. Pour créer un appareil de référence, appelez la méthode CreateDevice en utilisant D3DDEVTYPE_REF comme type d’appareil.

Appareils HAL et REF

Les appareils HAL (couche d’abstraction matérielle) et les appareils REF (rastériseur REFerence) sont les deux types main d’appareils Direct3D ; le premier est basé sur la prise en charge matérielle, et est très rapide, mais peut ne pas tout prendre en charge ; tandis que le second n’utilise pas d’accélération matérielle, est donc très lent, mais est garanti pour prendre en charge l’ensemble des fonctionnalités Direct3D, de la bonne façon. En général, vous n’aurez besoin que d’utiliser des appareils HAL, mais si vous utilisez des fonctionnalités avancées que vos carte graphiques ne prennent pas en charge, vous devrez peut-être revenir à REF.

L’autre fois où vous pouvez utiliser REF, c’est si l’appareil HAL produit des résultats étranges, c’est-à-dire que vous êtes sûr que votre code est correct, mais que le résultat n’est pas ce que vous attendez. Le comportement de l’appareil REF est garanti. Vous pouvez donc tester votre application sur l’appareil REF et voir si le comportement étrange persiste. Si ce n’est pas le cas, cela signifie que (a) votre application suppose que le carte graphique prend en charge quelque chose qu’elle ne prend pas en charge, ou (b) qu’il s’agit d’un bogue de pilote. S’il ne fonctionne toujours pas avec l’appareil REF, il s’agit d’un bogue d’application.

Traitement du vertex matériel et logiciel

Le traitement des vertex matériels et logiciels s’applique uniquement aux appareils HAL. Lorsque vous poussez des sommets à travers le pipeline, ils doivent être transformés (par le monde, la vue et les matrices de projection à leur tour) et éclairés (par les lumières intégrées de D3D). Cette étape de traitement est appelée TL&(pour Transformation & Lighting). Le traitement du vertex matériel signifie que cette opération est effectuée dans le matériel, si le matériel le prend en charge ; ergo, Le traitement du vertex logiciel est effectué est logiciel. La pratique générale consiste à essayer d’abord de créer un appareil T L matériel&, et si cela échoue, essayez Mixte, et si cela échoue, essayez Logiciel. (Si le logiciel échoue, abandonnez et quittez avec une erreur).

Appareils Direct3D