다음을 통해 공유


PFND3DDDI_MAKERESIDENTCB 콜백 함수(d3dumddi.h)

pfnMakeResidentCb 는 OS에 디바이스 상주 목록에 리소스를 추가하고 이 할당에 대한 상주 참조 수를 증가하도록 지시하는 데 사용됩니다.

구문

PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;

HRESULT Pfnd3dddiMakeresidentcb(
  HANDLE hDevice,
  D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}

매개 변수

hDevice

디스플레이 디바이스에 대한 핸들입니다.

unnamedParam2

pData [in, out]

상주할 메모리 페이지를 설명하는 D3DDDI_MAKERESIDENT 구조체에 대한 포인터입니다.

반환 값

pfnMakeResidentCb 는 다음 값 중 하나를 반환합니다.

반환 코드 설명
S_OK 이 함수를 종료할 때 모든 할당이 GPU에 상주하게 되었으며 즉시 액세스할 준비가 되었습니다.
E_PENDING 할당이 디바이스 상주 요구 사항 목록에 추가되었지만 성공적으로 액세스하기 전에 완료할 보류 중인 페이징 작업이 여전히 있습니다. 이 경우 사용자 모드 드라이버는 할당 또는 GPU 페이지 오류를 참조하는 명령 버퍼를 제출하기 전에 hPagingQueue와 연결된 모니터링된 펜스 동기화 개체에서 PagingFenceValue가 신호를 받을 때까지 기다려야 합니다.
E_OUTOFMEMORY 비디오 메모리 관리자는 요청된 모든 할당을 상주할 수 없습니다. 이 경우 제공된 목록의 할당에 해당 상주 수가 수정된 것을 볼 수 없습니다. 즉, 모든 할당이 상주 횟수를 늘리거나 그 중 하나도 증가하지 않는 원자성 작업입니다. 또한 NumBytesToTrim은 실패한 할당을 다시 상주하기 전에 pfnEvictCb를 호출하여 디바이스 상주 요구 사항 목록에서 트리밍해야 하는 바이트 수를 드라이버에 나타냅니다.
애플리케이션과 연결된 메모리 예산은 실행 중인 애플리케이션과 비동기적으로 변경될 수 있습니다. 따라서 요청된 바이트 수를 트리밍해도 애플리케이션에 대한 메모리 예산이 감소할 수 있으므로 할당 집합을 상주하는 다음 시도가 성공할 것이라는 보장은 없습니다. 이 때문에 드라이버는 요청이 성공하거나 드라이버가 단일 작업에서 진행을 수행하고 최종 시도에서 필요한 리소스를 사용하기 위해 가능한 모든 것을 다듬을 때까지 루프에서 상주 요청을 시도하도록 해야 합니다. 최종 시도가 실패하면 기본 디바이스가 오류로 전환되고 사용자 모드 드라이버가 요청을 중단하고 애플리케이션으로 다시 돌아와야 합니다. 오류 발생 디바이스에 속하는 컨텍스트에 대한 추가 제출은 커널에서 허용되지 않습니다.
DirectX 12.0 사용자 모드 드라이버의 경우 pfnMakeResidentCb는 할당에서 더 이상 트리밍 또는 페이징을 담당하지 않으므로 약간 다르게 동작합니다. 이 작업은 호출에서 반환된 후 모든 할당의 상태가 호출 전과 동일하게 유지되도록 하기 위해 수행됩니다. 즉, E_OUTOFMEMORY 함수에서 반환됩니다.
- 모든 할당은 원래 상태로 유지됩니다.
- 할당이 상주하지 않았습니다.
- PagingFenceValue는 무시해야 합니다.
드라이버가 리소스-할당 변환을 수용하기 위해 여러 일괄 처리로 pfnMakeResidentCb 호출을 수행해야 하는 경우 드라이버는 pfnEvictCb에 대한 동등한 호출을 사용하여 pfnMakeResidentCb에 대한 이전 호출을 실행 취소하고 오류 코드를 런타임으로 다시 전파해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10
지원되는 최소 서버 Windows Server 2016
대상 플랫폼 데스크톱
머리글 d3dumddi.h(D3dumddi.h 포함)

추가 정보

D3DDDI_MAKERESIDENT

pfnEvictCb