Estas informações eram atuais em novembro de 2019. Vários recursos podem ter sido alterados ou atualizados desde então.
Latência de ponta a ponta
Os jogadores percebem a latência como o tempo entre o momento em que pressionam um botão no controle e o momento em que algo acontece na tela. Figura 1. Capacidade de detectar latência.

- O sistema envia o estado do controle para o jogo.
- O jogo lê as informações e atualiza a simulação.
- Os resultados da simulação renderizam um novo quadro.
- O sistema envia o quadro recém-renderizado para a tela.


O problema de entrada do controle em três etapas
O problema de entrada do controle se divide nas etapas a seguir.- Entrada relevante do controle: obter a entrada do jogador o mais rápido possível.
- Temporização eficaz: processar as alterações no estado do jogo e renderizar os resultados da forma mais eficiente possível.
- Telas responsivas: desenhar a tela do jogador o mais rápido possível.
Entrada relevante do controle
Os controles melhoraram e estão se tornando mais complexos. Essa complexidade adicionou latência ao longo do tempo. Os controles adicionam latência devido aos seguintes problemas.- Transmissão sem fio:
- Tráfego
- Confiabilidade dos dados
- Sobrecarga de interface:
- Gerenciamento de dispositivos
- Segurança
- Sobrecarga do sistema/SO:
- Identificação
- Análise
- Apresentação
Controles com fio vs. sem fio
A maioria dos controles XBOX é usada sem fio. No entanto, esse uso tem os seguintes problemas potenciais.- O controle pode compartilhar o espectro sem fio com outros dispositivos, como um telefone.
- Como os controles sem fio exigem baterias, o consumo delas representa um desafio.
- Dados podem ser perdidos. Os jogos precisam levar em conta a transmissão atrasada.
- A sobrecarga do controle com fio adiciona apenas 1 ms de latência devido à sondagem USB rápida.
- A sobrecarga do controle sem fio pode adicionar até 3 ms de latência.
Taxas de amostragem e defasagem da entrada do controle
As taxas de amostragem também podem causar problemas quando a entrada amostrada fica fora de fase em relação ao seu jogo. Figura 5. Taxas de amostragem e defasagem da entrada.
- Uso da bateria: fazer a sondagem mil vezes por segundo esgota rapidamente a bateria.
- Maior sobrecarga da CPU: todas as entradas de dados sondadas precisam ser analisadas e processadas.
Recurso Dynamic Latency Input
Em vez da abordagem de sondagem maximizada, use o Dynamic Latency Input, também conhecido como Entrada sincronizada. Esse recurso otimiza automaticamente a temporização da entrada do controle e faz o seguinte:- Monitora a cadência das consultas de entrada.
- Monitora o desempenho com fio e sem fio.
- Garante que a entrada mais recente seja analisada e esteja disponível quando for solicitada.
- Rastreia os tempos de apresentação dos quadros renderizados.
- Mantém um nível de “confiança” com base na cadência das consultas de entrada, no desempenho com fio/sem fio e nos tempos de apresentação.
- Fornece o nível de confiança no PIX para investigações de desempenho.
Melhorias do sistema
Houve várias alterações no sistema que ajudam na capacidade de resposta da entrada e na latência geral. Elas incluem o seguinte:- Um novo design baseado em acesso direto à memória (DMA) para minimizar o envolvimento do SO.
- Uma API
GameInputque coleta informações históricas de dispositivos de entrada conectados. - Os pressionamentos de botão do controle com fio causam atualizações. O Dynamic Latency Input ainda é útil para entradas analógicas.
- Maior resiliência dos dados sem fio.
- Rastreia a temporização em relação ao tempo de quadro gráfico.
- Uma redução de mais de 50% na latência de entrada sem fio.
- Uma redução de mais de 75% na latência de entrada com fio.
- Uma latência média de entrada do controle com fio de cerca de 1 ms.
Temporização eficaz
Figura 6. Cadência de quadros.


Cadência de quadros do PresentX
PresentX altera a cadência de quadros abstraindo a expressão da frequência de renderização e de apresentação.
Antes, o tempo de quadro era baseado na taxa de atualização da tela (VSync). Isso se torna complicado com as telas atuais, pois suas taxas de atualização mudam com um recurso como a taxa de atualização variável (VRR). Além disso, o período de quadros era calculado antes como uma função indireta da contagem da cadeia de troca do jogo.
Por outro lado, PresentX usa a duração de tempo para calcular o tempo de quadro e uma profundidade de pipeline definida para o período de quadros.
Figura 9. Cadência de quadros do PresentX: visando 60 Hz.

PresentX que visa uma taxa de quadros de 60 Hz.
O exemplo de código a seguir mostra a API SetFrameIntervalX.
SetFrameIntervalX usado na Figura 9 é o seguinte.
LengthInMicrosecondsé definido como 16.667 microssegundos.PeriodInIntervalsé definido como 2.- Os intervalos de quadros comuns têm suas próprias definições. Neste exemplo, a definição é D3D12XBOX_FRAME_INTERVAL_60_HZ.
Agendamento de quadros do PresentX
PresentX oferece controle formal sobre a limitação da CPU. Usar o agendamento de quadros em cada quadro ajusta a temporização para que seus intervalos fiquem mais próximos. Com PresentX, você declara explicitamente sua espera. A limitação implícita em tempo de execução feita pelo driver gráfico em Present deixou de existir.
Você tem um agendamento baseado em eventos e orientado por interrupções para a produção de novos quadros para exibição. Defina o tempo de origem do quadro em um intervalo de quadros e faça atualizações contínuas da origem com base na carga de trabalho a partir das estatísticas.
O exemplo de código a seguir mostra a API ScheduleFrameEventX.
ScheduleFrameEventX usado na Figura 9 é o seguinte.
ORIGIN do pipeline desse quadro. O token de pipeline que identifica o quadro agora é criado por WaitFrameEventX. Esse token é repassado para PresentX.
O exemplo de código a seguir mostra a API WaitFrameEventX.
WaitFrameEventX é o seguinte.
Apresentação do PresentX
Um novo recurso da APIPresentX é a possibilidade de latência com buffer duplo, mesmo que a renderização com buffer triplo esteja configurada. Isso significa que, embora você possa configurar o buffer triplo, se os quadros forem concluídos a tempo, o buffer duplo será mantido até que você exceda o tempo de quadro e precise de três buffers de quadro.
Essa chamada exige o D3D12XBOX_FRAME_PIPELINE_TOKEN como parte de D3D12XBOX_PRESENT_PLANE_PARAMETERS para rastrear a latência de ponta a ponta. PresentX também dá suporte à apresentação a partir de filas de computação assíncrona.
Para obter mais informações, confira a apresentação do Xfest 19 sobre Portabilidade de gráficos para o XBOX Series X|S.
Processo passo a passo das estatísticas de quadros
Figura 10. GetFrameStatisticsX.
GetFrameStatisticsX.
Este código se concentra no seguinte:
D3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_INPUTD3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_INTERVALD3D12XBOX_FRAME_STATISTICS_TYPE_FRAME_EVENTD3D12XBOX_FRAME_STATISTICS_TYPE_RENDERD3D12XBOX_FRAME_STATISTICS_TYPE_PRESENTD3D12XBOX_FRAME_STATISTICS_TYPE_DISPLAY


ORIGIN do quadro é sinalizado e quando WaitFrameEventX é chamado.
Figura 13. Estatísticas de quadros: D3D12XBOX_FRAME_EVENT_STATISTICS.






PresentX quando a CPU termina de renderizar o quadro.
Figura 19. Estatísticas de quadros: a GPU atinge a última transição de ResourceBarrier.

PresentX.
Figura 20. Estatísticas de quadros: D3D12XBOX_RENDER_STATISTICS.






Telas responsivas
As telas modernas adicionam latência extra devido ao seguinte:- Sobrecarga de transmissão ou o tempo necessário para receber dados do cabo HDMI.
- O tempo necessário para processar imagens 4K ou maiores, incluindo aprimoramentos de imagem específicos do fabricante.
- O tempo necessário para dimensionar uma imagem para a resolução nativa da tela.
- O tempo necessário para desenhar o quadro na tela.
- O tempo necessário para desenhar sobreposições de menus, controles de volume ou qualquer outra coisa que o jogador possa precisar para controlar a tela.
Modo automático de baixa latência
O modo automático de baixa latência (ALLM) é um recurso definido na especificação HDMI 2.1. O ALLM permite que a fonte de vídeo (nestes exemplos, o console XBOX) instrua todos os componentes compatíveis a entrar no modo de baixa latência. As telas que usam ALLM reduzem o processamento de imagem para minimizar atrasos antes de apresentar a imagem. Esse é um recurso no nível do sistema, semelhante ao VRR. Você não precisa fazer nada, mas os jogadores precisam garantir que o ALLM esteja habilitado nas configurações de Tela do console. Esse recurso tem suporte no XBOX One e no XBOX Series X|S.Telas de 120 Hz
O XBOX dá suporte a telas de 120 Hz. Há benefícios para jogos de 60 quadros por segundo (FPS), pois a taxa de transmissão HDMI e a taxa de atualização da tela estão intrinsecamente associadas.Perda de um VBLANK
Se o seu jogo perder um VBLANK, o jogador provavelmente o perceberá como uma travada, pois o mesmo quadro renderizado é exibido mais de uma vez. Em uma tela de 60 Hz, essa travada pode durar até 16,6 ms. Se o seu jogo perder um VBLANK em uma tela de 120 Hz (devido à taxa de atualização mais rápida da tela), a travada poderá ser metade de 16,6 ms, ou até 8,3 ms. Figura 26. Perda de um VBLANK a 60 Hz vs. 120 Hz.
Jogos a 120 FPS
Com telas de 120 Hz disponíveis, jogos a 120 FPS são uma possibilidade no XBOX Series X|S. O código a seguir mostra como colocar seu jogo no modo de 120 Hz definindo o tempo do intervalo de quadros como 8.333 microssegundos.VRR
O VRR é um recurso definido no HDMI 2.1. Use o VRR para uma atualização contínua da tela dentro do intervalo com suporte; por exemplo, de 30 Hz a 120 Hz, em vez de uma cadência forçada de 60 Hz. Você não precisa fazer nada para usar o VRR, embora ele possa ser desativado em situações em que uma atualização estável é necessária; por exemplo, em menus, cenas de carregamento ou cinemáticas. Atualmente, o XBOX dá suporte a HDMI VRR e AMD FreeSync. O XBOX One dá suporte ao intervalo de 40-60 Hz, mas as telas podem ter diferentes recursos de VRR. Na prática, o sistema consegue apresentar suavemente quadros que se estendem por cerca de 4 ms a mais.Taxas de atualização com suporte no XBOX Series X|S
- 120 Hz
- 60 Hz
- 40 Hz
- 30 Hz
- 20 Hz
- 15 Hz
Perda de um VBLANK com VRR
Conforme mencionado anteriormente, um VBLANK perdido pode causar até 16,6 ms de travada em uma tela de 60 Hz e até 8,3 ms de travada em uma tela de 120 Hz. No entanto, com o VRR, nenhuma travada é observada, pois o VBLANK da tela é atrasado até que o quadro renderizado seja concluído. A única latência extra é o tempo pelo qual o VBLANK foi atrasado, em vez de um tempo fixo de atualização da tela. Figura 27. Perda de um VBLANK com VRR.
Jogos a 40 FPS
Jogos a 40 FPS são possíveis com telas de 120 Hz. O sistema transmitirá o mesmo quadro renderizado três vezes na taxa de atualização de 120 Hz. Em outras palavras, a 40 FPS, o tempo de quadro é de 25 ms, e o sistema transmitirá esse quadro três vezes na taxa de atualização de 8,3 ms - 25 ms. Recomendamos que você dê suporte a jogos a 40 FPS, pois a latência é reduzida em 8,3 ms em comparação com 30 FPS. O exemplo de código a seguir mostra como definir o tempo do intervalo de quadros como 25.000 microssegundos para jogos a 40 FPS.Resumo
As melhorias na latência de entrada do controle resultam em:- Atualizações do controle mais rápidas e mais relevantes.
- Menor sobrecarga do SO.
- Controle mais direto da temporização.
- Melhores estatísticas de quadros e rastreamento aprimorado no PIX para entrada e gráficos.
- Novos padrões de tela.
- Taxas de atualização mais rápidas.
Próximas etapas
Se quiser revisar as informações dos materiais da apresentação relacionados a esta visão geral, baixe os seguintes arquivos do XBOX Developer Download Secure Data Storage (SDS).- Apresentação de slides: XF2019_Graphics_04_Day1_Responsive_Gaming.pptx em Xfest 2019 Graphics Track PowerPoints ([2019.11]-Xfest2019GraphicsTrackPowerPoints.ZIP)
- Apresentação em vídeo: XF2019_Graphics_04_Day1_Responsive_Gaming.mp4 em Xfest 2019 Graphics Track Videos ([2019.11]-Xfest2019GraphicsTrackVideos.ZIP)
Baixar as apresentações e os vídeos do Microsoft PowerPoint
- Acesse Downloads do Game Development Kit (GDK).
- Em Select file type, selecione Conference Materials e, em seguida, selecione Confirm.
- Em Select build/version number, escolha uma das seguintes apresentações de gráficos.
- Xfest 2019 Graphics Track PowerPoints
- Xfest 2019 Graphics Track Videos
- Selecione Download Now e aguarde a conclusão do download do arquivo .zip.
- Acesse sua pasta local Downloads e descompacte (extraia) os arquivos da pasta compactada.
Baixar os exemplos de console do Microsoft Game Development Kit mencionados neste artigo
- Acesse Downloads do Game Development Kit (GDK).
- Em Select file type, selecione GDK e, em seguida, selecione Confirm.
- Em Select build/version number, escolha a opção Microsoft GDKX (Sample only) mais recente.
- Selecione Download Now e aguarde a conclusão do download do arquivo .zip.
- Acesse sua pasta local Downloads e descompacte (extraia) os arquivos da pasta compactada.
- Selecione GDKSamples > Graphics e procure o exemplo.
