Sub sumber daya (Direct3D 12 Graphics)

Menjelaskan bagaimana sumber daya dibagi menjadi subsumber daya, dan cara mereferensikan satu, beberapa, atau sepotong sub sumber daya.

Contoh sub-sumber daya

Jika sumber daya berisi buffer, maka sumber daya hanya berisi satu subsumber daya dengan indeks 0. Jika sumber daya berisi tekstur (atau array tekstur), maka mereferensikan subsumber daya lebih kompleks.

Beberapa API mengakses seluruh sumber daya (seperti metode ID3D12GraphicsCommandList::CopyResource ), yang lain mengakses sebagian sumber daya (misalnya metode ID3D12Resource::ReadFromSubresource ). Metode yang mengakses sebagian sumber daya umumnya menggunakan deskripsi tampilan (seperti struktur D3D12_TEX2D_ARRAY_SRV ) untuk menentukan sub sumber daya yang akan diakses. Lihat bagian API Subresource untuk daftar lengkapnya.

Pengindeksan sub sumber daya

Untuk mengindeks subsumber daya tertentu, tingkat mip diindeks terlebih dahulu saat setiap entri array diindeks.

pengindeksan sub sumber daya

Ilis mip

Ikatan mip mencakup satu tingkat mipmap untuk setiap tekstur dalam array, seperti yang ditunjukkan pada gambar berikut.

irisan mip subresource

Iringan array

Mengingat array tekstur, setiap tekstur dengan mipmaps, iringan array menyertakan satu tekstur dan semua tingkat mip-nya, seperti yang ditunjukkan pada gambar berikut.

irisan array subresource

Ilis bidang

Biasanya format planar tidak digunakan untuk menyimpan data RGBA, tetapi dalam kasus di mana itu (mungkin data RGB 24bpp), satu bidang dapat mewakili gambar merah, satu hijau, dan satu gambar biru. Satu bidang belum tentu satu warna, dua atau lebih warna dapat digabungkan menjadi satu bidang. Data planar yang lebih umum digunakan untuk data YCbCr dan Depth-Stencil sub-sampel. Depth-Stencil adalah satu-satunya format yang sepenuhnya mendukung mipmap, array, dan beberapa bidang (seringkali bidang 0 untuk Kedalaman dan bidang 1 untuk Stensil).

Pengindeksan sub sumber daya untuk array dua gambar Depth-Stencil, masing-masing dengan tiga tingkat mip, ditunjukkan di bawah ini.

pengindeksan stensil kedalaman

YCbCr sub-sampel mendukung array dan memiliki bidang, tetapi tidak mendukung mipmaps. Gambar YCbCr memiliki dua bidang, satu untuk luminance (Y) yang mata manusia paling sensitif, dan satu untuk krominasi (Cb, dan Cr, diselingi) yang mata manusia kurang sensitif. Format ini memungkinkan kompresi nilai krominance untuk memadatkan gambar tanpa memengaruhi luminance, dan merupakan format kompresi video umum karena alasan itu, meskipun digunakan untuk memadatkan gambar diam. Gambar di bawah ini menunjukkan format NV12, mencatat krominasi telah dikompresi hingga seperempat resolusi luminance, yang berarti lebar setiap bidang identik, dan bidang krominance setengah dari ketinggian bidang luminance. Bidang akan diindeks sebagai sub sumber daya dengan cara yang identik dengan contoh Depth-Stencil di atas.

format nv12

Format planar ada di Direct3D 11, tetapi masing-masing bidang tidak dapat ditangani secara individual, misalnya untuk operasi penyalinan atau pemetaan. Ini diubah di Direct3D 12 sehingga setiap bidang menerima ID sub sumber dayanya sendiri. Bandingkan dua metode berikut untuk menghitung ID sub sumber daya.

Direct3D 11

inline UINT D3D11CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels )
{
    return MipSlice + (ArraySlice * MipLevels); 
}

Direct3D 12

inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize )
{ 
    return MipSlice + (ArraySlice * MipLevels) + (PlaneSlice * MipLevels * ArraySize); 
}

Sebagian besar perangkat keras mengasumsikan bahwa memori untuk plane N selalu segera dialokasikan setelah plane N-1.

Alternatif untuk menggunakan subresources adalah aplikasi dapat mengalokasikan sumber daya yang sepenuhnya terpisah per bidang. Dalam hal ini, aplikasi memahami datanya planar dan menggunakan beberapa sumber daya untuk mewakilinya.

Beberapa sub sumber daya

Tampilan sumber daya shader dapat memilih wilayah subresource persegi panjang apa pun, menggunakan salah satu irisan yang dijelaskan di atas dan penggunaan bidang yang yudisial dalam struktur tampilan (seperti D3D12_TEX2D_ARRAY_SRV), seperti yang ditunjukkan pada gambar.

beberapa pilihan sub sumber daya

Tampilan target render hanya dapat menggunakan satu potongan subsumber daya atau mip dan tidak dapat menyertakan subresource dari lebih dari satu potongan mip. Artinya, setiap tekstur dalam tampilan target render harus berukuran sama. Tampilan sumber daya shader dapat memilih wilayah persegi mana pun dari sub sumber daya, seperti yang ditunjukkan pada gambar.

API Subresource

Referensi API berikut dan bekerja dengan sub-sumber daya:

Enumerasi:

Struktur berikut berisi indeks PlaneSlice , sebagian besar berisi indeks MipSlice .

Struktur berikut berisi indeks ArraySlice , sebagian besar berisi indeks MipSlice .

Struktur berikut berisi indeks MipSlice , tetapi bukan indeks ArraySlice atau PlaneSlice .

Struktur berikut ini juga mereferensikan sub-sumber daya:

Metode:

Tekstur harus dalam status D3D12_RESOURCE_STATE_COMMON untuk akses CPU melalui WriteToSubresource dan ReadFromSubresource menjadi legal; tetapi buffer tidak. Akses CPU ke sumber daya biasanya dilakukan melalui PetaTidak Dipetakan/.

Pengikatan Sumber Daya