Diferenças de encadeamento entre versões do Direct3D
Muitos modelos de programação multi-threaded 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 de cada vez.
No entanto, os métodos de criação de recursos da interface ID3D11Device foram projetados para serem reentrantes, sem exigir primitivas 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, por padrão, é principalmente thread-safe e continua a permitir que as aplicações optem por desativar o uso do D3D11_CREATE_DEVICE_SINGLETHREADED. Se os aplicativos optarem por não ser thread-safe, eles devem aderir às regras de threading. O tempo de execução sincroniza threads em nome da aplicação, 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 suportar a execução de apenas um thread de cada vez. O Direct3D 10 é totalmente seguro para threads e permite que um aplicativo desative esse comportamento usando D3D10_CREATE_DEVICE_SINGLE_THREADED. O Direct3D 9 não usa como padrão thread safe. No entanto, quando você chama CreateDevice ou CreateDeviceEx para criar um dispositivo, você pode especificar o sinalizador D3DCREATE_MULTITHREADED para tornar o thread da API do Direct3D 9 seguro. Isso causa uma sobrecarga de sincronização significativa. Portanto, tornar o thread da API do Direct3D 9 seguro não é recomendado porque o desempenho pode ser degradado. |