Création d’objets avec multithreading
Utilisez l’interface ID3D11Device pour créer des ressources et des objets. Utilisez id3D11DeviceContext pour le rendu.
Voici quelques exemples de création de ressources :
- Procédure : créer une mémoire tampon de vertex
- Procédure : créer une mémoire tampon d’index
- Procédure : créer une mémoire tampon constante
- Procédure : initialiser une texture à partir d’un fichier
Considérations relatives à la multithreading
La quantité de concurrence de la création et du rendu des ressources que votre application peut atteindre dépend du niveau de prise en charge multithreading que le pilote implémente. Si le pilote prend en charge les créations simultanées, l’application doit avoir beaucoup moins de problèmes de concurrence. Toutefois, si le pilote ne prend pas en charge la création d’objets simultanés, la quantité d’accès concurrentiel est extrêmement limitée. Pour comprendre la quantité de prise en charge disponible dans un pilote, interrogez le pilote pour obtenir la valeur du membre DriverConcurrentCreates de la structure D3D11_FEATURE_DATA_THREADING . Pour plus d’informations sur la vérification de la prise en charge des pilotes de multithreading, consultez Guide pratique : vérifier la prise en charge des pilotes.
Les opérations simultanées n’entraînent pas nécessairement de meilleures performances. Par exemple, la création et le chargement d’une texture sont généralement limités par la bande passante mémoire. La tentative de création et de chargement de plusieurs textures peut ne pas être plus rapide que d’effectuer une texture à la fois, même si cela laisse plusieurs cœurs de processeur inactifs. Toutefois, la création de plusieurs nuanceurs à l’aide de plusieurs threads peut augmenter les performances, car cette opération dépend moins des ressources système telles que la bande passante mémoire.
Lorsque le pilote et le matériel graphique prennent en charge le multithreading, vous pouvez généralement initialiser plus efficacement les ressources nouvellement créées en transmettant un pointeur vers les données initiales dans le paramètre pInitialData (par exemple, dans un appel à la méthode ID3D11Device::CreateTexture2D ).
Rubriques connexes