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.

Confira também

DXGK_DRIVERCAPS

DXGKARG_SETVIDPNSOURCEADDRESS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiAddDevice

DxgkDdiSetVidPnSourceVisibility

DxgkDdiQueryAdapterInfo