Функция 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 (include D3dkmthk.h) |
библиотеки | Gdi32.lib |
DLL | Gdi32.dll |