【问题标题】:Directx 11 Memory ManagementDirectx 11 内存管理
【发布时间】:2014-10-17 02:20:59
【问题描述】:

我研究 Directx 11 已经有一段时间了,但我仍然对 Directx 11 如何管理内存感到困惑。例如,如果我使用 ID3D11Device::CreateBuffer 创建一个顶点缓冲区,那么新缓冲区存储在哪里?我知道它返回一个指向缓冲区的指针,这意味着它必须存储在 CPU RAM 上,对吗?但是,我认为这会使 ID3D11DeviceContext::IASetVertexBuffers 成为一个非常缓慢的过程,因为它必须将缓冲区从 CPU RAM 复制到 GPU RAM。但是,如果使用 ID3D11Device:CreateBuffer 创建的所有缓冲区都存储在 GPU RAM 上,那么 GPU RAM 不会很快填满吗?基本上我想知道:当我创建一个缓冲区时,该数据存储在哪里?在 CPU RAM 或 GPU RAM 中?另外,ID3D11DeviceContext::IASetVertexBuffers 对缓冲区做了什么(复制/设置?)。

【问题讨论】:

    标签: c++ memory directx-11


    【解决方案1】:

    一般的答案是“它是驾驶员想要的任何地方”。对于“动态”资源,它们通常被放入 CPU 和 GPU 都可以访问的内存中(在现代 PC 上,这是通过 PCIe 总线共享的)。对于“静态”资源,它们可以位于仅可由 GPU 访问的视频 RAM 上,通过“共享”内存窗口复制,或者如果空间有限,则将它们放在“共享”内存窗口中。渲染目标通常也放在视频 RAM 中。

    如需更深入地了解 Direct3D 视频内存管理,请查看“为什么您的 Windows 游戏无法在 2,147,352,576 中运行?”讲座。它不再在 MSDN 下载中,但可以在我的 blog 上找到。

    如果您想了解硬件细节,请阅读driver writer's documentation

    您还可以在 MSDN 代码库教育中找到 Video Memory 示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2014-07-12
      • 2016-04-06
      相关资源
      最近更新 更多