2022 年 10 月版本新增
- 新增两个 API:XDspConnectWithMaximumStreamLimit 与 XDspSubmitCommandWithEnvelope。当可激活的最大流数少于 256 时,XDspConnectWithMaximumStreamLimit 会在内部占用更少的内存;相比之下,XDspConnect 会按 256 条流预留内存,因此占用更多。 XDspSubmitCommandWithEnvelope 支持对脉冲响应滤波器进行包络处理。详见 使用 XDSP API 的包络概述。
版本特性
- 对于卷积,支持的块大小为 512 和 1024 帧。使用 1024 帧的块大小性能更好。
- 对于 FFT/IFFT,支持的块大小为 512、1024 和 2048 帧。
- 卷积支持单声道、立体声以及立体声去交错模式,并可搭配单声道或立体声脉冲响应。
- XDspConnect 或 XDspConnectWithMaximumStreamLimit 调用会建立与硬件的连接并返回一个 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 使用。
