Compartir a través de


Compatibilidad con subprocesos, listas de comandos y canalización 3D

Esta sección solo se aplica a Windows 7 y versiones posteriores, y Windows Server 2008 R2 y versiones posteriores del sistema operativo Windows.

Un controlador de pantalla en modo de usuario indica las nuevas funcionalidades de Direct3D versión 11 que admite (por ejemplo, subprocesos, listas de comandos y canalización 3D) cuando el entorno de ejecución de Direct3D versión 11 llama a la función GetCaps(D3D10_2) del controlador. GetCaps(D3D10_2) es una de las funciones específicas del adaptador del controlador a las que apunta el controlador en la estructura D3D10_2DDI_ADAPTERFUNCS a la que apunta el miembro pAdapterFuncs_2 de la estructura D3D10DDIARG_OPENADAPTER . Para obtener más información sobre cómo proporcionar funciones específicas del adaptador durante la inicialización del controlador, vea Inicializar la comunicación con la DDI de direct3D versión 11. Cuando se llama a su función GetCaps(D3D10_2), el controlador de pantalla en modo de usuario proporciona nuevas funcionalidades de Direct3D versión 11 basadas en el tipo de solicitud (que se especifica en el miembro Type de la estructura D3D10_2DDIARG_GETCAPS a la que apunta el parámetro pData de la función GetCaps(D3D10_2).

Subprocesos y listas de comandos

La API de Direct3D versión 11 requiere un modo de operación en el que puede sincronizar los subprocesos de la aplicación para asegurarse de que solo uno de los subprocesos se ejecuta en DDI a la vez. La API de Direct3D versión 11 también requiere un modo de operación con una emulación de software de listas de comandos. Estos modos de operación son necesarios y se aprovechan en los DDIs de versión anterior (por ejemplo, la versión 10 DDI de Direct3D). Por lo tanto, como ayuda de desarrollo para los escritores de controladores, estos mismos modos de funcionamiento se extienden para existir en la DDI de la versión 11 de Direct3D. Los escritores de controladores pueden decidir qué modos de operaciones les gustaría que sus controladores admitan la versión 11 DDI de Direct3D.

Todos los controladores deben admitir completamente todos los tipos de operaciones de subproceso (es decir, todos los controladores deben admitir finalmente todas las funcionalidades de subproceso de la estructura de D3D11DDI_THREADING_CAPS ). Sin embargo, el controlador puede requerir que la API emule las listas de comandos o aplique un modo de operación de un solo subproceso para el controlador. La API debe tener en cuenta las funcionalidades de subproceso del controlador durante la creación de un dispositivo de API, pero antes de la creación de un dispositivo DDI. Por lo tanto, el tiempo de ejecución determina las funcionalidades de subproceso del controlador cuando llama a la función específica del adaptador GetCaps(D3D10_2) del controlador con el miembro Type de D3D10_2DDIARG_GETCAPS establecido en D3D11DDICAPS_THREADING. El controlador devuelve un puntero a una estructura de D3D11DDI_THREADING_CAPS en el miembro pData de D3D10_2DDIARG_GETCAPS que identifica las funcionalidades de subproceso del controlador. El controlador debe admitir el modo de subproceso libre (D3D11DDICAPS_FREETHREADED) si el controlador también admite listas de comandos (D3D11DDICAPS_COMMANDLISTS_BUILD_2) porque las listas de comandos se basan en el modo sin subprocesos. El controlador debe participar para admitir el modo de subproceso libre y las listas de comandos. La aplicación puede determinar la compatibilidad que el controlador indicó a través del uso de la función CheckFeatureSupport de nivel de aplicación y la constante D3D11_FEATURE_THREADING; Sin embargo, es posible que algunas aplicaciones no se preocupen debido a la compatibilidad que proporciona la API.

Nivel de canalización 3D

Los controladores que admiten la DDI de la versión 11 de Direct3D no son necesarios para admitir todas las características de hardware de la DDI de la versión 11 de Direct3D. Los controladores pueden admitir el nuevo modelo de subprocesos de la DDI de Direct3D versión 11 sobre hardware que solo admite la versión 10 DDI de Direct3D. El entorno de ejecución de Direct3D versión 11 determina el nivel máximo de hardware del controlador de compatibilidad cuando el tiempo de ejecución llama a la función GetCaps(D3D10_2) del controlador con el miembro Type de D3D10_2DDIARG_GETCAPS establecido en D3D11DDICAPS_3DPIPELINESUPPORT. El controlador devuelve un puntero a una estructura de D3D11DDI_3DPIPELINESUPPORT_CAPS en el miembro pData de D3D10_2DDIARG_GETCAPS que identifica el nivel máximo de soporte técnico.

La API no usa solo la versión DDI como indicador principal de la compatibilidad con el nivel de característica de API; la API permite que el controlador vuelva a introducirse en este proceso. El tiempo de ejecución elige un valor de D3D11DDI_3DPIPELINELEVEL y devuelve el valor al controlador durante la creación del dispositivo en una llamada a la función CreateDevice(D3D10) del controlador, como parte del miembro Flags de la estructura D3D10DDIARG_CREATEDEVICE .

Si el controlador admite niveles de hardware inferiores a la versión 11 de Direct3D en la versión 11 DDI de Direct3D, hay ramificaciones menores en el funcionamiento del controlador. La primera es que el entorno de ejecución de Direct3D versión 11 nunca podría llamar a muchas funciones nuevas de DDI de la versión 11 de Direct3D. Por ejemplo, el entorno de ejecución de Direct3D versión 11 no llama a ninguna de las nuevas funciones DDI de fase de sombreador (como DsSetShader) si el controlador admite un nivel de característica de hardware inferior a la versión 11 de Direct3D. Otras funciones DDI siguen las reglas del nivel de característica y omiten el hecho de que la DDI versión 11 de Direct3D podría estar asociada a funcionalidades más altas. Por ejemplo, aunque IAVertexInputSlots para la API de Direct3D versión 11 es 32, el nivel de características de la versión 10 de Direct3D solo permite 16 y eso es lo que debe esperar el controlador.

Las características en desuso o convertidas presentan otro aspecto interesante. El desuso no es posible en el nivel de DDI de direct3D versión 11 porque el desuso debe admitir la capacidad de expresar funciones DDI de versión anterior. Por ejemplo, la versión de LA API de Direct3D 11 de PIPELINESTATS siempre es constante; Sin embargo, solicita diferentes D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS con los niveles de características de Direct3D 10 y D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS con los niveles de características de Direct3D 11, etc. Aunque la API intentó dejar de usar el tamaño del filtro de texto, es más fácil que los controladores desuse la entrada de la tabla de funciones DDI, en su totalidad, que intentar volver a usar la entrada de la tabla de funciones para otra cosa.

Incluso si un controlador que admite la versión 11 DDI de Direct3D no admite el nivel completo de características de Direct3D versión 11, el controlador no puede optar por no participar en el "reconocimiento de formato extendido", como se describe en Compatibilidad con reconocimiento de formato extendido. Dado que el controlador admite la versión 11 DDI de Direct3D, el controlador debe controlar las siguientes tareas:

  • Compatibilidad con formatos BGR

  • Responda correctamente a las llamadas a su función CheckFormatSupport para comprobar si hay compatibilidad con XR_BIAS. El controlador debe reclamar compatibilidad o denegar la compatibilidad.

  • Permitir la conversión de búferes de reserva totalmente tipados

La API de Direct3D versión 11 también informa al controlador de si la aplicación usa varios subprocesos a través de la marca D3D11DDI_CREATEDEVICE_FLAG_SINGLETHREADED. Si esta marca está presente en el miembro Flags de la estructura D3D10DDIARG_CREATEDEVICE cuando se crea un dispositivo para mostrar a través de una llamada a la función CreateDevice(D3D10) del controlador, el controlador puede determinar que no se crean contextos diferidos y que el controlador no es necesario sincronizar, ya que no se producen creaciones simultáneas.