Suporte a GetDriverInfo2

A DDI do DirectX 8.0 introduz um novo mecanismo para consultar o driver para obter informações. Esse mecanismo estende o ponto de entrada DdGetDriverInfo existente para consultar informações adicionais do driver. Atualmente, esse mecanismo só é usado para consultar as tampas D3D de estilo DX8.

Nota Ao ler o seguinte, você pode questionar por que o mecanismo GetDriverInfo2 é necessário. Parece preferível simplesmente definir um novo GUID GetDriverInfo que o driver manipularia retornando uma estrutura D3DCAP8. GetDriverInfo2, introduzido nos parágrafos a seguir, é um mecanismo para minimizar as alterações necessárias aos Sistemas Operacionais Windows para habilitar a funcionalidade no nível do DirectX 8.0 e, portanto, tornar prático a redistribuição do runtime do DirectX 8.0.

Essa extensão para GetDriverInfo assume a forma de uma chamada DdGetDriverInfo com GUID_GetDriverInfo2. Quando uma chamada DdGetDriverInfo com esse GUID é recebida pelo driver, ela deve examinar a estrutura de dados passada no campo lpvData da estrutura de dados DD_GETDRIVERINFODATA para ver quais informações estão sendo solicitadas. Conforme descrito abaixo, lpvData pode apontar para uma estrutura de DD_GETDRIVERINFO2DATA ou DD_STEREOMODE .

O GUID_GetDriverInfo2 é o mesmo valor guid que GUID_DDStereoMode. Se o driver não lidar com GUID_DDStereoMode, isso não será um problema. No entanto, se o driver do DirectX 8.0 lidar com GUID_DDStereoMode, observe que quando uma chamada para DdGetDriverInfo com o GUID_GetDriverInfo2(GUID_DDStereoMode) é feita, o runtime define o campo dwHeight da estrutura DD_STEREOMODE para o valor especial D3DGDI2_MAGIC. Esse campo corresponde ao campo dwMagic da estrutura DD_GETDRIVERINFO2DATA. Portanto, convertendo o ponteiro lpvData em um ponteiro para uma estrutura DD_STEREOMODE ou um ponteiro para uma estrutura DD_GETDRIVERINFO2DATA e verificando o valor do campo correspondente (dwHeight ou dwMagic) para o valor D3DGDI2_MAGIC, você pode distinguir entre uma chamada para determinar os recursos do modo estéreo ou uma solicitação de recursos do Direct3D 8.0.

Depois que o driver tiver determinado que essa é uma chamada para GetDriverInfo2 , ele deverá determinar o tipo de informação que está sendo solicitada pelo runtime. Esse tipo está contido no campo dwType da estrutura de dados DD_GETDRIVERINFO2DATA.

Por fim, o driver copia os dados solicitados para o buffer fornecido. É importante observar que o campo lpvData da estrutura de dados DD_GETDRIVERINFODATA aponta para o buffer para o qual copiar os dados solicitados. lpvData também aponta para a estrutura de DD_GETDRIVERINFO2DATA. Isso significa que os dados retornados pelo driver substituem a estrutura DD_GETDRIVERINFO2DATA (e, portanto, que a estrutura DD_GETDRIVERINFO2DATA ocupa os primeiros DWORDs do buffer).

Para ser chamado com GetDriverInfo2 e relatar as funcionalidades do DirectX 8.0, é necessário que o driver defina o novo sinalizador DDHALINFO_GETDRIVERINFO2 no campo dwFlags da estrutura DD_HALINFO retornada pelo driver. Se esse sinalizador não estiver definido, o runtime não enviará chamadas GetDriverInfo2 para o driver e o driver não será reconhecido como um driver de nível DirectX 8.0.

O runtime usa GetDriverInfo2 com o tipo D3DGDI2_TYPE_DXVERSION para notificar o driver da versão de runtime DX atual que está sendo usada pelo aplicativo. O runtime fornece um ponteiro para uma estrutura DD_DXVERSION no campo lpvData de DD_GETDRIVERINFODATA.