Поделиться через


Различия потоков между версиями Direct3D

Многие многопоточных моделей программирования используют примитивы синхронизации (например, мьютексы) для создания критически важных разделов и предотвращения доступа к коду несколькими потоками одновременно.

Однако методы создания ресурсов интерфейса ID3D11Device спроектированы как реентерабельные, не требуя примитивов синхронизации и критически важных разделов. В результате методы создания ресурсов эффективны и просты в использовании.

Различия между Direct3D 11, 10 и 9:
По умолчанию Direct3D 11 в основном является потокобезопасным и продолжает разрешать приложениям выбрать отказ от использования D3D11_CREATE_DEVICE_SINGLETHREADED. Если приложения отказались от обеспечения потоковой безопасности, они должны соответствовать правилам использования потоков. Среда выполнения от имени приложения синхронизирует потоки, позволяя их параллельное выполнение. На самом деле, синхронизация в Direct3D 11 более эффективна, чем использование потокобезопасного слоя в Direct3D 10.
Direct3D 10 может поддерживать выполнение только одного потока за раз. Direct3D 10 является полностью потокобезопасным и позволяет приложению отказаться от этого поведения с помощью D3D10_CREATE_DEVICE_SINGLE_THREADED.
Direct3D 9 по умолчанию не является потокобезопасным. Однако при вызове CreateDevice или CreateDeviceEx для создания устройства можно указать флаг D3DCREATE_MULTITHREADED для безопасного потока API Direct3D 9. Это приводит к значительной нагрузке на синхронизацию. Поэтому не рекомендуется безопасно использовать поток API Direct3D 9, так как производительность может снизиться.

многопоточность