Compartilhar via


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

Chamado pelo sistema operacional para solicitar que o driver de miniporta de exibição redefina o dispositivo de exibição atual para um estado especificado.

Começando com Windows 8, o sistema operacional chama essa função durante uma operação de verificação de bugs após um erro de parada do sistema.

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

Um identificador para um bloco de contexto associado a um adaptador de exibição. A função DxgkDdiAddDevice do driver de miniporta de vídeo forneceu anteriormente esse identificador para o subsistema de kernel de elementos gráficos do Microsoft DirectX.

[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 atual da VidPn (rede presente em vídeo) durante a chamada anterior para DxgkDdiCommitVidPn.

Para obter mais detalhes sobre o uso do parâmetro TargetId , consulte a seção "Inicialização de destino de apresentação de vídeo".

[in] Flags

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

[out] Width

Um valor UINT que especifica a largura do modo de exibição do dispositivo especificado em unidades de pixels.

[out] Height

Um valor UINT que especifica a altura do modo de exibição do dispositivo especificado em unidades de pixels.

[out] ColorFormat

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

Retornar valor

DxgkDdiSystemDisplayEnable retornará STATUS_SUCCESS se for bem-sucedido. 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.

Comentários

Etapas necessárias para exibir o driver de miniporta

O driver de miniporta de exibição deve seguir estas etapas quando sua função DxgkDdiSystemDisplayEnable for chamada:
  1. O driver deve cancelar todas as operações de GPU (unidade de processamento gráfico) ou redefinir a GPU para o estado ocioso.
  2. O sistema operacional indica o destino do vídeo presente por meio do parâmetro TargetId . O driver deve manter a exibição associada a esse destino ligada e visível. Se o driver não puder ligar a tela, ele deverá falhar na chamada para essa função. Nesse caso de falha, o sistema operacional pode chamar a função DxgkDdiResetDevice e fazer com que uma verificação de bugs do sistema ocorra.
  3. O driver deve marcar 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. O driver deve desabilitar o sinal para todos os outros monitores conectados ao adaptador de vídeo. 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. O driver deve manter o modo de exibição atual no destino indicado e fornecer esse modo de volta ao sistema operacional como parte dessa chamada de função.
  6. Se o driver não puder 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.

    Não é necessário que o driver use um modo de buffer de quadro linear. No entanto, o driver deve dar suporte a operações de gravação nesse buffer de quadros de fontes que tenham o formato D3DDDIFMT_A8R8G8B8 da enumeração D3DDDIFORMAT .

Restrições de imagem de origem

Depois que o driver fornece ao sistema operacional controle 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 driver deve gravar essa imagem de origem na tela atual começando nas posições especificadas pelos parâmetros PositionX e 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 instâncias de TDR (Detecção e Recuperação de Tempo Limite) repetidas 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.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8
Servidor mínimo com suporte Windows Server 2012
Plataforma de Destino Área de Trabalho
Cabeçalho dispmprt.h
IRQL Qualquer nível (consulte a seção Comentários)

Confira também

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite