对于任何平行渲染运算法则而言,获得最佳性能的关键在于将待渲染任务分为多个子任务,而且这些子任务可以被平衡加载以便可以被平行同步处理。与传统GPU相比,Larrabee为平行运算提供了更大的自由度,因为Larrabee具有灵活的存储模式和软件控制调用。
◆ Larrabee软件渲染的各个阶段
首先我们将会渲染一些单一的目标,比如说,像素缓冲(pixel buffer)以境深/模板缓冲(depth/stencil buffer)。这些单一的渲染目标以及渲染命令被统称为RTset。
单个RTset的渲染命令通常会被图形API定义为一系列渲染状态(rendering state)变化。Larrabee渲染器在单个完整定义结构中捕捉渲染状态,然后渲染器会给一组三角形图像分类,并为采用这种状态的各组图像贴上标签,这组三角形图像以及采用的状态被称为primitive set(原始单元)或者PrimSet,这与DirectX DrawPrimitive 图像渲染函数大致相同,但是两者并不能划等号。
下图描述的是单个RTset的PrimSets大致渲染结构图。渲染表面被分开并放入像素tile中。每个tile都配有一个bin(存储空间),这一bin将会被来自一个与这个tile交叉的PrimSet内的三角形图像填满。RTset所有的bin称为bin set,这些tile和bin有时候可以交替被使用。本篇论文的特点就是,文中涉及的tile实际上就是像素数据,而bin则是一系列primitive单元,这些primitive单元可以影响到tile。每个tile具有一个bin,以此类推,每个RTset(渲染目标tile组和相关的PrimSet则具有一个bin set(这些bin set包含primitive单元)。