軟體有時比硬體快

Check http://blogs.msdn.com/b/seema/archive/2006/10/25/layered-windows-sw-is-sometimes-faster-than-hw.aspx


上面這篇文章提到,如果我們要 render 一個半透明的視窗,因為 DirectX 沒辦法 present 半透明視窗,故流程會變為由 DX render 後,GDI 接著透過 GetDC 取得 DX surface,然後再做 present。由於 Vista 之後的 WDDM 不支援 GDI 硬體加速,故在獨顯機台(沒有 unified memory model)上,這整個 scenario 會變成 bitblit 動作由 video memory 到 system memory 最後再到 video memory,這就不一定有比較快。但如果是內建顯卡的話,因為其 video memory 事實上就在 system memory 上,故上面情況就會比較快。


文章作者測試了一個情況:有兩個半透明視窗,一個裡頭放 3D object,另一個是空的。測試時旋轉 3D object,另一個空視窗則做 resizing 並強制 redraw,測試機台為獨顯。


上面測試跑下去發現有 3D 的半透明視窗,硬解跟軟解的 frame rate 差不多 (50 VS. 60)。而空的半透明視窗因為無 3D object,幾乎是在 redraw 2D window,硬解跟軟解的 frame rate 瞬間變為 8 VS. 60。等於說 DX 不能 present semi-transparency window 這項讓它的 overhead 非常大。


You name it. 就是如果 window 只是單純的 2D,其實不必要用 DX 來寫,這樣只會讓程式更冏。當然如果真的要用到 3D,那就用 DX 就對了!


留言

熱門文章