Bagikan melalui


Pemetaan Tekstur Default

Penggunaan pemetaan tekstur default mengurangi penyalinan dan penggunaan memori saat berbagi data gambar antara GPU dan CPU. Namun, itu hanya boleh digunakan dalam situasi tertentu. Tata letak moncong standar menghindari penyalinan atau menggeser data dalam beberapa tata letak.

Gambaran Umum

Pemetaan tekstur default tidak boleh menjadi pilihan pertama bagi pengembang. Pengembang harus membuat kode dengan cara ramah GPU diskrit terlebih dahulu (yaitu, tidak memiliki akses CPU untuk sebagian besar tekstur dan mengunggah dengan CopySubresourceRegion1). Tetapi, untuk kasus tertentu, CPU dan GPU dapat sering berinteraksi pada data yang sama, sehingga memetakan tekstur default menjadi berguna untuk menghemat daya, atau untuk mempercepat desain tertentu pada adaptor atau arsitektur tertentu. Aplikasi harus mendeteksi kasus ini dan mengoptimalkan salinan yang tidak perlu.

Di D3D11.3, tekstur yang dibuat dengan D3D11_TEXTURE_LAYOUT_UNDEFINED (satu anggota enum D3D11_TEXTURE_LAYOUT ) dan tidak ada akses CPU yang paling efisien untuk rendering dan pengambilan sampel GPU yang sering. Saat pengujian performa, tekstur tersebut harus dibandingkan dengan D3D11_TEXTURE_LAYOUT_UNDEFINED dengan akses CPU, dan D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE dengan akses CPU, dan D3D11_TEXTURE_LAYOUT_ROW_MAJOR untuk dukungan lintas adaptor.

Menggunakan D3D11_TEXTURE_LAYOUT_UNDEFINED dengan akses CPU memungkinkan metode WriteToSubresource, ReadFromSubresource, Map (precluding akses aplikasi ke pointer), dan Unmap; tetapi dapat mengorbankan efisiensi akses GPU. Menggunakan D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE dengan akses CPU memungkinkan WriteToSubresource, ReadFromSubresource, Map (yang mengembalikan pointer yang valid ke aplikasi), dan Unmap. Ini juga dapat mengorbankan efisiensi akses GPU lebih dari D3D11_TEXTURE_LAYOUT_UNDEFINED dengan akses CPU.

Secara umum, aplikasi harus membuat sebagian besar tekstur sebagai hanya GPU yang dapat diakses, dan dengan D3D11_TEXTURE_LAYOUT_UNDEFINED.

Sebelumnya ke fitur tekstur default pemetaan, hanya ada satu tata letak standar untuk data multidimensi: "linear", juga dikenal sebagai "row-major". Aplikasi harus menghindari tekstur USAGE_STAGING dan USAGE_DYNAMIC saat default peta tersedia. Tekstur USAGE_STAGING dan USAGE_DYNAMIC menggunakan tata letak linier.

D3D11.3 (dan D3D12) memperkenalkan tata letak data multi-dimensi standar. Ini dilakukan untuk memungkinkan beberapa unit pemrosesan beroperasi pada data yang sama tanpa menyalin data atau menggeser data di antara beberapa tata letak. Tata letak standar memungkinkan perolehan efisiensi melalui efek jaringan dan memungkinkan algoritma untuk membuat pemotongan pendek dengan asumsi pola tertentu.

Perhatikan bahwa swizzle standar ini adalah fitur perangkat keras, dan mungkin tidak didukung oleh semua GPU.

API D3D11.3

Tidak seperti D3D12, D3D11.3 tidak mendukung pemetaan tekstur secara default, jadi Anda perlu mengkueri D3D11_FEATURE_DATA_D3D11_OPTIONS2. Swizzle standar juga perlu dikueri dengan panggilan ke ID3D11Device::CheckFeatureSupport dan memeriksa StandardSwizzle64KBSupported bidang D3D11_FEATURE_DATA_D3D11_OPTIONS2.

Pemetaan tekstur referensi API berikut:

Enum

Struktur

Metode

Fitur Direct3D 11.3