ID3D11DeviceContext::Map 메서드(d3d11.h)

하위 리소스에 포함된 데이터에 대한 포인터를 가져오고 해당 하위 리소스에 대한 GPU 액세스를 거부합니다.

구문

HRESULT Map(
  [in]            ID3D11Resource           *pResource,
  [in]            UINT                     Subresource,
  [in]            D3D11_MAP                MapType,
  [in]            UINT                     MapFlags,
  [out, optional] D3D11_MAPPED_SUBRESOURCE *pMappedResource
);

매개 변수

[in] pResource

형식: ID3D11Resource*

ID3D11Resource 인터페이스에 대한 포인터입니다.

[in] Subresource

형식: UINT

하위 리소스의 인덱스 번호입니다.

[in] MapType

형식: D3D11_MAP

리소스에 대한 CPU의 읽기 및 쓰기 권한을 지정하는 D3D11_MAP 형식의 값입니다.

[in] MapFlags

형식: UINT

GPU가 사용 중일 때 CPU가 수행하는 작업을 지정하는 플래그입니다. 이 플래그는 선택 사항입니다.

[out, optional] pMappedResource

형식: D3D11_MAPPED_SUBRESOURCE*

매핑된 하위 리소스에 대한 D3D11_MAPPED_SUBRESOURCE 구조체에 대한 포인터입니다. NULL 포인터에 대한 설명 섹션을 참조하세요.

반환 값

형식: HRESULT

이 메서드는 Direct3D 11 반환 코드 중 하나를 반환합니다.

MapFlagsD3D11_MAP_FLAG_DO_NOT_WAIT 지정하고 GPU가 리소스로 아직 완료되지 않은 경우에도 이 메서드는 DXGI_ERROR_WAS_STILL_DRAWING 반환합니다.

MapType에서 CPU 읽기 액세스를 허용하고 비디오 카드 제거된 경우에도 이 메서드는 DXGI_ERROR_DEVICE_REMOVED 반환합니다.

이러한 오류 코드에 대한 자세한 내용은 DXGI_ERROR 참조하세요.

설명

지연된 컨텍스트에서 Map 을 호출하는 경우 D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITE 또는 둘 다 MapType 매개 변수에만 전달할 수 있습니다. 다른 D3D11_MAP 형식의 값은 지연된 컨텍스트에서 지원되지 않습니다.

참고 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입니다.
 
을 사용하는 방법에 대한 자세한 내용은 방법: 동적 리소스 사용을 참조하세요.

pMappedResource에 대한 NULL 포인터

pMappedResource 매개 변수는 D3D11_USAGE_DEFAULT 사용하여 만든 텍스처가 제공되고 API가 즉각적인 컨텍스트에서 호출될 때 NULL일 수 있습니다. 이렇게 하면 D3D11_TEXTURE_LAYOUT_UNDEFINED 사용하여 만든 경우에도 기본 텍스처를 매핑할 수 있습니다. 이 API 호출 이후 ID3D11DeviceContext3::WriteToSubresource 및/또는 ID3D11DeviceContext3::ReadFromSubresource를 사용하여 텍스처에 액세스할 수 있습니다.

쓰기를 위해 매핑된 하위 리소스에서 읽지 않음

MapType 매개 변수에 D3D11_MAP_WRITE, D3D11_MAP_WRITE_DISCARD 또는 D3D11_MAP_WRITE_NO_OVERWRITE 전달하는 경우 앱이 D3D11_MAPPED_SUBRESOURCEpData 멤버가 가리키는 하위 리소스 데이터를 읽지 않는지 확인해야 합니다. 이렇게 하면 성능 저하가 발생할 수 있기 때문입니다. pData 지점이 PAGE_WRITECOMBINE 할당될 수 있는 메모리 영역이며 앱은 이러한 메모리와 연결된 모든 제한을 준수해야 합니다.
참고  

다음 C++ 코드도 메모리에서 읽고 다음 x86 어셈블리 코드로 확장할 수 있으므로 성능 저하를 트리거할 수 있습니다.

C++ 코드:

*((int*)MappedResource.pData) = 0;

x86 어셈블리 코드:

AND DWORD PTR [EAX],0
 

적절한 최적화 설정 및 언어 구문을 사용하여 이 성능 저하를 방지합니다. 예를 들어 휘발성 포인터를 사용하거나 코드 크기 대신 코드 속도를 최적화하여 xor 최적화를 방지할 수 있습니다.

Windows Phone 8: 이 API가 지원됩니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 d3d11.h
라이브러리 D3D11.lib

추가 정보

ID3D11DeviceContext