gpt4 book ai didi

c++ - DirectX 12 - 命令列表问题

转载 作者:行者123 更新时间:2023-11-30 05:37:00 25 4
gpt4 key购买 nike

试图理解命令列表。好吧,命令列表记录了我的渲染命令,也记录了绑定(bind)资源,比方说带有顶点数据的缓冲区。

m_commandList->IASetVertexBuffers(0, 1, &m_vertexBufferView);

这记录了顶点缓冲区的绑定(bind)。此时缓冲区发生了什么?如果我在记录后更改此顶点缓冲区的内容会发生什么?如果我在调用执行命令列表后更改此顶点缓冲区的内容并且 gpu 尚未完成,会发生什么情况?

我猜 ExecuteCommandList 是一个异步函数调用,对吗?它是一次执行所有绑定(bind)(数据传输到 gpu),还是一个一个地执行命令甚至所有绑定(bind)?命令列表是由驱动程序执行的,还是全部发送给gpu?

嗯,因为缺乏很好的例子,我还有很多问题。如果您能回答其中的几个问题以明确说明,我会很高兴。

最佳答案

对于 DirectX 12,同步完全是应用程序的责任。您必须插入并检查栅栏,以确保 GPU 在修改缓冲区之前已完成处理。对于动态缓冲区,您需要自己做双/三/n 缓冲。

当您调用 ExecuteCommandList 时,只是将其排队到 GPU。 GPU 实际拾取并完成它需要一些时间。

一定要检查 DirectX Graphics Samples GitHub项目。那里的示例和 Mini Engine 演示是查找示例用法的好地方。

这种设计使 DirectX 12 极其强大,因为它使应用程序可以直接控制 Direct3D 11 运行时中的许多“神奇”事物。也就是说,除非您已经是一名足够优秀的图形工程师,可以编写 Direct3D 11 运行时,否则生成的 API 实际使用起来要困难得多。使用 Direct3D 11 API 仍然是项目的不错选择。

关于c++ - DirectX 12 - 命令列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33388630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com