Compartilhar via


Atualizações para IddCx versão 1.10 e posteriores

Este artigo descreve as atualizações feitas no IddCx versão 1.10. Um único binário de driver de exibição indireto (IDD) criado no IddCx 1.10 pode ser executado no Windows 10, versão 1803 e superior usando verificações de runtime para confirmar se as alterações de DDI no IddCx 1.10 estão disponíveis nesse sistema. Para obter mais informações, consulte Criar um driver WDF para várias versões do Windows.

As alterações do IddCx 1.10 se enquadram nas seguintes categorias:

  • Atualize a versão IddCxGetVersion (console e remoto). Para obter uma lista completa de informações de versão relacionadas ao IddCx, consulte Versões do IddCx.
  • Adicione o HDR10 (alto alcance dinâmico) e SDR (alcance dinâmico padrão) para suportar exibições indiretas.

Versão atualizada do IddCxGetVersion

O valor retornado por IddCxGetVersion foi atualizado, mas difere dependendo do SO:

  • A versão da plataforma do Windows 11, versão 24H2, retorna 0x1A80 (IDDCX_VERSION_GERMANIUM).
  • A atualização de setembro do Windows 11, versão 22H2, retorna 0x1A00 (IDDCX_VERSION_SV3).

Esse controle de versão é significativo para drivers remotos em que o comportamento do sistema operacional difere um pouco.

Suporte a ampla gama de cores HDR e SDR

Para obter algumas informações introdutórias sobre cores no Windows, incluindo SDR WCG, consulte DirectX com cores avançadas em exibições HDR e SDR.

Suporte a DDI e SO do driver

Sempre que possível, as DDIs existentes foram estendidas para permitir que um driver relatasse suporte para:

  • HDR10
  • SDR WCG
  • Recebendo dados que descrevem todos os quadros HDR enviados a um IDD

Variantes mais recentes de DDIs existentes foram adicionadas quando os DDIs existentes não puderam ser estendidos. Na maioria dos casos, essas alterações são aplicáveis a drivers remotos e de console, mas alguns detalhes específicos para drivers remotos também são definidos.

Os drivers da versão 1.10 e superiores que dão suporte a HDR devem usar as variantes DDI mais recentes. Drivers mais antigos ou que não dão suporte a HDR podem continuar a usar as funções existentes. Uma visão geral das mudanças é fornecida nas seções seguintes a esta.

A tabela a seguir lista as DDIs implementadas pelo driver adicionadas no IddCx 1.10 e nomeia o equivalente anterior, se houver um. O SO pode chamar essas funções se o driver as relatar, mesmo para adaptadores que não estão tentando dar suporte a HDR.

Funções de driver que o SO chama para adaptadores HDR Função equivalente anterior
EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO N/D
EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA* N/D
EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION2** EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION
EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES2 EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES
EVT_IDD_CX_ADAPTER_COMMIT_MODES2 EVT_IDD_CX_ADAPTER_COMMIT_MODES

*: A função não é chamada para drivers remotos.

**: A função pode não ser chamada para drivers remotos, dependendo dos sinalizadores do adaptador definidos pelo driver.

A tabela a seguir lista as funções implementadas pelo SO adicionadas no IddCx 1.10 e nomeia todos os equivalentes anteriores. Um driver da versão 1.10 pode chamar as variantes mais recentes depois de determinar que essas funções estão disponíveis no SO em que o driver está sendo executado.

Funções mais recentes que um driver deve chamar para adaptadores HDR Equivalente anterior
IddCxSwapChainReleaseAndAcquireBuffer2 IddCxSwapChainReleaseAndAcquireBuffer/IddCxSwapChainReleaseAndAcquireSystemBuffer
IddCxMonitorQueryHardwareCursor3 IddCxMonitorQueryHardwareCursor2 ou IddCxMonitorQueryHardwareCursor
IddCxAdapterDisplayConfigUpdate2* IddCxAdapterDisplayConfigUpdate*
IddCxMonitorUpdateModes2 IddCxMonitorUpdateModes

*: para uso apenas por drivers remotos.

Relatar suporte HDR do adaptador

Os drivers da versão 1.10 e superior devem definir o sinalizador IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16 adicionado ao IDDCX_ADAPTER_FLAGS para relatar o suporte para superfícies FP16. As superfícies FP16 podem ser usadas para HDR10 ou apenas SDR WCG. Definir esse sinalizador implica que um driver faz tudo o que é necessário para habilitar o HDR10 ou o SDR WCG, incluindo:

Relatar recursos de HDR de destino

Se um driver quiser habilitar o HDR para um adaptador, ele deverá fornecer informações adicionais sobre cada conector de destino por meio de sua função EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO. As informações específicas do conector de destino são necessárias porque apenas alguns dos destinos disponíveis podem dar suporte a alguns aspectos do HDR.

Metadados HDR

Quando o driver fornece um descritor de monitor contendo metadados HDR, o sistema operacional chama EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA para fornecer os metadados HDR padrão ao driver. O driver deve manter esses dados padrão e usá-los ao enviar quadros de informações HDR10 (SMPTE ST.2086) para o monitor. Quando um driver chama IddCxSwapChainReleaseAndAcquireBuffer2, o SO também fornece informações de metadados HDR. Se esses metadados indicarem que o padrão deve ser usado, ele estará se referindo aos dados padrão armazenados.

Quando um modo HDR é definido, o SO envia o estado de metadados HDR com cada quadro. Esses metadados informam ao driver quais metadados HDR usar por meio da estrutura IDDCX_METADATA2 introduzida. Os metadados são um novo bloco de metadados ou uma indicação de que o driver deve usar os metadados padrão que o SO forneceu anteriormente ou os mesmos metadados do quadro anterior.

Observação: os metadados HDR não são disponibilizados para drivers remotos porque todos os metadados HDR10 devem vir do subsistema de exibição no cliente.

Relatar modos HDR

Quando a exibição é conectada a um destino, o SO consulta o driver para os modos de monitor e destino com suporte no momento. Para anunciar corretamente os recursos de HDR, são necessárias informações extras para cada um desses modos, portanto, um driver HDR deve expor os seguintes DDIs introduzidos na v1.10:

Esses modos estendidos indicam as possíveis profundidades de bits e formatos de superfície que podem ser usados. Um driver também pode atualizar uma lista de modo de destino chamando IddCxMonitorUpdateModes2.

O SO infere variações de modos para HDR e SDR WCG com base nas informações retornadas pelo retorno de chamada EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO do driver antes que qualquer modo seja relatado.

O SO valida os modos para tentar detectar modos repetidos que devem ser combinados e relatados como um único modo. Por exemplo, um destino que suporta 1080p a 60 Hz em 8 bits e 10 bits por canal deve ser relatado como um único modo. No entanto, se o destino der suporte a esses modos, mas eles exigirem diferentes quantidades de largura de banda, ainda não há problema em relatar esses modos separadamente.

Um tipo gama adicionado

A DDI EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP existente foi estendida para que o SO possa fornecer a transformação de matriz 3x4 necessária para dar suporte a exibições HDR para drivers que anunciam suporte a HDR.

Nível de branco SDR

Os dados de pixel do cursor do mouse são sempre SDR. Quando um monitor é definido em um modo HDR, o nível de branco SDR deve ser aplicado aos cursores do mouse. O IddCx v.10 fornece essa funcionalidade em dois locais:

  • Ele foi adicionado aos metadados por quadro recebidos por um driver ao chamar IddCxSwapChainReleaseAndAcquireBuffer2.
  • Também faz parte da função IddCxMonitorQueryHardwareCursor3 introduzida para que um driver possa renderizar atualizações de cursor no nível de branco correto sem precisar receber um novo quadro. O nível de branco SDR padrão é de 80 nits.

Espaço de cores da superfície

Embora o driver tenha informado o espaço de cores como parte das informações do modo, o SO relata o espaço de cores real usado por um quadro específico na estrutura IDDCX_METADATA2.

HDR com drivers remotos

Sempre que possível, o comportamento do SO e do driver deve ser o mesmo para um driver remoto e para um driver de console. As exceções são:

  • Os metadados HDR não são fornecidos aos drivers remotos. Espera-se que o sistema cliente forneça esses metadados com base na exibição fisicamente conectada. Não faz sentido usar metadados determinados pelo servidor.
  • A transformação da matriz de cores 3x4 também não é enviada. Novamente, espera-se que um driver remoto use os dados equivalentes do sistema cliente.
  • Os drivers remotos podem fornecer os dados de colorimetria e o nível de branco SDR a serem usados no servidor.
  • Os modos de monitor também são opcionais para drivers remotos. Se um driver remoto definir o sinalizador do adaptador IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE, o SO não solicitará os modos de monitor e, em vez disso, usará apenas os modos de destino. Essa funcionalidade permite que um driver especifique modos incomuns sem precisar relatar o modo de monitor equivalente; por exemplo, com base no tamanho da janela do cliente em vez do tamanho do monitor.

Suporte a um driver 1.10 em execução de nível

Os drivers da versão 1.10 executados em versões mais antigas do Windows precisam executar várias etapas para garantir a compatibilidade. Especificamente, os drivers devem:

  • Continuar exportando todas as funções existentes, como EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION, EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES e EVT_IDD_CX_ADAPTER_COMMIT_MODES.
  • Usar a macro IDD_CX_CLIENT_CONFIG_INIT para definir o tamanho da estrutura IDD_CX_CLIENT_CONFIG.
  • Não tente chamar nenhuma função implementada pelo SO que não esteja disponível em versões mais antigas. Use IDD_IS_FUNCTION_AVAILABLE para verificar a disponibilidade.
  • Nenhuma das funções v1.10 pode ser exportada. Um driver pode usar a macro IDD_IS_FIELD_AVAILABLE para verificar se ele deve gravar o retorno de chamada EvtIddCxXxx na estrutura IDD_CX_CLIENT_CONFIG.
  • IDD_IS_FIELD_AVAILABLE também pode ajudar um driver a determinar se é seguro definir IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16 ou IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE. Se um dos DDIs v1.10 não estiver disponível, o driver não deverá definir o sinalizador.

Um exemplo de como IDD_IS_FIELD_AVAILABLE pode ser usado:

    if (IDD_IS_FIELD_AVAILABLE(IDD_CX_CLIENT_CONFIG, EvtIddCxParseMonitorDescription2))
    {
        IddCxClientConfig.EvtIddCxParseMonitorDescription2 = ParseMonitorDescription2;
    }

Para obter mais informações, consulte Como criar drivers IddCx 1.4.