Skip to main content
This topic provides an overview of the XDSP APIs. XDSP allows titles to leverage the Hardware Accelerated Convolution Reverb feature on the XBOX Series X|S generation of consoles. The current implementation is capable of processing 80 seconds of impulse response in real-time. For example, 40 streams of 2 seconds impulse response each simultaneously in real-time.

New in the October 2022 release

Release features

  • For convolution, the supported block sizes are 512 and 1024 frames. Performance will be better with a block size of 1024 frames.
  • For FFT/IFFT, the supported block sizes are 512, 1024 and 2048 frames.
  • Convolution is supported in mono, stereo, and stereo de-interleaved modes, with mono and stereo impulse responses.
  • XDspConnect or XDspConnectWithMaximumStreamLimit call makes a connection to the hardware and returns an XDspClientHandle. Only 8 connections can be active at any given point.
  • The maximum aggregateImpulseResponseInSeconds supported in the call to XDspConnect is 128. This is also the maximum across all XDspConnect calls. If a single XDspConnect call is made with 128 for aggregateImpulseResponseInSeconds, no more XDspConnect calls can be made with aggregateImpulseResponseInSeconds value of greater than 0. aggregateImpulseResponseInSeconds must be greater than zero to allow stream activation for convolution processing.
  • A maximum of 256 streams can be activated using XDspActivate for a given XDspClientHandle returned by XDspConnect. A maximum of maximumStreamCount streams can be activated using XDspActivate for a given XDspClientHandle returned by XDspConnectWithMaximumStreamLimit where maximumStreamCount is the number of streams used in the XDspConnectWithMaximumStreamLimit call. These streams can be of any XDspProcessType.
  • When stereo input is used, the maximum aggregate impulse response supported drops to 64 seconds.
  • All buffers passed to the API must be 16 byte aligned. The hardware may run into a fault and reset if the buffers are not 16 byte aligned. XDspStatus.result will indicate XDSP_E_DEVICE_FATAL_ERROR when the hardware ran into a crash/hang.
  • The impulse response should be in frequency domain. A tool is being provided to convert impulse responses in time domain to frequency domain. Download from https://aka.ms/gdkdl.
  • The impulse response conversion tool now includes reduction support, allowing you to trade a reduction in quality for higher performance. See XDSP Impulse Response Reduction Overview for further details.
  • Improvements to the latency of the XDspConnect call have been made.

Known Issues

  • The “EnablePolarFormat” option in XDspActivationOptions for FFT/IFFT processing takes considerable time compared to the default Cartesian format, which is more performant.

Best Practices

  • There will be a response for each command submitted to the hardware even when the hardware runs into a fault. The caller should wait for all commands to be processed by the hardware before calling XDspDeactivate to deactivate the stream. XDspStatus.lastProcessedCommandSequence shows the sequence number of the last processed command by the hardware for this stream. Other XDSP streams will not be affected and hardware will continue to process their commands.
  • The “baseBuffer” that is passed to the XDspConnect call should not be freed until all streams are deactivated using XDspDeactivate and XDspDisconnect succeeds.
  • There is an internal queue limit for each stream and XDspSubmitCommand returns XDSP_E_QUEUE_FULL when this limit is reached. When this error is encountered, please allow enough time for the hardware to process commands for this stream before submitting more commands. XDspStatus.lastProcessedCommandSequence can be used to check the last command that was processed by the hardware for this stream.
  • Performance is better for convolution with a 1024 block size compared to a 512 block size.
  • Convolution algorithm is not homogeneous when it comes to processing consecutive commands i.e., not all blocks take the same amount of time to complete and some may take longer than the others.

Pausing and resuming a title

A title must be able to pause and resume, for example, when the user puts it into Constrained mode. When the suspend handler is called, simply stop submitting XDSP commands to the hardware. The commands that were already submitted will be processed normally and the XDspStatus updated accordingly.

Samples

  • Available for download from https://aka.ms/gdkdl and from ATG samples. Sample walkthroughs are available for Single Stream Convolution Reverb and Single Stream FFT IFFT
  • An XDSP sample that uses the hardware accelerator to convert an impulse response in time domain to frequency domain is included with the rest of the samples in the GDK download portal https://aka.ms/gdkdl. This sample produces exactly the same output as the Impulse Response Transform tool included with the GDK installation. This sample demonstrates how hardware acceleration can be used to convert an impulse response on the fly for using with XDSP API.

Contact

If you have questions or concerns about this feature, please email AnaAud@microsoft.com or use the online forums.

Reference API documentation

Last modified on August 20, 2026