明拜之,請曰,“簡報可乎?”曰:“可。”
咳咳。最近由于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