Inicializando a comunicação com a DDI do Direct3D versão 11
Esta seção se aplica somente ao Windows 7 e posterior e ao Windows Server 2008 R2 e versões posteriores do sistema operacional Windows.
Inicialização de comunicação
Para inicializar a comunicação com o DDI da versão 11 da DLL do driver de exibição no modo de usuário, o runtime do Direct3D versão 11 primeiro carregará a DLL se a DLL ainda não estiver carregada. O runtime do Direct3D chama a função OpenAdapter10_2 do driver de exibição do modo de usuário por meio da tabela de exportação da DLL para abrir uma instância do adaptador gráfico. A função OpenAdapter10_2 é a única função exportada da DLL.
Observação
A função OpenAdapter10_2 é idêntica à função OpenAdapter10 , exceto pela forma como a tabela das funções específicas do adaptador do driver é retornada:
- OpenAdapter10_2 retorna a tabela no membro pAdapterFuncs_2 da estrutura D3D10DDIARG_OPENADAPTER , em que pAdapterFuncs_2 aponta para uma estrutura D3D10_2DDI_ADAPTERFUNCS .
- OpenAdapter10 retorna a tabela no membro pAdapterFuncs de D3D10DDIARG_OPENADAPTER, em que pAdapterFuncs aponta para uma estrutura D3D10DDI_ADAPTERFUNCS .
OpenAdapter10_2 foi projetado para tornar a inicialização de drivers mais eficiente. Você deve implementar OpenAdapter10_2 em seus drivers direct3D versão 11. Você também pode implementar OpenAdapter10_2 (em vez de ou além do OpenAdapter10) em seus drivers direct3D versão 10.1 para aumentar a eficiência de inicialização desses drivers. Para obter mais informações sobre como implementar OpenAdapter10_2 em drivers direct3D versão 10.1, consulte Suporte à descoberta de versão. OpenAdapter10_2 manipula a troca de controle de versão e outras informações entre o runtime e o driver.
Controle de versão
OpenAdapter10_2 e as funções específicas do adaptador do driver alteram a maneira como o controle de versão entre a API do Direct3D e a DDI do Direct3D é tratado da maneira como o Direct3D 10 lidou com o controle de versão (para obter mais informações sobre como o Direct3D 10 lida com o controle de versão, consulte Inicializando a comunicação com o Direct3D versão 10 DDI). Em vez de a API do Direct3D depender da falha da função de OpenAdapter10_2 do driver para indicar que não há suporte para uma versão específica (como em OpenAdapter10_2), o driver deve listar explicitamente as versões DDI compatíveis. O runtime do Direct3D chama a função GetSupportedVersions do driver de exibição no modo de usuário (uma das funções específicas do adaptador do driver) para consultar as versões DDI às quais o driver dá suporte.
Há pelo menos duas novas versões DDI para as funções DDI do Direct3D 11. Cada versão DDI distingue se a DDI é executada no Windows Vista ou no Windows 7. No entanto, o suporte da DDI do Direct3D 11 não indica necessariamente o suporte completo dos recursos de hardware associados a D3D_FEATURE_LEVEL_11. Os drivers podem dar suporte aos novos recursos de threading da DDI do Direct3D 11 com hardware que não dá suporte aos outros recursos expostos pela DDI do Direct3D 11, como mosaico e assim por diante. O código a seguir mostra como cada versão DDI é diferenciada:
// 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
Troca de Informações
Além de especificar informações de versão, a função OpenAdapter10_2 do driver também troca outras informações entre o runtime e o driver.
Na chamada para a função de OpenAdapter10_2 do driver, o runtime fornece a função de retorno de chamada do adaptador pfnQueryAdapterInfoCb no membro pAdapterCallbacks da estrutura D3D10DDIARG_OPENADAPTER . O driver de exibição do modo de usuário deve chamar a função de retorno de chamada do adaptador pfnQueryAdapterInfoCb para consultar os recursos de hardware gráfico do driver de miniporto de exibição.
O runtime chama a função CreateDevice(D3D10) do driver de exibição do modo de usuário (uma das funções específicas do adaptador do driver) para criar um dispositivo de exibição para manipular uma coleção de estado de renderização e concluir a inicialização. Quando a inicialização for concluída, o runtime do Direct3D versão 11 poderá chamar as funções do Direct3D versão 11 fornecidas pelo driver de exibição e o driver de exibição do modo de usuário poderá chamar as funções fornecidas pelo runtime.
A função CreateDevice(D3D10) do driver de exibição no modo de usuário é chamada com uma estrutura D3D10DDIARG_CREATEDEVICE cujos membros são configurados da seguinte maneira para inicializar a DDI da versão 11 do driver de exibição no modo de usuário:
O runtime define Interface como a versão da interface que o runtime requer do driver de exibição do modo de usuário.
O runtime define Version como um número que o driver pode usar para identificar quando o runtime é compilado. Por exemplo, o driver pode usar o número de versão para diferenciar entre um runtime lançado com o Windows Vista e um runtime lançado com um service pack subsequente, que pode conter uma correção que o driver requer.
O runtime define hRTDevice para especificar o identificador que o driver deve usar quando o driver chama de volta para o runtime.
O runtime define hDrvDevice para especificar o identificador que o runtime usa em chamadas de driver subsequentes.
O runtime fornece uma tabela de suas funções de retorno de chamada específicas do dispositivo na estrutura D3DDDI_DEVICECALLBACKS para a qual pKTCallbacks aponta. O driver de exibição do modo de usuário chama as funções de retorno de chamada fornecidas pelo runtime para acessar serviços no modo kernel no driver de miniporta de exibição.
O driver de exibição do modo de usuário retorna uma tabela de suas funções específicas do dispositivo na estrutura D3D11DDI_DEVICEFUNCS para a qual p11DeviceFuncs aponta.
O runtime fornece uma estrutura DXGI_DDI_BASE_ARGS para a qual DXGIBaseDDI aponta. O runtime e o driver de exibição do modo de usuário fornecem a DDI da Infraestrutura Gráfica do DirectX para essa estrutura.
O runtime define hRTCoreLayer para especificar o identificador que o driver deve usar quando o driver chama de volta para o runtime para acessar a funcionalidade principal do Direct3D 10 (ou seja, em chamadas para as funções especificadas pelo membro p11UMCallbacks ).
O runtime fornece uma tabela de suas principais funções de retorno de chamada na estrutura D3D11DDI_CORELAYER_DEVICECALLBACKS para a qual p11UMCallbacks aponta. O driver de exibição do modo de usuário chama as funções de retorno de chamada principais fornecidas pelo runtime para atualizar o estado.