Condividi tramite


Procedura: Verificare la disponibilità del supporto driver

Questo argomento illustra come determinare se le funzionalità di multithreading (inclusi gli elenchi di comandi e la creazione di risorse) sono supportate per l'accelerazione hardware.

È consigliabile che le applicazioni verifichino il supporto hardware grafico del multithreading. Se il driver e l'hardware grafico non supportano la creazione di oggetti multithreading, le prestazioni possono essere limitate nei modi seguenti:

  • La creazione di più oggetti (anche di tipi diversi) contemporaneamente potrebbe essere limitata.
  • La creazione di un oggetto durante il rendering dei comandi grafici tramite un contesto immediato potrebbe essere limitata. Ad esempio, se l'hardware non supporta il multithreading, un'applicazione deve evitare di creare in un thread in background un oggetto che richiede molto tempo per la creazione. Un'operazione di creazione che richiede molto tempo può bloccare il rendering immediato del contesto e aumentare il rischio di uno stutter della frequenza dei fotogrammi visivi.

Il runtime supporta il multithreading e gli elenchi di comandi indipendentemente dal supporto di driver e hardware; se non è disponibile alcun supporto hardware e driver per multithread o elenchi di comandi, il runtime emulerà la funzionalità. Per altre informazioni sul multithreading, vedere Introduzione al multithreading in Direct3D 11.

Per verificare il supporto dei driver per il multithreading:

  1. Inizializzare un oggetto interfaccia ID3D11Device. Per impostazione predefinita, il multithreading è abilitato.
  2. Chiamare ID3D11Device::CheckFeatureSupport. Passare il valore D3D11_FEATURE_THREADING al parametro Feature, passare la struttura D3D11_FEATURE_DATA_THREADING al parametro pFeatureSupportData e passare le dimensioni della struttura D3D11_FEATURE_DATA_THREADING al parametro FeatureSupportDataSize.
  3. Se il metodo ID3D11Device::CheckFeatureSupport ha esito positivo, la struttura D3D11_FEATURE_DATA_THREADING passata nel passaggio precedente verrà inizializzata con informazioni sul supporto del multithreading.
    • Se DriverConcurrentCreates è TRUE, un driver può creare più di una risorsa contemporaneamente (simultaneamente) in thread diversi.

      Se DriverCommandLists è TRUE, il driver supporta gli elenchi di comandi. Ovvero, i comandi di rendering eseguiti da un contesto immediato possono essere simultanei con la creazione di oggetti in thread separati con basso rischio di uno stutter della frequenza dei fotogrammi.

    • Se DriverConcurrentCreates è FALSE, un driver non supporta la creazione simultanea, il che significa che la quantità di concorrenza possibile è estremamente limitata. L'hardware grafico non può creare oggetti di tipi diversi su thread diversi contemporaneamente. Inoltre, l'hardware grafico non può usare un contesto immediato per emettere comandi di rendering mentre l'hardware grafico tenta di creare una risorsa in un altro thread.

Come usare Direct3D 11

Multithreading