什么时候可以安全地释放我传递给 DirectX 的内存

When is it safe to release memory I pass to DirectX?

本文关键字:DirectX 内存 安全 释放 什么时候      更新时间:2023-10-16

DirectX API中的许多函数将数组作为指针和长度(例如 RSSetViewports(。我看不到任何关于指针需要存活多长时间的文档 - 直到函数返回还是我需要让该数组保持活动状态?

更一般地说,DirectX API 是否有生命周期约定,它是否记录在某处?

在 DirectX 11 中,只有在调用中才需要指向结构的指针。资源数据将复制到 DirectX COM 对象中,引用计数管理对象生存期。内存由驱动程序或运行时分配,是 GPU 视频内存、PCIe 孔径内存和系统内存的混合,具体取决于资源类型。内存在虚拟内存空间中的映射方式还有一些额外的复杂性,但通常,除了保持 COM 对象处于活动状态之外,您不必担心它。

XAudio2 要求您将音频缓冲区保持活动状态,直到它们不再使用,其中较旧的 DirectSound API 复制音频数据,这对于 XAudio2 使用的基于 CPU 的所有混合模型的效率较低。

对于 DirectX 12,这取决于您所说的内存类型,因为更多的内存生存期由应用程序显式管理,您必须自己管理 GPU/CPU 同步。