Compartilhar via


DXGKDDI_SYSTEM_DISPLAY_ENABLE função de retorno de chamada (dispmprt.h)

O sistema operacional chama a função kmd (driver de exibição) do modo kernel (KMD) função DxgkddiSystemDisplayEnable para solicitar que o KMD redefina o dispositivo de exibição atual para um estado especificado.

Sintaxe

DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;

NTSTATUS DxgkddiSystemDisplayEnable(
  [in]  PVOID MiniportDeviceContext,
  [in]  D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
  [in]  PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
  [out] UINT *Width,
  [out] UINT *Height,
  [out] D3DDDIFORMAT *ColorFormat
)
{...}

Parâmetros

[in] MiniportDeviceContext

Manipule para um bloco de contexto associado a um adaptador de exibição. A função DxgkDdiAddDevice do KMD anteriormente forneceu esse identificador para Dxgkrnl.

[in] TargetId

Um valor D3DDDI_VIDEO_PRESENT_TARGET_ID que especifica o identificador do destino do vídeo presente no adaptador de exibição ao qual o dispositivo de exibição está conectado. Esse identificador pode ser para o destino que foi deixado no estado VidPn (rede presente) do vídeo atual durante a chamada anterior para DxgkDdiCommitVidPn.

[in] Flags

Ponteiro para um valor DXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS que contém um OR bit a bit de sinalizadores. Esse membro é reservado pelo sistema operacional.

[out] Width

Largura do modo de exibição do dispositivo especificado, em pixels.

[out] Height

Altura do modo de exibição do dispositivo especificado, em pixels.

[out] ColorFormat

Ponteiro para um valor D3DDDIFORMAT que especifica o formato de cor do dispositivo de exibição.

Valor de retorno

DxgkDdiSystemDisplayEnable retornará STATUS_SUCCESS se tiver êxito. Se o destino especificado pelo parâmetro TargetId não estiver conectado a um dispositivo de exibição, a função retornará STATUS_NOT_SUPPORTED. Caso contrário, ele retornará um dos códigos de erro definidos em Ntstatus.h.

Observações

O sistema operacional chama DxgkddiSystemDisplayEnable durante uma operação de verificação de bugs após um erro de parada do sistema.

Etapas necessárias por KMD

O KMD deve seguir estas etapas quando sua função DxgkDdiSystemDisplayEnable é chamada:

  1. Cancele todas as operações de GPU ou redefina a GPU para o estado ocioso.
  2. O sistema operacional indica o destino presente do vídeo por meio do parâmetro TargetId . O driver deve manter a exibição associada a esse destino ativada e visível. Se o driver não puder ligar na tela, ele deverá falhar na chamada para essa função. Nesse caso de falha, o sistema operacional pode chamar DxgkDdiResetDevice e fazer com que ocorra uma verificação de bugs do sistema.
  3. Verifique a conectividade da exibição associada a esse destino. Se o destino não tiver uma exibição conectada, o driver deverá concluir a chamada para essa função e retornar o código de erro STATUS_NOT_SUPPORTED.
  4. Desabilite o sinal para todas as outras exibições conectadas ao adaptador de exibição. Se isso não for possível, o driver deverá tentar colocar uma imagem em branco em todas as outras exibições. Se isso não for possível, o driver deverá deixar a última imagem na tela inalterada.
  5. Mantenha o modo de exibição atual no destino indicado e forneça esse modo de volta ao sistema operacional como parte dessa chamada de função.
  6. Se o driver não conseguir manter o modo de exibição atual ou se o destino não fizer parte da topologia ativa, o driver deverá tentar definir um buffer de quadro em outro destino capaz de uma resolução de exibição de pelo menos 640 x 480 pixels em um formato de 24 bits por pixel. Se isso não for possível, o driver poderá falhar nessa chamada de função, o que resultará em uma verificação de bugs do sistema e na exibição de uma tela preta.

O KMD não precisa usar um modo de buffer de quadro linear. No entanto, o KMD deve dar suporte a operações de gravação para esse buffer de quadro de fontes que têm o formato D3DDDIFMT_A8R8G8B8 da enumeração D3DDDIFORMAT.

Restrições de imagem de origem

Depois que o KMD fornece o controle do sistema operacional sobre a funcionalidade de exibição, o sistema operacional pode chamar a função DxgkDdiSystemDisplayWrite para atualizar a imagem da tela e gravar um bloco de imagens de fontes especificadas na tela que foi redefinida pela função DxgkDdiSystemDisplayEnable.

DxgkDdiSystemDisplayWrite fornece ao driver o endereço inicial da imagem de origem, bem como o passo, largura e altura. O formato de cor da imagem de origem é sempre D3DDDIFMT_X8R8G8B8. O sistema operacional garante que a imagem de origem esteja na memória não paginada.

O KMD deve gravar essa imagem de origem na tela atual começando nas posições especificadas pelo PositionX e parâmetros PositionY da função DxgkDdiSystemDisplayWrite.

É recomendável que o driver use a CPU para gravar a imagem da origem no buffer de quadros porque uma verificação de bugs do sistema pode ser causada por TDR (Detecção e Recuperação de Tempo Limite) repetidas instâncias que resultam na gpu estar em uma condição desconhecida.

Usar memória não paginada

As funções do modo kernel do Windows podem não estar disponíveis enquanto essa função está sendo chamada.

DxgkDdiSystemDisplayEnable pode ser chamado em qualquer IRQL, portanto, ele deve estar na memória não pageable. DxgkDdiSystemDisplayEnable não deve chamar nenhum código que esteja na memória paginável e não deve manipular nenhum dado que esteja na memória paginável.

Comutação automática de exibição

Um driver de comutador de exibição automático DxgkDdiSystemDisplayEnable DDI deve garantir que a auto-atualização do painel (PSR) esteja desabilitada no final da chamada para ele. Para obter mais informações, consulte comutador de exibição automático.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 8 (WDDM 1.2)
servidor com suporte mínimo Windows Server 2012
da Plataforma de Destino Área de trabalho
cabeçalho dispmprt.h
IRQL Qualquer nível (consulte a seção Comentários)

Consulte também

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiCommitVidPn

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite