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. |