Differenze di threading tra 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ù thread alla volta.
Tuttavia, i metodi di creazione delle risorse dell'interfaccia ID3D11Device sono stati progettati per essere nuovamente partecipanti, 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 usa principalmente thread-safe e continua a consentire alle applicazioni di rifiutare esplicitamente l'uso di 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 è l'impostazione predefinita thread-safe. Tuttavia, quando chiami CreateDevice o CreateDeviceEx per creare un dispositivo, puoi specificare il flag D3DCREATE_MULTITHREADED per rendere il thread dell'API Direct3D 9 sicuro. Ciò causa un sovraccarico significativo della sincronizzazione. Di conseguenza, non è consigliabile rendere thread safe per l'API Direct3D 9 perché le prestazioni possono essere ridotte. |