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_DEFAULT 및 D3D11_USAGE_STAGING 사용법이 있습니다. D3D11_USAGE_DEFAULT 거의 전적으로 GPU에 대한 액세스를 제한합니다. D3D11_USAGE_STAGING 거의 전적으로 CPU에 대한 액세스를 제한하고 GPU와 CPU 간에 리소스의 데이터 전송(복사)만 허용합니다. ID3D11DeviceContext::CopySubresourceRegion 및 ID3D11DeviceContext::CopyResource 메서드를 통해 이러한 복사 작업을 수행할 수 있습니다. 이러한 복사 메서드를 사용하여 동일한 사용량의 두 리소스 간에 데이터를 복사할 수도 있습니다. 또한 ID3D11DeviceContext::UpdateSubresource 메서드를 사용하여 CPU 제공 포인터에서 모든 리소스로 직접 메모리를 복사할 수 있으며, 가장 유용하게는 D3D11_USAGE_DEFAULT 있는 리소스입니다.D3D11_USAGE_DYNAMIC 사용은 CPU가 즉석에서 해당 데이터를 생성하고 해당 데이터를 높은 빈도로 보낼 때 CPU에서 GPU로의 데이터 흐름을 최적화하는 특별한 경우입니다. D3D11_USAGE_DYNAMIC 일반적으로 꼭짓점 데이터가 있는 리소스와 상수 버퍼에서 사용됩니다. ID3D11DeviceContext::Map 및 ID3D11DeviceContext::Unmap 메서드를 사용하여 이러한 리소스에 데이터를 씁니다. 꼭짓점 데이터와 같이 직렬로 사용되는 데이터에 대해 최고 성능을 얻으려면 D3D11_MAP_WRITE_NO_OVERWRITE 및 D3D11_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::CopySubresourceRegion 및 ID3D11DeviceContext::CopyResource 를 사용합니다. 또한 깊이 스텐실 형식 및 다중 샘플 레이아웃은 특정 GPU 디자인의 구현 세부 정보이므로 운영 체제는 이러한 형식과 레이아웃을 일반적으로 CPU에 노출할 수 없습니다. 따라서 스테이징 리소스는 깊이 스텐실 버퍼 또는 다중 샘플링된 렌더링 대상이 될 수 없습니다.
리소스 바인딩 옵션
성능을 최대화하기 위해 모든 리소스 사용 옵션을 파이프라인에 대한 입력 또는 출력 리소스로 사용할 수 있는 것은 아닙니다. 이 표에서는 이러한 제한 사항을 식별합니다.리소스를 다음으로 바인딩할 수 있습니다. | Default | 동적 | 변경할 수 없음 | 준비 |
---|---|---|---|---|
스테이지에 대한 입력 | yes² | 예시드 | 예 | |
스테이지의 출력 | yes² |
- 2 - 다른 뷰를 사용하여 입력 및 출력으로 바인딩된 경우 각 보기는 서로 다른 하위 리소스를 사용해야 합니다.
- 3 - 리소스는 단일 하위 리소스로만 만들 수 있습니다. 리소스는 텍스처 배열일 수 없습니다. 리소스는 Mipmap 체인일 수 없습니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | d3d11.h |