D3DKMTCreateAllocation2 함수(d3dkmthk.h)
D3DKMTCreateAllocation2 함수는 시스템 또는 비디오 메모리 할당을 만들거나 추가합니다.
구문
NTSTATUS D3DKMTCreateAllocation2(
D3DKMT_CREATEALLOCATION *unnamedParam1
);
매개 변수
unnamedParam1
[in, out] pData: 할당을 만들기 위한 정보를 포함하는 D3DKMT_CREATEALLOCATION 구조체에 대한 포인터입니다.
반환 값
D3DKMTCreateAllocation2 는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음 값 중 하나와 같은 NTSTATUS 코드를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
STATUS_DEVICE_REMOVED | 그래픽 어댑터가 중지되었거나 디스플레이 디바이스가 다시 설정되었습니다. |
STATUS_INVALID_PARAMETER | 매개 변수의 유효성이 검사되었고 잘못된 것으로 확인되었습니다. |
STATUS_NO_MEMORY | 시스템 메모리가 부족하여 이 루틴을 완료할 수 없습니다. |
STATUS_NO_VIDEO_MEMORY | 비디오 메모리가 부족하여 이 루틴을 완료할 수 없습니다. 비디오 메모리 관리자는 비디오 메모리를 가상화하려고 시도합니다. 그러나 가상화가 실패하는 경우(예: 가상 주소 공간이 부족할 때) 메모리 관리자는 이 오류 코드를 반환할 수 있습니다. |
설명
사용자 모드 그래픽 클라이언트는 D3DKMTCreateAllocation2 를 호출하여 할당 및 리소스를 만들 수 있습니다. 할당은 리소스와 연결되거나 독립 실행형일 수 있습니다.
D3DKMTCreateAllocation2 를 호출하여 언제든지 리소스에 추가 할당을 추가할 수도 있습니다. 유일한 제한 사항은 모든 공유 할당을 리소스와 연결해야 하며 추가 할당을 기존 공유 리소스에 추가할 수 없다는 것입니다.
예제
리소스와 연결되지 않은 비디오 메모리에 독립 실행형 할당 만들기
다음 코드 예제에서는 사용자 모드 그래픽 클라이언트가 D3DKMTCreateAllocation2 를 사용하여 리소스와 연결되지 않은 비디오 메모리에 독립 실행형 할당을 만드는 방법을 보여 줍니다.
D3DKMT_HANDLE CreateStandAloneAllocation(D3DKMT_HANDLE hDevice, VOID* pPrivateAllocationInfo, UINT Size)
{
D3DKMT_CREATEALLOCATION CreateAllocation;
D3DDDI_ALLOCATIONINFO2 AllocationInfo;
memset(&CreateAllocation, 0, sizeof(CreateAllocation));
CreateAllocation.hDevice = hDevice;
CreateAllocation.NumAllocations = 1;
CreateAllocation.pAllocationInfo2 = &AllocationInfo;
AllocationInfo.hAllocation = NULL;
AllocationInfo.pSystemMem = NULL; // Vidmem allocation
AllocationInfo.pPrivateDriverData = pPrivateAllocationInfo; // Contains format, size, and so on.
AllocationInfo.PrivateDriverDataSize = Size;
if (NT_SUCCESS((*pfnKTCreateAllocation)(&CreateAllocation))) {
return AllocationInfo.hAllocation;
}
return 0;
}
단일 시스템 메모리 할당을 사용하여 리소스 만들기
다음 코드 예제에서는 사용자 모드 그래픽 클라이언트가 D3DKMTCreateAllocation2 를 사용하여 단일 시스템 메모리 할당을 사용하여 리소스를 만드는 방법을 보여 줍니다.
HRESULT CreateSysmemResource(D3DKMT_HANDLE hDevice,
UINT AllocationSize,
VOID* pResourceData,
UINT ResourceDataSize,
VOID* pAllocationData,
UINT AllocationDataSize,
D3DKMT_HANDLE* phResource,
D3DKMT_HANDLE* phAllocation)
{
D3DKMT_CREATEALLOCATION CreateAllocation;
D3DDDI_ALLOCATIONINFO2 AllocationInfo;
VOID* pSysMem;
*phResource = NULL;
*phAllocation = NULL;
// For a sysmem allocation, preallocate the memory.
pSysMem = MemAlloc(AllocationSize);
if (pSysMem == NULL) {
return E_OUTOFMEMORY;
}
memset(&CreateAllocation, 0, sizeof(CreateAllocation));
CreateAllocation.hDevice = hDevice;
CreateAllocation.Flags.CreateResource = TRUE;
CreateAllocation.pPrivateDriverData = pResourceData;
CreateAllocation.PrivateDriverDataSize = ResourceDataSize;
CreateAllocation.NumAllocations = 1;
CreateAllocation.pAllocationInfo = &AllocationInfo;
AllocationInfo.hAllocation = NULL;
AllocationInfo.pSystemMem = pSysMem;
AllocationInfo.pPrivateDriverData = pAllocationData;
AllocationInfo.PrivateDriverDataSize = AllocationDataSize;
if (NT_SUCCESS((*pfnKTCreateAllocation)(&CreateAllocation))) {
*phResource = CreateAllocation.hResource;
*phAllocation = AllocationInfo.hAllocation;
return S_OK;
}
MemFree(pSysMem);
return E_FAIL;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7 |
대상 플랫폼 | 유니버설 |
헤더 | d3dkmthk.h(D3dkmthk.h 포함) |
라이브러리 | Gdi32.lib |
DLL | Gdi32.dll |