Bagikan melalui


Perangkat yang hilang

Perangkat Direct3D dapat berada dalam status operasional atau status hilang. Status operasional adalah status normal perangkat tempat perangkat berjalan dan menyajikan semua penyajian seperti yang diharapkan. Perangkat melakukan transisi ke status hilang ketika suatu peristiwa, seperti hilangnya fokus keyboard dalam aplikasi layar penuh, menyebabkan penyajian menjadi tidak mungkin. Status hilang ditandai dengan kegagalan senyap dari semua operasi penyajian, yang berarti bahwa metode penyajian dapat mengembalikan kode keberhasilan meskipun operasi penyajian gagal.

Secara desain, serangkaian skenario lengkap yang dapat menyebabkan perangkat hilang tidak ditentukan. Beberapa contoh umum termasuk hilangnya fokus, seperti ketika pengguna menekan ALT+TAB atau saat dialog sistem diinisialisasi. Perangkat juga dapat hilang karena peristiwa manajemen daya, atau ketika aplikasi lain mengasumsikan operasi layar penuh. Selain itu, setiap kegagalan dari mengatur ulang perangkat menempatkan perangkat ke dalam keadaan hilang.

Semua metode yang berasal dari IUnknown dijamin berfungsi setelah perangkat hilang. Setelah kehilangan perangkat, setiap fungsi umumnya memiliki tiga opsi berikut:

  • Gagal dengan kesalahan "perangkat hilang" - Ini berarti bahwa aplikasi perlu mengenali bahwa perangkat hilang, sehingga aplikasi mengidentifikasi bahwa sesuatu tidak terjadi seperti yang diharapkan.
  • Secara diam-diam gagal, mengembalikan S_OK atau kode pengembalian lainnya - Jika fungsi diam-diam gagal, aplikasi umumnya tidak dapat membedakan antara hasil "berhasil" dan "kegagalan senyap."
  • Mengembalikan kode pengembalian.

Menanggapi Perangkat yang Hilang

Perangkat yang hilang harus membuat ulang sumber daya (termasuk sumber daya memori video) setelah direset. Jika perangkat hilang, aplikasi meminta perangkat untuk melihat apakah perangkat dapat dipulihkan ke status operasional. Jika tidak, aplikasi menunggu hingga perangkat dapat dipulihkan.

Jika perangkat dapat dipulihkan, aplikasi menyiapkan perangkat dengan menghancurkan semua sumber daya memori video dan rantai pertukaran apa pun. Mengatur ulang adalah satu-satunya prosedur yang memiliki efek ketika perangkat hilang, dan merupakan satu-satunya cara aplikasi dapat mengubah perangkat dari yang hilang menjadi status operasional. Reset akan gagal kecuali aplikasi merilis semua sumber daya yang dialokasikan, termasuk target render dan permukaan stensil kedalaman.

Sebagian besar, panggilan frekuensi tinggi Direct3D tidak mengembalikan informasi apa pun tentang apakah perangkat telah hilang. Aplikasi dapat terus memanggil metode penyajian, tanpa menerima pemberitahuan perangkat yang hilang. Secara internal, operasi ini dibuang hingga perangkat diatur ulang ke status operasional.

Operasi Penguncian

Secara internal, Direct3D melakukan pekerjaan yang cukup untuk memastikan bahwa operasi penguncian akan berhasil setelah perangkat hilang. Namun, tidak dijamin bahwa data sumber daya memori video akan akurat selama operasi penguncian. Dijamin bahwa tidak ada kode kesalahan yang akan dikembalikan. Ini memungkinkan aplikasi ditulis tanpa khawatir kehilangan perangkat selama operasi penguncian.

Sumber daya

Sumber daya dapat menggunakan memori video. Karena perangkat yang hilang terputus dari memori video yang dimiliki oleh adaptor, tidak dimungkinkan untuk menjamin alokasi memori video ketika perangkat hilang. Akibatnya, semua metode pembuatan sumber daya diimplementasikan agar berhasil, tetapi sebenarnya hanya mengalokasikan memori sistem dummy. Karena sumber daya memori video apa pun harus dihancurkan sebelum perangkat diubah ukurannya, tidak ada masalah mengalokasikan memori video secara berlebihan. Permukaan dummy ini memungkinkan operasi kunci dan salin tampak berfungsi secara normal sampai aplikasi menemukan bahwa perangkat telah hilang.

Semua memori video harus dirilis sebelum perangkat dapat direset dari status hilang ke status operasional. Data status lainnya secara otomatis dihancurkan oleh transisi ke status operasional.

Anda didorong untuk mengembangkan aplikasi dengan satu jalur kode untuk merespons kehilangan perangkat. Jalur kode ini kemungkinan serupa, jika tidak identik, ke jalur kode yang diambil untuk menginisialisasi perangkat saat startup.

Data yang Diambil

Direct3D memungkinkan aplikasi untuk memvalidasi tekstur dan merender status terhadap penyajian akses menyeluruh oleh perangkat keras.

Direct3D juga memungkinkan aplikasi untuk menyalin gambar yang dihasilkan atau ditulis sebelumnya dari sumber daya memori video ke sumber daya memori sistem nonvolatile. Karena gambar sumber transfer tersebut mungkin hilang kapan saja, Direct3D memungkinkan operasi penyalinan tersebut gagal ketika perangkat hilang.

Operasi salin dapat gagal karena tidak ada permukaan utama saat perangkat hilang. Membuat rantai pertukaran juga dapat gagal karena buffer belakang tidak dapat dibuat saat perangkat hilang.

Perangkat