다음을 통해 공유


D3D11_USAGE 열거형(d3d11.h)

렌더링 중에 예상되는 리소스 사용을 식별합니다. 사용량은 CPU 및/또는 GPU(그래픽 처리 장치)에서 리소스에 액세스할 수 있는지 여부를 직접 반영합니다.

Syntax

typedef enum D3D11_USAGE {
  D3D11_USAGE_DEFAULT = 0,
  D3D11_USAGE_IMMUTABLE = 1,
  D3D11_USAGE_DYNAMIC = 2,
  D3D11_USAGE_STAGING = 3
} ;

상수

 
D3D11_USAGE_DEFAULT
값: 0
GPU에서 읽기 및 쓰기 액세스가 필요한 리소스입니다. 이는 가장 일반적인 사용 선택일 수 있습니다.
D3D11_USAGE_IMMUTABLE
값: 1
GPU에서만 읽을 수 있는 리소스입니다. GPU에서 작성할 수 없으며 CPU에서 전혀 액세스할 수 없습니다. 이 유형의 리소스는 만든 후에 변경할 수 없으므로 만들 때 초기화해야 합니다.
D3D11_USAGE_DYNAMIC
값: 2
GPU(읽기 전용)와 CPU(쓰기 전용)에서 액세스할 수 있는 리소스입니다. 동적 리소스는 CPU에서 프레임당 한 번 이상 업데이트되는 리소스에 적합합니다. 동적 리소스를 업데이트하려면 Map 메서드를 사용합니다.

동적 리소스를 사용하는 방법에 대한 자세한 내용은 방법: 동적 리소스 사용을 참조하세요.
D3D11_USAGE_STAGING
값: 3
GPU에서 CPU로의 데이터 전송(복사)을 지원하는 리소스입니다.

설명

애플리케이션은 리소스 설명에서 리소스가 사용되는 방식(사용량)을 식별합니다. 리소스를 만드는 데는 D3D11_TEXTURE1D_DESC, D3D11_TEXTURE2D_DESC, D3D11_TEXTURE3D_DESC,D3D11_BUFFER_DESC 등의 여러 구조가 있습니다.

Direct3D 9와 Direct3D 10/11 간의 차이점:

Direct3D 9에서는 리소스를 만들 때 리소스를 만들어야 하는 메모리 유형을 지정합니다(D3DPOOL 사용). 기능과 성능의 최상의 조합을 제공할 메모리 풀을 결정하는 것은 애플리케이션의 작업이었습니다.

Direct3D 10/11에서 애플리케이션은 리소스를 만들 메모리 유형(풀)을 더 이상 지정하지 않습니다. 대신 리소스의 용도를 지정하고 런타임(드라이버 및 메모리 관리자와 함께)이 최상의 성능을 달성할 메모리 유형을 선택하도록 합니다.

 

리소스 사용 제한

각 사용법은 CPU에 대한 접근성과 GPU에 대한 접근성 간의 절충을 나타냅니다. 일반적으로 이러한 두 프로세서 중 하나에 대한 고성능 액세스는 다른 프로세서에 대한 낮은 성능 액세스를 의미합니다. 어느 쪽에서든 D3D11_USAGE_DEFAULTD3D11_USAGE_STAGING 사용법이 있습니다. D3D11_USAGE_DEFAULT 거의 전적으로 GPU에 대한 액세스를 제한합니다. D3D11_USAGE_STAGING 거의 전적으로 CPU에 대한 액세스를 제한하고 GPU와 CPU 간에 리소스의 데이터 전송(복사)만 허용합니다. ID3D11DeviceContext::CopySubresourceRegionID3D11DeviceContext::CopyResource 메서드를 통해 이러한 복사 작업을 수행할 수 있습니다. 이러한 복사 메서드를 사용하여 동일한 사용량의 두 리소스 간에 데이터를 복사할 수도 있습니다. 또한 ID3D11DeviceContext::UpdateSubresource 메서드를 사용하여 CPU 제공 포인터에서 모든 리소스로 직접 메모리를 복사할 수 있으며, 가장 유용하게는 D3D11_USAGE_DEFAULT 있는 리소스입니다.

D3D11_USAGE_DYNAMIC 사용은 CPU가 즉석에서 해당 데이터를 생성하고 해당 데이터를 높은 빈도로 보낼 때 CPU에서 GPU로의 데이터 흐름을 최적화하는 특별한 경우입니다. D3D11_USAGE_DYNAMIC 일반적으로 꼭짓점 데이터가 있는 리소스와 상수 버퍼에서 사용됩니다. ID3D11DeviceContext::MapID3D11DeviceContext::Unmap 메서드를 사용하여 이러한 리소스에 데이터를 씁니다. 꼭짓점 데이터와 같이 직렬로 사용되는 데이터에 대해 최고 성능을 얻으려면 D3D11_MAP_WRITE_NO_OVERWRITED3D11_MAP_WRITE_DISCARD 시퀀스를 사용합니다. 이 시퀀스에 대한 자세한 내용은 D3D11_MAP_WRITE_NO_OVERWRITE D3D11_MAP_WRITE_DISCARD 일반적인 사용을 참조하세요.

D3D11_USAGE_IMMUTABLE 사용은 리소스를 만들 때 GPU가 데이터를 한 번만 생성하도록 하는 또 다른 특별한 경우입니다. D3D11_USAGE_IMMUTABLE 이러한 데이터는 일반적으로 일부 파일 형식에서 메모리로 읽기 때문에 텍스처와 같은 데이터에 적합합니다. 따라서 D3D11_USAGE_IMMUTABLE 사용하여 텍스처를 만들 때 GPU는 해당 텍스처를 메모리로 직접 읽습니다.

다음 표를 사용하여 CPU 및/또는 GPU에서 리소스에 액세스하는 방법을 가장 잘 설명하는 사용량을 선택합니다. 물론 성능 절충이 있을 것입니다.

Resource Usage Default 동적 변경할 수 없음 준비
GPU-Read yes 설정
GPU-Write yes 설정
CPU-Read yes 설정
CPU-Write yes 설정
 

1 - D3D11_USAGE_STAGING 사용량이 있는 리소스의 GPU 읽기 또는 쓰기는 복사 작업으로 제한됩니다. 이러한 복사 작업에 는 ID3D11DeviceContext::CopySubresourceRegionID3D11DeviceContext::CopyResource 를 사용합니다. 또한 깊이 스텐실 형식 및 다중 샘플 레이아웃은 특정 GPU 디자인의 구현 세부 정보이므로 운영 체제는 이러한 형식과 레이아웃을 일반적으로 CPU에 노출할 수 없습니다. 따라서 스테이징 리소스는 깊이 스텐실 버퍼 또는 다중 샘플링된 렌더링 대상이 될 수 없습니다.

참고기술적으로 ID3D11DeviceContext::UpdateSubresource 를 사용하여 D3D11_USAGE_IMMUTABLE 제외한 모든 사용량으로 리소스에 복사할 수 있습니다. 그러나 ID3D11DeviceContext::UpdateSubresource 를 사용하여 D3D11_USAGE_DEFAULT 리소스만 업데이트하는 것이 좋습니다. ID3D11DeviceContext::MapID3D11DeviceContext::Unmap을 사용하여 리소스를 D3D11_USAGE_DYNAMIC 업데이트하는 것이 좋습니다. 이는 D3D11_USAGE_DYNAMIC 리소스의 특정 목적이므로 가장 최적화된 경로이기 때문입니다.
 
D3D11_USAGE_DYNAMIC 리소스는 특정 하드웨어 기능을 사용합니다. 따라서 드물게 사용합니다. 디스플레이 드라이버는 일반적으로 CPU 쓰기를 선호하고 CPU 읽기를 방해하는 캐싱 알고리즘을 사용하여 D3D11_USAGE_DYNAMIC 리소스에 대한 메모리를 할당합니다. 또한 D3D11_USAGE_DYNAMIC 리소스 뒤에 있는 메모리는 ID3D11DeviceContext::Map에 대한 연속 호출에서도 동일하지 않을 수 있습니다. 따라서 D3D11_USAGE_DYNAMIC 리소스에서 높은 성능 또는 일관된 CPU 읽기를 기대하지 마세요.
 
참고ID3D11DeviceContext::CopyStructureCount 는 GPU-CPU 복사의 특별한 경우입니다. 버퍼의 순서가 지정되지 않은 UAV(액세스 뷰)에서만 ID3D11DeviceContext::CopyStructureCount 를 사용합니다.
 

리소스 바인딩 옵션

성능을 최대화하기 위해 모든 리소스 사용 옵션을 파이프라인에 대한 입력 또는 출력 리소스로 사용할 수 있는 것은 아닙니다. 이 표에서는 이러한 제한 사항을 식별합니다.
리소스를 다음으로 바인딩할 수 있습니다. Default 동적 변경할 수 없음 준비
스테이지에 대한 입력 yes² 예시드
스테이지의 출력 yes²
 
  • 2 - 다른 뷰를 사용하여 입력 및 출력으로 바인딩된 경우 각 보기는 서로 다른 하위 리소스를 사용해야 합니다.
  • 3 - 리소스는 단일 하위 리소스로만 만들 수 있습니다. 리소스는 텍스처 배열일 수 없습니다. 리소스는 Mipmap 체인일 수 없습니다.

요구 사항

요구 사항
헤더 d3d11.h

추가 정보

리소스 열거형