gpt4 book ai didi

windows - D3D11_USAGE_STAGING,使用什么样的GPU/CPU显存?

转载 作者:可可西里 更新时间:2023-11-01 11:05:28 24 4
gpt4 key购买 nike

我读了D3D11 Usage页面并来自 CUDA 背景 我想知道标记为 D3D11_USAGE_STAGING 的纹理将存储到哪种内存中。

我想在 CUDA 中它应该是固定页锁定零拷贝内存。我测量了从使用 D3D11_USAGE_STAGINGID3D11Texture2D 到使用 malloc 分配的主机缓冲区的传输时间,它花费了将近 7 毫秒(在流媒体中相当多/gaming),我认为这是从 GPU 全局内存到该内存区域所需的时间。

我的假设是否正确?什么是 D3D11_USAGE_STAGING 用作 GPU 内存?

最佳答案

D3D11_USAGE_STAGING 的主要用途是将数据加载到其他 D3D11_USAGE_DEFAULT 池资源中。另一个常见用法是将渲染目标“回读”到 CPU 可访问内存。您可以使用 CopySubResourceRegion 在 DEFAULT 和 STAGING 资源之间移动数据(离散硬件通常使用 Direct Memory Access 来处理系统内存和 VRAM 之间的数据移动)。

这是一个概括,因为它取决于体系结构和驱动程序的选择,但简而言之::

  • D3D11_USAGE_STAGING表示放在系统内存中,GPU无法访问。

  • D3D11_USAGE_DEFAULT 放在VRAM中,CPU无法访问它。要将数据放入其中,需要从 STAGING 资源复制数据。您可以将 UpdateSubresource 视为一个便利函数,它创建一个 STAGING 资源,将数据复制到其中,从 STAGING 复制到 DEFAULT,然后释放 STAGING 副本。

    • DirectX 11.2 或更高版本中有一个可选功能,如果驱动程序选择允许 CPU 访问甚至 D3D11_USAGE_DEFAULT 池内容,则驱动程序可以实现该功能。这取决于他们如何设置内存系统(即在 Unified Memory Architectures 中,系统 RAM 和 VRAM 是一样的)。
  • D3D11_USAGE_IMMUTABLED3D11_USAGE_DEFAULT 基本相同,但您是说您只会在创建调用中初始化它一次。

  • D3D11_USAGE_DYNAMIC 表示将它放在共享系统内存中,CPU 和 GPU 都需要访问它。与 DEFAULT 相比,GPU 从中读取数据通常会降低性能,因此您希望谨慎使用它。它真正适用于您在 CPU 上生成每一帧然后需要渲染的内容(例如地形系统或程序几何)。

Games that use content streaming typically have a set of STAGING textures they load data into in the background, and then copy it to DEFAULT textures as they become available for efficient rendering. This lets them reuse both STAGING and DEFAULT textures without the overhead of destroying/creating resources every frame.

请参阅 Microsoft Docs 上这篇有些过时的文章:Resource Management Best Practices

关于windows - D3D11_USAGE_STAGING,使用什么样的GPU/CPU显存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com