Cómo: Comprobar la compatibilidad con controladores

En este tema se muestra cómo determinar si se admiten características de multithreading (incluida la creación de recursos y listas de comandos) para la aceleración de hardware.

Se recomienda que las aplicaciones comprueben la compatibilidad de hardware gráfico con multithreading. Si el controlador y el hardware gráfico no admiten la creación de objetos multiproceso, el rendimiento puede limitarse de las siguientes maneras:

  • 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 crear en un subproceso en segundo plano 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 que se produzca un estutter de velocidad de fotogramas visuales.

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:

  1. Inicialice un objeto de interfaz ID3D11Device . De forma predeterminada, la multithreading está habilitada.
  2. 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 de D3D11_FEATURE_DATA_THREADING al parámetro FeatureSupportDataSize .
  3. 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 diferentes subprocesos.

      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 una trama 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 de forma simultánea. 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.

Cómo usar Direct3D 11

Multithreading