DXGKDDI_QUERYCURRENTFENCE fungsi panggilan balik (d3dkmddi.h)

Fungsi DxgkDdiQueryCurrentFence mengkueri tentang pengidentifikasi pagar pengiriman terbaru yang telah selesai di unit eksekusi perintah perangkat keras.

Sintaks

DXGKDDI_QUERYCURRENTFENCE DxgkddiQuerycurrentfence;

NTSTATUS DxgkddiQuerycurrentfence(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_QUERYCURRENTFENCE pCurrentFence
)
{...}

Parameter

[in] hAdapter

Handel ke blok konteks yang terkait dengan adaptor tampilan. Driver miniport tampilan sebelumnya menyediakan handel ini ke subsistem kernel grafis Microsoft DirectX dalam parameter output MiniportDeviceContext dari fungsi DxgkDdiAddDevice .

[in/out] pCurrentFence

Penunjuk ke struktur DXGKARG_QUERYCURRENTFENCE yang berisi informasi tentang data pagar saat ini.

Menampilkan nilai

DxgkDdiQueryCurrentFence mengembalikan STATUS_SUCCESS, atau hasil kesalahan yang sesuai jika data pagar tidak berhasil diambil.

Keterangan

Pagar adalah instruksi yang berisi 64 bit data dan alamat. Driver miniport tampilan dapat memasukkan pagar di aliran akses memori langsung (DMA) yang dikirim ke unit pemrosesan grafis (GPU). Ketika GPU membaca pagar, GPU menulis data pagar di alamat pagar yang ditentukan. Namun, sebelum GPU dapat menulis data pagar ke memori, GPU harus memastikan bahwa semua piksel dari primitif yang mendahului instruksi pagar dihentikan dan ditulis dengan benar ke memori.

Catatan GPU tidak diperlukan untuk mengulur seluruh alur sementara menunggu piksel terakhir dari primitif yang mendahului instruksi pagar untuk pensiun; GPU dapat menjalankan primitif yang mengikuti instruksi pagar.
 
Perangkat keras yang mendukung ruang alamat virtual per konteks GPU harus mendukung jenis pagar berikut:
  • Pagar reguler adalah pagar yang dapat dimasukkan dalam buffer DMA yang dibuat dalam mode pengguna. Karena konten buffer DMA dari mode pengguna tidak tepercaya, pagar dalam buffer DMA tersebut harus merujuk ke alamat virtual di ruang alamat konteks GPU dan bukan ke alamat fisik. Akses ke alamat virtual tersebut terikat oleh mekanisme validasi memori yang sama dengan alamat virtual lain yang diakses GPU.
  • Pagar istimewa adalah pagar yang hanya dapat dimasukkan dalam buffer DMA yang dibuat (dan hanya dapat diakses) dalam mode kernel. Pagar dalam buffer DMA seperti itu mengacu pada alamat fisik dalam memori.

    Perhatikan bahwa jika alamat target pagar dapat diakses dalam mode pengguna, perangkat lunak berbahaya dapat melakukan operasi grafis di atas lokasi memori untuk pagar dan karena itu mengambil alih konten dari apa yang diharapkan kernel untuk menerima.

Perhatikan bahwa buffer DMA istimewa dapat berisi pagar reguler dan istimewa. Namun, jika buffer DMA istimewa berisi pagar reguler, komponen kernel yang menghasilkan buffer DMA seperti itu menyadari bahwa pagar reguler di dalam mungkin tidak pernah dapat diakses.

Jika driver miniport layar melewatkan pagar terakhir buffer DMA, fungsi DxgkDdiQueryCurrentFence driver mungkin dipanggil untuk melaporkan pagar yang terlewat. Misalnya, jika perangkat keras menghasilkan pagar ke memori, fungsi DxgkDdiInterruptRoutine driver dipicu untuk membaca memori. Namun, jika data pagar tidak tersedia ketika pengemudi mencoba membaca data (misalnya, jika ada chipset yang rusak), pagar biasanya dilaporkan pada gangguan berikutnya, kecuali gangguan dihentikan. Jika interupsi dihentikan dan subsistem kernel grafis DirectX menunggu terlalu lama untuk pagar, subsistem memanggil fungsi DxgkDdiQueryCurrentFence driver untuk memverifikasi pagar saat ini dan menentukan pagar tertunda yang mungkin terlewatkan.

Sebelum driver miniport tampilan kembali dari panggilan ke DxgkDdiQueryCurrentFence, jika pengidentifikasi pagar pengiriman yang diselesaikan perangkat keras terbaru belum dilaporkan, pengemudi harus memanggil fungsi DxgkCbNotifyInterrupt untuk melaporkan pagar. Untuk mengimplementasikan fungsionalitas ini, driver:

  1. Melacak pagar mana yang terakhir dilaporkan ke sistem operasi.
  2. Meningkatkan IRQL ke interupsi perangkat. Untuk meningkatkan IRQL ke tingkat interupsi, driver dapat memanggil fungsi DxgkCbSynchronizeExecution untuk disinkronkan dengan fungsi DxgkDdiInterruptRoutine-nya .
  3. Pada perangkat, interupsi IRQL, bandingkan pagar terakhir yang dilaporkan dengan pagar perangkat keras terbaru yang selesai.
  4. Pada IRQL interupsi perangkat, panggilan DxgkCbNotifyInterrupt hanya ketika perangkat keras terbaru selesai pagar lebih baru dari pagar terakhir yang dilaporkan.
DxgkDdiQueryCurrentFence harus dibuat dapat dipaginasi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista
Target Platform Desktop
Header d3dkmddi.h (termasuk D3dkmddi.h)
IRQL PASSIVE_LEVEL

Lihat juga

DXGKARG_QUERYCURRENTFENCE

DxgkCbNotifyInterrupt

DxgkCbSynchronizeExecution

DxgkDdiAddDevice

DxgkDdiInterruptRoutine