Menghitung Mode Sumber dan Target VidPN Kofungsi

Topik ini menjelaskan bagaimana manajer video present network (VidPN) dan driver miniport tampilan berkolaborasi untuk menghitung mode yang tersedia pada sumber dan target sajikan video. Sebelum membaca materi ini, Anda harus terbiasa dengan materi dalam topik berikut:

Dari waktu ke waktu, manajer VidPN meminta driver miniport tampilan untuk menghitung mode yang tersedia pada sumber dan target video adaptor tampilan yang menyajikan sumber dan target. Biasanya, permintaan memiliki pola berikut:

  1. Manajer VidPN membuat atau mendapatkan VidPN yang memiliki mode yang disematkan pada beberapa, tetapi tidak semua, dari sumber dan targetnya.

  2. Manajer VidPN memanggil DxgkDdiIsSupportedVidPn untuk menentukan apakah VidPN dapat diperluas untuk membentuk VidPN fungsional yang didukung pada adaptor tampilan. Artinya, ia menanyakan apakah mode dapat disematkan pada sumber dan target yang tersisa tanpa mengubah mode yang disematkan yang ada.

  3. Manajer VidPN memanggil DxgkDdiEnumVidPnCofuncModality untuk mendapatkan mode yang tersedia pada sumber dan target yang belum memiliki mode yang disematkan.

Salah satu argumen yang diteruskan ke DxgkDdiEnumVidPnCofuncModality adalah handel ke objek VidPN yang disebut VidPN yang membatasi.

DxgkDdiEnumVidPnCofuncModality harus melakukan hal berikut:

  • Periksa VidPN yang membatasi.

  • Untuk setiap sumber dan target yang tidak memiliki mode yang disematkan, sesuaikan set mode sehingga merupakan set mode terbesar yang mungkin yang merupakan kofungsi dengan batasan.

  • Untuk setiap jalur yang tidak memiliki transformasi penskalaan yang disematkan, sesuaikan bendera dukungan penskalaan sehingga berfungsi bersama dengan batasan.

  • Untuk setiap jalur yang tidak memiliki transformasi rotasi yang disematkan, sesuaikan bendera dukungan rotasi sehingga berfungsi bersama dengan batasan.

  • Untuk setiap sumber yang memiliki mode yang disematkan, laporkan metode multisampling yang tersedia untuk sumber tersebut.

Paragraf berikut ini memberikan detail tentang cara melakukan setiap tugas di daftar berpoin sebelumnya.

Memeriksa VidPN yang membatasi

Properti vidPN yang membatasi berikut adalah batasan yang harus dihormati oleh DxgkDdiEnumVidPnCofuncModality.

  • Topologi (set asosiasi antara sumber dan target)

  • Mode yang disematkan

  • Dukungan penskalaan, penskalaan, rotasi, dan dukungan rotasi dari setiap jalur

  • Dasar warna target dari setiap jalur

  • Rentang dinamis koefisien warna target dari setiap jalur

  • Tipe konten (grafik atau video) dari setiap jalur

  • Gamma ramp dari setiap jalur

Untuk mengekstrak batasan dari VidPN yang membatasi, lakukan langkah-langkah berikut:

  • Mulailah dengan memanggil fungsi pfnGetTopology untuk mendapatkan pointer ke antarmuka Topologi VidPN yang mewakili topologi VidPN yang membatasi.

  • Panggil fungsi pfnAcquireFirstPathInfo dan pfnAcquireNextPathInfo untuk mendapatkan informasi tentang setiap jalur dalam topologi VidPN yang membatasi. Informasi tentang jalur tertentu (ID sumber, ID target, transformasi penskalaan, transformasi rotasi, dasar warna target, dll.) terkandung dalam struktur D3DKMDT_VIDPN_PRESENT_PATH .

  • Untuk setiap jalur, teruskan ID sumber jalur ke fungsi pfnAcquireSourceModeSet untuk mendapatkan sumber jalur.

  • Panggil fungsi pfnAcquirePinnedModeInfo untuk menentukan mode mana (jika ada) yang disematkan dalam set mode sumber. Jika set mode sumber memiliki mode yang disematkan, mungkin tidak perlu memeriksa mode yang tersisa dalam set. Jika set mode tidak memiliki mode yang disematkan, periksa mode yang tersisa dalam set dengan memanggil pfnAcquireFirstModeInfo dan pfnAcquireNextModeInfo.

    Gunakan prosedur serupa untuk memeriksa set mode target dan untuk menentukan set mode target mana yang memiliki mode yang disematkan.

Menyesuaikan set mode

Saat Anda memeriksa set mode yang terkait dengan sumber dan target dalam topologi VidPN yang membatasi, perhatikan set mode mana yang memiliki mode yang disematkan. Jika set mode tidak memiliki mode yang disematkan, tentukan apakah perlu disesuaikan. Set mode harus disesuaikan jika berisi mode yang tidak kofungsi dengan batasan atau jika tidak memiliki mode yang tersedia yang kofungsi dengan batasan.

Untuk target sajikan video yang memiliki monitor tersambung, Anda juga harus mempertimbangkan serangkaian mode yang didukung oleh monitor. Bahkan jika video menyajikan target pada adaptor tampilan mendukung mode tertentu (mengingat batasan), Anda hanya boleh mencantumkan mode tersebut dalam mode target yang ditetapkan jika monitor yang terhubung juga mendukung mode . Untuk menentukan mode yang didukung oleh monitor yang tersambung, lakukan langkah-langkah berikut:

Menyesuaikan bendera dukungan penskalakan

Untuk setiap jalur dalam topologi VidPN yang membatasi, tentukan apakah jalur memiliki transformasi penskalaan yang disematkan. Untuk membuat penentuan itu, periksa vpnPath. ContentTransformation.Scaling, di mana vpnPath adalah struktur D3DKMDT_VIDPN_PRESENT_PATH yang mewakili jalur. Jika vpnPath. ContentTransformation.Scaling diatur ke D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_CENTERED, atau D3DKMDT_VPPS_STRETCHED, lalu transformasi penskalaan untuk jalur disematkan. Jika tidak, transformasi penskalaan tidak disematkan.

Jika jalur tidak memiliki transformasi penskalaan yang disematkan, tentukan apakah bendera dukungan penskalaan jalur perlu disesuaikan. Bendera dukungan harus disesuaikan jika mereka menunjukkan dukungan untuk jenis penskalaan yang tidak kofungsi dengan batasan atau jika mereka gagal menunjukkan dukungan untuk jenis penskalaan yang kofungsi dengan batasan. Untuk mengubah bendera dukungan penskalaan, atur anggota struktur D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT yang menyimpan bendera.

Menyesuaikan bendera dukungan rotasi

Menyesuaikan bendera dukungan rotasi jalur mirip dengan menyesuaikan bendera dukungan penskalaan jalur. Misalkan vpnPath adalah struktur D3DKMDT_VIDPN_PRESENT_PATH. Jika vpnPath. ContentTransformation.Rotation diatur ke D3DKMDT_VPPR_IDENTITY, D3DKMDT_VPPR_ROTATE90, D3DKMDT_VPPR_ROTATE180, atau D3DKMDT_VPPR_ROTATE270, lalu transformasi rotasi untuk jalur disematkan. Jika tidak, transformasi rotasi tidak disematkan. Bendera dukungan rotasi ada di vpnPath. ContentTransformation.RotationSupport.

Melaporkan metode multisampling

Jika adaptor tampilan memiliki satu atau beberapa codec output video yang mampu mengantisipasi dengan multisampling, maka Anda harus melaporkan metode multisampling yang tersedia (mengingat batasan), untuk setiap sumber yang memiliki mode yang disematkan. Untuk melaporkan metode multisampling yang tersedia, lakukan langkah-langkah berikut:

Struktur D3DDDI_MULTISAMPLINGMETHOD memiliki dua anggota, yang harus Anda tetapkan, yang mencirikan metode multisampling. Anggota NumSamples menunjukkan jumlah subpiksel yang diambil sampelnya. Anggota NumQualityLevels menunjukkan jumlah tingkat kualitas di mana metode dapat beroperasi. Anda dapat menentukan sejumlah tingkat kualitas selama setiap peningkatan tingkat terutama meningkatkan kualitas gambar yang disajikan.

Pivot Enumerasi

Seperti yang dijelaskan sebelumnya, DxgkDdiEnumVidPnCofuncModality harus membuat set mode yang kofungsi dengan VidPN yang diteruskan dalam parameter hConstrainingVidPn-nya . Dalam beberapa kasus, DxgkDdiEnumVidPnCofuncModality harus menambah perilakunya sesuai dengan informasi tambahan (pivot enumerasi) yang diteruskan dalam parameter EnumPivotType dan EnumPivot .

Pivot enumerasi dapat berupa salah satu hal berikut:

  • Set mode sumber video tertentu yang ada

  • Set mode dari target video tertentu yang ada

  • Transformasi penskalaan dari jalur VidPN tertentu yang ada

  • Transformasi rotasi dari jalur VidPN tertentu yang ada

Jika pivot enumerasi adalah set mode, maka DxgkDdkEnumVidPnCofuncModality harus membiarkan set mode tersebut tidak berubah. Jika pivot enumerasi adalah transformasi penskalaan (rotasi) jalur, maka DxgkDdiEnumVidPnCofuncModality tidak boleh mengubah bendera dukungan penskalaan (rotasi) untuk jalur tersebut.