Bagikan melalui


Pemetaan masuk ke dalam kumpulan petak peta

Saat sumber daya dibuat dengan bendera D3D11_RESOURCE_MISC_TILED , petak peta yang membentuk sumber daya berasal dari menunjuk ke lokasi di kumpulan petak peta. Kumpulan petak peta adalah kumpulan memori (didukung oleh satu atau beberapa alokasi di belakang layar - tidak dilihat oleh aplikasi). Sistem operasi dan driver tampilan mengelola kumpulan memori ini, dan jejak memori mudah dipahami oleh aplikasi. Sumber daya berjenjang memetakan wilayah 64KB dengan mengarahkan ke lokasi dalam kumpulan petak peta. Salah satu kejatuhan pengaturan ini adalah memungkinkan beberapa sumber daya untuk berbagi dan menggunakan kembali petak peta yang sama, dan juga agar petak peta yang sama digunakan kembali di lokasi yang berbeda dalam sumber daya jika diinginkan.

Biaya untuk fleksibilitas mengisi petak peta untuk sumber daya dari kumpulan petak peta adalah bahwa sumber daya harus melakukan pekerjaan menentukan dan memelihara pemetaan petak peta mana di kumpulan petak peta yang mewakili petak peta yang diperlukan untuk sumber daya. Pemetaan petak peta dapat diubah. Selain itu, tidak semua ubin dalam sumber daya perlu dipetakan pada satu waktu; sumber daya dapat memiliki pemetaan NULL . Pemetaan NULL mendefinisikan petak peta sebagai tidak tersedia dari sudut pandang sumber daya yang mengaksesnya.

Beberapa kumpulan petak peta dapat dibuat, dan sejumlah sumber daya petak peta dapat dipetakan ke kumpulan petak peta tertentu secara bersamaan. Kumpulan petak peta juga dapat ditanam atau disusutkan. Untuk informasi selengkapnya, lihat Mengubah ukuran kumpulan petak peta. Salah satu batasan yang ada untuk menyederhanakan driver tampilan dan implementasi runtime adalah bahwa sumber daya ubin tertentu hanya dapat memiliki pemetaan ke paling banyak satu kumpulan petak peta pada satu waktu (dibandingkan dengan memiliki pemetaan simultan ke beberapa kumpulan petak peta).

Jumlah penyimpanan yang terkait dengan sumber daya petak itu sendiri (yaitu, memori kumpulan petak peta independen) kira-kira sebanding dengan jumlah petak peta yang benar-benar dipetakan ke kumpulan pada waktu tertentu. Dalam perangkat keras, fakta ini bermuara pada penskalaan jejak memori untuk penyimpanan tabel halaman kira-kira dengan jumlah petak peta yang dipetakan (misalnya, menggunakan skema tabel halaman multitingkat yang sesuai).

Kumpulan petak peta dapat dianggap sebagai abstraksi perangkat lunak sepenuhnya yang memungkinkan aplikasi Direct3D untuk secara efektif dapat memprogram tabel halaman pada unit pemrosesan grafis (GPU) tanpa harus mengetahui detail implementasi tingkat rendah (atau berurusan dengan alamat penunjuk secara langsung). Kumpulan petak peta tidak menerapkan tingkat tidak langsung tambahan dalam perangkat keras. Pengoptimalan tabel halaman tingkat tunggal menggunakan konstruksi seperti direktori halaman tidak bergantung pada konsep kumpulan petak peta.

Mari kita jelajahi penyimpanan apa yang mungkin diperlukan tabel halaman itu sendiri dalam kasus terburuk (meskipun dalam implementasi praktik hanya memerlukan penyimpanan yang kira-kira proporsional dengan apa yang dipetakan).

Misalkan setiap entri tabel halaman adalah 64 bit.

Untuk hit ukuran tabel halaman kasus terburuk untuk satu permukaan, mengingat batas sumber daya di Direct3D 11, misalkan sumber daya petak peta dibuat dengan format 128 bit per elemen (misalnya, float RGBA), sehingga petak peta 64KB hanya berisi 4096 piksel. Ukuran Texture2DArray maksimum yang didukung 16384* 16384 * 2048 (tetapi hanya dengan satu mipmap) akan memerlukan sekitar 1GB penyimpanan dalam tabel halaman jika diisi sepenuhnya (tidak termasuk mipmaps) menggunakan entri tabel 64 bit. Menambahkan mipmaps akan menumbuhkan penyimpanan tabel halaman yang sepenuhnya dipetakan (kasus terburuk) sekitar sepertiga, menjadi sekitar 1,3GB.

Kasus ini akan memberikan akses ke sekitar 10,6 terabyte memori yang dapat diatasi. Namun, mungkin ada batasan jumlah memori yang dapat diatasi, yang akan mengurangi jumlah ini, mungkin di sekitar rentang terabyte.

Kasus lain yang perlu dipertimbangkan adalah satu sumber daya ubin Texture2D 16384*16384 dengan format 32 bit per elemen, termasuk mipmaps. Ruang yang diperlukan dalam tabel halaman yang terisi penuh sekitar 170KB dengan entri tabel 64 bit.

Terakhir, pertimbangkan contoh menggunakan format SM, misalnya BC7 dengan 128 bit per petak peta 4x4 piksel. Itu adalah satu byte per piksel. Texture2DArray 16384* 16384 * 2048 termasuk mipmaps akan membutuhkan sekitar 85MB untuk mengisi memori ini sepenuhnya dalam tabel halaman. Itu tidak buruk mengingat ini memungkinkan satu sumber daya petak untuk menjangkau 550 gigapiksel (memori 512 GB dalam kasus ini).

Dalam praktiknya, di dekat pemetaan penuh ini akan didefinisikan mengingat bahwa jumlah memori fisik yang tersedia tidak akan memungkinkan di dekat sebanyak itu untuk dipetakan dan dirujuk pada satu waktu. Tetapi dengan kumpulan petak peta, aplikasi dapat memilih untuk menggunakan kembali petak peta (sebagai contoh sederhana, menggunakan kembali petak peta berwarna "hitam" untuk wilayah hitam besar dalam gambar) - secara efektif menggunakan kumpulan petak peta (yaitu, pemetaan tabel halaman) sebagai alat untuk kompresi memori.

Isi awal tabel halaman adalah NULL untuk semua entri. Aplikasi juga tidak dapat meneruskan data awal untuk konten memori permukaan karena dimulai tanpa dukungan memori.

Di bagian ini

Topik Deskripsi
Pembuatan kumpulan petak peta
Kumpulan petak peta dibuat melalui ID3D11Device::CreateBuffer API dengan meneruskan bendera D3D11_RESOURCE_MISC_TILE_POOL di anggota MiscFlags dari struktur D3D11_BUFFER_DESC yang ditunjuk parameter pDesc .
Mengubah ukuran kumpulan petak peta
Gunakan ID3D11DeviceContext2::ResizeTilePool API untuk menumbuhkan kumpulan petak jika aplikasi membutuhkan lebih banyak pekerjaan yang ditetapkan untuk pemetaan sumber daya petak peta ke dalamnya atau untuk menyusut jika lebih sedikit ruang yang diperlukan.
Pelacakan bahaya versus sumber daya kumpulan petak peta
Untuk sumber daya yang tidak berjenjang, Direct3D dapat mencegah kondisi bahaya tertentu selama penyajian, tetapi karena pelacakan bahaya akan berada pada tingkat petak peta untuk sumber daya ubin, melacak kondisi bahaya selama rendering sumber daya petak mungkin terlalu mahal.

Membuat sumber daya ubin