共用方式為


D3D12_RESOURCE_DESC結構 (d3d12.h)

描述資源,例如紋理。 此結構會廣泛使用。

語法

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;

成員

Dimension

D3D12_RESOURCE_DIMENSION的其中一個成員,指定資源的維度(例如,D3D12_RESOURCE_DIMENSION_TEXTURE1D),或它是否為緩衝區(D3D12_RESOURCE_DIMENSION_BUFFER)。

Alignment

指定對齊方式。

Width

指定資源的寬度。

Height

指定資源的高度。

DepthOrArraySize

如果為 3D,則指定資源的深度,如果它是 1D 或 2D 資源的陣列,則指定數位大小。

MipLevels

指定 MIP 層級的數目。

Format

指定 DXGI_FORMAT的一個成員。

SampleDesc

指定 DXGI_SAMPLE_DESC 結構。

Layout

指定 D3D12_TEXTURE_LAYOUT的一個成員。

Flags

位 OR'd 旗標,作為列舉常數 D3D12_RESOURCE_FLAGS

言論

使用此結構搭配:

兩個常見的資源是緩衝區和紋理,這兩者都使用這個結構,但具有相當不同的欄位用法。

緩衝區

緩衝區是連續的記憶體區域。 Width 可以是 1 到已認可資源的 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORTMaxGPUVirtualAddressBitsPerResource 欄位,或是 MaxGPUVirtualAddressBitsPerProcess 字段。 不過,GPU 虛擬位址空間的耗盡、記憶體落地預算(請參閱 IDXGIAdapter3::QueryVideoMemoryInfo),或系統記憶體可能很容易先發生。

對齊 必須是 64KB(D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT)或 0,這實際上為 64KB。

HeightDepthOrArraySizeMipLevels 必須是 1。

格式 必須是DXGI_FORMAT_UNKNOWN。

SampleDesc.Count 必須是 1,而且品質 必須為 0。

版面配置 必須D3D12_TEXTURE_LAYOUT_ROW_MAJOR,因為應用程式會瞭解緩衝區內存配置,而數據列主要紋理數據通常會透過緩衝區封送處理。

旗標 仍然必須由應用程式正確填寫緩衝區,但發生次要例外狀況。 不過,應用程式可以使用大部分的功能支援,而不必擔心對緩衝區的效率影響。 旗標欄位是用來控制與紋理相關的屬性。

紋理

紋理是連續記憶體區域中紋素的多維度排列,經過大量優化,可將轉譯和取樣的頻寬最大化。 紋理大小很難預測,而且會因配接器而異。 應用程式必須使用 ID3D12Device::GetResourceAllocationInfo,才能準確地瞭解其大小。

TEXTURE1D、TEXTURE2D和TEXTURE3D在每個格式上都不支援正交。 請參閱 D3D12_FORMAT_SUPPORT1中使用 D3D12_FORMAT_SUPPORT1_TEXTURE1D、D3D12_FORMAT_SUPPORT1_TEXTURE2D 和 D3D12_FORMAT_SUPPORT1_TEXTURE3D。

WidthHeightDepthOrArraySize 必須介於 1 到特定特徵層級和紋理維度支援的最大維度之間。 不過,GPU 虛擬位址空間的耗盡、記憶體落地預算(請參閱 IDXGIAdapter3::QueryVideoMemoryInfo),或系統記憶體可能很容易先發生。 針對壓縮格式,這些維度是邏輯的。 例如:

  • 針對 TEXTURE1D:
    • Width 必須小於或等於功能層級小於或等於 11_0 的功能層級D3D10_REQ_TEXTURE1D_U_DIMENSION,以及功能層級 11_0 或更新版本D3D11_REQ_TEXTURE1D_U_DIMENSION。
    • 高度 必須是 1。
    • DepthOrArraySize 會解譯為陣列大小,且在功能層級 11_0 或更新版本上必須小於或等於D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION,且功能層級 11_0 或更新版本D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION。
  • 針對TEXTURE2D:
    • 寬度高度 必須小於或等於小於 11_0 的功能層級和D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION或功能層級 11_0 或更新版本D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION。
    • DepthOrArraySize 會解譯為陣列大小,且在功能層級 11_0 或更新版本上,必須小於或等於D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION功能層級小於或等於D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION。
  • 針對TEXTURE3D:
    • WidthHeightDepthOrArraySize 必須小於或等於功能層級小於或等於 11_0 的功能層級D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION,以及功能層級 11_0 或更新D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION。
    • DepthOrArraySize 會解譯為深度。
下列注意事項適用於所有紋理大小。

對齊方式

對齊 可以是 0、4KB、64KB 或 4MB 之一。

如果 對齊 設定為 0,運行時間會針對 MSAA 紋理使用 4 MB,而其他所有項目都會使用 64KB。 當紋理很小時,應用程式可能會選擇比幾個紋理類型的預設值更小的對齊方式。 具有 UNKNOWN 配置和 MSAA 的紋理可能會以 64KB 對齊方式建立(如果它們通過以下詳述的小型大小限制)。

沒有 MSAA 且沒有轉譯目標或深度樣板旗標的未知配置紋理,可能會使用 4KB 對齊來建立 (同樣地,傳遞較小的大小限制)。

當最詳細 Mip 層級的估計大小是較大對齊限制或更少時,應用程式可以建立較小的對齊資源。 運行時間會使用與大小估計架構無關的機制,以模擬標準旋轉和 D3D12 並排資源的大小。 不過,磚大小會是這類計算的較小對齊限制。 以非轉譯目標和非深度樣板紋理為例,運行時間會假設接近等邊磚圖形為 4KB,並計算最詳細 Mip 層級所需的磚數目。 如果磚數目等於或小於 16,則應用程式可以建立 4KB 對齊的資源。 因此,任何陣列大小和任意數目 mip 層級的誤判 tex2d 陣列都可以是 4KB,只要寬度和高度夠小,就適合特定格式和 MSAA。

MipLevels

MipLevels 可以是 0 或 1 到 WidthHeightDepthOrArraySize 維度所支援的最大 mip 層級。 使用 0 時,API 會自動計算支援的最大 Mip 層級,並使用該層級。 但是,某些資源和堆積屬性排除 mip 層級,因此應用程式必須將值指定為 1。

如需每個格式的限制,請參閱 D3D12_FORMAT_SUPPORT1 D3D12_FORMAT_SUPPORT1_MIP 欄位。 MSAA 資源、具有D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER的紋理,以及具有D3D12_HEAP_FLAG_ALLOW_DISPLAY所有排除 mip 層級的堆積。

格式

格式 必須是裝置功能層級支援的有效格式。

SampleDesc

SampleDesc.Count 大於 1 和/或非零 品質 僅支援TEXTURE2D,且設定D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET或D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL時。

不支援下列專案:

  • D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE,
  • D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS,
  • D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS,
  • D3D12_HEAP_FLAG_ALLOW_DISPLAY
請參閱 D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS,以判斷有效的 計數Quality 值。

要求

要求 價值
標頭 d3d12.h

另請參閱

CD3DX12_RESOURCE_DESC

核心結構

D3D12_HEAP_FLAGS