Bagikan melalui


METODE ID3D11DeviceContext::Flush (d3d11.h)

Mengirim perintah antrean di buffer perintah ke unit pemrosesan grafis (GPU).

Sintaks

void Flush();

Mengembalikan nilai

Tidak ada

Keterangan

Sebagian besar aplikasi tidak perlu memanggil metode ini. Jika aplikasi memanggil metode ini ketika tidak diperlukan, aplikasi akan dikenakan penalti performa. Setiap panggilan ke Flush menimbulkan sejumlah besar overhead.

Saat perintah pengaturan status, presentasi, atau gambar Microsoft Direct3D dipanggil oleh aplikasi, perintah tersebut diantrekan ke dalam buffer perintah internal. Flush mengirimkan perintah tersebut ke GPU untuk diproses. Biasanya, runtime Direct3D mengirimkan perintah ini ke GPU secara otomatis setiap kali runtime menentukan bahwa mereka perlu dikirim, seperti ketika buffer perintah penuh atau ketika aplikasi memetakan sumber daya. Flush mengirimkan perintah secara manual.

Kami menyarankan agar Anda menggunakan Flush ketika CPU menunggu jumlah waktu arbitrer (seperti ketika Anda memanggil fungsi Tidur ).

Karena Flush beroperasi secara asinkron, Flush dapat mengembalikan baik sebelum atau sesudah GPU selesai menjalankan perintah grafis yang diantrekan. Namun, perintah grafis akhirnya selalu selesai. Anda dapat memanggil metode ID3D11Device::CreateQuery dengan nilai D3D11_QUERY_EVENT untuk membuat kueri peristiwa; Anda kemudian dapat menggunakan kueri peristiwa tersebut dalam panggilan ke metode ID3D11DeviceContext::GetData untuk menentukan kapan GPU selesai memproses perintah grafis.

Microsoft Direct3D 11 menangguhkan penghancuran objek. Oleh karena itu, aplikasi tidak dapat mengandalkan objek segera dihancurkan. Dengan memanggil Flush, Anda menghancurkan objek apa pun yang penghancurannya ditangguhkan. Jika aplikasi memerlukan penghancuran objek yang sinkron, sebaiknya aplikasi merilis semua referensinya, panggil ID3D11DeviceContext::ClearState, lalu panggil Flush.

Masalah Penghancuran yang Ditangguhkan dengan Membalik Rantai Pertukaran Presentasi

Direct3D 11 menangguhkan penghancuran objek seperti tampilan dan sumber daya sampai dapat menghancurkannya secara efisien. Penghancuran yang ditangguhkan ini dapat menyebabkan masalah dengan rantai pertukaran model presentasi balik. Balikkan rantai pertukaran model presentasi memiliki bendera DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL diatur. Saat membuat rantai pertukaran model presentasi balik, Anda hanya dapat mengaitkan satu rantai pertukaran pada satu waktu dengan permukaan HWND, IWindow, atau komposisi. Jika aplikasi mencoba menghancurkan rantai pertukaran model presentasi balik dan menggantinya dengan rantai pertukaran lain, rantai pertukaran asli tidak dihancurkan ketika aplikasi segera membebaskan semua referensi rantai pertukaran asli.

Sebagian besar aplikasi biasanya menggunakan metode IDXGISwapChain::ResizeBuffers untuk sebagian besar skenario di mana mereka menggantikan buffer rantai pertukaran baru untuk buffer rantai pertukaran lama. Namun, jika aplikasi harus benar-benar menghancurkan rantai pertukaran lama dan membuat rantai pertukaran baru, aplikasi harus memaksa penghancuran semua objek yang dibebaskan aplikasi. Untuk memaksa penghancuran, panggil ID3D11DeviceContext::ClearState (atau pastikan tidak ada tampilan yang terikat ke status alur), lalu panggil Flush pada konteks langsung. Anda harus memaksa penghancuran sebelum memanggil IDXGIFactory2::CreateSwapChainForHwnd, IDXGIFactory2::CreateSwapChainForCoreWindow, atau IDXGIFactory2::CreateSwapChainForComposition lagi untuk membuat rantai pertukaran baru.

Persyaratan

   
Target Platform Windows
Header d3d11.h
Pustaka D3D11.lib

Lihat juga

ID3D11DeviceContext