Skip to main content
Este tópico fornece uma visão geral das APIs XDSP. O XDSP permite que os títulos aproveitem o recurso de Reverberação por Convolução Acelerada por Hardware na geração de consoles XBOX Series X|S. A implementação atual é capaz de processar 80 segundos de resposta ao impulso em tempo real. Por exemplo, 40 fluxos de 2 segundos de resposta ao impulso cada, simultaneamente, em tempo real.

Novidades da versão de outubro de 2022

Recursos da versão

  • Para convolução, os tamanhos de bloco compatíveis são 512 e 1024 quadros. O desempenho será melhor com um tamanho de bloco de 1024 quadros.
  • Para FFT/IFFT, os tamanhos de bloco compatíveis são 512, 1024 e 2048 quadros.
  • A convolução é compatível com os modos mono, estéreo e estéreo desintercalado, com respostas ao impulso mono e estéreo.
  • A chamada XDspConnect ou XDspConnectWithMaximumStreamLimit estabelece uma conexão com o hardware e retorna um XDspClientHandle. Somente 8 conexões podem estar ativas a qualquer momento.
  • O valor máximo de aggregateImpulseResponseInSeconds compatível na chamada para XDspConnect é 128. Esse também é o máximo considerando todas as chamadas de XDspConnect. Se uma única chamada de XDspConnect for feita com 128 para aggregateImpulseResponseInSeconds, nenhuma outra chamada de XDspConnect poderá ser feita com um valor de aggregateImpulseResponseInSeconds maior que 0. aggregateImpulseResponseInSeconds deve ser maior que zero para permitir a ativação de fluxos para processamento de convolução.
  • Um máximo de 256 fluxos pode ser ativado usando XDspActivate para um determinado XDspClientHandle retornado por XDspConnect. Um máximo de maximumStreamCount fluxos pode ser ativado usando XDspActivate para um determinado XDspClientHandle retornado por XDspConnectWithMaximumStreamLimit, em que maximumStreamCount é o número de fluxos usado na chamada de XDspConnectWithMaximumStreamLimit. Esses fluxos podem ser de qualquer XDspProcessType.
  • Quando uma entrada estéreo é usada, a resposta ao impulso agregada máxima compatível cai para 64 segundos.
  • Todos os buffers passados para a API devem estar alinhados em 16 bytes. O hardware pode apresentar uma falha e ser redefinido se os buffers não estiverem alinhados em 16 bytes. XDspStatus.result indicará XDSP_E_DEVICE_FATAL_ERROR quando o hardware tiver sofrido uma falha/travamento.
  • A resposta ao impulso deve estar no domínio da frequência. Uma ferramenta está sendo fornecida para converter respostas ao impulso do domínio do tempo para o domínio da frequência. Baixe em https://aka.ms/gdkdl.
  • A ferramenta de conversão de resposta ao impulso agora inclui suporte a redução, permitindo que você troque uma redução na qualidade por um desempenho maior. Consulte Visão geral da redução de resposta ao impulso do XDSP para obter mais detalhes.
  • Foram feitas melhorias na latência da chamada XDspConnect.

Problemas conhecidos

  • A opção “EnablePolarFormat” em XDspActivationOptions para processamento de FFT/IFFT leva um tempo considerável em comparação com o formato cartesiano padrão, que tem melhor desempenho.

Práticas recomendadas

  • Haverá uma resposta para cada comando enviado ao hardware, mesmo quando o hardware apresentar uma falha. O chamador deve aguardar que todos os comandos sejam processados pelo hardware antes de chamar XDspDeactivate para desativar o fluxo. XDspStatus.lastProcessedCommandSequence mostra o número de sequência do último comando processado pelo hardware para esse fluxo. Outros fluxos XDSP não serão afetados e o hardware continuará processando os comandos deles.
  • O “baseBuffer” passado para a chamada XDspConnect não deve ser liberado até que todos os fluxos sejam desativados usando XDspDeactivate e XDspDisconnect seja bem-sucedido.
  • Há um limite de fila interno para cada fluxo, e XDspSubmitCommand retorna XDSP_E_QUEUE_FULL quando esse limite é atingido. Quando esse erro ocorrer, aguarde tempo suficiente para que o hardware processe os comandos desse fluxo antes de enviar mais comandos. XDspStatus.lastProcessedCommandSequence pode ser usado para verificar o último comando processado pelo hardware para esse fluxo.
  • O desempenho da convolução é melhor com um tamanho de bloco de 1024 em comparação com um tamanho de bloco de 512.
  • O algoritmo de convolução não é homogêneo quando se trata de processar comandos consecutivos, ou seja, nem todos os blocos levam o mesmo tempo para serem concluídos, e alguns podem levar mais tempo que outros.

Pausando e retomando um título

Um título deve ser capaz de pausar e retomar, por exemplo, quando o usuário o coloca no modo Restrito. Quando o manipulador de suspensão for chamado, basta parar de enviar comandos XDSP ao hardware. Os comandos que já foram enviados serão processados normalmente e o XDspStatus será atualizado adequadamente.

Exemplos

  • Disponíveis para download em https://aka.ms/gdkdl e nos exemplos do ATG. Passo a passo dos exemplos estão disponíveis para Reverberação por convolução de fluxo único e FFT IFFT de fluxo único
  • Um exemplo de XDSP que usa o acelerador de hardware para converter uma resposta ao impulso do domínio do tempo para o domínio da frequência está incluído com os demais exemplos no portal de download do GDK https://aka.ms/gdkdl. Esse exemplo produz exatamente a mesma saída que a ferramenta Impulse Response Transform incluída na instalação do GDK. Esse exemplo demonstra como a aceleração de hardware pode ser usada para converter uma resposta ao impulso em tempo real para uso com a API XDSP.

Contato

Se você tiver dúvidas ou preocupações sobre esse recurso, envie um email para AnaAud@microsoft.com ou use os fóruns online.

Documentação de referência da API

Last modified on October 6, 2026