Bagikan melalui


Lapisan API (Direct3D 10)

Runtime Direct3D 10 dibangun dengan lapisan, dimulai dengan fungsionalitas dasar di inti dan membangun fungsionalitas opsional dan bantuan pengembang di lapisan luar.

Lapisan Inti

Lapisan inti ada secara default; menyediakan pemetaan yang sangat tipis antara API dan driver perangkat, meminimalkan overhead untuk panggilan frekuensi tinggi. Karena lapisan inti sangat penting untuk performa, lapisan ini hanya melakukan validasi kritis.

Lapisan yang tersisa bersifat opsional. Sebagai aturan umum, lapisan menambahkan fungsionalitas, tetapi tidak mengubah perilaku yang ada. Misalnya, fungsi inti akan memiliki nilai pengembalian yang sama terlepas dari lapisan debug yang dibuat, meskipun output debug tambahan dapat disediakan jika lapisan debug dibuat.

Buat lapisan saat perangkat dibuat dengan memanggil D3D10CreateDevice dan menyediakan satu atau beberapa nilai D3D10_CREATE_DEVICE_FLAG .

Lapisan Debug

Lapisan debug menyediakan parameter tambahan yang ekstensif dan validasi konsistensi (seperti memvalidasi tautan shader dan pengikatan sumber daya, memvalidasi konsistensi parameter, dan melaporkan deskripsi kesalahan). Output yang dihasilkan oleh lapisan debug terdiri dari antrean string yang dapat diakses menggunakan ID3D10InfoQueue Interface (lihat Menyesuaikan Output Debug dengan ID3D10InfoQueue (Direct3D 10)). Kesalahan yang dihasilkan oleh lapisan inti disorot dengan peringatan oleh lapisan debug.

Untuk membuat perangkat yang mendukung lapisan debug, Anda harus menginstal DirectX SDK (untuk mendapatkan D3D10SDKLayers.DLL), lalu menentukan bendera D3D10_CREATE_DEVICE_DEBUG saat memanggil D3D10CreateDevice. Tentu saja, menjalankan aplikasi dengan lapisan debug akan jauh lebih lambat. Untuk mengaktifkan/menonaktifkan pesan debug untuk API D3DX10, panggil D3DX10DebugMute.

Ketika lapisan debug mencantumkan kebocoran memori, lapisan ini menghasilkan daftar penunjuk antarmuka objek bersama dengan nama mereka yang mudah diingat. Nama akrab default adalah "<tidak bernama>". Anda dapat mengatur nama yang mudah diingat dengan menggunakan metode ID3D10DeviceChild::SetPrivateData dan WKPDID_D3DDebugObjectName GUID yang ada di D3Dcommon.h. Misalnya, untuk memberi nama pTexture dengan nama SDKLayer mytexture.jpg, gunakan kode berikut:

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

Biasanya, Anda harus mengkompilasi panggilan ini dari versi produksi Anda.

Lapisan Switch-to-Reference

Lapisan ini memungkinkan aplikasi untuk transisi antara perangkat keras (HAL) dan perangkat referensi atau perangkat lunak (REF). Untuk beralih perangkat, Anda harus terlebih dahulu membuat perangkat yang mendukung lapisan switch-to-reference (lihat D3D10CreateDevice) lalu memanggil ID3D10SwitchToRef::SetUseRef.

Semua status perangkat, sumber daya, dan objek dipertahankan melalui transisi perangkat ini. Namun, terkadang tidak mungkin untuk mencocokkan data sumber daya dengan tepat. Hal ini disebabkan oleh fakta bahwa beberapa informasi tersedia untuk perangkat keras yang tidak tersedia untuk perangkat referensi.

Hampir semua aplikasi real-time menggunakan implementasi HAL dari alur. Ketika alur dialihkan dari perangkat keras ke perangkat referensi, operasi penyajian dilakukan secara bersamaan di perangkat keras dan perangkat lunak. Saat perangkat lunak dirender, sumber daya akan diunduh ke memori sistem. Ini mungkin memerlukan sumber daya lain yang di-cache dalam memori sistem untuk dikeluarkan untuk memberi ruang.

Catatan

Fitur switch-to-reference-layer ini hanya didukung di Direct3D 10 dan Direct3D 10.1, dan tidak lagi didukung di Direct3D 11 dan versi yang lebih baru.

 

Lapisan Thread-Safe

Lapisan ini dirancang untuk memungkinkan aplikasi multi-utas mengakses perangkat dari beberapa utas.

Aplikasi Direct3D 10 dapat mengontrol sinkronisasi perangkat menggunakan fungsi perangkat. Ini memungkinkan aplikasi untuk mengaktifkan/menonaktifkan bagian penting (untuk sementara mengaktifkan/menonaktifkan perlindungan multithreading), dan mengambil/merilis kunci bagian kritis melalui beberapa titik entri API Direct3D 10. Lapisan thread-safe diaktifkan secara default. Untuk aplikasi utas tunggal, lapisan aman utas tidak berdampak pada performa.

Perbedaan antara Direct3D 9 dan Direct3D 10:

  • Tidak seperti Direct3D 9, DIRECT3D 10 API default sepenuhnya aman untuk utas.

 

Fitur API (Direct3D 10)