Bagikan melalui


Batasan akses petak peta dengan pemetaan duplikat

Bagian ini menjelaskan batasan akses petak peta dengan pemetaan duplikat.

Menyalin sumber daya ubin dengan sumber dan tujuan yang tumpang tindih

Jika petak peta di area sumber dan tujuan operasi Copy* memiliki pemetaan duplikat di area salin yang akan tumpang tindih meskipun kedua sumber daya tidak memiliki sumber daya ubin dan operasi Salin* mendukung salinan yang tumpang tindih, operasi Salin* akan berperilaku baik-baik saja (seolah-olah sumber disalin ke lokasi sementara sebelum pergi ke tujuan). Tetapi jika tumpang tindih tidak jelas (seperti sumber daya sumber dan tujuan berbeda tetapi pemetaan berbagi atau pemetaan diduplikasi di atas permukaan tertentu), hasil operasi salin pada petak yang dibagikan tidak terdefinisi.

Menyalin ke sumber daya ubin dengan petak peta duplikat di area tujuan

Menyalin ke sumber daya ubin dengan petak peta duplikat di area tujuan menghasilkan hasil yang tidak terdefinisi dalam petak peta ini kecuali data itu sendiri identik; petak peta yang berbeda mungkin menulis petak peta dalam urutan yang berbeda.

Akses UAV ke pemetaan petak peta duplikat

Misalkan tampilan akses yang tidak diurutkan (UAV) pada sumber daya ubin memiliki pemetaan petak peta duplikat di areanya atau dengan sumber daya lain yang terikat ke alur. Pengurutan akses ke petak peta duplikat ini tidak terdefinisi jika dilakukan oleh utas yang berbeda, sama seperti urutan akses memori ke UAV secara umum tidak diurutkan.

Penyajian setelah pemetaan petak peta perubahan atau pembaruan konten dari pemetaan luar

Jika pemetaan petak peta sumber daya petak peta telah berubah atau konten dalam petak peta kumpulan petak peta yang dipetakan telah berubah melalui pemetaan sumber daya petak peta lain, dan sumber daya petak peta akan dirender melalui tampilan target render atau tampilan stensil kedalaman, aplikasi harus Menghapus (menggunakan fungsi tetap Hapus API) atau menyalin sepenuhnya menggunakan API Salin*/Perbarui* petak peta yang telah diubah dalam area yang sedang dirender (dipetakan atau tidak). Kegagalan aplikasi untuk menghapus atau menyalin dalam kasus ini mengakibatkan struktur pengoptimalan perangkat keras untuk tampilan target render tertentu atau tampilan stensil kedalaman menjadi basi dan akan mengakibatkan hasil rendering sampah pada beberapa perangkat keras dan inkonsistensi di berbagai perangkat keras. Struktur data pengoptimalan tersembunyi yang digunakan oleh perangkat keras ini mungkin lokal untuk pemetaan individual dan tidak terlihat oleh pemetaan lain ke memori yang sama.

Operasi ID3D11DeviceContext1::ClearView mendukung penghapusan tampilan target render dengan persegi panjang. Untuk perangkat keras yang mendukung sumber daya ubin, ClearView juga harus mendukung penghapusan tampilan stensil kedalaman dengan persegi panjang, untuk permukaan kedalaman saja (tanpa stensil). Operasi ini memungkinkan aplikasi untuk hanya menghapus area permukaan yang diperlukan.

Jika aplikasi perlu mempertahankan konten memori area yang ada di sumber daya ubin tempat pemetaan telah berubah, aplikasi tersebut harus mengatasi persyaratan yang jelas. Aplikasi dapat menyelesaikan pekerjaan ini dengan terlebih dahulu menyimpan konten di mana pemetaan petak peta telah berubah (dengan menyalinnya ke permukaan sementara, misalnya, dengan menggunakan ID3D11DeviceContext2::CopyTiles), mengeluarkan perintah yang jelas yang diperlukan lalu menyalin konten kembali. Meskipun ini akan menyelesaikan tugas mempertahankan konten permukaan untuk penyajian bertahap, kelemahannya adalah bahwa performa penyajian berikutnya di permukaan mungkin menderita karena pengoptimalan penyajian mungkin hilang.

Jika petak peta dipetakan ke dalam beberapa sumber daya ubin pada saat yang sama dan konten petak peta dimanipulasi dengan cara apa pun (render, salin, dan sebagainya) melalui salah satu sumber daya ubin, jika petak peta yang sama akan dirender melalui sumber daya ubin lainnya, petak peta harus dibersihkan terlebih dahulu seperti yang dijelaskan sebelumnya.

Penyajian ke petak peta yang dibagikan di luar area render

Misalkan area dalam sumber daya ubin sedang dirender dan petak peta kumpulan petak peta yang direferensikan oleh area render juga dipetakan ke dari luar area render (termasuk melalui sumber daya ubin lainnya, pada saat yang sama atau tidak). Data yang dirender ke petak peta ini tidak dijamin muncul dengan benar saat dilihat melalui pemetaan lain, meskipun tata letak memori yang mendasar kompatibel. Fakta ini disebabkan oleh struktur data pengoptimalan beberapa penggunaan perangkat keras yang dapat lokal untuk pemetaan individual untuk permukaan yang dapat dirender dan tidak terlihat oleh pemetaan lain ke lokasi memori yang sama. Anda dapat mengatasi pembatasan ini dengan menyalin dari pemetaan yang dirender ke semua pemetaan lain ke memori yang sama yang mungkin diakses (atau menghapus memori tersebut atau menyalin data lain ke dalamnya jika konten lama tidak lagi diperlukan). Meskipun pekerjaan ini tampaknya berlebihan, itu membuat semua pemetaan lain ke memori yang sama dengan benar memahami cara mengakses kontennya, dan setidaknya penghematan memori hanya memiliki satu dukungan memori fisik tetap utuh. Selain itu, ketika Anda beralih antara menggunakan sumber daya berjenjang yang berbeda yang berbagi pemetaan (kecuali hanya membaca), Anda harus memanggil ID3D11DeviceContext2::TiledResourceBarrier API di antara sakelar.

Penyajian ke petak peta yang dibagikan dalam area render

Jika area dalam sumber daya ubin sedang dirender ke dan di dalam area render beberapa petak peta dipetakan ke lokasi kumpulan petak peta yang sama, hasil penyajian tidak terdefinis pada petak peta tersebut.

Kompatibilitas data di seluruh petak peta berbagi sumber daya berjenjang

Misalkan beberapa sumber daya ubin memiliki pemetaan ke lokasi kumpulan petak peta yang sama dan setiap sumber daya digunakan untuk mengakses data yang sama. Skenario ini hanya valid jika aturan lain tentang menghindari masalah dengan struktur pengoptimalan perangkat keras dihindari, panggilan yang sesuai ke ID3D11DeviceContext2::TiledResourceBarrier dibuat, dan sumber daya ubin kompatibel satu sama lain. Yang terakhir dijelaskan di sini dalam hal apa artinya bagi ubin berbagi sumber daya ubin agar tidak kompatibel. Kondisi ketidaksesuaian dalam mengakses data yang sama di seluruh pemetaan petak peta duplikat adalah penggunaan dimensi atau format permukaan yang berbeda, atau perbedaan dengan adanya target render atau bendera ikatan stensil kedalaman pada sumber daya. Menulis ke memori dengan satu jenis pemetaan menghasilkan hasil yang tidak terdefinisi jika Anda kemudian membaca atau merender melalui pemetaan dari sumber daya yang tidak kompatibel. Jika pemetaan berbagi sumber daya lainnya pertama kali diinisialisasi dengan data baru (mendaur ulang memori untuk tujuan yang berbeda), operasi baca atau render berikutnya baik-baik saja karena data tidak berdarah di seluruh interpretasi yang tidak kompatibel. Tetapi, Anda harus memanggil TiledResourceBarrier API saat beralih antara mengakses pemetaan yang tidak kompatibel seperti ini.

Jika target render atau bendera ikatan stensil kedalaman tidak diatur pada salah satu pemetaan berbagi sumber daya satu sama lain, ada batasan yang jauh lebih sedikit. Selama format dan jenis permukaan (misalnya, Texture2D) sama, petak peta dapat dibagikan. Format yang berbeda yang kompatibel adalah kasus seperti permukaan BC* dan ukuran setara yang tidak dikompresi 32 bit atau 16 bit per format komponen, seperti BC6H dan R32G32B32A32. Banyak format 32 bit per elemen dapat dialirkan dengan R32_* juga (R10G10B10A2_*, R8G8B8A8_*, B8G8R8A8_*,B8G8R8X8_*,R16G16_*); operasi ini selalu diizinkan untuk sumber daya yang tidak diurutkan.

Berbagi antara petak peta yang dikemas dan tidak dikemas tidak masalah jika formatnya kompatibel dan petak peta diisi dengan warna solid.

Akhirnya, jika tidak ada yang umum tentang pemetaan petak peta berbagi sumber daya kecuali bahwa tidak ada yang memiliki target render atau bendera ikatan stensil kedalaman, hanya memori yang diisi dengan 0 yang dapat dibagikan dengan aman; pemetaan akan muncul sebagai apa pun yang didekodekan 0 untuk definisi format sumber daya yang diberikan (biasanya hanya 0).

Akses alur ke sumber daya ubin