다음을 통해 공유


ID3D12Device::MakeResident 메서드(d3d12.h)

개체를 디바이스에 상주하게 만듭니다.

구문

HRESULT MakeResident(
       UINT           NumObjects,
  [in] ID3D12Pageable * const *ppObjects
);

매개 변수

NumObjects

형식: UINT

디바이스에 상주할 ppObjects 배열의 개체 수입니다.

[in] ppObjects

형식: ID3D12Pageable*

개체에 대한 ID3D12Pageable 인터페이스 포인터의 배열을 포함하는 메모리 블록에 대한 포인터입니다.

대부분의 D3D12 개체가 ID3D12Pageable에서 상속되더라도 상주 변경 내용은 설명자 힙, 힙, 커밋된 리소스 및 쿼리 힙 개체에서만 지원됩니다.

반환 값

형식: HRESULT

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

설명

MakeResident 는 디스크에서 리소스와 연결된 데이터를 로드하고 리소스의 적절한 메모리 풀에서 메모리를 다시 할당합니다. 실제 메모리를 소유하는 개체에서 이 메서드를 호출해야 합니다.

이 메서드 및 제거를 사용하여 GPU 비디오 메모리를 관리합니다. 이 작업은 D3D11에서 자동으로 수행되었지만 이제는 D3D12의 앱에서 수행해야 합니다.

MakeResidentEvict 는 애플리케이션이 많은 어댑터에서 상주 예산을 관리하는 데 도움이 될 수 있습니다. MakeResident 는 명시적으로 데이터를 페이지로 표시한 다음 GPU가 데이터에 액세스할 수 있도록 페이지 아웃을 배제합니다. 제거 를 사용하면 페이지 아웃이 가능합니다.

일부 GPU 아키텍처는 충분한 GPU 가상 주소 공간이 부족하여 상주 조작의 이점을 얻지 않습니다. 프로세스당 최대 GPU VA 공간이 너무 작거나 상주 예산과 거의 같은 크기를 인식하려면 D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORTIDXGIAdapter3::QueryVideoMemoryInfo 를 사용합니다. 이러한 아키텍처의 경우 보존 예산은 항상 GPU 가상 주소 공간의 양에 따라 제한됩니다. 퇴거 는 그러한 시스템에 대한 거주 예산을 확보하지 않습니다.

사용 가능한 충분한 상주 예산이 있는 것처럼 보이는 경우에도 애플리케이션은 MakeResident 오류를 처리해야 합니다. 물리적 메모리 조각화 및 어댑터 아키텍처의 단점은 큰 연속 범위의 사용률을 배제할 수 있습니다. 애플리케이션은 다시 시도하기 전에 더 많은 거주 예산을 확보해야 합니다.

MakeResident 는 ref-counted이므로 제거 가 적용되기 전에 MakeResident 와 동일한 시간 동안 제거 를 호출해야 합니다. 상주를 지원하는 개체는 만드는 동안 상주하게 되므로, 한 번의 제거 호출로 개체가 실제로 제거됩니다.

애플리케이션은 GPU가 비거주 개체를 사용하지 않도록 펜스를 사용해야 합니다. MakeResident 는 GPU가 개체를 참조하는 명령 목록을 실행하기 전에 를 반환해야 합니다. GPU가 개체를 참조하는 명령 목록 실행을 완료한 후에 제거를 호출해야 합니다.

제거된 개체는 여전히 동일한 GPU 가상 주소와 동일한 양의 GPU 가상 주소 공간을 사용합니다. 따라서 제거 후에는 리소스 설명자 및 기타 GPU 가상 주소 참조가 무효화되지 않습니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 d3d12.h
라이브러리 D3D12.lib
DLL D3D12.dll

추가 정보

ID3D12Device