缓冲区中的子分配

缓冲区具有 D3D12 所需的所有功能,可供应用程序将大量瞬态数据从 CPU 传输到 GPU。 本节介绍使用和管理资源及缓冲区的四种常见场景。

与 D3D11 类似,相较于 D3D11 中的动态/暂存资源,D3D12 中的应用程序在分配 D3D12 中的缓冲区时仍然需要声明内存的使用情况,但在 D3D12 中,开发人员对内存使用有更大的灵活性和更严格的控制。 通过二次分配,缓冲区可具有低级内存管理所需的所有功能。

在本节中

主题 说明
上传不同类型的资源
演示如何使用缓冲区将常量缓冲区数据和顶点缓冲区数据上载到 GPU,以及如何在缓冲区中正确地二次分配和放置数据。 使用单个缓冲区可提高内存使用灵活性,并为应用程序提供更严格的内存使用控制。 还显示了 D3D11 和 D3D12 模型之间在上传不同类型资源方面的差异。
通过缓冲区上传纹理数据
上传 2D 或 3D 纹理数据与上传 1D 数据类似,但应用程序需要更密切地关注与行间距相关的数据对齐情况。 可以从图形管道的多个部分正交和同时使用缓冲区,缓冲区非常灵活。
通过缓冲区读回数据
从 GPU 读取数据(例如捕获屏幕截图)需要使用 Readback 堆。
基于围栏的资源管理
演示如何利用通过围栏跟踪 GPU 进度来管理资源数据的生存期。 可有效地重复使用内存,用围栏来仔细管理内存中可用空间的可用性,例如针对“上传”堆环形缓冲区实现。

内存管理