DXGKDDI_SETVIDPNSOURCEADDRESS fungsi panggilan balik (d3dkmddi.h)
Fungsi DxgkDdiSetVidPnSourceAddress mengatur alamat permukaan utama yang terkait dengan sumber video tertentu yang ada.
Sintaks
DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;
NTSTATUS DxgkddiSetvidpnsourceaddress(
IN_CONST_HANDLE hAdapter,
IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}
Parameter
hAdapter
Handel ke blok konteks yang terkait dengan adaptor tampilan. Driver miniport tampilan sebelumnya menyediakan handel ini ke subsistem kernel grafis DirectX di parameter output MiniportDeviceContext dari fungsi DxgkDdiAddDevice .
pSetVidPnSourceAddress
Penunjuk ke struktur DXGKARG_SETVIDPNSOURCEADDRESS yang berisi argumen fungsi.
Menampilkan nilai
DxgkDdiSetVidPnSourceAddress mengembalikan STATUS_SUCCESS jika berhasil; jika tidak, ia mengembalikan salah satu kode kesalahan yang ditentukan dalam Ntstatus.h.
Dimulai dengan Windows 8, driver miniport tampilan dapat gagal melakukan panggilan ke DxgkDdiSetVidPnSourceAddress, mengembalikan STATUS_INVALID_PARAMETER, ketika anggota SharedPrimaryTransition diatur dalam pSetVidPnSourceAddress-Flags>. Namun, kegagalan seperti itu tidak diharapkan kecuali ada kesalahan dalam implementasi driver mode pengguna dari fungsi CheckDirectFlipSupport atau di DWM. Jika kegagalan seperti itu terjadi, sistem operasi tidak akan dengan mulus gagal kembali ke mode komposisi, dan presentasi akan salah.
Keterangan
DxgkDdiSetVidPnSourceAddress hanya dipanggil dengan hak utama yang sesuai dengan topologi jaringan saji video yang saat ini diterapkan (VidPN). Misalnya, format D3DDDIFMT_A8R8G8B8 ditentukan agar pas dengan VidPN yang berkomitmen pada format D3DDDIFMT_X8R8G8B8, dan sebaliknya.
Subsistem kernel grafis DirectX memanggil DxgkDdiSetVidPnSourceAddress untuk mengalihkan mode tampilan dan melakukan operasi balik berbasis I/O (MMIO) yang dipetakan memori. Bendera bit-field di anggota Bendera dari struktur DXGKARG_SETVIDPNSOURCEADDRESS yang ditunjukkan oleh parameter pSetVidPnSourceAddress menunjukkan jenis operasi tampilan yang akan dilakukan. Untuk mengalihkan mode tampilan, subsistem kernel grafis mengatur anggota ContextCount dari DXGKARG_SETVIDPNSOURCEADDRESS ke nol. Dalam situasi ini, konten array yang ditentukan anggota Konteks DXGKARG_SETVIDPNSOURCEADDRESS tidak terdefinisi. Untuk melakukan operasi balik, subsistem kernel grafis mengatur ContextCount ke jumlah konteks dan Konteks ke array handel konteks driver untuk konteks yang berkontribusi pada operasi flip.
Jika driver miniport tampilan sebelumnya ditunjukkan, dalam panggilan ke fungsi DxgkDdiQueryAdapterInfo-nya , bahwa ia mendukung flip berbasis MMIO (dengan mengatur bendera bit-field FlipOnVSyncMmIo di anggota FlipCaps dari struktur DXGK_DRIVERCAPS ke TRUE), fungsi DxgkDdiSetVidPnSourceAddress driver kemudian dipanggil pada tingkat permintaan gangguan perangkat (DIRQL) untuk tujuan flip. Fungsi DxgkDdiSetVidPnSourceAddress driver harus memprogram DAC dan mulai memindai, pada sinkronisasi vertikal berikut, permukaan utama yang alamatnya ditentukan dalam anggota PrimaryAddress DXGKARG_SETVIDPNSOURCEADDRESS. Driver juga harus meneruskan jenis interupsi DXGK_INTERRUPT_CRTC_VSYNC dalam parameter InterruptType dalam panggilan ke fungsi DxgkCbNotifyInterrupt untuk melaporkan alamat pemindaian yang efektif. Driver harus mengikuti panggilan ke DxgkCbNotifyInterrupt dengan panggilan ke fungsi DxgkCbNotifyDpc .
DxgkDdiSetVidPnSourceAddress harus dalam memori yang tidak dapat dibajak. DxgkDdiSetVidPnSourceAddress tidak boleh memanggil kode apa pun yang berada dalam memori yang dapat di-pageable dan tidak boleh memanipulasi data apa pun yang berada dalam memori yang dapat di-pageable.
Situasi Clone-View
Dalam situasi tampilan kloning, driver miniport tampilan harus menangani operasi balik dengan tepat seperti yang dijelaskan di bagian ini.
Saat DWM berjalan, subsistem kernel grafik DirectX disinkronkan saat sinkronisasi vertikal terjadi. Namun, subsistem kernel grafis DirectX hanya dapat disinkronkan ketika sinkronisasi vertikal dari sinyal output adaptor grafis tunggal terjadi. Subsistem kernel grafis DirectX harus segera membalik sinyal output adaptor grafis lainnya untuk menghindari robeknya.
Penjadwal GPU akan mendeteksi satu sinkronisasi vertikal dan akan menentukan bahwa permukaan yang dibalik tersedia segera setelah pembalik monitor pertama terjadi. Akibatnya, driver miniport tampilan mungkin merender ke permukaan yang masih ditampilkan monitor kedua.
Aplikasi video (misalnya, Pemutar Media Windows) tidak menyadari situasi tampilan kloning dan berharap memiliki interval sinkronisasi vertikal yang dapat diprediksi. Jika penjadwal GPU mendeteksi sinkronisasi vertikal kedua monitor, interval sinkronisasi vertikal (dan karenanya flip) tidak akan dapat diprediksi dan akan menyimpang dari waktu ke waktu, yang akan menyebabkan aplikasi DWM dan video tidak beroperasi dengan benar.
Untuk situasi tampilan kloning, driver miniport tampilan harus melakukan flip sinkronisasi vertikal pada monitor utama dan flip langsung berbasis MMIO pada monitor sekunder.
Fungsi DxgkDdiSetVidPnSourceAddress driver miniport tampilan harus merekam alamat yang sedang dibalik di objek adaptor grafis.
Untuk mengarahkan driver miniport tampilan agar tidak menunggu jejak vertikal berikutnya dari monitor sekunder, subsistem kernel grafis DirectX mengatur bendera bit-field FlipImmediate ke TRUE dalam panggilan ke fungsi DxgkDdiSetVidPnSourceAddress driver.
Lihat persyaratan tentang memanggil fungsi ini dengan overlay multiplane dalam presentasi VidPN overlay Multiplane.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista |
Header | d3dkmddi.h |
IRQL | PASSIVE_LEVEL. Dipanggil di DIRQL jika driver mendukung flip berbasis MMIO. |