缓冲区中的子分配

缓冲区具有 D3D12 中所需的所有功能,应用程序可将大量暂时性数据从 CPU 传输到 GPU。 本部分介绍用于使用和管理资源和缓冲区的四种常见方案。

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

在本部分中

主题 描述
上传不同类型的资源
演示如何使用一个缓冲区将常量缓冲区数据和顶点缓冲区数据上传到 GPU,以及如何在缓冲区中正确分配和放置数据。 使用一个缓冲区可提高内存使用灵活性,并为应用程序提供对内存使用情况的更严格控制。 此外,还显示了用于上传不同类型的资源的 D3D11 和 D3D12 模型之间的差异。
通过缓冲区上传纹理数据
上传 2D 或 3D 纹理数据类似于上传 1D 数据,不同之处在于应用程序需要更加关注与行间距相关的数据对齐方式。 缓冲区可以从图形管道的多个部分进行正交和并发使用,并且非常灵活。
通过缓冲区 读回数据
从 GPU 中读取回数据(例如捕获屏幕截图)涉及使用读取回堆。
Fence-Based 资源管理
演示如何通过围栏跟踪 GPU 进度来管理资源数据生命周期。 内存可以有效地与围栏一起使用,以仔细管理内存中可用空间的可用性,例如在上传堆的环形缓冲区实现中。

内存管理