Bagikan melalui


Alur Pendukung, Daftar Perintah, dan Alur 3-D

Bagian ini hanya berlaku untuk Windows 7 dan yang lebih baru, dan Windows Server 2008 R2 dan versi sistem operasi Windows yang lebih baru.

Driver tampilan mode pengguna menunjukkan kemampuan Direct3D versi 11 baru yang didukungnya (misalnya, utas, daftar perintah, dan alur 3-D) saat runtime Direct3D versi 11 memanggil fungsi GetCaps(D3D10_2) driver. GetCaps(D3D10_2) adalah salah satu fungsi khusus adaptor driver yang disediakan driver dalam struktur D3D10_2DDI_ADAPTERFUNCS yang ditunjukkan oleh anggota pAdapterFuncs_2 struktur D3D10DDIARG_OPENADAPTER . Untuk informasi selengkapnya tentang menyediakan fungsi khusus adaptor selama inisialisasi driver, lihat Menginisialisasi Komunikasi dengan DDI Direct3D Versi 11. Ketika fungsi GetCaps(D3D10_2) dipanggil, driver tampilan mode pengguna menyediakan kemampuan Direct3D versi 11 baru berdasarkan jenis permintaan (yang ditentukan dalam anggota Jenis struktur D3D10_2DDIARG_GETCAPS yang ditunjukkan oleh parameter pData fungsi GetCaps (D3D10_2).

Threading dan Daftar Perintah

API Direct3D versi 11 memerlukan mode operasi di mana ia dapat menyinkronkan utas aplikasi untuk memastikan bahwa hanya salah satu utas yang berjalan di DDI pada satu waktu. API Direct3D versi 11 juga memerlukan mode operasi dengan emulasi perangkat lunak daftar perintah. Mode operasi ini diperlukan oleh dan dimanfaatkan pada DDI versi sebelumnya (seperti, Direct3D versi 10 DDI). Oleh karena itu, sebagai bantuan pengembangan untuk penulis driver, mode operasi yang sama ini diperluas untuk ada pada DDI Direct3D versi 11. Penulis driver dapat memutuskan mode operasi mana yang mereka inginkan untuk didukung driver mereka untuk Direct3D versi 11 DDI.

Semua driver pada akhirnya harus sepenuhnya mendukung semua jenis operasi threading (artinya, semua driver pada akhirnya harus mendukung semua kemampuan threading struktur D3D11DDI_THREADING_CAPS ). Namun, driver dapat mengharuskan API meniru daftar perintah atau menerapkan mode operasi satu utas untuk driver. API harus mengetahui kemampuan utas driver selama pembuatan perangkat API, tetapi sebelum pembuatan perangkat DDI. Oleh karena itu, runtime menentukan kemampuan threading driver ketika memanggil fungsi khusus adaptor GetCaps (D3D10_2) driver dengan anggota JenisD3D10_2DDIARG_GETCAPS diatur ke D3D11DDICAPS_THREADING. Driver mengembalikan pointer ke struktur D3D11DDI_THREADING_CAPS di anggota pData D3D10_2DDIARG_GETCAPS yang mengidentifikasi kemampuan threading driver. Driver harus mendukung mode free-threaded (D3D11DDICAPS_FREETHREADED) jika driver juga mendukung daftar perintah (D3D11DDICAPS_COMMANDLISTS_BUILD_2) karena daftar perintah dibangun pada mode free-threaded. Driver harus ikut serta untuk mendukung mode utas bebas dan daftar perintah. Aplikasi dapat menentukan dukungan yang ditunjukkan driver melalui penggunaan fungsi CheckFeatureSupport tingkat aplikasi dan konstanta D3D11_FEATURE_THREADING; namun, beberapa aplikasi mungkin tidak peduli karena dukungan yang disediakan API.

Tingkat Alur 3-D

Driver yang mendukung DDI Direct3D versi 11 tidak diperlukan untuk mendukung semua fitur perangkat keras DDI Direct3D versi 11. Driver dapat mendukung model utas baru DDI Direct3D versi 11 di atas perangkat keras yang hanya mendukung DDI Direct3D versi 10. Runtime Direct3D versi 11 menentukan tingkat dukungan perangkat keras maksimum driver ketika runtime memanggil fungsi GetCaps (D3D10_2) driver dengan anggota JenisD3D10_2DDIARG_GETCAPS diatur ke D3D11DDICAPS_3DPIPELINESUPPORT. Driver mengembalikan pointer ke struktur D3D11DDI_3DPIPELINESUPPORT_CAPS di anggota pDataD3D10_2DDIARG_GETCAPS yang mengidentifikasi tingkat dukungan perangkat keras maksimum.

API tidak hanya menggunakan versi DDI sebagai indikator utama dukungan tingkat fitur API; API memungkinkan driver untuk mengumpan kembali ke proses ini. Runtime memilih nilai D3D11DDI_3DPIPELINELEVEL dan mengembalikan nilai ke driver selama pembuatan perangkat dalam panggilan ke fungsi CreateDevice (D3D10) driver, sebagai bagian dari anggota Bendera dari struktur D3D10DDIARG_CREATEDEVICE .

Jika driver mendukung tingkat perangkat keras kurang dari Direct3D versi 11 pada DDI Direct3D versi 11, ada sedikit konsekuensi pengoperasian driver. Yang pertama adalah bahwa runtime Direct3D versi 11 mungkin tidak pernah memanggil banyak fungsi DDI Direct3D versi 11 baru sama sekali. Misalnya, runtime Direct3D versi 11 tidak memanggil salah satu fungsi DDI tahap shader baru (seperti DsSetShader) jika driver mendukung tingkat fitur perangkat keras yang kurang dari Direct3D versi 11. Fungsi DDI lainnya mengikuti aturan tingkat fitur dan mengabaikan fakta bahwa DDI Direct3D versi 11 mungkin dikaitkan dengan kemampuan yang lebih tinggi. Misalnya, meskipun IAVertexInputSlots untuk API Direct3D versi 11 adalah 32, tingkat fitur Direct3D versi 10 hanya memungkinkan 16 dan itulah yang diharapkan driver.

Fitur yang tidak digunakan lagi atau dikonversi menghadirkan aspek menarik lainnya. Penghentian tidak dimungkinkan pada tingkat DDI Direct3D versi 11 karena penghentian harus mendukung kemampuan untuk mengekspresikan fungsi DDI versi sebelumnya. Misalnya, PIPELINESTATS versi DIRECT3D 11 API selalu konstan; namun, ia meminta D3D10_DDI_QUERY_DATA_PIPELINE_STATISTICS yang berbeda dengan tingkat fitur Direct3D 10 dan D3D11_DDI_QUERY_DATA_PIPELINE_STATISTICS dengan tingkat fitur Direct3D 11, dan sebagainya. Meskipun API mencoba untuk menghentikan ukuran filter teks, lebih mudah bagi driver untuk menghentikan entri tabel fungsi DDI, secara keseluruhan, daripada mencoba menggunakan kembali entri tabel fungsi untuk sesuatu yang lain.

Bahkan jika driver yang mendukung DDI Direct3D versi 11 tidak mendukung tingkat fitur Direct3D versi 11 lengkap, driver tidak dapat menolak "kesadaran format yang diperluas", seperti yang dijelaskan dalam Mendukung Kesadaran Format yang Diperluas. Karena driver mendukung DDI Direct3D versi 11, driver harus menangani tugas-tugas berikut:

  • Mendukung format BGR

  • Merespons panggilan ke fungsi CheckFormatSupport dengan benar untuk memeriksa dukungan XR_BIAS. Driver harus mengklaim dukungan atau menolak dukungan.

  • Perbolehkan pengecoran buffer belakang yang sepenuhnya diketik

API Direct3D versi 11 juga memberi tahu driver apakah aplikasi menggunakan beberapa utas melalui bendera D3D11DDI_CREATEDEVICE_FLAG_SINGLETHREADED. Jika bendera ini ada di anggota Bendera struktur D3D10DDIARG_CREATEDEVICE ketika perangkat tampilan dibuat melalui panggilan ke fungsi CreateDevice (D3D10) driver, driver dapat menentukan bahwa tidak ada konteks yang ditangguhkan yang dibuat dan bahwa driver tidak diperlukan untuk disinkronkan, karena pembuatan bersamaan tidak terjadi.