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_TEXTURE1D) 또는 버퍼((D3D12_RESOURCE_DIMENSION_BUFFER)인지 여부를 지정하는 D3D12_RESOURCE_DIMENSION 멤버 중 하나입니다.

Alignment

맞춤을 지정합니다.

Width

리소스의 너비를 지정합니다.

Height

리소스의 높이를 지정합니다.

DepthOrArraySize

3D인 경우 리소스의 깊이를 지정하거나 1D 또는 2D 리소스의 배열인 경우 배열 크기를 지정합니다.

MipLevels

MIP 수준 수를 지정합니다.

Format

DXGI_FORMAT 멤버 하나를 지정합니다.

SampleDesc

DXGI_SAMPLE_DESC 구조를 지정합니다.

Layout

D3D12_TEXTURE_LAYOUT 멤버 하나를 지정합니다.

Flags

비트 OR 플래그( D3D12_RESOURCE_FLAGS 열거형 상수)입니다.

설명

다음을 사용하여 이 구조를 사용합니다.

두 가지 일반적인 리소스는 버퍼와 텍스처로, 둘 다 이 구조를 사용하지만 필드의 용도는 매우 다릅니다.

버퍼

버퍼는 연속 메모리 영역입니다. 너비는 예약된 리소스에 대한 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT MaxGPUVirtualAddressBitsPerResource 필드 또는 커 밋된 리소스에 대한 MaxGPUVirtualAddressBitsPerProcess 필드 사이일 수 있습니다. 그러나 GPU 가상 주소 공간, 메모리 상주 예산( IDXGIAdapter3::QueryVideoMemoryInfo 참조) 또는 시스템 메모리의 소모가 먼저 발생할 수 있습니다.

맞춤 은 64KB(D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT) 또는 0(사실상 64KB)이어야 합니다.

Height, DepthOrArraySizeMipLevels는 1이어야 합니다.

형식 은 DXGI_FORMAT_UNKNOWN 합니다.

SampleDesc.Count 는 1이어야 하고 품질 은 0이어야 합니다.

버퍼 메모리 레이아웃은 애플리케이션에서 이해하고 행 주 텍스처 데이터는 일반적으로 버퍼를 통해 마샬링되므로 레이아웃은 D3D12_TEXTURE_LAYOUT_ROW_MAJOR 합니다.

사소한 예외를 제외하고 버퍼에 대한 애플리케이션에서 플래그를 정확하게 입력해야 합니다. 그러나 애플리케이션은 버퍼에 대한 효율성 영향에 대한 우려 없이 대부분의 기능 지원을 사용할 수 있습니다. flags 필드는 텍스처와 관련된 속성을 제어하기 위한 것입니다.

텍스처

텍스처는 연속된 메모리 영역에서 텍셀의 다차원 배열로, 렌더링 및 샘플링을 위해 대역폭을 최대화하도록 최적화되어 있습니다. 텍스처 크기는 예측하기 어렵고 어댑터마다 다릅니다. 애플리케이션은 ID3D12Device::GetResourceAllocationInfo 를 사용하여 크기를 정확하게 이해해야 합니다.

TEXTURE1D, TEXTURE2D 및 TEXTURE3D 모든 형식에서 직교적으로 지원되지 않습니다. D3D12_FORMAT_SUPPORT1 D3D12_FORMAT_SUPPORT1_TEXTURE1D, D3D12_FORMAT_SUPPORT1_TEXTURE2D 및 D3D12_FORMAT_SUPPORT1_TEXTURE3D 사용을 참조하세요.

Width, HeightDepthOrArraySize 는 1에서 특정 기능 수준 및 텍스처 차원에 지원되는 최대 차원 사이여야 합니다. 그러나 GPU 가상 주소 공간, 메모리 상주 예산( IDXGIAdapter3::QueryVideoMemoryInfo 참조) 또는 시스템 메모리의 소모가 먼저 발생할 수 있습니다. 압축된 형식의 경우 이러한 차원은 논리적입니다. 예를 들면 다음과 같습니다.

  • TEXTURE1D 경우:
    • 너비 는 기능 수준이 11_0 미만이고 기능 수준 11_0 이상에서 D3D11_REQ_TEXTURE1D_U_DIMENSION D3D10_REQ_TEXTURE1D_U_DIMENSION 작거나 같아야 합니다.
    • 높이는 1이어야 합니다.
    • DepthOrArraySize 는 배열 크기로 해석되며 기능 수준이 11_0 미만이고 기능 수준 11_0 이상에서 D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION D3D10_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 미만이고 기능 수준 11_0 이상에서 D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION 작거나 같아야 합니다.
  • TEXTURE3D 경우:
    • WidthHeightDepthOrArraySize 는 기능 수준이 11_0 미만이고 기능 수준 11_0 이상에서 D3D11_REQ_TEXTURE2D_U_V_OR_W_DIMENSION D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION 작거나 같아야 합니다.
    • DepthOrArraySize 는 깊이로 해석됩니다.
다음 참고 사항은 모든 텍스처 크기에 대한 것입니다.

맞춤

맞춤 은 0, 4KB, 64KB 또는 4MB 중 하나일 수 있습니다.

Alignment을 0으로 설정하면 런타임은 MSAA 텍스처에 4MB, 다른 모든 항목에는 64KB를 사용합니다. 애플리케이션은 텍스처가 작을 때 두 가지 텍스처 유형에 대해 이러한 기본값보다 작은 맞춤을 선택할 수 있습니다. 알 수 없는 레이아웃 및 MSAA가 있는 텍스처는 64KB 맞춤으로 만들 수 있습니다(아래에 자세히 설명된 작은 크기 제한을 통과하는 경우).

MSAA가 없고 렌더링 대상이나 깊이 스텐실 플래그가 없는 UNKNOWN 레이아웃의 텍스처는 4KB 맞춤을 사용하여 만들 수 있습니다(다시 작은 크기 제한을 통과).

가장 자세한 밉 수준의 예상 크기가 더 큰 맞춤 제한 이하인 경우 애플리케이션은 더 작은 정렬된 리소스를 만들 수 있습니다. 런타임은 표준 스위즐 및 D3D12 타일식 리소스의 크기를 조정하는 방식을 모방하는 아키텍처 독립적 크기 예측 메커니즘을 사용합니다. 그러나 타일 크기는 이러한 계산에 대한 맞춤 제한이 더 작습니다. 비 렌더링 대상 및 비-깊이 스텐실 텍스처를 예로 사용하여 런타임은 거의 평형 타일 셰이프 4KB를 가정하고 가장 자세한 밉 수준에 필요한 타일 수를 계산합니다. 타일 수가 16보다 작거나 같으면 애플리케이션에서 4KB 정렬 리소스를 만들 수 있습니다. 따라서 너비와 높이가 특정 형식 및 MSAA에 충분히 작으면 배열 크기 및 밉 수준 수의 mipped tex2d 배열은 4KB가 될 수 있습니다.

MipLevels

MipLevels는Width, HeightDepthOrArraySize 차원에서 지원하는 최대 밉 수준까지 0 또는 1일 수 있습니다. 0을 사용하면 API는 지원되는 최대 밉 수준을 자동으로 계산하고 사용합니다. 그러나 일부 리소스 및 힙 속성은 밉 수준을 배제하므로 앱은 값을 1로 지정해야 합니다.

형식별 제한은 D3D12_FORMAT_SUPPORT1 D3D12_FORMAT_SUPPORT1_MIP 필드를 참조하세요. MSAA 리소스, D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER 있는 텍스처 및 D3D12_HEAP_FLAG_ALLOW_DISPLAY 있는 힙은 모두 밉 수준을 배제합니다.

서식

형식 은 디바이스의 기능 수준에서 지원되는 유효한 형식이어야 합니다.

SampleDesc

1보다 크거나 0이 아닌 SampleDesc.Count는 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 참조하세요.

요구 사항

요구 사항
헤더 d3d12.h

추가 정보

CD3DX12_RESOURCE_DESC

핵심 구조체

D3D12_HEAP_FLAGS