Cómo: Comprobar la compatibilidad con controladores
En este tema se muestra cómo determinar si se admiten características de multithreading (incluidas las listas de comandos y creación de recursos) para la aceleración de hardware.
Se recomienda que las aplicaciones comprueben si hay compatibilidad con hardware gráfico de multithreading. Si el controlador y el hardware gráfico no admiten la creación de objetos multiproceso, el rendimiento puede limitarse de las maneras siguientes:
- La creación de varios objetos (incluso de tipos diferentes) al mismo tiempo puede estar limitado.
- La creación de un objeto mientras se representan comandos de gráficos mediante un contexto inmediato puede estar limitado. Por ejemplo, si el hardware no admite multithreading, una aplicación debe evitar la creación en un subproceso en segundo plano de un objeto que requiere mucho tiempo para crear. Una operación de creación que tarda mucho tiempo puede bloquear la representación inmediata del contexto y aumentar el riesgo de un estutete de velocidad de fotogramas visual.
El tiempo de ejecución admite listas de comandos y multithreading independientemente de la compatibilidad con controladores y hardware; Si no hay compatibilidad con controladores y hardware para listas de comandos o multithreads, el tiempo de ejecución emulará la funcionalidad. Para obtener más información sobre multithreading, vea Introducción a Multithreading en Direct3D 11.
Para comprobar si hay compatibilidad con controladores para multithreading:
- Inicialice un objeto de interfaz ID3D11Device. De forma predeterminada, la multithreading está habilitada.
- Llame a ID3D11Device::CheckFeatureSupport. Pase el valor D3D11_FEATURE_THREADING al parámetro Feature, pase la estructura D3D11_FEATURE_DATA_THREADING al parámetro pFeatureSupportData y pase el tamaño de la estructura D3D11_FEATURE_DATA_THREADING al parámetro FeatureSupportDataSize.
- Si el método ID3D11Device::CheckFeatureSupport se realiza correctamente, la estructura de D3D11_FEATURE_DATA_THREADING que pasó en el paso anterior se inicializará con información sobre la compatibilidad con multithreading.
Si DriverConcurrentCreates es TRUE, un controlador puede crear más de un recurso al mismo tiempo (simultáneamente) en subprocesos diferentes.
Si DriverCommandLists es TRUE, el controlador admite listas de comandos. Es decir, los comandos de representación emitidos por un contexto inmediato pueden ser simultáneos con la creación de objetos en subprocesos independientes con bajo riesgo de un stutter de velocidad de fotogramas.
Si DriverConcurrentCreates es FALSE, un controlador no admite la creación simultánea, lo que significa que la cantidad de simultaneidad posible es extremadamente limitada. El hardware gráfico no puede crear objetos de diferentes tipos en subprocesos diferentes simultáneamente. Además, el hardware gráfico no puede usar un contexto inmediato para emitir comandos de representación mientras el hardware gráfico intenta crear un recurso en otro subproceso.
Temas relacionados