Supporto di più processori
I driver di visualizzazione in modalità utente nei computer con più processori possono consentire al runtime Di Microsoft Direct3D di gestire le ottimizzazioni a più processori oppure i driver possono eseguire le proprie ottimizzazioni a più processori.
Ottimizzazioni di Multiple-Processor gestite dal runtime
Le ottimizzazioni a più processori gestite dal runtime Direct3D sono abilitate solo sui driver che supportano le funzioni LockAsync, UnlockAsync e Rename . Queste funzioni consentono alle ottimizzazioni a più processori di funzionare correttamente con le applicazioni che bloccano spesso le risorse dinamiche. Le funzioni LockAsync e UnlockAsync , insieme alla funzione GetQueryData , devono essere rientranti nei driver che espongono una versione DDI di 0x0000000B o versione successiva. Il driver restituisce il valore DDI-version nel membro DriverVersion della struttura D3D10DDIARG_OPENADAPTER in una chiamata alla funzione OpenAdapter del driver. Quando il runtime chiama una funzione driver in modo rientrante, un thread può essere eseguito all'interno di tale funzione mentre un altro thread che fa riferimento allo stesso dispositivo di visualizzazione viene eseguito all'interno di un'altra funzione driver.
Il runtime Direct3D usa ottimizzazioni a più processori in alcune situazioni per eseguire l'offload del lavoro in un processore separato e migliorare le prestazioni del computer. Quando sono abilitate ottimizzazioni a più processori, viene aggiunto un livello software aggiuntivo tra il runtime Direct3D e il driver di visualizzazione in modalità utente. Questo livello software intercetta tutte le chiamate che il runtime Direct3D farebbe altrimenti alle funzioni del driver di visualizzazione in modalità utente.
Anziché chiamare direttamente il driver di visualizzazione in modalità utente, i comandi del livello software vengono accodato in batch che un thread di lavoro elabora in modo asincrono. Tuttavia, il livello software non può eseguire il batch di tutte le chiamate effettuate alle funzioni del driver di visualizzazione in modalità utente. In particolare, il livello software non può eseguire chiamate batch alle funzioni che restituiscono informazioni , ad esempio CreateResource. Quando il livello software deve chiamare uno di questi tipi di funzioni driver, scarica tutti i comandi in coda tramite il thread di lavoro e quindi il livello software chiama la funzione driver nel thread dell'applicazione principale.
Ottimizzazioni di Multiple-Processor gestite dal driver
Se un driver eseguirà le proprie ottimizzazioni a più processori, non deve implementare le funzioni LockAsync, UnlockAsync e Rename . In questo caso, il driver deve chiamare la funzione pfnSetAsyncCallbacksCb per notificare al runtime se il runtime avvierà o arresterà la ricezione di chiamate alle funzioni di callback del runtime da un thread di lavoro.
Se il driver esegue le proprie ottimizzazioni a più processori, deve seguire gli stessi criteri usati dal runtime Direct3D quando determina l'abilitazione di ottimizzazioni a più processori. Questo criterio consente la condivisione equa delle risorse di sistema in tutti i processi. In particolare, il driver deve disabilitare le ottimizzazioni a più processori nelle situazioni seguenti:
L'applicazione viene eseguita in modalità finestra.
Il computer contiene un solo processore (o core processore); il driver deve disabilitare le ottimizzazioni nei computer a processore singolo con hyperthreading.
L'applicazione ha richiesto che non siano abilitate ottimizzazioni a più processori o che l'applicazione usi l'elaborazione software-vertex; queste informazioni vengono passate alla funzione CreateDevice del driver.
Se i fornitori vogliono abilitare le ottimizzazioni con più processori in una di queste situazioni, devono prima contattare Microsoft.