Compartilhar via


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

Para adaptadores de exibição que dão suporte à aceleração de hardware GDI, a função DxgkDdiRenderKm gera um buffer de DMA (acesso direto à memória) do buffer de comando que o CDD (Driver de Exibição Canônica) no modo kernel passou.

Sintaxe

DXGKDDI_RENDERKM DxgkddiRenderkm;

NTSTATUS DxgkddiRenderkm(
  [in]     IN_CONST_HANDLE hContext,
  [in/out] INOUT_PDXGKARG_RENDER pRenderKmArgs
)
{...}

Parâmetros

[in] hContext

Um identificador para o contexto do dispositivo para o DMA e buffers de comando. A função DxgkDdiCreateContext do driver de miniporto de exibição retornou anteriormente esse identificador no hContext membro da estrutura DXGKARG_CREATECONTEXT para a qual o parâmetro pCreateContext de DxgkDdiCreateContext.

Se o driver não der suporte à criação de contexto, o subsistema de kernel de elementos gráficos do Microsoft DirectX substituirá o identificador para o contexto por um identificador para o dispositivo. A função DxgkDdiCreateDevice do driver de miniporto de exibição retornou anteriormente o identificador do dispositivo no hDevice membro da estrutura DXGKARG_CREATEDEVICE à qual o pCreateDevice parâmetro de DxgkDdiCreateDevice aponta.

[in/out] pRenderKmArgs

Um ponteiro para uma estrutura de DXGKARG_RENDER que contém informações sobre o buffer DMA e um buffer de comando formatado.

Se o driver de miniporto de exibição der suporte à aceleração de hardware GDI, pRenderKmArgs->pCommand aponta para o buffer de comando DXGK_RENDERKM_COMMAND.

O driver deve converter o buffer de comando de entrada em comandos de buffer de DMA e criar a lista de locais do patch.

Valor de retorno

DxgkDdiRenderKm retorna um dos seguintes valores:

Código de retorno descrição
STATUS_SUCCESS Todo o buffer de comando foi traduzido.
STATUS_NO_MEMORY DxgkDdiRenderKm não foi possível alocar a memória necessária para que ela fosse concluída.
STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER O buffer DMA atual está esgotado.
STATUS_INVALID_PARAMETER DxgkDdiRenderKm parâmetros de instrução detectados que o hardware gráfico não podia dar suporte; no entanto, o hardware gráfico pode dar suporte às próprias instruções. O driver não é necessário para retornar esse código de erro. Em vez disso, ele pode retornar STATUS_ILLEGAL_INSTRUCTION quando detecta parâmetros de instrução sem suporte.
STATUS_INVALID_USER_BUFFER DxgkDdiRenderKm dados detectados ou instruções subexecutivas ou excedentes. Ou seja, o driver recebeu menos ou mais instruções ou dados do que o esperado. O driver não é necessário para retornar esse código de erro. Em vez disso, ele pode retornar STATUS_ILLEGAL_INSTRUCTION quando detecta dados ou instruções subexecutivas ou excedentes.
STATUS_INVALID_HANDLE DxgkDdiRenderKm detectou um identificador inválido no buffer de comando.
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE O driver de miniporto de exibição detectou um erro no fluxo de DMA. O dispositivo de contexto gráfico será colocado em um estado perdido se o driver retornar esse código de erro.

Observações

O subsistema de kernel de elementos gráficos DirectX chama a função DxgkDdiRenderKm do driver de miniporto de exibição para gerar um buffer DMA do buffer de comando que é passado pelo CDD (Driver de Exibição Canônica) no modo kernel fornecido pelo sistema operacional. Além do buffer de DMA de saída, o driver de miniporto de exibição também deve gerar uma lista de locais de patch de saída. O gerenciador de memória de vídeo usa essa lista para dividir e corrigir buffers de DMA adequadamente.

O acesso aos buffers de kernel não requer proteção contra try/except código.

O driver de miniporto de exibição não é necessário para usar informações que o CDD fornece se ele pode recriar as informações de forma mais ideal. Por exemplo, se o pRender->pPatchLocationListIn membro estiver vazio porque o driver de exibição no modo de usuário não forneceu uma lista de locais de patch de entrada, o driver de miniporto de exibição poderá gerar o conteúdo do do pRender->membro pPatchLocationListOut com base no conteúdo do buffer de comando.

Além do identificador específico do dispositivo, o subsistema de kernel de elementos gráficos DirectX fornece o driver de miniporto de exibição com o último endereço de segmento de GPU conhecido para cada alocação. Se o índice de alocação N for excluído no momento, o subsistema de kernel de elementos gráficos DirectX definirá o membro SegmentId do elemento Ndo membro pAllocationList de DXGKARG_RENDER como zero. Se o SegmentId membro do elemento Nda lista de alocação não estiver definido como zero, o driver de miniporto de exibição deverá corrigir o buffer de DMA gerado com as informações de endereço de segmento fornecidas antes que o subsistema de kernel de elementos gráficos DirectX chame a função DxgkDdiPatch para repatch o buffer DMA. O driver deve executar essa aplicação de patch inicial quando solicitado porque o subsistema de kernel de elementos gráficos DirectX pode não chamar a função DxgkDdiPatch em um buffer DMA que o driver deve ter corrigido corretamente.

Mesmo que a função DxgkDdiRenderKm do driver execute a aplicação de patch de buffer DMA inicial, conforme descrito anteriormente, o driver ainda deve inserir todas as referências às alocações na lista de local do patch de saída que o pPatchLocationListOut membro do DXGKARG_RENDER especifica. Essa lista deve conter todas as referências porque os endereços das alocações podem ser alterados antes que o buffer de DMA seja enviado para a GPU; portanto, o subsistema de kernel de elementos gráficos DirectX chamará a função DxgkDdiPatch para fazer o repositório do buffer DMA.

Para desassociar uma alocação, o driver de miniporto de exibição pode especificar um elemento na lista de alocação que faz referência a um identificador de NULL e, em seguida, pode usar um elemento de local de patch que faz referência a esse alocação de NULL. Normalmente, o driver deve usar o primeiro elemento da lista de alocação (elemento 0) como o elemento NULL elemento.

No modo DMA de contrato garantido, quando o driver de miniporto de exibição converte um buffer de comando em um buffer de DMA, o CDD deve garantir recursos suficientes para o comando de tradução. Se recursos suficientes não existirem para a tradução, o driver de miniporto de exibição deverá rejeitar o buffer de DMA. Para obter mais informações, consulte Usando o modelo de buffer de DMA de contrato garantido.

DxgkDdiRenderKm deve ficar paginável.

Requisitos

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

Consulte também

D3DDDI_ALLOCATIONLIST

DXGKARG_CREATECONTEXT

DXGKARG_CREATEDEVICE

DXGK_ALLOCATIONLIST

DXGK_RENDERKM_COMMAND

DxgkDdiCreateContext

DxgkDdiCreateDevice

DxgkDdiOpenAllocation

DxgkDdiPatch

DxgkDdiRender