Compartilhar via


DXGKDDI_CREATEALLOCATION função de retorno de chamada (d3dkmddi.h)

A função kmd (driver de exibição) do modo kernel (KMD) DxgkDdiCreateAllocation cria alocações de memória de sistema ou vídeo.

Sintaxe

DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;

NTSTATUS DxgkddiCreateallocation(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_CREATEALLOCATION pCreateAllocation
)
{...}

Parâmetros

[in] hAdapter

Um identificador para um bloco de contexto associado a um adaptador de exibição. O KMD forneceu anteriormente esse identificador para Dxgkrnl no parâmetro de saída MiniportDeviceContext da funçãoDxgkDdiAddDevice.

[in/out] pCreateAllocation

Um ponteiro para uma estrutura de DXGKARG_CREATEALLOCATION que contém informações para criar alocações.

Valor de retorno

DxgkDdiCreateAllocation retorna um dos seguintes valores:

Código de retorno descrição
STATUS_SUCCESS DxgkDdiCreateAllocation criou com êxito a alocação.
STATUS_INVALID_PARAMETER Os parâmetros passados continham erros que impediam a conclusão DxgkDdiCreateAllocation.
STATUS_NO_MEMORY DxgkDdiCreateAllocation não pôde alocar memória necessária para que ela fosse concluída.
STATUS_GRAPHICS_DRIVER_MISMATCH O KMD não é compatível com o UMD (driver de exibição do modo de usuário) que iniciou a chamada para DxgkDdiCreateAllocation.

Observações

Depois que a UMD chama pfnAllocateCb, Dxgkrnl chama a função DxgkDdiCreateAllocation do KMD para criar as alocações. O KMD deve interpretar os dados privados (no pPrivateDriverData membro da estrutura DXGK_ALLOCATIONINFO para cada alocação) que são passados da UMD e devem determinar a lista de parâmetros necessários para criar cada alocação por meio do gerenciador de memória de vídeo. Para obter mais informações sobre como o KMD fornece esses parâmetros ao gerenciador de memória de vídeo, consulte Especificando segmentos ao criar alocações.

O KMD deve retornar um identificador de alocação, que normalmente é um ponteiro para uma estrutura de dados de driver privado que contém informações sobre a alocação. O UMD pode chamar a função DxgkCbGetHandleData a qualquer momento para recuperar os dados privados de um identificador de alocação. Portanto, o KMD não é necessário para manter uma tabela de identificador de alocação privada. Na verdade, desencorajamos fortemente as tabelas de identificadores privados porque elas podem ficar obsoletas ou fora de sincronia com o subsistema de kernel de elementos gráficos DirectX em cenários de comutador de modo de exibição, como comutador de usuário rápido, desacoplação ativa e assim por diante.

O driver de exibição do modo de usuário atribui uma alocação a um recurso ou a um dispositivo. Para determinar se a alocação pertence a um recurso, o driver de miniporto de exibição pode verificar se o sinalizador de campo de bits do Resource está definido no Flags membro da estrutura DXGKARG_CREATEALLOCATION à qual o parâmetro pCreateAllocation de DxgkDdiCreateAlloc ation aponta. Se a alocação pertencer a um recurso, o driver de miniporto de exibição poderá (mas não é necessário) retornar um identificador de recurso, que normalmente é um ponteiro para uma estrutura de dados de driver privado que descreve o recurso. Se o subsistema de kernel de elementos gráficos DirectX chamar DxgkDdiCreateAllocation para criar uma alocação adicional para um recurso existente, o hResource membro do DXGKARG_CREATEALLOCATION conterá o identificador que foi retornado pelo anterior DxgkDdiCreateAllocation chamada para esse recurso. Se necessário, o driver de miniporto de exibição pode alterar o identificador de recurso durante uma chamada para DxgkDdiCreateAllocation.

Se o driver de exibição do modo de usuário colocar um identificador de recurso em um buffer de comando, o driver de miniporto de exibição poderá recuperar os dados privados chamando DxgkCbGetHandleData. O driver de miniporto de exibição também pode enumerar todas as alocações filho do recurso chamando a função DxgkCbEnumHandleChildren.

A partir do Windows 7, se um driver de miniporto de exibição processar uma chamada para a função DxgkDdiCreateAllocation para criar alocações para aceleração de hardware GDI, o driver deverá definir o tamanho da alocação (incluindo o valor de pitch para alocações visíveis da CPU), pCreateAllocation ->pAllocationInfo->Size.

Os recursos criados no DxgkDdiCreateAllocation chamada pertencem ao adaptador e não ao dispositivo. O driver de miniporto de exibição não deve fazer referência aos dados do dispositivo em qualquer lugar dentro da alocação privada e das estruturas de dados de recurso. Devido ao compartilhamento de superfície, um recurso pode estar em uso após a destruição do dispositivo do qual o driver de exibição no modo de usuário criou o recurso.

DxgkDdiCreateAllocation deve ficar paginável.

Alocando buffers de histórico

A partir do Windows 8.1, quando DxgkDdiCreateAllocation é chamado, o KMD pode definir o DXGK_ALLOCATIONINFOFLAGS.membro do HistoryBuffer para indicar que o driver do modo de usuário pode gerenciar a criação e a destruição de buffers de histórico.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows Vista
da Plataforma de Destino Área de trabalho
cabeçalho d3dkmddi.h
IRQL PASSIVE_LEVEL

Consulte também

DXGKARG_CREATEALLOCATION

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkCbEnumHandleChildren

DxgkCbGetHandleData

DxgkDdiAddDevice

pfnAllocateCb