Condividi tramite


Metodo ID3D11DeviceContext::Flush (d3d11.h)

Invia comandi in coda nel buffer dei comandi all'unità di elaborazione grafica (GPU).

Sintassi

void Flush();

Valore restituito

nessuno

Osservazioni

La maggior parte delle applicazioni non deve chiamare questo metodo. Se un'applicazione chiama questo metodo quando non è necessario, comporta una penalità delle prestazioni. Ogni chiamata a Flush comporta un sovraccarico significativo.

Quando Microsoft Direct3D state-setting, present o draw commands vengono chiamati da un'applicazione, questi comandi vengono accodati in un buffer di comandi interno. Scarica invia questi comandi alla GPU per l'elaborazione. In genere, il runtime Direct3D invia questi comandi alla GPU automaticamente ogni volta che il runtime determina che devono essere inviati, ad esempio quando il buffer di comando è pieno o quando un'applicazione esegue il mapping di una risorsa. Scarica invia manualmente i comandi.

È consigliabile usare Flush quando la CPU attende un intervallo di tempo arbitrario, ad esempio quando si chiama la funzione Sleep.

Poiché Flush funziona in modo asincrono, può restituire prima o dopo il completamento dell'esecuzione dei comandi grafici in coda. Tuttavia, i comandi grafici alla fine completano sempre. È possibile chiamare il metodo ID3D11Device::CreateQuery con il valore D3D11_QUERY_EVENT per creare una query evento; è quindi possibile usare tale query di evento in una chiamata al metodo ID3D11DeviceContext::GetData per determinare quando la GPU viene completata l'elaborazione dei comandi grafici.

Microsoft Direct3D 11 blocca la distruzione degli oggetti. Pertanto, un'applicazione non può basarsi sugli oggetti immediatamente eliminati. Chiamando Flush, si eliminano gli oggetti la cui distruzione è stata posticipata. Se un'applicazione richiede la distruzione sincrona di un oggetto, è consigliabile che l'applicazione rilasci tutti i riferimenti, chiamare ID3D11DeviceContext::ClearState e quindi chiamare Flush.

Problemi di distruzione posticipati con catene di scambio di presentazioni flip

Direct3D 11 blocca la distruzione di oggetti come visualizzazioni e risorse fino a quando non può eliminarli in modo efficiente. Questa distruzione posticipata può causare problemi con catene di scambio del modello di presentazione capovolto. Le catene di scambio dei modelli di presentazione capovolgimento hanno il flag DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL impostato. Quando si crea una catena di scambio di modelli di presentazione capovolgibile, è possibile associare una sola catena di scambio alla volta con una superficie HWND, IWindow o composizione. Se un'applicazione tenta di distruggere una catena di scambio di modelli di presentazione capovolgibile e sostituirla con un'altra catena di scambio, la catena di scambio originale non viene distrutta quando l'applicazione libera immediatamente tutti i riferimenti della catena di scambio originale.

La maggior parte delle applicazioni usa in genere il metodo IDXGISwapChain::ResizeBuffers per la maggior parte degli scenari in cui sostituiscono nuovi buffer della catena di scambio per i buffer della catena di scambio precedenti. Tuttavia, se un'applicazione deve effettivamente distruggere una catena di scambio precedente e creare una nuova catena di scambio, l'applicazione deve forzare la distruzione di tutti gli oggetti liberati dall'applicazione. Per forzare la distruzione, chiamare ID3D11DeviceContext::ClearState (o in caso contrario assicurarsi che non siano associate visualizzazioni allo stato della pipeline) e quindi chiamare Flush nel contesto immediato. È necessario forzare la distruzione prima di chiamare IDXGIFactory2::CreateSwapChainForHwnd, IDXGIFactory2::CreateSwapChainForCoreWindow o IDXGIFactory2::CreateSwapChainForComposition per creare di nuovo una nuova catena di scambio.

Requisiti

   
Piattaforma di destinazione Windows
Intestazione d3d11.h
Libreria D3D11.lib

Vedi anche

ID3D11DeviceContext