다음을 통해 공유


D3D11_MAP 열거형(d3d11.h)

CPU에서 읽고 쓰기 위해 액세스할 리소스를 식별합니다. 애플리케이션은 이러한 플래그 중 하나 이상을 결합할 수 있습니다.

Syntax

typedef enum D3D11_MAP {
  D3D11_MAP_READ = 1,
  D3D11_MAP_WRITE = 2,
  D3D11_MAP_READ_WRITE = 3,
  D3D11_MAP_WRITE_DISCARD = 4,
  D3D11_MAP_WRITE_NO_OVERWRITE = 5
} ;

상수

 
D3D11_MAP_READ
값: 1
리소스는 읽기용으로 매핑됩니다. 리소스가 읽기 액세스 권한으로 만들어졌어야 합니다.
( D3D11_CPU_ACCESS_READ 참조).
D3D11_MAP_WRITE
값: 2
리소스는 쓰기를 위해 매핑됩니다. 리소스가 쓰기를 사용하여 만들어졌어야 합니다.
액세스( D3D11_CPU_ACCESS_WRITE 참조).
D3D11_MAP_READ_WRITE
값: 3
리소스는 읽기 및 쓰기를 위해 매핑됩니다. 리소스가 읽기 및 쓰기를 사용하여 만들어졌어야 합니다.
액세스( D3D11_CPU_ACCESS_READ 및 D3D11_CPU_ACCESS_WRITE 참조).
D3D11_MAP_WRITE_DISCARD
값: 4
리소스는 쓰기용으로 매핑됩니다. 리소스의 이전 콘텐츠는 정의되지 않습니다. 리소스가 쓰기 액세스 권한으로 만들어졌어야 합니다.
및 동적 사용( D3D11_CPU_ACCESS_WRITED3D11_USAGE_DYNAMIC 참조).
D3D11_MAP_WRITE_NO_OVERWRITE
값: 5
리소스는 쓰기용으로 매핑됩니다. 리소스의 기존 내용을 덮어쓸 수 없습니다(설명 참조). 이 플래그는 꼭짓점 및 에서만 유효합니다.
인덱스 버퍼. 리소스는 쓰기 액세스 권한으로 만들어졌어야 합니다( D3D11_CPU_ACCESS_WRITE 참조).
D3D11_BIND_CONSTANT_BUFFER 플래그를 사용하여 만든 리소스에는 사용할 수 없습니다.

참고 Windows 8 시작하는 Direct3D 11.1 런타임을 사용하면 동적 버퍼의 동적 상수 버퍼와 SRV(셰이더 리소스 뷰)를 D3D11_MAP_WRITE_NO_OVERWRITE 매핑할 수 있습니다. Direct3D 11 및 이전 런타임은 꼭짓점 또는 인덱스 버퍼에 대한 매핑을 제한했습니다. Direct3D 디바이스가 이러한 기능을 지원하는지 확인하려면 D3D11_FEATURE_D3D11_OPTIONS 사용하여 ID3D11Device::CheckFeatureSupport를 호출합니다. CheckFeatureSupportD3D11_FEATURE_DATA_D3D11_OPTIONS 구조체의 멤버를 디바이스의 기능으로 채웁니다. 여기에 관련된 멤버는 MapNoOverwriteOnDynamicConstantBufferMapNoOverwriteOnDynamicBufferSRV입니다.

 

설명

이 열거형은 ID3D11DeviceContext::Map에서 사용됩니다.

D3D11_MAP_WRITE_NO_OVERWRITE 의미

D3D11_MAP_WRITE_NO_OVERWRITE 애플리케이션이 IA(입력 어셈블러) 단계에서 사용하는 데이터에 쓰지 않겠다고 약속했음을 나타냅니다. 대신 GPU를 사용하면 애플리케이션이 동일한 버퍼의 다른 부분에 쓸 수 있습니다. 애플리케이션은 IA 단계에서 사용 중인 데이터에 대해 쓰지 않도록 해야 합니다.

예를 들어 다음 다이어그램에 설명된 버퍼를 고려합니다. 꼭짓점 4-6을 사용하는 그리기 호출이 실행된 경우 이 버퍼에서 Map 을 호출하는 애플리케이션은 렌더링 중에 그리기 호출이 액세스할 꼭짓점에 쓰지 않도록 해야 합니다.

다양한 사용률 단계의 꼭짓점을 포함하는 버퍼의 다이어그램 그러나 GPU는 현재 처리 중인 프레임 측면에서 CPU 뒤에 많은 프레임이 있기 때문에 이를 보장하는 것은 어려울 수 있습니다. 2~5프레임 전에 발생한 호출로 인해 사용 중인 리소스 섹션을 추적하는 것은 어렵고 오류가 발생하기 쉽습니다. 이 때문에 애플리케이션은 D3D11_MAP_WRITE_NO_OVERWRITE 사용할 때 초기화되지 않은 리소스 부분에만 쓰는 것이 좋습니다.

D3D11_MAP_WRITE_NO_OVERWRITE D3D11_MAP_WRITE_DISCARD 일반적인 사용

D3D11_MAP_WRITE_DISCARDD3D11_MAP_WRITE_NO_OVERWRITE 일반적으로 동적 인덱스/꼭짓점 버퍼와 함께 사용됩니다. D3D11_MAP_WRITE_DISCARD 동적 텍스처와 함께 사용할 수도 있습니다. 그러나 D3D11_MAP_WRITE_NO_OVERWRITE 동적 텍스처와 함께 사용할 수 없습니다.

이러한 두 플래그의 일반적인 용도로는 동적 인덱스/꼭짓점 버퍼를 카메라의 현재 위치에서 볼 수 있는 기하 도형으로 채우는 작업이 포함됩니다. 데이터가 지정된 프레임의 버퍼에 처음 입력될 때 MapD3D11_MAP_WRITE_DISCARD 함께 호출됩니다. 이렇게 하면 버퍼의 이전 내용이 무효화됩니다. 그러면 버퍼가 사용 가능한 모든 데이터로 채워집니다.

동일한 프레임 내의 버퍼에 대한 후속 쓰기는 D3D11_MAP_WRITE_NO_OVERWRITE 사용해야 합니다. 이렇게 하면 이전에 설명한 제한 사항이 적용되는 한 CPU가 GPU에서 잠재적으로 사용되는 리소스에 액세스할 수 있습니다.

요구 사항

요구 사항
헤더 d3d11.h

추가 정보

리소스 열거형