PFND3DDDI_UNLOCKCB 콜백 함수(d3dumddi.h)
pfnUnlockCb 함수는 pfnLockCb 함수에 대한 호출로 잠긴 할당의 잠금을 해제합니다.
통사론
PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;
HRESULT Pfnd3dddiUnlockcb(
HANDLE hDevice,
const D3DDDICB_UNLOCK *unnamedParam2
)
{...}
매개 변수
hDevice
디스플레이 디바이스(그래픽 컨텍스트)에 대한 핸들입니다.
unnamedParam2
pData [in]
잠금을 해제할 할당을 설명하는 D3DDDICB_UNLOCK 구조체에 대한 포인터입니다.
반환 값
pfnUnlockCb 다음 값 중 하나를 반환합니다.
반환 코드 | 묘사 |
---|---|
S_OK | 할당이 성공적으로 잠금 해제되었습니다. |
E_OUTOFMEMORY | 메모리 부족으로 pfnUnlockCb를 완료할 수 없습니다. (이 오류는 시스템이 메모리가 매우 부족하고 페이지 배열을 할당할 공간이 부족할 때 발생합니다.) |
E_INVALIDARG | 매개 변수의 유효성이 검사되었고 잘못된 것으로 확인되었습니다. |
이 함수는 다른 HRESULT 값을 반환할 수도 있습니다.
발언
사용자 모드 표시 드라이버는 pfnUnlockCb 함수를 호출하여 이전에 pfnLockCb 함수에 대한 호출에서 잠긴 할당의 잠금을 해제해야 합니다. 드라이버가 pfnUnlockCb 호출하지 않으면 Microsoft Direct3D 런타임, 사용자 모드 디스플레이 드라이버 및 디스플레이 미니포트 드라이버 간의 조정이 손실됩니다.
사용자 모드 표시 드라이버는 일반적으로 Unlock 또는 ResourceUnmap 함수(또는 DynamicIABufferUnmap같은 ResourceUnmap 다른 변형)에 대한 호출에 대한 응답으로 pfnUnlockCb 호출하여 리소스 내에서 리소스 또는 표면의 잠금을 해제합니다. 잠금 해제 또는 ResourceUnmap 호출에서 반환하기 전에 사용자 모드 표시 드라이버는 먼저 리소스 또는 표면을 적절한 할당에 매핑한 다음, pfnUnlockCb 호출하여 할당을 잠금 해제해야 합니다.
사용자 모드 디스플레이 드라이버는 DestroyDevice 또는 DestroyDevice(D3D10) 함수를 호출하여 디바이스에 할당된 모든 리소스를 해제하는 pfnUnlockCb 호출할 수도 있습니다. 디바이스의 수명 동안 할당을 잠그는 pfnLockCb 대한 모든 호출은 할당 잠금을 해제하기 위해 pfnUnlockCb 함수에 대한 호출과 쌍을 이루어야 합니다.
사용자 모드 표시 드라이버는 NumAllocations 멤버를 D3DDDICB_UNLOCK phAllocations 멤버가 지정한 배열의 할당 수로 설정하여 D3DDDICB_UNLOCKpfnUnlockCb 대한 한 번의 호출에서 여러 할당의 잠금을 해제할 수 있습니다.
사용자 모드 표시 드라이버는 pfnRenderCb 함수를 호출하기 전에 명령 스트림에서 참조되는 모든 할당의 잠금을 해제하기 위해 pfnUnlockCb 호출해야 합니다. 드라이버가 지원하도록 잠긴 할당을 가질 수 있습니다(예: NoOverwrite 비트 필드 플래그). 드라이버가 이러한 할당의 잠금을 해제하지 않는 경우 비디오 메모리 관리자는 이러한 할당을 AGP 메모리에 배치해야 할 수 있습니다.
사용자 모드 표시 드라이버는 pfnUnlockCb 호출하여 애플리케이션에서 사용할 수 있는 할당의 잠금을 해제하면 안 됩니다. 드라이버가 해당 리소스에 대한 Unlock 또는 ResourceUnmap 함수에 대한 호출을 수신할 때 애플리케이션이 더 이상 할당에서 읽거나 쓰지 않는다는 알림이 드라이버에 표시됩니다.
예제
다음 코드 예제에서는 할당 잠금을 해제하는 방법을 보여줍니다.
HRESULT CD3DContext::SyncEnginesUsingLock(VOID) {
HRESULT hr;
D3DDDICB_LOCK lockCB;
D3DDDICB_UNLOCK Unlock;
memset(&lockCB, 0, sizeof(D3DDDICB_LOCK));
lockCB.hAllocation = m_HandleUsedInLastSubmit;
lockCB.PrivateDriverData = 0;
hr = m_d3dCallbacks.pfnLockCb(m_hD3D, &lockCB);
if (FAILED(hr)) {
DBG_BREAK;
return hr;
}
Unlock.NumAllocations = 1;
Unlock.phAllocations = &m_HandleUsedInLastSubmit;
m_d3dCallbacks.pfnUnlockCb(m_hD3D, &Unlock);
return hr;
}
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다. |
대상 플랫폼 | 바탕 화면 |
헤더 | d3dumddi.h(D3dumddi.h 포함) |