Dea*_*ean 1 windows directx gpu directx-11
我阅读了D3D11用法页面并来自CUDA背景我想知道标记为D3D11_USAGE_STAGING存储的纹理会是什么样的内存.
我想在CUDA中它会固定页面锁定的零拷贝内存.我测量了从ID3D11Texture2Dwith D3D11_USAGE_STAGING到分配的主机缓冲区的传输时间,malloc花了将近7毫秒(在流媒体/游戏中相当多),我认为这将是从GPU全局内存到内存区域所需的时间.
我的任何假设都是正确的吗?什么D3D11_USAGE_STAGING用作GPU内存?
主要用途D3D11_USAGE_STAGING是将数据加载到其他D3D11_USAGE_DEFAULT池资源中.另一个常见用法是将回放目标"回读"到CPU可访问内存.您可以使用CopySubResourceRegion在DEFAULT和STAGING资源之间移动数据(离散硬件通常使用直接内存访问来处理系统内存和VRAM之间的数据移动).
这是一个概括,因为它取决于架构和驱动程序选择,但简而言之::
D3D11_USAGE_STAGING 意味着把它放在系统内存中,GPU无法访问它.
D3D11_USAGE_DEFAULT把它放在VRAM中,CPU无法访问它.要将数据放入其中,需要从STAGING资源复制数据.您可以将其UpdateSubresource视为一个便捷函数,它创建一个STAGING资源,将数据复制到它,从STAGING复制到DEFAULT,然后释放STAGING副本.
D3D11_USAGE_DEFAULT池内容,则可以由驱动程序实现.这取决于他们如何设置内存系统(即统一内存架构,系统RAM和VRAM是一回事).D3D11_USAGE_IMMUTABLE基本上是相同的D3D11_USAGE_DEFAULT,但是你说你只是在创建调用中初始化它一次.
D3D11_USAGE_DYNAMIC意味着把它放在共享系统内存中,CPU和GPU都需要访问它.与DEFAULT相比,GPU通常会有性能损失,因此您需要谨慎使用它.它实际上是你在CPU上生成每一帧然后需要渲染的东西(例如地形系统或程序几何).
使用内容流的游戏通常具有一组STAGING纹理,它们将数据加载到背景中,然后
DEFAULT在它们可用于高效渲染时将其复制到纹理.这使得他们可以重用STAGING和DEFAULT纹理,而不会在每帧中破坏/创建资源.
请参阅这篇有点过时的MSDN文章:资源管理最佳实践
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |