关于Draw Call
注:本文参考自《Unity Shader入门精要》。
一、什么是Draw Call
简单来说,Draw Call就是CPU调用GPU图形绘制接口,如OpenGL中常用的glDrawArrays或者glDrawElements,DX中的DrawIndexedPrimitive等命令。用来命令GPU执行相应的绘制任务。
一个常见的误区是,Draw Call中造成性能的元凶是GPU,认为GPU上的状态切换是耗时的,其实不是的,真正“拖后腿”其实的是CPU。
二、CPU和GPU是如何实现并行工作的?
答案是使用命令缓冲区(Command Buffer)。
命令缓冲区包含了一个命令队列,由CPU向其中添加命令,而由GPU从中读取命令,添加和读取的过程是互相独立的。命令缓冲区使得CPU和GPU可以相互独立工作。当CPU需要渲染一些对象时,它可以向命令缓冲区中添加命令,而当GPU完成了上一次的渲染任务后,它就可以从命令队列中再取出一个命令并执行它。
命令缓冲区中的命令有很多种类,而Draw Call是其中一种,其他命令还有改变渲染状态等(例如改变使用的着色器,使用不同的纹理等)。
命令缓冲区。CPU