struktur D3D12_RESOURCE_DESC (d3d12.h)

Menjelaskan sumber daya, seperti tekstur. Struktur ini digunakan secara ekstensif.

Sintaks

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 .

Keterangan

Gunakan struktur ini dengan:

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. Lebar mungkin antara 1 dan bidang MaxGPUVirtualAddressBitsPerResourceD3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT untuk sumber daya yang dipesan atau bidang MaxGPUVirtualAddressBitsPerProcess untuk sumber daya yang berkomitmen. Namun, kelelahan ruang alamat virtual GPU, anggaran residensi memori (lihat IDXGIAdapter3::QueryVideoMemoryInfo), dan atau memori sistem dapat dengan mudah terjadi terlebih dahulu.

Penyelarasan harus 64KB (D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) atau 0, yang secara efektif 64KB.

Tinggi, DepthOrArraySize, dan MipLevels harus 1.

Format harus DXGI_FORMAT_UNKNOWN.

SampleDesc.Count harus 1 dan Kualitas harus 0.

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 sebagian besar dukungan kemampuan tanpa khawatir tentang dampak efisiensi pada buffer. Bidang bendera dimaksudkan untuk mengontrol properti yang terkait dengan tekstur.

Tekstur

Tekstur adalah pengaturan multidimensi texel 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 KedalamanOrArraySize 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. Contohnya:

  • 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 besar.
    • 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 besar.
  • 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 besar.
    • 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 besar.
  • 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.
Catatan berikut adalah untuk semua ukuran tekstur.

Alignment

Penyelarasan mungkin salah satu dari 0, 4KB, 64KB atau 4MB.

Jika Perataan 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 dan selaras ketika perkiraan ukuran tingkat mip yang paling rinci adalah total pembatasan perataan yang lebih besar atau kurang. Runtime akan menggunakan mekanisme estimasi ukuran yang independen arsitektur, yang meniru cara sumber daya gerimis standar dan petak D3D12 berukuran. Namun, ukuran petak peta akan menjadi pembatasan perataan yang lebih kecil untuk perhitungan tersebut. Menggunakan tekstur non-render-target dan non-depth-stencil 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 sama dengan atau kurang dari 16, aplikasi dapat membuat sumber daya selaras 4KB. Jadi, array tex2d yang dimigrasikan dari ukuran array apa pun dan sejumlah tingkat mip dapat 4KB, selama lebar dan tinggi cukup kecil untuk format tertentu dan MSAA.

MipLevels

MipLevels mungkin 0, atau 1 hingga tingkat mip maksimum yang didukung oleh dimensi Width, Height , dan DepthOrArraySize . Ketika 0 digunakan, API akan secara otomatis menghitung tingkat mip maksimum yang didukung dan menggunakannya. Namun, beberapa properti sumber daya dan timbunan menghalangi tingkat mip, sehingga aplikasi harus menentukan nilainya sebagai 1.

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 menghalangi tingkat mip.

Format

Format harus berupa format valid yang didukung pada tingkat fitur perangkat.

SampleDesc

SampleDesc.Count yang lebih besar dari Kualitas 1 dan/ atau non-nol hanya didukung untuk TEXTURE2D dan kapan D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET atau D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL diatur.

Berikut ini yang 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
Lihat D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS untuk menentukan nilai Hitungan dan Kualitas yang valid.

Persyaratan

Persyaratan Nilai
Header d3d12.h

Lihat juga

CD3DX12_RESOURCE_DESC

Struktur Inti

D3D12_HEAP_FLAGS