Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet gäller endast för Windows 7- och senare operativsystem.
En användarlägesvisningsdrivrutin som körs i Windows Vista och senare versioner och Windows Server 2008 och senare versioner måste misslyckas med att skapa adapter (det vill säga misslyckas med ett anrop till drivrutinens OpenAdapter10-funktion) för DDI-versioner som drivrutinen inte uttryckligen stöder.
Windows 7 är ett sätt för Direct3D-program att identifiera de DDI-versioner och maskinvarufunktioner som drivrutinen uttryckligen stöder. Detta förbättrar versionsverifieringen. Windows 7 introducerar nya adapterspecifika funktioner för att förbättra versionshantering och för att ge möjlighet att optimera API- och drivrutinsinitiering. Du måste implementera och exportera funktionen OpenAdapter10_2 i direct3D-drivrutinen version 10.1 så att Direct3D-körningen kan anropa drivrutinens nya adapterspecifika funktioner. Om du i stället implementerar OpenAdapter10 i direct3D-drivrutinen version 10.1 kan drivrutinen bara ange om den stöder en DDI-version genom att skicka eller misslyckas med anropet till OpenAdapter10.
OpenAdapter10_2 returnerar en tabell med drivrutinskortspecifika funktioner i pAdapterFuncs_2 medlemmen i D3D10DDIARG_OPENADAPTER strukturen. pAdapterFuncs_2 pekar på en D3D10_2DDI_ADAPTERFUNCS struktur. Direct3D-körningen anropar drivrutinens adapterspecifika GetSupportedVersions-funktion för att fråga efter de DDI-versioner och maskinvarufunktioner som drivrutinen stöder. GetSupportedVersions returnerar DDI-versioner och maskinvarufunktioner i en matris med 64-bitarsvärden. I följande kodexempel visas en GetSupportedVersions-implementering :
// Array of 64-bit values that are defined in D3d10umddi.h
const UINT64 c_aSupportedVersions[] = {
D3D10_0_7_DDI_SUPPORTED, // 10.0 on Windows 7
D3D10_0_DDI_SUPPORTED, // 10.0 on Windows Vista
D3D10_1_x_DDI_SUPPORTED, // 10.1 with all extended
// format support (but not
// Windows 7 scheduling)
};
HRESULT APIENTRY GetSupportedVersions(
D3D10DDI_HADAPTER hAdapter,
__inout UINT32* puEntries,
__out_ecount_opt( *puEntries )
UINT64* pSupportedDDIInterfaceVersions)
)
{
const UINT32 uEntries = ARRAYSIZE( c_aSupportedVersions );
if (pSupportedDDIInterfaceVersions &&
*puEntries < uEntries)
{
return HRESULT_FROM_WIN32( ERROR_INSUFFICIENT_BUFFER );
}
// Determine concise hardware support from kernel, cache with hAdapter.
// pfnQueryAdapterInfoCb( hAdapter, ... )
*puEntries = uEntries;
if (pSupportedDDIInterfaceVersions)
{
UINT64* pCurEntry = pSupportedDDIInterfaceVersions;
memcpy( pCurEntry, c_aSupportedVersions, sizeof( c_aSupportedVersions ) );
pCurEntry += ARRAYSIZE( c_aSupportedVersions );
assert( pCurEntry - pSupportedDDIInterfaceVersions == uEntries );
}
return S_OK;
}
En Direct3D-version 10.1-drivrutin krävs inte för att verifiera de värden som skickas till gränssnitts- och versionsmedlemmarna i D3D10DDIARG_OPENADAPTER i ett anrop till dess OpenAdapter10_2 funktion även om dessa värden innehåller DDI-versionsinformation som drivrutinen ska initieras med. Drivrutinen kan returnera DDI-version och maskinvarufunktioner via ett anrop till funktionen GetSupportedVersions .
Direct3D-körningen kan skicka värden till gränssnitts- och versionsmedlemmarna i D3D10DDIARG_CREATEDEVICE i ett anrop till drivrutinens funktionen CreateDevice (D3D10) som skiljer sig från de värden som körningen skickade till OpenAdapter10_2. körningen skickar värden till gränssnitts- och versionsmedlemmarna i D3D10DDIARG_CREATEDEVICE som baseras på DDI-versionen och maskinvarufunktionerna som drivrutinens GetSupportedVersions returnerade till körningen. Drivrutinen krävs inte för att verifiera de värden som skickas till gränssnitts- och versionsmedlemmarna i D3D10DDIARG_CREATEDEVICE eftersom drivrutinen redan har angett stöd för dessa värden via funktionen GetSupportedVersions.
Om du porterar drivrutinen från Direct3D version 10.0 till Direct3D version 10.1 bör du konvertera drivrutinen till att endast övervaka de gränssnitts- och versionsmedlemmar som skickas till CreateDevice(D3D10) i stället för OpenAdapter10_2. Du bör analysera både CalcPrivateDeviceSize och CreateDevice(D3D10)-funktionerna i den porterade drivrutinen för att säkerställa att det inte finns några antaganden om värdena i gränssnittets- och versionsmedlemmarna för CreateDevice(D3D10) som matchar värdena i gränssnittets- och versionsmedlemmarna för OpenAdapter10_2.
ObserveraOpenAdapter10_2 har samma funktionssignatur som OpenAdapter10 (d.v.s. PFND3D10DDI_OPENADAPTER enligt definitionen i rubriken D3d10umddi.h ). Du kan implementera båda funktionerna i samma DLL för visningsdrivrutinen i användarläge.