Supporto di GetDriverInfo2

DirectX 8.0 DDI introduce un nuovo meccanismo per eseguire query sul driver per informazioni. Questo meccanismo estende il punto di ingresso DdGetDriverInfo esistente per eseguire query per informazioni aggiuntive dal driver. Attualmente, questo meccanismo viene usato solo per l'esecuzione di query per i maiuscole D3D in stile DX8.

Nota Quando si legge quanto segue, è possibile porre domande sul motivo per cui è necessario il meccanismo GetDriverInfo2 . Sembra preferibile definire semplicemente un nuovo GUID GetDriverInfo che il driver gestirebbe restituendo una struttura D3DCAP8. GetDriverInfo2, introdotto nei paragrafi seguenti, è un meccanismo per ridurre al minimo le modifiche necessarie ai sistemi operativi Windows per abilitare la funzionalità di livello DirectX 8.0 e quindi ridistribuire il runtime DirectX 8.0.

Questa estensione a GetDriverInfo ha la forma di una chiamata DdGetDriverInfo con GUID_GetDriverInfo2. Quando una chiamata DdGetDriverInfo con tale GUID viene ricevuta dal driver, deve esaminare la struttura dei dati passata nel campo lpvDatadella struttura di dati DD_GETDRIVERINFODATA per visualizzare le informazioni richieste. Come descritto di seguito, lpvData può puntare a una struttura DD_GETDRIVERINFO2DATA o DD_STEREOMODE .

Il GUID_GetDriverInfo2 è lo stesso valore GUID di GUID_DDStereoMode. Se il driver non gestisce GUID_DDStereoMode, questo non è un problema. Tuttavia, se il driver DirectX 8.0 gestisce GUID_DDStereoMode, notare che quando viene eseguita una chiamata a DdGetDriverInfo con il GUID_GetDriverInfo2(GUID_DDStereoMode), il runtime imposta il campo dwHeight della struttura DD_STEREOMODE sul valore speciale D3DGDI2_MAGIC. Questo campo corrisponde al campo dwMagic della struttura DD_GETDRIVERINFO2DATA. Pertanto, eseguendo il cast del puntatore lpvData a un puntatore a una struttura DD_STEREOMODE o a un puntatore a una struttura DD_GETDRIVERINFO2DATA e controllando il valore del campo corrispondente (dwHeight o dwMagic) per il valore D3DGDI2_MAGIC, è possibile distinguere tra una chiamata per determinare le funzionalità della modalità stereo o una richiesta di funzionalità Direct3D 8.0.

Dopo che il driver ha determinato che si tratta di una chiamata a GetDriverInfo2 , deve quindi determinare il tipo di informazioni richieste dal runtime. Questo tipo è contenuto nel campo dwType della struttura di dati DD_GETDRIVERINFO2DATA.

Infine, il driver copia i dati richiesti nel buffer fornito. È importante notare che il campo lpvData della struttura di dati DD_GETDRIVERINFODATA punta al buffer a cui copiare i dati richiesti. lpvData punta anche alla struttura DD_GETDRIVERINFO2DATA. Ciò significa che i dati restituiti dal driver sovrascrivono la struttura DD_GETDRIVERINFO2DATA (e, di conseguenza, che la struttura DD_GETDRIVERINFO2DATA occupa i primi DWORD del buffer).

Per essere chiamato con GetDriverInfo2 e segnalare funzionalità DirectX 8.0, è necessario che il driver imposta il nuovo flag DDHALINFO_GETDRIVERINFO2 nel campo dwFlags della struttura DD_HALINFO restituita dal driver. Se questo flag non è impostato, il runtime non invia chiamate GetDriverInfo2 al driver e il driver non viene riconosciuto come driver a livello DirectX 8.0.

Il runtime usa GetDriverInfo2 con tipo D3DGDI2_TYPE_DXVERSION per notificare al driver la versione di runtime DX corrente usata dall'applicazione. Il runtime fornisce un puntatore a una struttura DD_DXVERSION nel campo lpvData di DD_GETDRIVERINFODATA.