enumerasi D3D12_TEXTURE_LAYOUT (d3d12.h)

Menentukan opsi tata letak tekstur.

Sintaks

typedef enum D3D12_TEXTURE_LAYOUT {
  D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
  D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
  D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
  D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3
} ;

Konstanta

 
D3D12_TEXTURE_LAYOUT_UNKNOWN
Nilai: 0
Menunjukkan bahwa tata letak tidak diketahui, dan kemungkinan dependen adapter.
Selama pembuatan, driver memilih tata letak yang paling efisien berdasarkan properti sumber daya lainnya, terutama ukuran dan bendera sumber daya.
Pilih pilihan ini kecuali fungsionalitas tertentu diperlukan dari tata letak tekstur lain.

Pengoptimalan unggahan tekstur nol-salin ada untuk arsitektur UMA; lihat ID3D12Resource::WriteToSubresource.
D3D12_TEXTURE_LAYOUT_ROW_MAJOR
Nilai: 1
Menunjukkan bahwa data untuk tekstur disimpan dalam urutan utama baris (kadang-kadang disebut "urutan linier pitch").

Tata letak tekstur ini menemukan texel berturut-turut dari baris yang berdampingan dalam memori, sebelum texel baris berikutnya.
Demikian pula, texel berturut-turut dari kedalaman atau iringan array tertentu berdampingan dalam memori sebelum texel dari kedalaman atau iringan array berikutnya.
Padding mungkin ada di antara baris dan antara irisan kedalaman atau array untuk menyelaraskan pengumpulan data.
Langkah adalah jarak dalam memori antara baris, kedalaman, atau irisan array; dan itu termasuk padding apa pun.

Tata letak tekstur ini memungkinkan berbagi data tekstur antara beberapa adaptor, saat tata letak lain tidak tersedia.

Banyak pembatasan berlaku, karena tata letak ini umumnya tidak efisien untuk penggunaan yang luas:


  • Lokalitas texel terdekat tidak secara rotasi invarians.

  • Hanya properti tekstur berikut yang didukung:


  • Tekstur harus dibuat pada timbunan dengan D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER.


Buffer dibuat dengan D3D12_TEXTURE_LAYOUT_ROW_MAJOR, karena data tekstur utama baris dapat berada di dalamnya tanpa membuat objek tekstur.
Ini biasanya digunakan untuk mengunggah atau membaca kembali data tekstur, terutama untuk adaptor diskrit/NUMA.
Namun, D3D12_TEXTURE_LAYOUT_ROW_MAJOR juga dapat digunakan saat marshaling data tekstur antara GPU atau adaptor.
Untuk contoh penggunaan dengan ID3D12GraphicsCommandList::CopyTextureRegion, lihat beberapa topik berikut:

D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE
Nilai: 2
Menunjukkan bahwa tata letak dalam petak peta 64KB dan kemasan ekor mip terserah driver.
Tidak ada pola gerimis standar.

Tata letak tekstur ini disusun menjadi wilayah 64KB yang berdampingan, juga dikenal sebagai petak peta, yang berisi jumlah texel yang hampir sama dengan jumlah texel berturut-turut di setiap dimensi.
Petak peta disusun dalam urutan besar baris.
Meskipun tidak ada padding antar petak peta, biasanya ada texel yang tidak digunakan dalam petak peta terakhir di setiap dimensi.
Tata letak texel dalam petak peta tidak terdefinisi.
Setiap subsumber daya segera mengikuti di mana subsumber daya sebelumnya berakhir, dan urutan sub sumber daya mengikuti urutan yang sama dengan ordinal sub sumber daya.
Namun, pengemasan tail mip bersifat khusus adaptor.
Untuk detail selengkapnya, lihat tingkat sumber daya berjenjang dan ID3D12Device::GetResourceTiling.

Tata letak tekstur ini memungkinkan skenario tekstur residen atau jarang sebagian saat digunakan bersama dengan fungsionalitas pemetaan halaman memori virtual.
Tata letak tekstur ini harus digunakan bersama dengan ID3D12Device::CreateReservedResource untuk mengaktifkan penggunaan ID3D12CommandQueue::UpdateTileMappings.

Beberapa batasan berlaku untuk tekstur dengan tata letak ini:

D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE
Nilai: 3
Menunjukkan bahwa tekstur default menggunakan pola swizzle standar.

Tata letak tekstur ini disusun dengan cara yang sama seperti D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE, kecuali tata letak texel dalam petak peta ditentukan. Pengemasan tail mip bersifat khusus adaptor.

Tata letak tekstur ini memungkinkan pengoptimalan saat marshaling data antara beberapa adaptor atau antara CPU dan GPU.
Jumlah penyalinan dapat dikurangi ketika beberapa komponen memahami tata letak memori tekstur.
Tata letak ini umumnya lebih efisien untuk penggunaan ekstensif daripada tata letak baris-utama, karena lokalitas rotasi texel tetangga yang invarians.
Tata letak ini biasanya hanya dapat digunakan dengan adaptor yang mendukung moncong standar, tetapi pengecualian ada untuk tumpukan bersama lintas adaptor.

Pembatasan untuk tata letak ini adalah bahwa berikut ini tidak didukung:

Keterangan

Enum ini digunakan oleh struktur D3D12_RESOURCE_DESC .

Enumerasi ini mengontrol pola lincah tekstur default dan mengaktifkan dukungan peta pada tekstur default. Penelepon harus meminta D3D12_FEATURE_DATA_D3D12_OPTIONS untuk memastikan bahwa setiap opsi didukung.

Format moncong standar berlaku dalam setiap gugus berukuran halaman, dan halaman ditata dalam urutan linier sehubungan satu sama lain. Pola interleave 16-bit mendefinisikan konversi dari lokasi intra-halaman yang di-swizzled ke lokasi pasca-bergelimpangan.

Pola gerimis standar

Untuk menunjukkan, pertimbangkan format swizzle 2D 32bpp di atas. Ini diwakili oleh masker interleave berikut, di mana bit di sebelah kiri paling signifikan:

UINT xBytesMask = 1010 1010 1000 1111
UINT yMask =      0101 0101 0111 0000

Untuk menghitung alamat bergetar, kode berikut dapat digunakan (di mana instruksi intrinsik _pdep_u32 didukung):

UINT swizzledOffset = resourceBaseOffset +
                      _pdep_u32(xOffset, xBytesMask) +
                      _pdep_u32(yOffset, yBytesMask);

Persyaratan

Persyaratan Nilai
Header d3d12.h

Lihat juga

CD3DX12_RESOURCE_DESC

Enumerasi Inti

Pengoptimalan UMA: Tekstur yang Dapat Diakses CPU dan Swizzle Standar