首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Directx 11内存管理

Directx 11内存管理
EN

Stack Overflow用户
提问于 2014-10-17 02:20:59
回答 1查看 3.2K关注 0票数 5

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-17 04:32:38

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

要更深入地研究Direct3D视频内存管理,请查看“为什么您的Windows游戏不能在2,147,352,576中运行?”它已经不在MSDN下载上了,但可以在我的博客上找到。

如果您想了解硬件细节,请阅读驾驶员书写文档

您还可以在MSDN代码库教育版上找到视频存储器示例。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26416910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档