明拜之,请曰,“简报可乎?”曰:“可。”
咳咳。最近由于SoftArt的几个参与人员工作都比较繁忙,因此进度上比较松散。但是大体上,SoftArt一直是按照预先想好的计划在进展。为了让大家知道SoftArt的开发进展,同时也是我们开发人员自己的备忘,我们在商议后,决定以简报的形式,不定期地将SoftArt的变化和进展及时地呈现出来。
简介
本简报主要总结了09年11月份以来SoftArt的变更情况。
对于SoftArt来说,09-10年度是非常重要的。在这一年中,尽管SoftArt并没有加入多少新的特性的加入,但是架构、性能都经过了持续性的优化。
在Graphics方面,Minmin为SoftArt撰写了全新的光栅化算法。新的光栅化算法与Larrabe的细分方法类似。这一算法在并发能力上有很明显的优势。尽管在目前性能上与上一版的扫描线算法相对弱势,但是经过Minmin的辛苦工作,这一弱势已经逐步的缩小了。就目前而言,我们认为该算法仍然有很大程度的提升空间。
同时,纹理单元也经过了大量的SSE优化,目前的纹理单元效率已经远远超出最初我为之撰写的版本。
经过一段时间的调优之后,目前程序的瓶颈主要集中在裁切和顶点变换上。已经朋友为我们提出了非常好的建议,接下来这也是我们工作的重点之一。
当然,根据估计,在经过一段时间的调整后,这些问题一定会得到解决的。我们估计最终SoftArt的瓶颈将主要集中在两个地方,一个是IO,一个是Shading部分。目前我们只是使用了简单的shading code,相信在shading code复杂之后,瓶颈会在很大程度上有所转移。
对于IO部分的瓶颈主要由纹理和后备缓冲产生。对于现代图形算法而言,纹理又是重中之重。没有特殊纹理单元的CPU在这一点上实在是吃了大亏。尽管我们在Cache Hit Rate及消除Function Call上下过一定的功夫,并使用了SSE加速了双线和Mipmap的纹理插值计算,但是效果仍然达不到我们的预期。一旦引入各向异性过滤,可以预见,在这一部分,还需要我们投入大量的精力来研究并解决这一问题。
但是由于C++ Shader Code在SIMD特性上的限制,目前我们并没有设计并实现更加复杂的Shader。这一切都有待SASL(SoftArt Shading Language)编译器完成之后才能。Minmin为SASL与渲染器连结的Host API部分撰写了完整的Specification(神人啊,真的是做什么都可以)。尽管目前这一部分在描述上比较简略,但是与DX11相似,相信大家一定可以比较容易的接受这套API。
在编译器方面,主要有Ye负责。目前的编译器各个阶段的接口以及语言特性已经基本成熟。语义和代码生成部分也在有条不紊的开展。在编译器设计期间,得到了Zihan Chen在技术上的大力支持,在此特别表示感谢。
变更清单
Nov 01,2009 – Nov 29, 2009 (r1 - r10) 此阶段的工作主要是将原先在sf.net上的项目,移动到Google code上,并对工程进行了一定的调整,同时移除了一些编译器警告。
Dec 01,2009 – Dec 09,2009 (r11 - r29) 此间,Minmin为现有的C++ Shading Code的接口进行了重构,修复了一些Bugs,并进行了一部分的优化工作。
Dec 10,2009 – Feb 08,2010( r30 – r65) Minmin为SoftArt的顶点和光栅化提供了并行能力。光栅器以Block为粒度对三角形并行光栅化。
Dec 09,2009 – Feb 21,2010( r27 – r66 ) Ye将SASL的分析器由Spirit 1.8移植到2.1