Guide pratique pour rechercher la prise en charge des pilotes

Cette rubrique montre comment déterminer si les fonctionnalités multithreading (y compris la création de ressources et les listes de commandes) sont prises en charge pour l’accélération matérielle.

Nous vous recommandons aux applications de vérifier la prise en charge matérielle graphique de la multithreading. Si le pilote et le matériel graphique ne prennent pas en charge la création d’objets multithreads, les performances peuvent être limitées de la manière suivante :

  • La création de plusieurs objets (même de types différents) en même temps peut être limitée.
  • La création d’un objet lors du rendu des commandes graphiques à l’aide d’un contexte immédiat peut être limitée. Par exemple, si le matériel ne prend pas en charge la multithreading, une application doit éviter de créer sur un thread d’arrière-plan un objet qui nécessite beaucoup de temps pour créer. Une opération de création qui prend très longtemps peut bloquer le rendu immédiat du contexte et augmenter le risque d’un stutter de fréquence d’images visuelle.

Le runtime prend en charge les listes de commandes et de multithreading, quel que soit le pilote et la prise en charge matérielle ; s’il n’existe aucune prise en charge matérielle et de pilote pour les listes de commandes ou multithreads, le runtime émule les fonctionnalités. Pour plus d’informations sur la multithreading, consultez Présentation de la multithreading dans Direct3D 11.

Pour vérifier la prise en charge du pilote pour le multithreading :

  1. Initialisez un objet d’interface ID3D11Device. Par défaut, le multithreading est activé.
  2. Appelez ID3D11Device ::CheckFeatureSupport. Transmettez la valeur D3D11_FEATURE_THREADING au paramètre Feature, transmettez la structure D3D11_FEATURE_DATA_THREADING au paramètre pFeatureSupportData et transmettez la taille de la structure D3D11_FEATURE_DATA_THREADING au paramètre FeatureSupportDataSize.
  3. Si la méthode ID3D11Device ::CheckFeatureSupport réussit, la structure D3D11_FEATURE_DATA_THREADING que vous avez passée à l’étape précédente est initialisée avec des informations sur la prise en charge multithreading.
    • Si DriverConcurrentCreates a la valeur TRUE, un pilote peut créer plusieurs ressources en même temps (simultanément) sur différents threads.

      Si DriverCommandLists a la valeur TRUE, le pilote prend en charge les listes de commandes. Autrement dit, les commandes de rendu émises par un contexte immédiat peuvent être simultanées à la création d’objets sur des threads distincts avec un faible risque d’éparse de fréquence d’images.

    • Si DriverConcurrentCreates a la valeur FALSE, un pilote ne prend pas en charge la création simultanée, ce qui signifie que la quantité de concurrence possible est extrêmement limitée. Le matériel graphique ne peut pas créer simultanément d’objets de différents types sur différents threads. En outre, le matériel graphique ne peut pas utiliser un contexte immédiat pour émettre des commandes de rendu pendant que le matériel graphique tente de créer une ressource sur un autre thread.

Utilisation de Direct3D 11

Traitement multithread