Kesalahan Internal Driver (Direct3D 9)

Di Direct3D 9, Direct3D akan memungkinkan driver untuk mengembalikan kode kesalahan seperti E_OUTOFMEMORY, D3DERR_OUTOFVIDEOMEMORY, dan D3DERR_UNSUPPORTEDCOLORARG sehingga aplikasi akan dapat meresponsnya. Namun, terkadang panggilan API yang menghasilkan jenis pengembalian ini dimuat ke dalam buffer perintah dan di-batch untuk dikirim ke GPU (lihat Mengontrol Runtime dan Pengoptimalan Driver). Dalam hal ini, kesalahan tidak dapat disampaikan ke aplikasi ketika tindakan perlu diambil, sehingga kode kesalahan dikonsumsi oleh runtime dan catatan dibuat pada objek perangkat yang terjadi ini. Kemudian ketika aplikasi memanggil IDirect3DDevice9::P resent, IDirect3DDevice9::P resent akan mengembalikan D3DERR_DRIVERINTERNALERROR. Inilah sebabnya mengapa pendekatan terbaik untuk diambil aplikasi saat menerima D3DERR_DRIVERINTERNALERROR dari IDirect3DDevice9::P resent adalah menghancurkan dan membuat ulang perangkat.

Jika Anda ingin mencoba men-debug lebih lanjut, berikut adalah beberapa saran untuk mencoba mencari tahu panggilan API mana yang menghasilkan kesalahan:

  • Karena daftar nilai pengembalian yang mungkin tidak selesai, Anda dapat mencoba menemukan panggilan mana yang gagal dengan mengelilingi setiap panggilan API seperti ini:

    TRACE ( "Calling DrawPrimitive" );
    d3ddev->DrawPrim(...);
    TRACE ( "done\n" );
    

    Aliran debug output kemudian harus menampilkan panggilan yang menyebabkan masalah.

  • Selain itu, untuk tujuan penelusuran kesalahan, coba panggil IDirect3DDevice9::ValidateDevice segera sebelum setiap IDirect3DDevice9::D rawPrimitive untuk melihat apakah ada masalah tambahan dengan driver perangkat (operasi yang tidak didukung, kombinasi format tekstur yang tidak dapat digunakan, dll).

    Catatan

    IDirect3DDevice9::ValidateDevice harus digunakan dengan hati-hati dan hemat karena jumlah pekerjaan validasi yang perlu dilakukan driver untuk mengembalikan jawaban.

     

Tips Pemrograman