Compartir a través de


Inicialización de la comunicación con la DDI de direct3D versión 11

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

Inicialización de comunicación

Para inicializar la comunicación con la DLL del controlador de visualización en modo de usuario de la versión 11 DDI, el entorno de ejecución de Direct3D versión 11 carga primero el archivo DLL si el archivo DLL aún no está cargado. El entorno de ejecución de Direct3D llama a la función OpenAdapter10_2 del controlador de visualización en modo de usuario a través de la tabla de exportación del archivo DLL para abrir una instancia del adaptador de gráficos. La función OpenAdapter10_2 es la única función exportada del archivo DLL.

Nota:

La función OpenAdapter10_2 es idéntica a la función OpenAdapter10 , excepto cómo se devuelve la tabla de las funciones específicas del adaptador del controlador:

OpenAdapter10_2 se diseñó para que la inicialización de controladores sea más eficaz. Debes implementar OpenAdapter10_2 en los controladores de direct3D versión 11. También puedes implementar OpenAdapter10_2 (en lugar de o además de OpenAdapter10) en los controladores de Direct3D versión 10.1 para aumentar la eficacia de inicialización de esos controladores. Para obtener más información sobre cómo implementar OpenAdapter10_2 en controladores de Direct3D versión 10.1, consulta Compatibilidad con la detección de versiones. OpenAdapter10_2 controla el intercambio de versiones y otra información entre el entorno de ejecución y el controlador.

Control de versiones

OpenAdapter10_2 y las funciones específicas del adaptador del controlador cambian la forma en que el control de versiones entre la API de Direct3D y DDI de Direct3D se controla desde la forma en que Direct3D 10 controla el control de versiones (para obtener más información sobre cómo Direct3D 10 controla el control de versiones, consulta Inicializar la comunicación con direct3D versión 10 DDI). En lugar de la API de Direct3D basándose en un error de la función de OpenAdapter10_2 del controlador para indicar que no hay compatibilidad con una versión determinada (como con OpenAdapter10_2), el controlador debe enumerar explícitamente las versiones de DDI que admite. El tiempo de ejecución de Direct3D llama a la función GetSupportedVersions del controlador de visualización en modo de usuario (una de las funciones específicas del adaptador del controlador) para consultar las versiones de DDI que admite el controlador.

Hay al menos dos nuevas versiones DDI para las funciones DDI de Direct3D 11. Cada versión de DDI distingue si la DDI se ejecuta en Windows Vista o Windows 7. Sin embargo, la compatibilidad con DDI de Direct3D 11 no indica necesariamente compatibilidad total con las características de hardware asociadas a D3D_FEATURE_LEVEL_11. Los controladores pueden admitir las nuevas características de subproceso de la DDI de Direct3D 11 con hardware que no admite las demás características expuestas por la DDI de Direct3D 11, como la teselación, etc. En el código siguiente se muestra cómo se distingue cada versión de DDI:

// D3D11.0 on Vista
#define D3D11_DDI_MAJOR_VERSION 11
#define D3D11_0_DDI_MINOR_VERSION ...
#define D3D11_0_DDI_INTERFACE_VERSION \
    ((D3D11_DDI_MAJOR_VERSION << 16) | D3D11_0_DDI_MINOR_VERSION)
#define D3D11_0_DDI_BUILD_VERSION ...
#define D3D11_0_DDI_SUPPORTED \
    ((((UINT64)D3D11_0_DDI_INTERFACE_VERSION) << 32) | \
    (((UINT64)D3D11_0_DDI_BUILD_VERSION) << 16))

// D3D11.0 on Windows 7
#define D3D11_0_7_DDI_MINOR_VERSION ...
#define D3D11_0_7_DDI_INTERFACE_VERSION \
    ((D3D11_DDI_MAJOR_VERSION << 16) | D3D11_0_7_DDI_MINOR_VERSION)
#define D3D11_0_7_DDI_BUILD_VERSION ...
#define D3D11_0_7_DDI_SUPPORTED \
    ((((UINT64)D3D11_0_7_DDI_INTERFACE_VERSION) << 32) | \
    (((UINT64)D3D11_0_7_DDI_BUILD_VERSION) << 16))
 
#ifndef IS_D3D11_WIN7_INTERFACE_VERSION
#define IS_D3D11_WIN7_INTERFACE_VERSION( i ) (D3D11_0_7_DDI_INTERFACE_VERSION == i)
#endif 

Intercambio de información

Además de especificar información de versión, la función OpenAdapter10_2 del controlador también intercambia otra información entre el tiempo de ejecución y el controlador.

En la llamada a la función OpenAdapter10_2 del controlador, el tiempo de ejecución proporciona la función de devolución de llamada del adaptador pfnQueryAdapterInfoCb en el miembro pAdapterCallbacks de la estructura D3D10DDIARG_OPENADAPTER . El controlador de pantalla en modo de usuario debe llamar a la función de devolución de llamada del adaptador pfnQueryAdapterInfoCb para consultar las funcionalidades de hardware gráfico del controlador de miniporte de pantalla.

El tiempo de ejecución llama a la función CreateDevice(D3D10) del controlador en modo de usuario (una de las funciones específicas del adaptador del controlador) para crear un dispositivo de visualización para controlar una colección de estado de representación y completar la inicialización. Una vez completada la inicialización, el entorno de ejecución de Direct3D versión 11 puede llamar a las funciones proporcionadas por el controlador de pantalla Direct3D versión 11 y el controlador de pantalla en modo de usuario puede llamar a las funciones proporcionadas en tiempo de ejecución.

Se llama a la función CreateDevice(D3D10) del controlador de pantalla en modo de usuario con una estructura de D3D10DDIARG_CREATEDEVICE cuyos miembros están configurados de la siguiente manera para inicializar la versión 11 DDI del controlador de visualización en modo de usuario:

  • El tiempo de ejecución establece Interface en la versión de la interfaz que el tiempo de ejecución requiere del controlador de visualización en modo de usuario.

  • El tiempo de ejecución establece Version en un número que el controlador puede usar para identificar cuándo se compila el tiempo de ejecución. Por ejemplo, el controlador puede usar el número de versión para diferenciar entre un entorno de ejecución publicado con Windows Vista y un entorno de ejecución publicado con un Service Pack posterior, que podría contener una corrección que el controlador requiere.

  • El tiempo de ejecución establece hRTDevice para especificar el identificador que el controlador debe usar cuando el controlador vuelve a llamar al tiempo de ejecución.

  • El tiempo de ejecución establece hDrvDevice para especificar el identificador que usa el runtime en llamadas posteriores al controlador.

  • El tiempo de ejecución proporciona una tabla de sus funciones de devolución de llamada específicas del dispositivo en la estructura D3DDDI_DEVICECALLBACKS a la que apunta pKTCallbacks . El controlador de pantalla en modo de usuario llama a las funciones de devolución de llamada proporcionadas por el tiempo de ejecución para acceder a los servicios en modo kernel en el controlador de minipuerto de pantalla.

  • El controlador de pantalla en modo de usuario devuelve una tabla de sus funciones específicas del dispositivo en la estructura D3D11DDI_DEVICEFUNCS a la que apunta p11DeviceFuncs .

  • El tiempo de ejecución proporciona una estructura DXGI_DDI_BASE_ARGS a la que apunta DXGIBaseDDI . El entorno de ejecución y el controlador de pantalla en modo de usuario proporcionan su DDI de infraestructura de gráficos de DirectX a esta estructura.

  • El tiempo de ejecución establece hRTCoreLayer para especificar el identificador que el controlador debe usar cuando el controlador llama de nuevo al tiempo de ejecución para tener acceso a la funcionalidad principal de Direct3D 10 (es decir, en llamadas a las funciones que especifica el miembro p11UMCallbacks ).

  • El tiempo de ejecución proporciona una tabla de sus funciones de devolución de llamada principales en la estructura D3D11DDI_CORELAYER_DEVICECALLBACKS a la que apunta p11UMCallbacks . El controlador de visualización en modo de usuario llama a las funciones de devolución de llamada principal proporcionadas por el tiempo de ejecución para actualizar el estado.