기본 질감 매핑
기본 텍스처 매핑을 사용하면 GPU와 CPU 간에 이미지 데이터를 공유하는 동안 복사 및 메모리 사용량이 줄어듭니다. 그러나 특정 상황에서만 사용해야 합니다. 표준 스위즐 레이아웃은 여러 레이아웃에서 데이터 복사 또는 스위즐링을 방지합니다.
개요
기본 텍스처 매핑은 개발자에게 첫 번째 선택이 되어서는 안 됩니다. 개발자는 먼저 불연속 GPU에 친숙한 방식으로 코딩해야 합니다(즉, 대부분의 텍스처에 대한 CPU 액세스 권한이 없으며 CopySubresourceRegion1사용하여 업로드). 그러나 특정 경우에 CPU와 GPU는 동일한 데이터에서 자주 상호 작용할 수 있으므로 기본 텍스처 매핑은 전원을 절약하거나 특정 어댑터 또는 아키텍처에서 특정 디자인 속도를 높이는 데 도움이 됩니다. 애플리케이션은 이러한 사례를 감지하고 불필요한 복사본을 최적화해야 합니다.
D3D11.3에서는 D3D11_TEXTURE_LAYOUT_UNDEFINED(D3D11_TEXTURE_LAYOUT 열거형의 한 멤버)로 만든 텍스처와 CPU 액세스가 없는 텍스처가 자주 GPU 렌더링 및 샘플링에 가장 효율적입니다. 성능 테스트 시, 이러한 텍스처는 CPU 액세스가 있는 D3D11_TEXTURE_LAYOUT_UNDEFINED, CPU 액세스가 있는 D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE, 그리고 어댑터 간 지원을 위한 D3D11_TEXTURE_LAYOUT_ROW_MAJOR와 비교해야 합니다.
CPU 액세스와 함께 D3D11_TEXTURE_LAYOUT_UNDEFINED 사용하면 WriteToSubresource , ReadFromSubresource, 맵(포인터에 대한 애플리케이션 액세스 제외) 및 매핑 해제메서드를 사용할 수 있습니다. 하지만 GPU 액세스의 효율성을 희생할 수 있습니다. CPU 액세스와 함께 D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE를 사용하면 WriteToSubresource, ReadFromSubresource, 맵(애플리케이션에 대한 유효한 포인터를 반환함) 및 매핑 해제을 할 수 있습니다. CPU 액세스로 D3D11_TEXTURE_LAYOUT_UNDEFINED 이상의 GPU 액세스 효율성을 희생할 수도 있습니다.
일반적으로 애플리케이션은 대부분의 텍스처를 D3D11_TEXTURE_LAYOUT_UNDEFINED 형식으로, GPU에서만 접근 가능하도록 생성해야 합니다.
매핑 기본 텍스처 기능 이전에는 다차원 데이터에 대한 표준화된 레이아웃이 하나만 있었습니다. "선형"( "row-major"라고도 함). 맵 기본값을 사용할 수 있는 경우 애플리케이션은 USAGE_STAGING 및 USAGE_DYNAMIC 텍스처를 피해야 합니다. USAGE_STAGING 및 USAGE_DYNAMIC 텍스처는 선형 레이아웃을 사용합니다.
D3D11.3(및 D3D12)에는 표준 다차원 데이터 레이아웃이 도입되었습니다. 이렇게 하면 데이터를 복사하거나 여러 레이아웃 간에 데이터를 스위즐링하지 않고도 여러 처리 단위가 동일한 데이터에서 작동할 수 있습니다. 표준화된 레이아웃을 사용하면 네트워크 효과를 통해 효율성을 높일 수 있으며, 알고리즘이 특정 패턴을 가정하여 지름길을 찾을 수 있습니다.
이 표준 스위즐은 하드웨어 기능이며 모든 GPU에서 지원되지 않을 수 있습니다.
D3D11.3 API들
D3D12와 달리 D3D11.3은 기본적으로 텍스처 매핑을 지원하지 않으므로 D3D11_FEATURE_DATA_D3D11_OPTIONS2쿼리해야 합니다. 표준 스위즐을 쿼리하기 위해서는 ID3D11Device::CheckFeatureSupport를 호출하고, D3D11_FEATURE_DATA_D3D11_OPTIONS2의 StandardSwizzle64KBSupported
필드를 확인해야 합니다.
다음 API는 텍스처 매핑을 참조합니다.
열거형 데이터
- D3D11_TEXTURE_LAYOUT: 기본 텍스처의 스위즐 패턴을 제어하고 기본 텍스처에서 지도 지원을 사용하도록 설정합니다.
- D3D11_FEATURE: 참조 D3D11_FEATURE_DATA_D3D11_OPTIONS2.
- D3D11_TILE_COPY_FLAG : 선형 버퍼에서 스위즐 타일식 리소스를 복사하기 위한 플래그를 포함합니다.
구조
- D3D11_TEXTURE2D_DESC1: 2D 텍스처를 설명합니다. CD3D11_TEXTURE2D_DESC1 도우미 구조를 주목하십시오.
- D3D11_TEXTURE3D_DESC1: 3D 텍스처를 설명합니다. CD3D11_TEXTURE3D_DESC1 도우미 구조체를 주목하십시오.
방법
- ID3D11Device3::CreateTexture2D1 : 2D 텍스처 배열을 만듭니다.
- ID3D11Device3::CreateTexture3D1 : 단일 3D 텍스처를 만듭니다.
- ID3D11Device3::WriteToSubresource : 맵사용하여 매핑된 D3D11_USAGE_DEFAULT 텍스처에 데이터를 복사합니다.
- ID3D11Device3::ReadFromSubresource : 맵사용하여 매핑된 D3D11_USAGE_DEFAULT 텍스처에서 데이터를 복사합니다.
- ID3D11DeviceContext::Map : 하위 리소스에 포함된 데이터에 대한 포인터를 가져오고 해당 하위 리소스에 대한 GPU 액세스를 거부합니다.
- ID3D11DeviceContext::unmap : 리소스에 대한 포인터를 무효화하고 해당 리소스에 대한 GPU의 액세스를 다시 활성화합니다.
- ID3D11Texture2D1::GetDesc1 : 2D 텍스처 리소스의 속성을 가져옵니다.
- ID3D11Texture3D1::GetDesc1 : 3D 텍스처 리소스의 속성을 가져옵니다.
관련 항목