Compartir a través de


Diferencias de subprocesos entre versiones de Direct3D

Muchos modelos de programación multiproceso usan primitivos de sincronización (como exclusiones mutuas) para crear secciones críticas y evitar que más de un subproceso acceda al código a la vez.

Sin embargo, los métodos de creación de recursos de la interfaz ID3D11Device se diseñaron para volver a entrar, sin necesidad de que se vuelvan a participar primitivos de sincronización y secciones críticas. Como resultado, los métodos de creación de recursos son eficaces y fáciles de usar.

Diferencias entre Direct3D 11, 10 y 9:
Direct3D 11 tiene como valor predeterminado principalmente seguro para subprocesos y sigue permitiendo que las aplicaciones no usen D3D11_CREATE_DEVICE_SINGLETHREADED. Si las aplicaciones no son seguras para subprocesos, deben cumplir las reglas de subproceso. El tiempo de ejecución sincroniza los subprocesos en nombre de la aplicación, lo que permite ejecutar subprocesos simultáneos. De hecho, la sincronización en Direct3D 11 es más eficaz que usar la capa segura para subprocesos en Direct3D 10.
Direct3D 10 solo puede admitir la ejecución de un subproceso a la vez. Direct3D 10 es totalmente seguro para subprocesos y permite que una aplicación opte por no participar en ese comportamiento mediante D3D10_CREATE_DEVICE_SINGLE_THREADED.
Direct3D 9 no es seguro para subprocesos de forma predeterminada. Sin embargo, al llamar a CreateDevice o CreateDeviceEx para crear un dispositivo, puede especificar la marca de D3DCREATE_MULTITHREADED para que el subproceso de la API de Direct3D 9 sea seguro. Esto provoca una sobrecarga de sincronización significativa. Por lo tanto, no se recomienda que el subproceso de la API de Direct3D 9 sea seguro porque el rendimiento se puede degradar.

Multithreading