Condividi tramite


Passaggio di informazioni DXGI in fase di creazione delle risorse

Il runtime Direct3D versione 10 può passare informazioni specifiche di DXGI quando chiama la funzione CreateResource(D3D10) del driver di visualizzazione in modalità utente per creare una risorsa. Il runtime può passare un puntatore a una struttura DXGI_DDI_PRIMARY_DESC nel membro pPrimaryDesc della struttura D3D10DDIARG_CREATERESOURCE per specificare che la risorsa può essere usata come primaria , ovvero la risorsa può essere analizzata nella visualizzazione. Il runtime imposta pPrimaryDesc su un valore non NULL solo se il runtime imposta anche il bit di D3D10_DDI_BIND_PRESENT nel membro BindFlags di D3D10DDIARG_CREATERESOURCE.

Il runtime può specificare il flag di DXGI_DDI_PRIMARY_OPTIONAL nel membro Flag di DXGI_DDI_PRIMARY_DESC per notificare al driver di visualizzazione in modalità utente che il driver può rifiutare di usare la risorsa in una presentazione in stile flip. Per notificare al runtime che non deve usare la risorsa nelle presentazioni in stile flip, il driver imposta il flag di DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT nel membro DriverFlags di DXGI_DDI_PRIMARY_DESC.

Se il driver restituisce DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT nella chiamata CreateResource(D3D10) per creare la risorsa, il runtime eseguirà sempre una presentazione in stile bit-block (bitblt)(anziché una presentazione in stile flip) quando la risorsa è l'origine della presentazione. Questa funzionalità è utile se l'hardware grafico non può analizzare un determinato subset di un determinato tipo di risorsa. Ad esempio, l'hardware grafico potrebbe o non essere in grado di analizzare un tipo di buffer back multiampled. Inoltre, la possibilità di analizzare i buffer back multiampled potrebbe dipendere ulteriormente dal formato della superficie. Se l'hardware grafico non è stato in grado di analizzare un determinato formato multicampionato, il driver di visualizzazione in modalità utente imposta il flag DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT nel membro DriverFlags di DXGI_DDI_PRIMARY_DESC per la risorsa con questo formato.

Se il runtime non imposta il flag di DXGI_DDI_PRIMARY_OPTIONAL nel membro Flag di DXGI_DDI_PRIMARY_DESC per notificare al driver la possibilità di rifiutare l'uso della risorsa in una presentazione in stile flip, il driver può comunque restituire il codice di errore DXGI_DDI_ERR_UNSUPPORTED insieme al flag di DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT da una chiamata a CreateResource(D3D10). Il driver CreateResource(D3D10) passa DXGI_DDI_ERR_UNSUPPORTED in una chiamata alla funzione pfnSetErrorCb se il driver non riesce a eseguire l'analisi di tale primaria. La restituzione di DXGI_DDI_ERR_UNSUPPORTED insieme a DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT causa l'interposizione di una superficie proxy nel percorso della presentazione, tra i buffer indietro e la superficie primaria. La superficie proxy corrisponde sempre alla superficie primaria (analizzata) in termini di dimensioni, multisample e rotazione. Il primo passaggio in questo processo è quello di DXGI per determinare quale delle impostazioni di rotazione o multisample causano al driver di rifiutare di analizzare una superficie con queste impostazioni. DXGI rende questa determinazione ridimensionando e tentando di creare una primaria senza rotazione, senza multicampionamento o senza entrambi. Dopo CHE DXGI determina il supporto del driver per le funzionalità di analisi, DXGI crea le superfici primarie e proxy e il driver deve essere in grado di capovolgere tra queste due superfici. DXGI soddisfa comunque le richieste di un'applicazione per i buffer back ruotati automaticamente o multicampionati chiamando la funzione BltDXGI del driver per eseguire bitblts dai buffer indietro alla superficie proxy. Questi bitblts richiedono al driver di eseguire la risoluzione o la rotazione multisample. Per altre informazioni su BltDXGI, vedere la pagina di riferimento di BltDXGI .