Compartilhar via


Atualizações para versões 1.10 e posteriores do IddCx

Esta página descreve as alterações feitas no IddCx versão 1.10. Um único binário de IDD (driver de exibição indireto) criado com base no IddCx 1.10 pode ser executado em Windows 10, versão 1803 e superior usando verificações de runtime para verificar se as alterações de DDI no IddCx 1.10 estão disponíveis nesse sistema. Para obter mais informações, consulte Criando 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 das informações de versão relacionadas ao IddCx, consulte Versões do IdCx.
  • Adicione suporte a HDR10 (alto intervalo dinâmico) e SDR (intervalo dinâmico padrão) WCG (Wide Color Gamut) a Displays Indiretos.

Versão atualizada do IddCxGetVersion

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

  • O Windows 11, versão 22H2 atualização de setembro retorna 0x1A00 (IDDCX_VERSION_SV3).
  • A versão da plataforma Windows 2024 retornará 0x1A80.

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

Suporte à gama de cores largas HDR e SDR

Para obter algumas informações introdutórias sobre a cor no Windows, incluindo o SDR WCG, consulte DirectX com cor avançada em telas HDR e SDR.

DDI do driver e suporte ao sistema operacional

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

  • HDR10
  • SDR WCG
  • Recebendo dados que descrevem quaisquer quadros HDR enviados para uma ID

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 ao console e aos drivers remotos, mas alguns detalhes específicos aos drivers remotos também são definidos.

A versão 1.10 e drivers maiores que dão suporte ao HDR devem usar as variantes DDI mais recentes. Drivers ou drivers mais antigos que não dão suporte ao HDR podem continuar a usar as funções existentes. Uma visão geral das alterações é fornecida nas seções que seguem esta.

A tabela a seguir lista os DDIs implementados pelo driver adicionados no IddCx 1.10 e nomeia o equivalente anterior se houvesse um. O sistema operacional poderá chamar essas funções se o driver as relatar, mesmo para adaptadores que não estão tentando dar suporte ao HDR.

Funções de driver que o sistema operacional 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 sistema operacional adicionadas ao IddCx 1.10 e nomeia os equivalentes anteriores se houvesse uma. Um driver versão 1.10 poderá chamar as variantes mais recentes se tiver determinado que essas funções estão disponíveis no sistema operacional 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

*: Somente para uso por drivers remotos.

Suporte ao HDR do adaptador de relatório

A versão 1.10 e posteriores devem definir o sinalizador IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16 adicionado a IDDCX_ADAPTER_FLAGS para relatar o suporte para superfícies FP16. 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:

Recursos de HDR de destino de relatório

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

Quando o driver fornece um descritor de monitor que contém 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 sistema operacional também fornece informações de metadados do HDR. Se esses metadados indicarem que o padrão deve ser usado, são os dados padrão armazenados que estão sendo referenciados.

Quando um modo HDR é definido, o sistema operacional 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 fornecidos anteriormente pelo sistema operacional ou os mesmos metadados que o quadro anterior.

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

Relatando modos HDR

Quando uma exibição está conectada a um destino, o sistema operacional consulta o driver para modos de monitor e de destino com suporte no momento. Para anunciar corretamente os recursos do 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 bit e formatos de superfície que podem ser usados. Um driver também pode atualizar uma lista de modo de destino chamando IddCxMonitorUpdateModes2.

O sistema operacional 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 de todos os modos serem relatados.

O sistema operacional valida os modos para tentar detectar modos repetidos que devem ser combinados e relatados como um único modo. Por exemplo, um destino que dá suporte a 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 estará ok para que esses modos sejam relatados separadamente.

Um tipo gama adicionado

O EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP DDI existente foi estendido para que o sistema operacional possa fornecer a transformação de matriz 3x4 necessária para dar suporte a telas HDR para drivers que anunciam o 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.
  • Ele também faz parte da função IddCxMonitorQueryHardwareCursor3 introduzida para que um driver possa renderizar atualizações de cursor no nível 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 relatado espaço de cor como parte das informações do modo, o sistema operacional relata o espaço de cor real usado por um quadro específico na estrutura IDDCX_METADATA2 introduzida.

HDR com drivers remotos

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

  • Os metadados hdr não são fornecidos para 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 IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE adaptador, o sistema operacional não solicitará modos de monitor e usará apenas os modos de destino. Essa funcionalidade permite que um driver especifique modos incomuns sem a necessidade de relatar o modo de monitor equivalente; por exemplo, com base em um tamanho de janela do cliente em vez de um tamanho de monitor.

Suporte a um driver 1.10 em nível inferior

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

  • Continue 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.
  • Use 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 sistema operacional que não esteja disponível em versões mais antigas. Use IDD_IS_FUNCTION_AVAILABLE para marcar para disponibilidade.
  • Nenhuma das funções v1.10 pode ser exportada. Um driver pode usar a macro IDD_IS_FIELD_AVAILABLE para marcar se deve gravar o retorno de chamada EvtIddCxXxx na estrutura de 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 Criando drivers IddCx 1.4.