Compartilhar via


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

A função DxgkDdiSetVidPnSourceAddress define o endereço da superfície primária associada a uma fonte de vídeo específica presente.

Sintaxe

DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;

NTSTATUS DxgkddiSetvidpnsourceaddress(
  IN_CONST_HANDLE hAdapter,
  IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}

Parâmetros

hAdapter

Um identificador para um bloco de contexto associado a um adaptador de exibição. O driver de miniporto de exibição forneceu anteriormente esse identificador para o subsistema de kernel de elementos gráficos DirectX na função MiniportDeviceContext da função DxgkDdiAddDevice.

pSetVidPnSourceAddress

Um ponteiro para uma estrutura DXGKARG_SETVIDPNSOURCEADDRESS que contém argumentos de função.

Valor de retorno

DxgkDdiSetVidPnSourceAddress retornará STATUS_SUCCESS se tiver êxito; caso contrário, ele retorna um dos códigos de erro definidos em Ntstatus.h.

A partir do Windows 8, o driver de miniporto de exibição pode falhar em uma chamada para DxgkDdiSetVidPnSourceAddress, retornando STATUS_INVALID_PARAMETER, quando o membro SharedPrimaryTransition é definido em pSetVidPnSourceAddress->Flags. No entanto, essa falha não é esperada, a menos que haja um erro na implementação do driver de modo de usuário da função CheckDirectFlipSupport ou no DWM. Se essa falha ocorrer, o sistema operacional não fará failback contínuo para o modo de composição e a apresentação estará incorreta.

Observações

DxgkDdiSetVidPnSourceAddress é chamado apenas com primárias que se encaixam com a topologia VidPN (rede presente em vídeo) atualmente confirmada. Por exemplo, o formato D3DDDIFMT_A8R8G8B8 está determinado a se ajustar a um VidPN que está comprometido com um formato D3DDDIFMT_X8R8G8B8 e vice-versa.

O subsistema de kernel de elementos gráficos DirectX chama DxgkDdiSetVidPnSourceAddress para alternar o modo de exibição e executar operações de inversão baseadas em E/S (MMIO) mapeadas por memória. Os sinalizadores de campo de bit no Flags membro da estrutura DXGKARG_SETVIDPNSOURCEADDRESS que é apontado pelo parâmetro pSetVidPnSourceAddress indica o tipo de operação de exibição a ser executada. Para alternar o modo de exibição, o subsistema de kernel gráfico define o membro ContextCount de DXGKARG_SETVIDPNSOURCEADDRESS como zero. Nessa situação, o conteúdo da matriz especificada pelo Context membro do DXGKARG_SETVIDPNSOURCEADDRESS é indefinido. Para executar uma operação de inversão, o subsistema de kernel gráfico define ContextCount para o número de contextos e Context à matriz de identificadores de contexto do driver para os contextos que contribuem para a operação de inversão.

Se o driver de miniporto de exibição indicado anteriormente, em uma chamada para sua função DxgkDdiQueryAdapterInfo, que dá suporte a um inverso baseado em MMIO (definindo o FlipOnVSyncMmIo sinalizador de campo de bits no membro do FlipCaps da estrutura DXGK_DRIVERCAPS como TRUE), a função DxgkDdiSetVidPnSourceAddress do do driver é chamada posteriormente no nível de solicitação de interrupção do dispositivo (DIRQL) para fins de inversão. A função DxgkDdiSetVidPnSourceAddress do driver deve programar o DAC e iniciar a verificação, na sincronização vertical a seguir, a superfície primária cujo endereço é especificado no PrimaryAddress membro do DXGKARG_SETVIDPNSOURCEADDRESS. O driver também deve passar o tipo de interrupção DXGK_INTERRUPT_CRTC_VSYNC no parâmetro InterruptType em uma chamada para a função DxgkCbNotifyInterrupt para relatar o endereço de verificação efetivo. O driver deve seguir a chamada para DxgkCbNotifyInterrupt com uma chamada para a funçãoDxgkCbNotifyDpc.

DxgkDdiSetVidPnSourceAddress deve estar na memória não pageable. DxgkDdiSetVidPnSourceAddress 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.

Situações de Clone-View

Em situações de exibição de clone, o driver de miniporto de exibição deve lidar com as operações de inversão adequadamente, conforme descrito nesta seção.

Quando o DWM está em execução, o subsistema de kernel de elementos gráficos DirectX é sincronizado quando ocorre uma sincronização vertical. No entanto, o subsistema de kernel de elementos gráficos DirectX só pode ser sincronizado quando ocorre uma sincronização vertical de um único sinal de saída do adaptador gráfico. O subsistema de kernel de elementos gráficos DirectX deve inverter imediatamente qualquer outro sinal de saída do adaptador gráfico para evitar a ruptura.

O agendador de GPU detectará uma única sincronização vertical e determinará que a superfície invertida está disponível assim que o primeiro inverter monitor ocorrer. Como resultado, o driver de miniporto de exibição pode estar sendo renderizado em uma superfície que o segundo monitor ainda está exibindo.

Os aplicativos de vídeo (por exemplo, Windows Media Player) não estão cientes das situações de exibição de clone e esperam ter um intervalo previsível de sincronização vertical. Se o agendador de GPU detectou as sincronizações verticais de ambos os monitores, o intervalo de sincronização vertical (e, portanto, o inverso) seria imprevisível e descompasso ao longo do tempo, o que faria com que os aplicativos DWM e vídeo não operassem corretamente.

Para situações de exibição de clone, o driver de miniporto de exibição deve executar uma inversão de sincronização vertical no monitor primário e uma inversão imediata baseada em MMIO no monitor secundário.

A função de DxgkDdiSetVidPnSourceAddress do driver de miniport de exibição deve registrar o endereço que está sendo invertido no objeto do adaptador gráfico.

Para direcionar o driver de miniporto de exibição para não aguardar o próximo rastreamento vertical do monitor secundário, o subsistema de kernel de elementos gráficos DirectX define o sinalizador FlipImmediate bit-field para TRUE em uma chamada para a função DxgkDdiSetVidPnSourceAddress do driver.

Consulte os requisitos para chamar essa função com sobreposições de vários planos em apresentação VidPN de sobreposição multiplane.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows Vista
cabeçalho d3dkmddi.h
IRQL PASSIVE_LEVEL. Chamado no DIRQL se o driver dá suporte a uma inversão baseada em MMIO.

Consulte também

DXGK_DRIVERCAPS

DXGKARG_SETVIDPNSOURCEADDRESS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiAddDevice

DxgkDdiSetVidPnSourceVisibility

DxgkDdiQueryAdapterInfo