PFND3DDDI_CREATERESOURCE2 콜백 함수(d3dumddi.h)
리소스를 만듭니다. WDDM(Windows 디스플레이 드라이버 모델) 1.2 이상 사용자 모드 디스플레이 드라이버에 의해 구현됩니다.
구문
PFND3DDDI_CREATERESOURCE2 Pfnd3dddiCreateresource2;
HRESULT Pfnd3dddiCreateresource2(
[in] HANDLE hDevice,
D3DDDIARG_CREATERESOURCE2 *unnamedParam2
)
{...}
매개 변수
[in] hDevice
리소스를 만드는 데 사용되는 디스플레이 디바이스(그래픽 컨텍스트)에 대한 핸들입니다.
unnamedParam2
pResource2 [in, out]
생성된 리소스를 설명하는 D3DDDIARG_CREATERESOURCE2 구조체에 대한 포인터입니다.
반환 값
S_OK 또는 적절한 오류 결과를 반환합니다. WDDM 1.3 이상 Direct3D 수준 9 드라이버는 다음 오류 코드를 반환해야 합니다.
반환 코드 | 설명 |
---|---|
E_INVALIDARG | D3DDDIARG_CREATERESOURCE2 입니다. Flagsmember에는 CaptureBuffer 플래그 값이 설정되고 리소스가 드라이버에서 지원할 수 있는 값을 초과합니다. |
설명
CreateResource2 호출에는 표면 목록이 포함될 수 있습니다. pResource2 매개 변수로 지정된 D3DDDIARG_CREATERESOURCE2 구조체의 SurfCount 멤버는 만들 MIP 맵 수준을 포함한 표면 수를 지정합니다. 예를 들어 256x256x9 텍스처 MIP 맵 리소스에는 SurfCount 멤버와 MIP 맵 수준 수가 모두 9로 설정된 9개의 표면 목록이 포함됩니다. 9개의 MIP 맵 수준을 포함하는 큐브 맵에는 MIP 맵 수준 수가 9로 설정되고 SurfCount 가 54로 설정되어야 합니다. 3면 스왑 체인은 SurfCount 를 3으로 설정하고 MIP 맵 수준 수를 0으로 설정해야 합니다. MIP 맵 수준의 수는 항상 SurfCount의 값보다 작거나 같습니다.
CreateResource2 호출에 대한 응답으로 사용자 모드 표시 드라이버는 pfnAllocateCb 함수를 호출하여 하나 이상의 메모리 할당을 만들 수 있습니다. 사용자 모드 디스플레이 드라이버는 표면당 여러 할당, 모든 표면에 대해 하나의 할당 또는 표면당 하나의 할당을 만들어야 하는지 여부를 결정해야 합니다. 할당에 대한 자세한 내용은 비디오 메모리 관리 및 GPU 예약을 참조하세요.
리소스는 여러 디바이스(hDevice) 및 프로세스에서 공유할 수 있습니다. 런타임은 D3DDDIARG_CREATERESOURCE2Flags 멤버에서 SharedResource 비트 필드 플래그를 설정하여 리소스를 공유되도록 지정합니다. 이 비트 필드 플래그가 설정된 경우 사용자 모드 표시 드라이버는 공유 리소스에 대한 다음 제한을 준수해야 합니다.
- 사용자 모드 표시 드라이버는 pfnAllocateCb 및 pfnDeallocateCb 함수를 각각 한 번만 호출할 수 있습니다.
- 사용자 모드 표시 드라이버는 리소스를 처음 만든 후 리소스에 대한 추가 할당을 만들 수 없으며, 마찬가지로 리소스 자체가 제거될 때만 리소스 할당을 삭제할 수 있습니다.
- 드라이버의 CreateResource2 또는 OpenResource 함수를 호출하여 만들거나 연 공유 리소스에 대해 사용자 모드 표시 드라이버의 DestroyResource 함수가 호출되면 드라이버는 pfnDeallocateCb 함수를 호출할 때 D3DDDICB_DEALLOCATE 구조체의 hResource 멤버를 비 NULL로 설정하고 D3DDDICB_DEALLOCATENumAllocations 멤버를 0으로 설정해야 리소스를 삭제하거나 닫습니다. 즉, 공유 리소스와 연결된 할당은 개별적으로 제거하거나 닫을 수 없습니다. 리소스는 pfnDeallocateCb에 대한 한 번의 호출에서 원자적으로 제거되거나 닫혀야 합니다.
- 할당 수는 리소스 종류에 대해 일관되어야 합니다(즉, 동일한 리소스 종류를 만드는 다른 프로세스는 동일한 수와 할당 유형을 생성해야 합니다). 또한 이러한 리소스에는 이름 바꾸기가 허용되지 않습니다.
- Flags 멤버의 정의되지 않은 비트가 예약되어 있습니다.
- 기본 비트 필드 플래그가 Flags에 설정되지 않은 경우 RefreshRate 및 출력 멤버가 예약됩니다.
- Flags에서 RenderTarget, DecodeRenderTarget 또는 VideoProcessRenderTarget 비트 필드 플래그가 설정되지 않은 경우 MultisampleType 및 MultisampleQuality 멤버가 예약됩니다.
- VertexBuffer 비트 필드 플래그가 Flags에 설정되지 않은 경우 Fvf 멤버가 예약됩니다.
- Texture, CubeMap 및 Volume 비트 필드 플래그가 Flags에 설정되지 않은 경우 MipLevels 멤버가 예약됩니다.
시스템 메모리 리소스의 경우 GPU(그래픽 처리 장치)의 직접 액세스를 위해 시스템 메모리가 제대로 정렬된 경우 디스플레이 미니포트 드라이버가 시스템 메모리 주위에 할당을 래핑하도록 선택할 수 있습니다. 디스플레이 미니포트 드라이버는 DxgkDdiCreateAllocation 함수를 사용하여 할당을 만들 때 DXGK_ALLOCATIONINFO 구조의 Flags 멤버에서 ExistingSysMem 플래그를 설정하여 시스템 메모리 주위에 할당을 래핑합니다. 디스플레이 미니포트 드라이버가 시스템 메모리 주위에 할당을 래핑할 수 없거나 래핑이 실패하는 경우 드라이버는 리소스 생성에 성공하고 CPU를 사용하여 리소스에 액세스해야 합니다.
런타임이 꼭짓점 또는 인덱스 버퍼를 만들도록 요청하고 사용자 모드 표시 드라이버가 메모리 부족(예: 하드웨어 지원 부족) 이외의 이유로 버퍼를 만들 수 없는 경우 드라이버는 D3DERR_NOTAVAILABLE 함께 실패해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8 |
지원되는 최소 서버 | Windows Server 2012 |
대상 플랫폼 | 데스크톱 |
머리글 | d3dumddi.h(D3dumddi.h 포함) |