struktur D3D12_RESOURCE_DESC (d3d12.h)
Menjelaskan sumber daya, seperti tekstur. Struktur ini digunakan secara ekstensif.
Sintaksis
typedef struct D3D12_RESOURCE_DESC {
D3D12_RESOURCE_DIMENSION Dimension;
UINT64 Alignment;
UINT64 Width;
UINT Height;
UINT16 DepthOrArraySize;
UINT16 MipLevels;
DXGI_FORMAT Format;
DXGI_SAMPLE_DESC SampleDesc;
D3D12_TEXTURE_LAYOUT Layout;
D3D12_RESOURCE_FLAGS Flags;
} D3D12_RESOURCE_DESC;
Anggota
Dimension
Salah satu anggota D3D12_RESOURCE_DIMENSION, menentukan dimensi sumber daya (misalnya, D3D12_RESOURCE_DIMENSION_TEXTURE1D), atau apakah itu buffer ((D3D12_RESOURCE_DIMENSION_BUFFER).
Alignment
Menentukan perataan.
Width
Menentukan lebar sumber daya.
Height
Menentukan tinggi sumber daya.
DepthOrArraySize
Menentukan kedalaman sumber daya, jika 3D, atau ukuran array jika merupakan array sumber daya 1D atau 2D.
MipLevels
Menentukan jumlah tingkat MIP.
Format
Menentukan satu anggota DXGI_FORMAT.
SampleDesc
Menentukan struktur DXGI_SAMPLE_DESC.
Layout
Menentukan satu anggota D3D12_TEXTURE_LAYOUT.
Flags
Bendera BITWISE-OR, sebagai konstanta enumerasi D3D12_RESOURCE_FLAGS.
Komentar
Gunakan struktur ini dengan:
- ID3D12Resource::GetDesc
- ID3D12Device::GetResourceAllocationInfo
- ID3D12Device::CreateCommittedResource
- ID3D12Device::CreatePlacedResource
- ID3D12Device::CreateReservedResource
- ID3D12Device::GetCopyableFootprints
- Sejumlah fungsi pembantu, lihat Struktur dan Fungsi Pembantu untuk D3D12.
Dua sumber daya umum adalah buffer dan tekstur, yang keduanya menggunakan struktur ini, tetapi dengan penggunaan bidang yang cukup berbeda.
Buffer
Buffer adalah wilayah memori yang berdampingan.Alignment harus 64KB (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) atau 0, yang secara efektif 64KB.
Height, DepthOrArraySize, dan MipLevels harus 1.
Format harus DXGI_FORMAT_UNKNOWN.
Tata Letak harus D3D12_TEXTURE_LAYOUT_ROW_MAJOR, karena tata letak memori buffer dipahami oleh aplikasi dan data tekstur utama baris umumnya dirusak melalui buffer.
Bendera masih harus diisi secara akurat oleh aplikasi untuk buffer, dengan pengecualian kecil. Namun, aplikasi dapat menggunakan jumlah dukungan kemampuan terbanyak tanpa khawatir tentang dampak efisiensi pada buffer. Bidang bendera dimaksudkan untuk mengontrol properti yang terkait dengan tekstur.
Tekstur
Tekstur adalah susunan texel multidimensi di wilayah memori yang berdampingan, sangat dioptimalkan untuk memaksimalkan bandwidth untuk penyajian dan pengambilan sampel. Ukuran tekstur sulit diprediksi dan bervariasi dari adaptor ke adaptor. Aplikasi harus menggunakan ID3D12Device::GetResourceAllocationInfo untuk memahami ukurannya secara akurat.TEXTURE1D, TEXTURE2D, dan TEXTURE3D tidak didukung secara ortogonal pada setiap format. Lihat penggunaan D3D12_FORMAT_SUPPORT1_TEXTURE1D, D3D12_FORMAT_SUPPORT1_TEXTURE2D, dan D3D12_FORMAT_SUPPORT1_TEXTURE3D di D3D12_FORMAT_SUPPORT1.
Lebar , Tinggi, dan DepthOrArraySize harus antara 1 dan dimensi maksimum yang didukung untuk tingkat fitur dan dimensi tekstur tertentu. Namun, kelelahan ruang alamat virtual GPU, anggaran residensi memori (lihat IDXGIAdapter3::QueryVideoMemoryInfo), dan atau memori sistem dapat dengan mudah terjadi terlebih dahulu. Untuk format terkompresi, dimensi ini logis. Misalnya:
- Untuk TEXTURE1D:
- Lebar harus kurang dari atau sama dengan D3D10_REQ_TEXTURE1D_U_DIMENSION pada tingkat fitur kurang dari 11_0 dan D3D11_REQ_TEXTURE1D_U_DIMENSION pada tingkat fitur 11_0 atau lebih tinggi.
- Tinggi harus 1.
- DepthOrArraySize ditafsirkan sebagai ukuran array dan harus kurang dari atau sama dengan D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION pada tingkat fitur kurang dari 11_0 dan D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION pada tingkat fitur 11_0 atau lebih tinggi.
- Untuk TEXTURE2D:
Lebar dan Tinggi harus kurang dari atau sama dengan D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION pada tingkat fitur kurang dari 11_0 dan D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION atau tingkat fitur 11_0 atau lebih tinggi. - DepthOrArraySize ditafsirkan sebagai ukuran array dan harus kurang dari atau sama dengan D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION pada tingkat fitur kurang dari 11_0 dan D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION pada tingkat fitur 11_0 atau lebih tinggi.
- Untuk TEXTURE3D:
Lebar dan Tinggi dan DepthOrArraySize harus kurang dari atau sama dengan D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION pada tingkat fitur kurang dari 11_0 dan D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION pada tingkat fitur 11_0 atau lebih besar. - DepthOrArraySize ditafsirkan sebagai kedalaman.
Perataan
Alignment mungkin salah satu dari 0, 4KB, 64KB atau 4MB.Jika Alignment diatur ke 0, runtime akan menggunakan 4MB untuk tekstur MSAA dan 64KB untuk yang lainnya. Aplikasi dapat memilih perataan yang lebih kecil daripada default ini untuk beberapa jenis tekstur ketika teksturnya kecil. Tekstur dengan tata letak UNKNOWN dan MSAA dapat dibuat dengan perataan 64KB (jika melewati batasan ukuran kecil yang dirinci di bawah).
Tekstur dengan tata letak UNKNOWN tanpa MSAA dan tanpa target render atau bendera stensil kedalaman dapat dibuat dengan Perataan 4KB (sekali lagi, melewati pembatasan ukuran kecil).
Aplikasi dapat membuat sumber daya yang lebih kecil yang selaras ketika perkiraan ukuran tingkat mip yang paling rinci adalah total pembatasan perataan yang lebih besar atau kurang. Runtime akan menggunakan mekanisme estimasi ukuran arsitektur-independen, yang meniru cara sumber daya berbintik standar dan D3D12 berukuran. Namun, ukuran petak peta akan menjadi pembatasan perataan yang lebih kecil untuk perhitungan tersebut. Menggunakan tekstur stensil non-target dan non-kedalaman sebagai contoh, runtime akan mengasumsikan bentuk petak peta yang hampir sama dengan 4KB, dan menghitung jumlah petak peta yang diperlukan untuk tingkat mip yang paling detail. Jika jumlah petak peta sama dengan atau kurang dari 16, maka aplikasi dapat membuat sumber daya selaras 4KB. Jadi, array tex2d yang dimigrasikan dari ukuran array apa pun dan sejumlah tingkat mip bisa 4KB, selama lebar dan tingginya cukup kecil untuk format dan MSAA tertentu.
MipLevels
Lihat bidang D3D12_FORMAT_SUPPORT1_MIP D3D12_FORMAT_SUPPORT1 untuk pembatasan per format. Sumber daya MSAA, tekstur dengan D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER, dan timbunan dengan D3D12_HEAP_FLAG_ALLOW_DISPLAY semua tingkat mip terdahulu.
Format
Format harus berupa format valid yang didukung pada tingkat fitur perangkat.SampleDesc
SampleDesc.Count yang lebih besar dari 1 dan/ atau bukan nol Kualitas hanya didukung untuk TEXTURE2D dan saat D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET atau D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL diatur.Berikut ini tidak didukung:
- D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
- D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
- D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
- D3D12_HEAP_FLAG_ALLOW_DISPLAY
Persyaratan
Syarat | Nilai |
---|---|
Header |
d3d12.h |
Lihat juga
Struktur Inti