Diferenças de threading entre versões do Direct3D

Muitos modelos de programação com vários threads usam primitivos de sincronização (como mutexes) para criar seções críticas e impedir que o código seja acessado por mais de um thread por vez.

No entanto, os métodos de criação de recursos da interface ID3D11Device foram projetados para serem reingressados, sem a necessidade de primitivos de sincronização e seções críticas. Como resultado, os métodos de criação de recursos são eficientes e fáceis de usar.

Diferenças entre Direct3D 11, 10 e 9:
O Direct3D 11 usa como padrão principalmente thread-safe e continua permitindo que os aplicativos optem por recusar usando D3D11_CREATE_DEVICE_SINGLETHREADED. Se os aplicativos optarem por não serem thread-safe, eles deverão seguir as regras de threading. O runtime sincroniza threads em nome do aplicativo, permitindo que threads simultâneos sejam executados. Na verdade, a sincronização no Direct3D 11 é mais eficiente do que usar a camada thread-safe no Direct3D 10.
O Direct3D 10 pode dar suporte à execução de apenas um thread por vez. O Direct3D 10 é totalmente thread-safe e permite que um aplicativo opte por recusar esse comportamento usando D3D10_CREATE_DEVICE_SINGLE_THREADED.
O Direct3D 9 não usa como padrão o thread safe. No entanto, ao chamar CreateDevice ou CreateDeviceEx para criar um dispositivo, você pode especificar o sinalizador D3DCREATE_MULTITHREADED para tornar o thread de API do Direct3D 9 seguro. Isso causa uma sobrecarga significativa de sincronização. Portanto, não é recomendável tornar o thread de API do Direct3D 9 seguro porque o desempenho pode ser degradado.

Multithreading