【发布时间】:2022-07-02 16:09:36
【问题描述】:
您好,我是学习 Direct 3D 12 的新手。
到目前为止,我了解 Direct 3D 12 是为多线程设计的,我正在尝试按照 braynzarsoft 的教程制作自己的简单多线程演示。
https://www.braynzarsoft.net/viewtutorial/q16390-03-initializing-directx-12
环境是windows,使用C++,Visual Studio。
据我了解,简而言之,Direct 3D 12 中的多线程似乎是在多个线程中填充命令列表。
如果是对的,那似乎
- 1 交换链
- 1 个命令队列
- N 个命令列表(N 对应于线程数)
- N 个命令分配器(N 对应于线程数)
- 1 栅栏
对于单个窗口程序来说已经足够了。
不知道
第一季度。我们什么时候需要多个命令队列?
第二季度。为什么我们需要多个栅栏?
第三季度。我们什么时候多次提交命令?
第四季度。 GetCPUDescriptorHandleForHeapStart() 返回值是否变化?
Q3 来自这里。
Q4的目的是我想调用一次函数并存储值以供重复使用,调试时没有改变。
我心目中的渲染循环是(基于Game Loop模式),例如,
- 线程等待栅栏值(例如主线程)。
- 启动多个线程来填充命令列表。
- 等待所有线程完成填充。
- 执行命令列表。
- 存在交换链。
- 在下一个循环中返回 1。
如果我完全误解了,请帮忙。
【问题讨论】:
标签: c++ multithreading window direct3d