当前位置:  开发笔记 > 编程语言 > 正文

使用堆类型上载更新GPU资源的最佳方法是什么?

如何解决《使用堆类型上载更新GPU资源的最佳方法是什么?》经验,为你挑选了1个好方法。

我正在使用ID3D12Resource::Map方法来更新GPU资源.这是最有效的方式吗?有哪些替代方案?



1> catflier..:

上载堆资源具有相关的读取成本,高于默认资源.

在常量缓冲区的情况下,这通常很好(因为您处于一次写入/一次读取方案中),但在其他情况下(大型顶点/索引缓冲区),这通常是不可取的.

一般方法是创建两个资源(一个在上载堆中,一个在默认堆中),将数据复制到上载资源(使用您提到的map),然后使用默认的CopyResource或CopyBufferRegion执行gpu复制资源.

请确保在资源复制之前/之后使用ResourceBarrier和过渡状态设置了正确的资源状态.

在调用copy之前,资源应该在复制之前在D3D12_RESOURCE_STATE_COPY_DEST中,以及任何依赖于您的资源的读取标志.

另请注意,您可以使用复制命令队列进行GPU复制(这样可以避免在直接命令列表中执行),但是您需要确保在使用资源之前完成复制(通过使用Fences) ).

这里用msdn描述了多引擎

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有