CPU和GPU之间的通信——应用阶段
Contents
CPU和GPU之间的通信
渲染流水线的起点是CPU,即应用阶段。
应用阶段大概可以分为下面3个阶段:
- 把数据加载到显存中
- 设置渲染状态
- 调用Draw Call
把数据加载到显存中
所有渲染所需的数据都要从硬盘加载到内存中。
然后网络和纹理等数据 又被加载到显存中。
这是因为显卡对于显存的访问速度更快,且大多数显卡对于内存 没有直接的访问权限。
把内存加载到显存后,内存中的数据就可以移除了,
但对于一些数据来说,CPU仍然需要访问他们(例如我们希望CPU可以访问网络数据进行碰撞检测)那么我们就不希望这些是数据被移除(因为硬盘加载到内存的过程是十分耗时的)。
在这之后,开发者还需要通过CPU来设置渲染状态,从而“执导”GPU如何进行渲染工作
设置渲染状态
渲染状态通俗的解释就是,这些状态定义了场景中的网络是如何被渲染的。
例如,使用哪个顶点着色器/片元着色器、光源属性、材质等。
如果没有更改渲染状态,那么所有的网络都将使用同一种渲染状态。
在准备好上述工作后,CPU就会调用一个渲染命令告诉GPU:”嘿!bro,数据都准备好了 可以开始渲染了“
而这个命令就是Draw Call
调用Draw Call
Draw Call就是一个命令,它的发起方是CPU,接收方是GPU。
这个命令仅会只想一个需要被渲染的图元列表,不会包含任何材质信息。
当给定一个Draw Call时 GPU就会根据渲染状态(材质、纹理、着色器等)和所有输入的顶点数据来进行计算,最终输出到屏幕上。
来源作者:《UnityShader入门精要》冯乐乐