Condividi tramite


Differenze di threading tra le versioni Direct3D

Molti modelli di programmazione multithread usano primitive di sincronizzazione (ad esempio mutex) per creare sezioni critiche e impedire l'accesso al codice da più di un thread alla volta.

Tuttavia, i metodi di creazione delle risorse dell'interfaccia ID3D11Device sono stati progettati per essere ri-entranti, senza richiedere primitive di sincronizzazione e sezioni critiche. Di conseguenza, i metodi di creazione delle risorse sono efficienti e facili da usare.

Differenze tra Direct3D 11, 10 e 9:
Direct3D 11 per impostazione predefinita è prevalentemente sicuro per i thread e continua a consentire alle applicazioni di scegliere di non utilizzare D3D11_CREATE_DEVICE_SINGLETHREADED. Se le applicazioni rifiutano esplicitamente di essere thread-safe, devono rispettare le regole di threading. Il runtime sincronizza i thread per conto dell'applicazione consentendo l'esecuzione di thread simultanei. Infatti, la sincronizzazione in Direct3D 11 è più efficiente rispetto all'uso del livello thread-safe in Direct3D 10.
Direct3D 10 può supportare l'esecuzione di un solo thread alla volta. Direct3D 10 è completamente thread-safe e consente a un'applicazione di rifiutare esplicitamente tale comportamento usando D3D10_CREATE_DEVICE_SINGLE_THREADED.
Direct3D 9 non è impostato come thread-safe di default. Tuttavia, quando chiami CreateDevice o CreateDeviceEx per creare un dispositivo, puoi specificare il flag D3DCREATE_MULTITHREADED per rendere thread safe l'API Direct3D 9. Ciò causa un sovraccarico significativo per la sincronizzazione. Di conseguenza, non è consigliabile rendere thread safe per l'API Direct3D 9 perché le prestazioni possono essere ridotte.

Multithreading