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_WRITE 및 D3D11_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를 호출합니다. CheckFeatureSupport 는 D3D11_FEATURE_DATA_D3D11_OPTIONS 구조체의 멤버를 디바이스의 기능으로 채웁니다. 여기에 관련된 멤버는 MapNoOverwriteOnDynamicConstantBuffer 및 MapNoOverwriteOnDynamicBufferSRV입니다. |
설명
이 열거형은 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_DISCARD 및 D3D11_MAP_WRITE_NO_OVERWRITE 일반적으로 동적 인덱스/꼭짓점 버퍼와 함께 사용됩니다. D3D11_MAP_WRITE_DISCARD 동적 텍스처와 함께 사용할 수도 있습니다. 그러나 D3D11_MAP_WRITE_NO_OVERWRITE 동적 텍스처와 함께 사용할 수 없습니다.이러한 두 플래그의 일반적인 용도로는 동적 인덱스/꼭짓점 버퍼를 카메라의 현재 위치에서 볼 수 있는 기하 도형으로 채우는 작업이 포함됩니다. 데이터가 지정된 프레임의 버퍼에 처음 입력될 때 Map 은 D3D11_MAP_WRITE_DISCARD 함께 호출됩니다. 이렇게 하면 버퍼의 이전 내용이 무효화됩니다. 그러면 버퍼가 사용 가능한 모든 데이터로 채워집니다.
동일한 프레임 내의 버퍼에 대한 후속 쓰기는 D3D11_MAP_WRITE_NO_OVERWRITE 사용해야 합니다. 이렇게 하면 이전에 설명한 제한 사항이 적용되는 한 CPU가 GPU에서 잠재적으로 사용되는 리소스에 액세스할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | d3d11.h |