D3D12_TEXTURE_LAYOUT 열거형(d3d12.h)

텍스처 레이아웃 옵션을 지정합니다.

Syntax

typedef enum D3D12_TEXTURE_LAYOUT {
  D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
  D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
  D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
  D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3
} ;

상수

 
D3D12_TEXTURE_LAYOUT_UNKNOWN
값: 0
레이아웃을 알 수 없으며 어댑터에 종속될 가능성이 있음을 나타냅니다.
만드는 동안 드라이버는 다른 리소스 속성, 특히 리소스 크기 및 플래그에 따라 가장 효율적인 레이아웃을 선택합니다.
다른 텍스처 레이아웃에서 특정 기능이 필요하지 않은 경우 이 옵션을 사용하는 것이 좋습니다.

UMA 아키텍처에 대한 0 복사 텍스처 업로드 최적화가 있습니다. ID3D12Resource::WriteToSubresource를 참조하세요.
D3D12_TEXTURE_LAYOUT_ROW_MAJOR
값: 1
텍스처의 데이터가 행 주 순서("피치 선형 순서"라고도 함)로 저장됨을 나타냅니다.

이 텍스처 레이아웃은 다음 행의 텍셀 앞에 있는 연속된 행 텍셀을 메모리에서 연속적으로 찾습니다.
마찬가지로 특정 깊이 또는 배열 조각의 연속 텍셀은 다음 깊이 또는 배열 조각의 텍셀 앞에 연속 메모리가 있습니다.
데이터 컬렉션을 정렬하기 위해 행과 깊이 또는 배열 조각 사이에 패딩이 있을 수 있습니다.
보폭은 행, 깊이 또는 배열 조각 간의 메모리 거리입니다. 안쪽 여백이 포함됩니다.

이 텍스처 레이아웃을 사용하면 다른 레이아웃을 사용할 수 없는 경우 여러 어댑터 간에 텍스처 데이터를 공유할 수 있습니다.

이 레이아웃은 일반적으로 광범위한 사용에 효율적이지 않기 때문에 많은 제한이 적용됩니다.


  • 주변 텍셀의 지역성은 회전적으로 고정되지 않습니다.

  • 다음 텍스처 속성만 지원됩니다.


  • 텍스처는 D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER 사용하여 힙에 만들어야 합니다.


버퍼는 텍스처 개체를 만들지 않고 행 주 텍스처 데이터를 배치할 수 있으므로 D3D12_TEXTURE_LAYOUT_ROW_MAJOR 사용하여 만들어집니다.
이는 특히 불연속/NUMA 어댑터의 경우 텍스처 데이터를 업로드하거나 다시 읽는 데 일반적으로 사용됩니다.
그러나 D3D12_TEXTURE_LAYOUT_ROW_MAJOR GPU 또는 어댑터 간에 텍스처 데이터를 마샬링할 때도 사용할 수 있습니다.
ID3D12GraphicsCommandList::CopyTextureRegion 사용 예제는 다음 topics 중 일부를 참조하세요.

D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE
값: 2
64KB 타일 및 테일 밉 압축 내의 레이아웃이 드라이버에 달려 있음을 나타냅니다.
표준 스위즐 패턴이 없습니다.

이 텍스처 레이아웃은 연속된 64KB 영역(타일이라고도 함)으로 정렬되어 있으며 각 차원에 따라 연속된 텍셀 수가 거의 동등합니다.
타일은 행 주 순서로 정렬됩니다.
타일 사이에 패딩이 없지만 일반적으로 각 차원의 마지막 타일 내에 사용되지 않는 텍셀이 있습니다.
타일 내의 텍셀 레이아웃은 정의되지 않았습니다.
각 하위 리소스는 바로 이전 하위 리소스 끝 위치를 따르며 하위 리소스 순서는 하위 리소스 서수와 동일한 시퀀스를 따릅니다.
그러나 테일 밉 패킹은 어댑터에 따라 다릅니다.
자세한 내용은 타일형 리소스 계층 및 ID3D12Device::GetResourceTiling을 참조하세요.

이 텍스처 레이아웃을 사용하면 가상 메모리 페이지 매핑 기능과 함께 사용할 때 부분적으로 상주하거나 스파스 텍스처 시나리오를 사용할 수 있습니다.
ID3D12CommandQueue::UpdateTileMappings를 사용하도록 설정하려면 이 텍스처 레이아웃을 ID3D12Device::CreateReservedResource와 함께 사용해야 합니다.

이 레이아웃을 사용하는 텍스처에는 몇 가지 제한 사항이 적용됩니다.

D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE
값: 3
기본 텍스처가 표준화된 스위즐 패턴을 사용한다는 것을 나타냅니다.

이 텍스처 레이아웃은 타일 내의 텍셀 레이아웃이 정의되어 있다는 점을 제외하고 D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE 동일한 방식으로 정렬됩니다. 테일 밉 압축은 어댑터에 따라 다릅니다.

이 텍스처 레이아웃을 사용하면 여러 어댑터 간 또는 CPU와 GPU 간에 데이터를 마샬링할 때 최적화할 수 있습니다.
여러 구성 요소가 텍스처 메모리 레이아웃을 이해하면 복사 양을 줄일 수 있습니다.
이 레이아웃은 일반적으로 인접한 텍셀의 회전 고정 지역성으로 인해 행 주 레이아웃보다 광범위한 사용을 위해 더 효율적입니다.
이 레이아웃은 일반적으로 표준 스위즐을 지원하는 어댑터에서만 사용할 수 있지만 어댑터 간 공유 힙에는 예외가 있습니다.

이 레이아웃에 대한 제한 사항은 다음이 지원되지 않는다는 것입니다.

설명

이 열거형은 D3D12_RESOURCE_DESC 구조체에서 사용됩니다.

이 열거형은 기본 텍스처의 스위즐 패턴을 제어하고 기본 텍스처에서 맵 지원을 사용하도록 설정합니다. 호출자는 각 옵션이 지원되는지 확인하기 위해 D3D12_FEATURE_DATA_D3D12_OPTIONS 쿼리해야 합니다.

표준 스위즐 형식은 각 페이지 크기의 청크 내에 적용되며 페이지는 서로에 대해 선형 순서로 배치됩니다. 16비트 인터리브 패턴은 미리 스위즐된 페이지 내 위치에서 스위즐 후 위치로 변환을 정의합니다.

표준 스위즐 패턴

설명하려면 위의 2D 32bpp 스위즐 형식을 고려합니다. 왼쪽의 비트가 가장 중요한 다음 인터리브 마스크로 표시됩니다.

UINT xBytesMask = 1010 1010 1000 1111
UINT yMask =      0101 0101 0111 0000

스위즐된 주소를 계산하기 위해 다음 코드를 사용할 수 있습니다( 여기서 _pdep_u32 내장 명령이 지원됨).

UINT swizzledOffset = resourceBaseOffset +
                      _pdep_u32(xOffset, xBytesMask) +
                      _pdep_u32(yOffset, yBytesMask);

요구 사항

요구 사항
헤더 d3d12.h

추가 정보

CD3DX12_RESOURCE_DESC

핵심 열거형

UMA 최적화: CPU 접근성 텍스처 및 표준 스위즐