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 presente de vídeo específica.
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 kernel de elementos gráficos DirectX no parâmetro de saída MiniportDeviceContext da função DxgkDdiAddDevice .
pSetVidPnSourceAddress
Um ponteiro para uma estrutura DXGKARG_SETVIDPNSOURCEADDRESS que contém argumentos de função.
Retornar valor
DxgkDdiSetVidPnSourceAddress retornará STATUS_SUCCESS se for bem-sucedido; caso contrário, retornará um dos códigos de erro definidos em Ntstatus.h.
Começando com Windows 8, o driver de miniporto de exibição pode falhar 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.
Comentários
DxgkDdiSetVidPnSourceAddress é chamado apenas com primárias que se encaixam com a topologia VidPN (rede presente em vídeo) confirmada no momento. Por exemplo, o formato D3DDDIFMT_A8R8G8B8 é determinado para se ajustar a um VidPN que está comprometido com um formato de 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 pela memória. Os sinalizadores de campo de bit no membro Flags da estrutura DXGKARG_SETVIDPNSOURCEADDRESS apontado pelo parâmetro pSetVidPnSourceAddress indicam o tipo de operação de exibição a ser executada. Para alternar o modo de exibição, o subsistema de kernel de elementos gráficos define o membro ContextCount de DXGKARG_SETVIDPNSOURCEADDRESS como zero. Nessa situação, o conteúdo da matriz especificada pelo membro Context de DXGKARG_SETVIDPNSOURCEADDRESS é indefinido. Para executar uma operação de inversão, o subsistema de kernel gráfico define ContextCount como o número de contextos e Contexto para a 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 uma inversão baseada em MMIO (definindo o sinalizador de campo de bit FlipOnVSyncMmIo no membro FlipCaps da estrutura DXGK_DRIVERCAPS como TRUE), a função DxgkDdiSetVidPnSourceAddress 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 membro PrimaryAddress 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ção DxgkCbNotifyDpc .
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 interrupção.
O agendador de GPU detectará uma única sincronização vertical e determinará que a superfície invertida está disponível assim que a primeira inversão de 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, Reprodutor Multimídia do Windows) 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 detectasse as sincronizações verticais de ambos os monitores, o intervalo de sincronização vertical (e, portanto, a inversão) 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 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 novo rastreamento vertical do monitor secundário, o subsistema de kernel de elementos gráficos DirectX define o sinalizador de campo de bits FlipImmediate como 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 na apresentação VidPN de sobreposição multiplane.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista |
Cabeçalho | d3dkmddi.h |
IRQL | PASSIVE_LEVEL. Chamado em DIRQL se o driver der suporte a uma inversão baseada em MMIO. |