Skip to main content
本主题概述了 XDSP API。XDSP 让游戏能够利用 XBOX Series X|S 世代主机上的硬件加速卷积混响 (Hardware Accelerated Convolution Reverb) 功能。当前实现能够实时处理累计 80 秒的脉冲响应。例如,可同时实时处理 40 条各 2 秒脉冲响应的流。

2022 年 10 月版本新增

版本特性

  • 对于卷积,支持的块大小为 512 和 1024 帧。使用 1024 帧的块大小性能更好。
  • 对于 FFT/IFFT,支持的块大小为 512、1024 和 2048 帧。
  • 卷积支持单声道、立体声以及立体声去交错模式,并可搭配单声道或立体声脉冲响应。
  • XDspConnectXDspConnectWithMaximumStreamLimit 调用会建立与硬件的连接并返回一个 XDspClientHandle。任意时刻最多只能有 8 个处于活动状态的连接。
  • XDspConnect 支持的 aggregateImpulseResponseInSeconds 最大值为 128。这也是所有 XDspConnect 调用累计的上限。如果某次 XDspConnect 调用将 aggregateImpulseResponseInSeconds 设为 128,则不能再有任何 aggregateImpulseResponseInSeconds 大于 0 的 XDspConnect 调用。要激活可用于卷积处理的流,aggregateImpulseResponseInSeconds 必须大于 0。
  • 对于 XDspConnect 返回的每个 XDspClientHandle,通过 XDspActivate 最多可激活 256 个流。对于 XDspConnectWithMaximumStreamLimit 返回的每个 XDspClientHandle,最多可以激活 maximumStreamCount 个流,其中 maximumStreamCount 就是调用 XDspConnectWithMaximumStreamLimit 时使用的流数。这些流可以是任意 XDspProcessType
  • 使用立体声输入时,支持的累计脉冲响应最大值降为 64 秒。
  • 传给 API 的所有缓冲区都必须按 16 字节对齐。缓冲区未按 16 字节对齐时,硬件可能发生错误并重置。硬件崩溃或挂起时,XDspStatus.result 会指示 XDSP_E_DEVICE_FATAL_ERROR。
  • 脉冲响应应位于频域中。我们提供了一个工具用于将时域脉冲响应转换为频域。 请从 https://aka.ms/gdkdl 下载。
  • 脉冲响应转换工具现已支持压缩功能,允许你以损失一定质量为代价获得更高性能。详见 XDSP 脉冲响应压缩概述
  • XDspConnect 调用的延迟做了改进。

已知问题

  • 在 FFT/IFFT 处理中,XDspActivationOptions 中的 “EnablePolarFormat” 选项相较默认的笛卡尔格式耗时明显更长;后者性能更好。

最佳实践

  • 即使硬件出现故障,为每条提交到硬件的命令都会返回一个响应。调用者在调用 XDspDeactivate 停用流之前,应等待硬件处理完所有命令。XDspStatus.lastProcessedCommandSequence 显示硬件为该流处理的最后一条命令的序列号。其他 XDSP 流不会受影响,硬件会继续处理它们的命令。
  • 传给 XDspConnect 调用的 “baseBuffer” 在所有流都通过 XDspDeactivate 停用且 XDspDisconnect 成功之前不应释放。
  • 每条流都有内部队列上限,达到该上限时 XDspSubmitCommand 会返回 XDSP_E_QUEUE_FULL。遇到此错误时,请给硬件足够时间处理该流的命令后再提交更多命令。可通过 XDspStatus.lastProcessedCommandSequence 查看硬件为该流处理的最后一条命令。
  • 卷积使用 1024 块大小时性能优于 512 块大小。
  • 卷积算法在处理连续命令时并不均匀,即并非所有块耗时相同,有些块可能耗时更长。

游戏的暂停与恢复

游戏必须能够暂停和恢复,例如当用户将其切换到 Constrained 模式时。挂起处理器被调用时,只需停止向硬件提交 XDSP 命令即可。已提交的命令会正常处理,XDspStatus 会相应更新。

示例

  • 可从 https://aka.ms/gdkdl 或 ATG 示例下载。 可查阅示例走查:单流卷积混响单流 FFT IFFT
  • GDK 下载门户 https://aka.ms/gdkdl 中还包含一个 XDSP 示例,演示了如何使用硬件加速器将时域脉冲响应转换为频域。此示例的输出与随 GDK 安装的 Impulse Response Transform 工具完全一致,展示了如何利用硬件加速在飞行中转换脉冲响应,供 XDSP API 使用。

联系

如果你对该功能有任何问题或疑问,请发送邮件至 AnaAud@microsoft.com 或使用在线论坛。

参考 API 文档

最后修改于 2026年8月24日