Função D3DKMTCreateAllocation2 (d3dkmthk.h)
A função D3DKMTCreateAllocation2 cria ou adiciona alocações de memória de sistema ou vídeo.
Sintaxe
NTSTATUS D3DKMTCreateAllocation2(
D3DKMT_CREATEALLOCATION *unnamedParam1
);
Parâmetros
unnamedParam1
[in, out] pData: um ponteiro para uma estrutura D3DKMT_CREATEALLOCATION que contém informações para criar alocações.
Retornar valor
D3DKMTCreateAllocation2 retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, ele poderá retornar um código NTSTATUS , como um dos seguintes valores:
Código de retorno | Descrição |
---|---|
STATUS_DEVICE_REMOVED | O adaptador gráfico foi interrompido ou o dispositivo de exibição foi redefinido. |
STATUS_INVALID_PARAMETER | Os parâmetros foram validados e determinados como incorretos. |
STATUS_NO_MEMORY | Essa rotina não pôde ser concluída devido à memória insuficiente do sistema. |
STATUS_NO_VIDEO_MEMORY | Essa rotina não pôde ser concluída devido à memória de vídeo insuficiente. O gerenciador de memória de vídeo tenta virtualizar a memória de vídeo. No entanto, se a virtualização falhar (como quando o espaço de endereço virtual se esgotar), o gerenciador de memória poderá retornar esse código de erro. |
Comentários
Um cliente de gráficos no modo de usuário pode chamar D3DKMTCreateAllocation2 para criar alocações e recursos. Uma alocação pode ser associada a um recurso ou pode ficar sozinha.
D3DKMTCreateAllocation2 também pode ser chamado para adicionar alocações adicionais a um recurso a qualquer momento. As únicas restrições são que todas as alocações compartilhadas devem ser associadas a um recurso e alocações adicionais não podem ser adicionadas a um recurso compartilhado existente.
Exemplos
Criando uma alocação autônoma na memória de vídeo que não está associada a um recurso
O exemplo de código a seguir demonstra como um cliente de gráficos no modo de usuário pode usar D3DKMTCreateAllocation2 para criar uma alocação autônoma na memória de vídeo que não está associada a um recurso.
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;
}
Criando um recurso com uma única alocação de memória do sistema
O exemplo de código a seguir demonstra como um cliente de gráficos no modo de usuário pode usar D3DKMTCreateAllocation2 para criar um recurso com uma única alocação de memória do sistema.
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;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 7 |
Plataforma de Destino | Universal |
Cabeçalho | d3dkmthk.h (inclua D3dkmthk.h) |
Biblioteca | Gdi32.lib |
DLL | Gdi32.dll |