Shader 入门笔记(二) CPU和GPU之间的通信

时间:2023-03-08 20:37:30

渲染流水线的起点是CPU,即应用阶段。

  1)把数据加载到显存中

  2)设置渲染状态,通俗说这些状态定义了场景中的网格是怎样被渲染的。

  3)调用DrawCall,一个命令,CPU通知GPU。(这个命令仅仅会指向一个需要被渲染的图元列表,并不会包含材质信息,因为在上一阶段已经完成)

CPU流水线  GPU从CPU那里得到渲染命令后,就会进行一系列流水线操作,最终把图元渲染到屏幕上。

   几何阶段:

        顶点着色器/曲面细分着色器/几何着色器

        裁剪(Clipping):将不在视野范围内的顶点裁减掉,这阶段可配置的,但是不可编程。

        屏幕映射:负责把每个图元的坐标转换到屏幕坐标系中。 该阶段不可配置,编程。

     光栅化阶段:

        三角形设置:计算光栅化一个三角形网格锁需要的信息。 不可编程,不可配置。

        三角形遍历:会检查每个像素是否被一个三角形锁覆盖。如果被覆盖,就会生成一个片元(fragment)。而这样一个找到哪些被三角形网格覆盖的过程就是三角形遍历。不可编程,不可配置。

        片元着色器:可编程着色器。在DirectX中,片元着色器被称为像素着色器。

        逐片元操作:最后一步。在DieectX中,称为输出合并阶段。

CG语言    

    根据平台不同,编译成相应的中间语言。 CG语言的跨平台型很大原因取决于跟微软合作。   

DrawCall 优化 ,可以理解为,1000个1k的文件复制和一个1000k的文件复制。显然是一个文件复制的快。

如果DrawCall数量太多,CPU就会把大量时间浪费在提交DrawCall上,造成CPU过载。