与当今GPU不同,Larrabee并不是采用专门的逻辑单元负责光栅(rasterization)处理以及插补(interpolation)处理。“rasterization”和“interpolation”操作并不会占据太多渲染工作量,所以用软件渲染是非常有效的。本章节描述的是我们采用的运算法则以及为什么软件执行更适合Larrabee。
用软件执行interpolation操作的理由相对简单。在老旧的绘图API中,interpolation可以产生固定的浮点数,类似与目前最为普通的纹理过滤操作。在如今的绘图API中,比如说DirectX 10特效,它所需效果为32位浮点。因此,重新采用VPU单元进行interpolation操作是非常有效的。
如果以峰值状态运行的话,采用专门的逻辑芯片进行Rasterization 操作毫无疑问是更有效的,但是对于Larrabee而言,采用专门的逻辑芯片具有非常明显的缺点。在当今的GPU中,rasterizer是一种fine-grain serialization point :在进行Rasterization操作之前,所有primitive单元被按照原来的顺序放回原位。随着核心数量的增多,渲染器也不断变大,这种不断变大的渲染器需要消除所有的、最为精细的纹理浮点。
不过这样的话将会造成相当可观的通讯成本,而且将会需要软件管理rasterizer资源。不过,这种软件rasterizer可以避免这种浪费。rasterizer同时支持rasterization与多核心平行处理,而且可以将rasterization转移到渲染管线中多个位置。对于某些特殊的工作量,rasterizer还可以优化rasterization代码。
对于Larrabee,第一步就是利用三角形图像的bounding box找到三角形图像重叠的tile 。之后,Larrabee的VPU单元运算半平面方程式,一次16个模块。比如说,如果tile大小为64x64,第一步要处理的就是覆盖这个tile的16个16x16模块。find first bit指令可以使它有效的完全、部分发现覆盖模块。初期全面检测覆盖模块对于效能非常重要。
第二步要测试每个部分覆盖16x16模块的16个4x4子模块。第三步需要测试每个部分覆盖4x4模块的16个像素。第三步可以支持每个像素中的多个样品位置进行重复操作。大约70%的指令在VPU中执行,并利用Larrabee的运算性能。大约10%的运算法则效能来自某些特殊的指令集,比如说find first bit指令。