DXGKDDI_CREATEALLOCATION 콜백 함수(d3dkmddi.h)
DxgkDdiCreateAllocation 함수는 시스템 또는 비디오 메모리 할당을 만듭니다.
구문
DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;
NTSTATUS DxgkddiCreateallocation(
[in] IN_CONST_HANDLE hAdapter,
[in/out] INOUT_PDXGKARG_CREATEALLOCATION pCreateAllocation
)
{...}
매개 변수
[in] hAdapter
디스플레이 어댑터와 연결된 컨텍스트 블록에 대한 핸들입니다. 디스플레이 미니포트 드라이버는 이전에 DxgkDdiAddDevice 함수의 MiniportDeviceContext 출력 매개 변수에서 Microsoft DirectX 그래픽 커널 하위 시스템에 이 핸들을 제공했습니다.
[in/out] pCreateAllocation
할당을 만들기 위한 정보를 포함하는 DXGKARG_CREATEALLOCATION 구조체에 대한 포인터입니다.
반환 값
DxgkDdiCreateAllocation 은 다음 값 중 하나를 반환합니다.
반환 코드 | 설명 |
---|---|
STATUS_SUCCESS | DxgkDdiCreateAllocation 에서 할당을 성공적으로 만들었습니다. |
STATUS_INVALID_PARAMETER | DxgkDdiCreateAllocation에 전달된 매개 변수에는 완료되지 않는 오류가 포함되어 있습니다. |
STATUS_NO_MEMORY | DxgkDdiCreateAllocation 에서 완료하는 데 필요한 메모리를 할당할 수 없습니다. |
STATUS_GRAPHICS_DRIVER_MISMATCH | 디스플레이 미니포트 드라이버는 DxgkDdiCreateAllocation에 대한 호출을 시작한 사용자 모드 디스플레이 드라이버와 호환되지 않습니다. |
설명
사용자 모드 디스플레이 드라이버가 pfnAllocateCb 함수를 호출한 후 DirectX 그래픽 커널 하위 시스템은 디스플레이 미니포트 드라이버의 DxgkDdiCreateAllocation 함수를 호출하여 할당을 만듭니다. 디스플레이 미니포트 드라이버는 사용자 모드 표시 드라이버에서 전달되는 개인 데이터(각 할당에 대한 DXGK_ALLOCATIONINFO 구조의 pPrivateDriverData 멤버)를 해석해야 하며 비디오 메모리 관리자를 통해 각 할당을 만드는 데 필요한 매개 변수 목록을 결정해야 합니다. 디스플레이 미니포트 드라이버가 이러한 매개 변수를 비디오 메모리 관리자에 제공하는 방법에 대한 자세한 내용은 할당을 만들 때 세그먼트 지정을 참조하세요.
디스플레이 미니포트 드라이버는 할당 핸들을 반환해야 합니다. 이 핸들은 일반적으로 할당에 대한 정보를 포함하는 프라이빗 드라이버 데이터 구조에 대한 포인터입니다. 디스플레이 미니포트 드라이버는 할당 핸들에 대한 개인 데이터를 검색하기 위해 언제든지 DxgkCbGetHandleData 함수를 호출할 수 있습니다. 따라서 프라이빗 할당 핸들 테이블을 유지 관리하기 위해 디스플레이 미니포트 드라이버가 필요하지 않습니다. 실제로 빠른 사용자 스위치, 핫 플러그 뽑기 등과 같은 디스플레이 모드 스위치 시나리오에서 DirectX 그래픽 커널 하위 시스템이 부실하거나 동기화되지 않게 될 수 있으므로 프라이빗 핸들 테이블을 사용하지 않는 것이 좋습니다.
사용자 모드 표시 드라이버는 리소스 또는 디바이스에 할당을 할당합니다. 할당이 리소스에 속하는지 여부를 확인하기 위해 디스플레이 미니포트 드라이버는 DxgkDdiCreateAllocation의 pCreateAllocation 매개 변수가 가리키는 DXGKARG_CREATEALLOCATION 구조체의 Flags 멤버에 리소스 비트 필드 플래그가 설정되어 있는지 여부를 검사 수 있습니다. 할당이 리소스에 속하는 경우 디스플레이 미니포트 드라이버는 일반적으로 리소스를 설명하는 프라이빗 드라이버 데이터 구조에 대한 포인터인 리소스 핸들을 반환할 수 있지만 필요하지는 않습니다. DirectX 그래픽 커널 하위 시스템이 DxgkDdiCreateAllocation 을 호출하여 기존 리소스에 대한 추가 할당을 만드는 경우 DXGKARG_CREATEALLOCATION hResource 멤버에는 해당 리소스에 대한 이전 DxgkDdiCreateAllocation 호출에서 반환된 핸들이 포함됩니다. 필요한 경우 디스플레이 미니포트 드라이버는 DxgkDdiCreateAllocation을 호출하는 동안 리소스 핸들을 변경할 수 있습니다.
사용자 모드 표시 드라이버가 명령 버퍼에 리소스 핸들을 배치하는 경우 디스플레이 미니포트 드라이버는 DxgkCbGetHandleData를 호출하여 개인 데이터를 검색할 수 있습니다. 디스플레이 미니포트 드라이버는 DxgkCbEnumHandleChildren 함수를 호출하여 리소스의 모든 자식 할당을 열거할 수도 있습니다.
Windows 7부터 디스플레이 미니포트 드라이버가 DxgkDdiCreateAllocation 함수를 호출하여 GDI 하드웨어 가속에 대한 할당을 만드는 경우 드라이버는 할당 크기(CPU 표시 할당에 대한 피치 값 포함) pCreateAllocation-pAllocationInfo-Size>>를 설정해야 합니다.
DxgkDdiCreateAllocation 호출에서 만든 리소스는 디바이스가 아닌 어댑터에 속합니다. 디스플레이 미니포트 드라이버는 프라이빗 할당 및 리소스 데이터 구조 내의 어느 곳에서도 디바이스 데이터를 참조해서는 안 됩니다. 표면 공유로 인해 사용자 모드 디스플레이 드라이버가 리소스를 만든 디바이스가 소멸된 후 리소스가 사용 중일 수 있습니다.
DxgkDdiCreateAllocation 을 페이징 가능으로 만들어야 합니다.
기록 버퍼 할당
Windows 8.1 DxgkDdiCreateAllocation이 호출되면 디스플레이 미니포트 드라이버가 DXGK_ALLOCATIONINFOFLAGS 설정할 수 있습니다.기록 버퍼의 생성 및 소멸을 사용자 모드 드라이버가 관리할 수 있음을 나타내는 HistoryBuffer 멤버입니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
대상 플랫폼 | 데스크톱 |
머리글 | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |