【发布时间】:2021-05-23 13:17:04
【问题描述】:
OpenGL ES 使用同步渲染模型,这意味着 API 调用必须表现得好像所有早期的 API 调用都已被处理。实际上,没有现代 GPU 以这种方式工作,渲染工作负载是异步处理的,同步模型是由设备驱动程序维护的精心制作的假象。为了保持这种错觉,驱动程序必须跟踪队列中的每个渲染操作读取或写入了哪些资源,确保工作负载以合法顺序运行以避免渲染损坏,并确保需要数据资源的 API 调用阻塞并等待资源安全可用。
Vulkan 使用异步渲染模型,反映了现代 GPU 的工作方式。应用程序将渲染命令排入队列,使用显式调度依赖关系来控制工作负载执行顺序,并使用显式同步原语来对齐依赖的 CPU 和 GPU 处理。
这些更改的影响是显着降低图形驱动程序的 CPU 开销,但代价是要求应用程序处理依赖关系管理和同步。
有人可以帮助解释为什么异步渲染模型可以减少 CPU 开销吗?由于在 Vulkan 中,您仍然需要自己跟踪状态。
【问题讨论】: