Bagikan melalui


Menghitung Perangkat Anak dari Adaptor Tampilan

Urutan langkah-langkah berikut menjelaskan bagaimana driver port tampilan, driver miniport tampilan, dan manajer video present network (VidPN) berkolaborasi pada waktu inisialisasi untuk menghitung perangkat anak dari adaptor tampilan.

  1. Driver port tampilan memanggil fungsi DxgkDdiStartDevice driver miniport tampilan. DxgkDdiStartDevice mengembalikan (dalam parameter NumberOfChildren ) jumlah perangkat yang (atau bisa menjadi dengan menambatkan) turunan dari adaptor tampilan. DxgkDdiStartDevice juga mengembalikan (dalam parameter NumberOfVideoPresentSources ) jumlah N sumber video yang ada yang didukung oleh adaptor tampilan. Video yang menyajikan sumber kemudian akan diidentifikasi dengan angka 0, 1, ... N -1.

  2. Driver port tampilan memanggil fungsi DxgkDdiQueryChildRelations driver miniport tampilan, yang menghitung perangkat anak dari adaptor tampilan. DxgkDdiQueryChildRelations mengisi array struktur DXGK_CHILD_DESCRIPTOR : satu untuk setiap perangkat anak. Perhatikan bahwa semua perangkat turunan adaptor tampilan ada di papan: monitor dan perangkat eksternal lainnya yang tersambung ke adaptor tampilan tidak dianggap sebagai perangkat turunan. Untuk informasi selengkapnya, lihat Perangkat Anak dari Adaptor Tampilan. DxgkDdiQueryChildRelations harus menghitung perangkat anak potensial serta perangkat anak yang ada secara fisik pada waktu inisialisasi. Misalnya, jika menghubungkan komputer laptop ke stasiun docking akan mengakibatkan munculnya output video baru, DxgkDdiQueryChildRelations harus menghitung output video tersebut terlepas dari apakah komputer ditambatkan pada waktu inisialisasi. Selain itu, jika menghubungkan dongle ke konektor output video akan memungkinkan beberapa monitor untuk berbagi konektor, DxgkDdiQueryChildRelations harus menghitung perangkat anak untuk setiap cabang dongle, terlepas dari apakah dongle terhubung pada waktu inisialisasi.

  3. Untuk setiap perangkat anak (dijumlahkan seperti yang dijelaskan pada Langkah 1) yang memiliki nilai kesadaran HPD dari HpdAwarenessInterruptible atau HpdAwarenessPolled, driver port tampilan memanggil fungsi DxgkDdiQueryChildStatus driver miniport tampilan untuk menentukan apakah perangkat anak memiliki perangkat eksternal yang terhubung ke perangkat tersebut.

  4. Driver port tampilan membuat PDO untuk setiap perangkat anak yang memenuhi salah satu kondisi berikut:

    • Perangkat anak memiliki nilai kesadaran HPD dari HpdAwarenessAlwaysConnected.
    • Perangkat anak memiliki nilai kesadaran HPD dari HpdAwarenessPolled atau HpdAwarenessInterruptible, dan sistem operasi mengetahui dari kueri atau pemberitahuan sebelumnya bahwa perangkat anak memiliki perangkat eksternal yang terhubung.
  5. Driver port tampilan memanggil fungsi DxgkDdiQueryDeviceDescriptor driver miniport tampilan untuk setiap perangkat anak yang memenuhi salah satu kondisi berikut:

    • Perangkat anak diketahui memiliki perangkat eksternal yang tersambung.
    • Perangkat anak diasumsikan memiliki perangkat eksternal yang tersambung.
    • Perangkat anak memiliki jenis TypeOther.

    DxgkDdiQueryDeviceDescriptor mengembalikan blok Extended Display Information Data (EDID) jika monitor yang terhubung (atau perangkat tampilan lainnya) mendukung deskriptor EDID.

    Catatan: Selama inisialisasi, driver port tampilan memanggil DxgkDdiQueryDeviceDescriptor untuk setiap monitor untuk mendapatkan blok 128 byte pertama dari EDID monitor. Itu memberikan driver port tampilan apa yang dibutuhkan pada waktu inisialisasi: ID perangkat keras PnP, ID instans, ID yang kompatibel, dan teks perangkat. Di lain waktu, driver fungsi kelas monitor (Monitor.sys) memanggil DxgkDdiQueryDeviceDescriptor untuk setiap monitor untuk mendapatkan blok EDID 128-byte pertama dan blok ekstensi EDID 128-byte tambahan. Ini berarti bahwa driver miniport tampilan akan dipanggil dua kali untuk menyediakan blok 128-byte pertama dari EDID setiap monitor.

  6. Manajer VidPN mendapatkan pengidentifikasi untuk semua sumber video yang ada dan video yang menyajikan target yang didukung oleh adaptor tampilan. Video yang menyajikan sumber diidentifikasi dengan angka 0, 1, ... N - 1, di mana N adalah jumlah sumber yang dikembalikan oleh fungsi DxgkDdiStartDevice driver miniport tampilan. Target video yang disajikan memiliki pengidentifikasi bilangan bulat unik yang sebelumnya dibuat oleh driver miniport tampilan selama DxgkDdiQueryChildRelations. Setiap perangkat anak jenis TypeVideoOutput dikaitkan dengan target video yang ada, dan anggota ChildUid dari struktur DXGK_CHILD_DESCRIPTOR perangkat anak digunakan sebagai pengidentifikasi untuk target video yang ada.

  7. Manajer VidPN menggunakan prosedur berikut untuk membangun VidPN awal.

    • Jika VidPN baik terakhir yang diketahui dicatat dalam registri, gunakan sebagai VidPN awal.

    • Jika tidak, panggil fungsi DxgkDdiRecommendFunctionalVidPn driver miniport tampilan untuk mendapatkan VidPN awal.

    • Jika DxgkDdiRecommendFunctionalVidPn gagal mengembalikan VidPN fungsional yang dapat diterima, buat VidPN sederhana yang berisi satu jalur video yang ada; yaitu, satu pasangan (sumber, target). Panggil fungsi DxgkDdiIsSupportedVidPn driver miniport tampilan untuk memverifikasi bahwa VidPN yang diusulkan akan berfungsi. Jika DxgkDdiIsSupportedVidPn melaporkan bahwa VidPN yang diusulkan tidak akan berfungsi, terus coba sampai VidPN yang sesuai ditemukan.

    • Panggil fungsi DxgkDdiEnumVidPnCofuncModality driver miniport tampilan untuk menentukan mode sumber dan target yang tersedia untuk VidPN.